Skip to content

Commit 2e446ac

Browse files
bsb808claude
andcommitted
Add BlueBoat powered USV model and place it in nbpark
Add a self-contained "blueboat" model (Blue Robotics BlueBoat) built as a powered catamaran USV, mirroring the roboboat01 template: buoyancy via two vrx::Surface plugins, drag via vrx::SimpleHydrodynamics, and two commandable gz-sim-thruster-system thrusters on revolute propeller joints. The supplied glTF meshes are Y-up, so hull and propeller visual/collision geometry carry a corrective pose to sit correctly in Gazebo's Z-up frame. Hull dimensions, buoyancy points, mass and thruster placement are first-cut values derived from the measured mesh bounding boxes and intended for tuning. Include the model in the nbpark world next to roboboat01. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
1 parent 7609d1b commit 2e446ac

7 files changed

Lines changed: 260 additions & 4 deletions

File tree

499 KB
Binary file not shown.
4.88 KB
Binary file not shown.
15.6 KB
Binary file not shown.
2.32 KB
Binary file not shown.
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<?xml version="1.0"?>
2+
<model>
3+
<name>blueboat</name>
4+
<version>1.0</version>
5+
<sdf version="1.6">model.sdf</sdf>
6+
<author>
7+
<name>Brian Bingham</name>
8+
<email>briansbingham@gmail.com</email>
9+
</author>
10+
<description>
11+
A Blue Robotics BlueBoat powered USV model for VRX.
12+
</description>
13+
</model>

vrx_gz/models/blueboat/model.sdf

