Deferred out of SITL phase 3, which shipped the standard 6-thruster BlueROV2 under ArduSub. Recording what phase 3 established so the Heavy does not start from scratch.
The Heavy is not a SITL gap, it is a missing vehicle
bluerov2_heavy_chassis is a part with a mesh (bluerobotics_parts/urdf/bluerov2_heavy_chassis.urdf.xacro) and a teleop mixer (bluerobotics_teleop/config/bluerov2_heavy/mixer.yaml), and nothing assembles it. There is no loadout config, no CMake model rule, no world and no bridge config. So "support the Heavy in SITL" is mostly ordinary vehicle work wearing a SITL label, and that is why it was split out rather than carried.
The geometry is already verified
The Heavy's eight slots map exactly onto ArduSub's Vectored_6DOF frame (AP_Motors6DOF.cpp:156-166), checked by hand against the slot poses:
- thrusters 1-4: identical to the standard vehicle, surge/sway/yaw
- thruster_5 (0.118, -0.215) -> MOT_5, roll +1, pitch -1, throttle -1
- thruster_6 (0.118, +0.215) -> MOT_6, roll -1, pitch -1, throttle -1
- thruster_7 (-0.118, -0.215) -> MOT_7, roll +1, pitch +1, throttle -1
- thruster_8 (-0.118, +0.215) -> MOT_8, roll -1, pitch +1, throttle -1
So channel = N - 1 holds for eight as it does for six.
What phase 3 leaves ready
- The
<control> blocks are emitted from the assembly, not written out, so eight fall out of the chassis with no code change.
bluerov2_gazebo/test/test_ardusub_frame.py encodes the Vectored table and is straightforward to parametrize over a second frame; the Vectored_6DOF factors above are what it would assert.
generate_model.py --ardupilot and the CMake rule take a second config without modification.
What it still needs
- A loadout config selecting
bluerov2_heavy_chassis, plus the model, world and bridge rules that go with it.
- An
imu entry in the heavy chassis's frames dict - one line, deliberately not added in phase 3 since nothing assembles that chassis.
- Its own parameter file from
ArduSub/4.7/navigator/Heavy BlueROV2.params, which sets FRAME_CONFIG 2.
-f vectored_6dof --model JSON rather than -f gazebo-bluerov2: there is no gazebo-bluerov2-heavy entry in vehicleinfo.json, and vectored_6dof picks up sub-6dof.parm.
- One collision to watch:
sub.parm assigns SERVO8_FUNCTION 7 (camera tilt), which conflicts with motor 8 on a 6DOF frame.
- Roll and pitch become real axes, so the walkthrough gains
rc 1 and rc 2 rows that currently say "does nothing".
Deferred out of SITL phase 3, which shipped the standard 6-thruster BlueROV2 under ArduSub. Recording what phase 3 established so the Heavy does not start from scratch.
The Heavy is not a SITL gap, it is a missing vehicle
bluerov2_heavy_chassisis a part with a mesh (bluerobotics_parts/urdf/bluerov2_heavy_chassis.urdf.xacro) and a teleop mixer (bluerobotics_teleop/config/bluerov2_heavy/mixer.yaml), and nothing assembles it. There is no loadout config, no CMake model rule, no world and no bridge config. So "support the Heavy in SITL" is mostly ordinary vehicle work wearing a SITL label, and that is why it was split out rather than carried.The geometry is already verified
The Heavy's eight slots map exactly onto ArduSub's
Vectored_6DOFframe (AP_Motors6DOF.cpp:156-166), checked by hand against the slot poses:So
channel = N - 1holds for eight as it does for six.What phase 3 leaves ready
<control>blocks are emitted from the assembly, not written out, so eight fall out of the chassis with no code change.bluerov2_gazebo/test/test_ardusub_frame.pyencodes the Vectored table and is straightforward to parametrize over a second frame; the Vectored_6DOF factors above are what it would assert.generate_model.py --ardupilotand the CMake rule take a second config without modification.What it still needs
bluerov2_heavy_chassis, plus the model, world and bridge rules that go with it.imuentry in the heavy chassis'sframesdict - one line, deliberately not added in phase 3 since nothing assembles that chassis.ArduSub/4.7/navigator/Heavy BlueROV2.params, which setsFRAME_CONFIG 2.-f vectored_6dof --model JSONrather than-f gazebo-bluerov2: there is nogazebo-bluerov2-heavyentry invehicleinfo.json, andvectored_6dofpicks upsub-6dof.parm.sub.parmassignsSERVO8_FUNCTION 7(camera tilt), which conflicts with motor 8 on a 6DOF frame.rc 1andrc 2rows that currently say "does nothing".