Lines changed: 231 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,231 @@
1+
<?xml version="1.0"?>
2+
<sdf version="1.6">
3+
<model name="blueboat">
4+
<!--
5+
Blue Robotics BlueBoat powered USV.
6+
7+
Coordinate note: the supplied GLB meshes are authored Y-up (glTF convention)
8+
while Gazebo is Z-up, so every mesh below carries a corrective <pose> roll of
9+
+90 deg about X (1.5708 0 0). After that correction the model/link frame is the
10+
standard maritime body frame: +X forward (bow), +Y port, +Z up. All link,
11+
joint, buoyancy-point and thruster coordinates below are expressed in that
12+
corrected frame. The hull half-width is ~0.43 m and the two pontoon centrelines
13+
sit near Y = +/-0.30 m; the hull spans roughly X in [-0.5, +0.57] m.
14+
These are first-cut values - tune during verification.
15+
-->
16+
17+
<!-- ============================ Hull ============================ -->
18+
<link name="base_link">
19+
<inertial>
20+
<pose>0 0 -0.05 0 0 0</pose>
21+
<mass>10</mass>
22+
<!-- Box approximation from measured hull extents (L=1.08 W=0.85 H=0.37). -->
23+
<inertia>
24+
<ixx>0.716</ixx>
25+
<ixy>0</ixy>
26+
<ixz>0</ixz>
27+
<iyy>1.085</iyy>
28+
<iyz>0</iyz>
29+
<izz>1.573</izz>
30+
</inertia>
31+
</inertial>
32+
33+
<visual name="visual">
34+
<pose>0 0 0 1.5708 0 0</pose>
35+
<geometry>
36+
<mesh>
37+
<uri>file://blueboat/meshes/blueboat.glb</uri>
38+
</mesh>
39+
</geometry>
40+
</visual>
41+
42+
<collision name="collision">
43+
<pose>0 0 0 1.5708 0 0</pose>
44+
<geometry>
45+
<mesh>
46+
<uri>file://blueboat/meshes/blueboat_collision.glb</uri>
47+
</mesh>
48+
</geometry>
49+
</collision>
50+
</link>
51+
52+
<!-- ======================= Left propeller ======================= -->
53+
<link name="left_prop_link">
54+
<pose>-0.45 0.30 -0.10 0 0 0</pose>
55+
<inertial>
56+
<mass>0.1</mass>
57+
<inertia>
58+
<ixx>0.00010562499999999999</ixx>
59+
<ixy>0</ixy>
60+
<ixz>0</ixz>
61+
<iyy>0.00010562499999999999</iyy>
62+
<iyz>0</iyz>
63+
<izz>0.00015125000000000002</izz>
64+
</inertia>
65+
</inertial>
66+
<visual name="left_prop_visual">
67+
<!-- Prop mesh authored Y-up with spin axis along mesh Z; rotate so the
68+
disc spins about the boat's +X (thrust) axis. Verify/adjust visually. -->
69+
<pose>0 0 0 0 1.5708 0</pose>
70+
<geometry>
71+
<mesh>
72+
<uri>file://blueboat/meshes/blueboat_prop.glb</uri>
73+
</mesh>
74+
</geometry>
75+
</visual>
76+
<collision name="left_prop_collision">
77+
<pose>0 0 0 0 1.5708 0</pose>
78+
<geometry>
79+
<mesh>
80+
<uri>file://blueboat/meshes/blueboat_prop_collision.glb</uri>
81+
</mesh>
82+
</geometry>
83+
</collision>
84+
</link>
85+
86+
<!-- ======================= Right propeller ====================== -->
87+
<link name="right_prop_link">
88+
<pose>-0.45 -0.30 -0.10 0 0 0</pose>
89+
<inertial>
90+
<mass>0.1</mass>
91+
<inertia>
92+
<ixx>0.00010562499999999999</ixx>
93+
<ixy>0</ixy>
94+
<ixz>0</ixz>
95+
<iyy>0.00010562499999999999</iyy>
96+
<iyz>0</iyz>
97+
<izz>0.00015125000000000002</izz>
98+
</inertia>
99+
</inertial>
100+
<visual name="right_prop_visual">
101+
<pose>0 0 0 0 1.5708 0</pose>
102+
<geometry>
103+
<mesh>
104+
<uri>file://blueboat/meshes/blueboat_prop.glb</uri>
105+
</mesh>
106+
</geometry>
107+
</visual>
108+
<collision name="right_prop_collision">
109+
<pose>0 0 0 0 1.5708 0</pose>
110+
<geometry>
111+
<mesh>
112+
<uri>file://blueboat/meshes/blueboat_prop_collision.glb</uri>
113+
</mesh>
114+
</geometry>
115+
</collision>
116+
</link>
117+
118+
<!-- ===================== Propeller joints ======================= -->
119+
<joint name="left_engine_propeller_joint" type="revolute">
120+
<axis>
121+
<xyz>1 0 0</xyz>
122+
<limit>
123+
<effort>100</effort>
124+
<velocity>100</velocity>
125+
</limit>
126+
<dynamics>
127+
<friction>0.05</friction>
128+
<damping>0.05</damping>
129+
</dynamics>
130+
</axis>
131+
<parent>base_link</parent>
132+
<child>left_prop_link</child>
133+
</joint>
134+
135+
<joint name="right_engine_propeller_joint" type="revolute">
136+
<axis>
137+
<xyz>1 0 0</xyz>
138+
<limit>
139+
<effort>100</effort>
140+
<velocity>100</velocity>
141+
</limit>
142+
<dynamics>
143+
<friction>0.05</friction>
144+
<damping>0.05</damping>
145+
</dynamics>
146+
</axis>
147+
<parent>base_link</parent>
148+
<child>right_prop_link</child>
149+
</joint>
150+
151+
<!-- ==================== Buoyancy (per hull) ===================== -->
152+
<!-- Port hull -->
153+
<plugin
154+
filename="libSurface.so"
155+
name="vrx::Surface">
156+
<link_name>base_link</link_name>
157+
<hull_length>1.0</hull_length>
158+
<hull_radius>0.12</hull_radius>
159+
<fluid_level>0</fluid_level>
160+
<points>
161+
<point>0.45 0.30 -0.05</point>
162+
<point>-0.45 0.30 -0.05</point>
163+
</points>
164+
<wavefield>
165+
<topic>/vrx/wavefield/parameters</topic>
166+
</wavefield>
167+
</plugin>
168+
169+
<!-- Starboard hull -->
170+
<plugin
171+
filename="libSurface.so"
172+
name="vrx::Surface">
173+
<link_name>base_link</link_name>
174+
<hull_length>1.0</hull_length>
175+
<hull_radius>0.12</hull_radius>
176+
<fluid_level>0</fluid_level>
177+
<points>
178+
<point>0.45 -0.30 -0.05</point>
179+
<point>-0.45 -0.30 -0.05</point>
180+
</points>
181+
<wavefield>
182+
<topic>/vrx/wavefield/parameters</topic>
183+
</wavefield>
184+
</plugin>
185+
186+
<!-- ==================== Hydrodynamics ========================== -->
187+
<plugin
188+
filename="libSimpleHydrodynamics.so"
189+
name="vrx::SimpleHydrodynamics">
190+
<link_name>base_link</link_name>
191+
<!-- Added mass -->
192+
<xDotU>0.0</xDotU>
193+
<yDotV>0.0</yDotV>
194+
<nDotR>0.0</nDotR>
195+
<!-- Linear and quadratic drag -->
196+
<xU>4.0</xU>
197+
<xUU>6.0</xUU>
198+
<yV>4.0</yV>
199+
<yVV>4.0</yVV>
200+
<zW>20.0</zW>
201+
<kP>12.0</kP>
202+
<kPP>24.0</kPP>
203+
<mQ>36.0</mQ>
204+
<mQQ>35.0</mQQ>
205+
<nR>32.0</nR>
206+
<nRR>32.0</nRR>
207+
</plugin>
208+
209+
<!-- ==================== Thrusters ============================== -->
210+
<plugin
211+
filename="gz-sim-thruster-system"
212+
name="gz::sim::systems::Thruster">
213+
<joint_name>left_engine_propeller_joint</joint_name>
214+
<thrust_coefficient>0.0001</thrust_coefficient>
215+
<fluid_density>1000</fluid_density>
216+
<propeller_diameter>0.1</propeller_diameter>
217+
<velocity_control>true</velocity_control>
218+
</plugin>
219+
220+
<plugin
221+
filename="gz-sim-thruster-system"
222+
name="gz::sim::systems::Thruster">
223+
<joint_name>right_engine_propeller_joint</joint_name>
224+
<thrust_coefficient>0.0001</thrust_coefficient>
225+
<fluid_density>1000</fluid_density>
226+
<propeller_diameter>0.1</propeller_diameter>
227+
<velocity_control>true</velocity_control>
228+
</plugin>
229+
230+
</model>
231+
</sdf>

vrx_gz/worlds/nbpark.sdf

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -341,11 +341,23 @@
341341
<direction>-0.5 0.1 -0.9</direction>
342342
</light>
343343

344-
<include>
345-
<pose>0 0 -1 0 0 0</pose>
346-
<uri>https://fuel.gazebosim.org/1.0/openrobotics/models/nathan_benderson_park</uri>
347-
</include>
348344

345+
<!-- RoboBoat 01 -->
346+
<include>
347+
<name>roboboat01</name>
348+
<pose>-185 1088 0 0 0 0</pose>
349+
<uri>roboboat01</uri>
350+
</include>
351+
<!-- BlueBoat -->
352+
<include>
353+
<name>blueboat</name>
354+
<pose>-185 1090 0 0 0 0</pose>
355+
<uri>blueboat</uri>
356+
</include>
357+
<include>
358+
<name>platform</name>
359+
<uri>platform</uri>
360+
</include>
349361
<include>
350362
<name>Coast Waves</name>
351363
<pose>0 0 0 0 0 0</pose>

0 commit comments

Comments
 (0)