diff --git a/models/dave_robot_models/config/bluerov2_heavy/robot_config.py b/models/dave_robot_models/config/bluerov2_heavy/robot_config.py index 0a664fd6..3b8e9446 100644 --- a/models/dave_robot_models/config/bluerov2_heavy/robot_config.py +++ b/models/dave_robot_models/config/bluerov2_heavy/robot_config.py @@ -29,23 +29,11 @@ def launch_setup(context, *args, **kwargs): f"/model/{namespace}/pose@geometry_msgs/msg/PoseArray@gz.msgs.Pose_V", f"/model/{namespace}/imu@sensor_msgs/msg/Imu@gz.msgs.IMU", f"/model/{namespace}/magnetometer@sensor_msgs/msg/MagneticField@gz.msgs.Magnetometer", - f"/model/{namespace}/camera/image@sensor_msgs/msg/Image@gz.msgs.Image", + f"/model/{namespace}/camera/image_raw@sensor_msgs/msg/Image@gz.msgs.Image", f"/model/{namespace}/camera/camera_info@sensor_msgs/msg/CameraInfo@gz.msgs.CameraInfo", - f"/model/{namespace}/multibeam_sonar/point_cloud@sensor_msgs/msg/PointCloud2@gz.msgs.PointCloudPacked", ] ) - tf_node = Node( - package="tf2_ros", - executable="static_transform_publisher", - arguments=[ - "--frame-id", - "world", - "--child-frame-id", - "bluerov2_heavy/sonar_link/multibeam_sonar", - ], - ) - bluerov2_heavy_bridge = Node( package="ros_gz_bridge", executable="parameter_bridge", @@ -62,7 +50,7 @@ def launch_setup(context, *args, **kwargs): parameters=[mavros_file, {"use_sim_time": True}], ) - nodes = [bluerov2_heavy_bridge, mavros_node, tf_node] + nodes = [bluerov2_heavy_bridge, mavros_node] ardusub_params = LaunchConfiguration("ardusub_params").perform(context) @@ -76,6 +64,28 @@ def launch_setup(context, *args, **kwargs): processes = [ardusub_process] + # ardusub_manager_file = LaunchConfiguration("ardusub_manager_file") + + # # Include the ardusub_manager launch file + # ardusub_manager = IncludeLaunchDescription( + # PythonLaunchDescriptionSource( + # [ + # PathJoinSubstitution( + # [ + # FindPackageShare("ardusub_manager"), + # "launch", + # "ardusub_manager.launch.py", + # ] + # ) + # ] + # ), + # launch_arguments={ + # "ardusub_manager_file": ardusub_manager_file, + # }.items(), + # ) + + # includes = [ardusub_manager] + return nodes + processes @@ -89,7 +99,7 @@ def generate_launch_description(): DeclareLaunchArgument( "mavros_file", default_value=PathJoinSubstitution( - [FindPackageShare("dave_robot_models"), "config", "mavros", "mavros.yaml"] + [FindPackageShare("dave_robot_models"), "config", "ardusub", "mavros.yaml"] ), description="Path to mavros.yaml file", ), @@ -100,6 +110,18 @@ def generate_launch_description(): ), description="Path to ardusub.parm file", ), + DeclareLaunchArgument( + "ardusub_manager_file", + default_value=PathJoinSubstitution( + [ + FindPackageShare("dave_robot_models"), + "config", + "ardusub", + "ardusub_manager.yaml", + ] + ), + description="Path to ardusub_manager.yaml file", + ), ] return LaunchDescription(args + [OpaqueFunction(function=launch_setup)]) diff --git a/models/dave_robot_models/config/bluerov2_heavy_multibeam_sonar/ardusub.parm b/models/dave_robot_models/config/bluerov2_heavy_multibeam_sonar/ardusub.parm new file mode 100644 index 00000000..e8f67cc8 --- /dev/null +++ b/models/dave_robot_models/config/bluerov2_heavy_multibeam_sonar/ardusub.parm @@ -0,0 +1,94 @@ +# These settings were copied from ardupilot/Tools/autotest/default_params/sub-6dof.parm +BARO_RND 0.02 +BATT_MONITOR 4 +BTN0_FUNCTION 0 +BTN10_SFUNCTION 0 +BTN10_FUNCTION 22 +BTN10_SFUNCTION 0 +BTN11_FUNCTION 42 +BTN11_SFUNCTION 47 +BTN12_FUNCTION 43 +BTN12_SFUNCTION 46 +BTN13_FUNCTION 33 +BTN13_SFUNCTION 45 +BTN14_FUNCTION 32 +BTN14_SFUNCTION 44 +BTN15_FUNCTION 0 +BTN15_SFUNCTION 0 +BTN1_FUNCTION 6 +BTN1_SFUNCTION 0 +BTN2_FUNCTION 8 +BTN2_SFUNCTION 0 +BTN3_FUNCTION 7 +BTN3_SFUNCTION 0 +BTN4_FUNCTION 4 +BTN4_SFUNCTION 0 +BTN5_FUNCTION 1 +BTN5_SFUNCTION 0 +BTN6_FUNCTION 3 +BTN6_SFUNCTION 0 +BTN7_FUNCTION 21 +BTN7_SFUNCTION 0 +BTN8_FUNCTION 48 +BTN8_SFUNCTION 0 +BTN9_FUNCTION 23 +BTN9_SFUNCTION 0 +COMPASS_OFS_X 5 +COMPASS_OFS_Y 13 +COMPASS_OFS_Z -18 +COMPASS_OFS2_X 5 +COMPASS_OFS2_Y 13 +COMPASS_OFS2_Z -18 +COMPASS_OFS3_X 5 +COMPASS_OFS3_Y 13 +COMPASS_OFS3_Z -18 +INS_ACCOFFS_X 0.001 +INS_ACCOFFS_Y 0.001 +INS_ACCOFFS_Z 0.001 +INS_ACCSCAL_X 1.001 +INS_ACCSCAL_Y 1.001 +INS_ACCSCAL_Z 1.001 +INS_ACC2OFFS_X 0.001 +INS_ACC2OFFS_Y 0.001 +INS_ACC2OFFS_Z 0.001 +INS_ACC2SCAL_X 1.001 +INS_ACC2SCAL_Y 1.001 +INS_ACC2SCAL_Z 1.001 +INS_ACC3OFFS_X 0.000 +INS_ACC3OFFS_Y 0.000 +INS_ACC3OFFS_Z 0.000 +INS_ACC3SCAL_X 1.000 +INS_ACC3SCAL_Y 1.000 +INS_ACC3SCAL_Z 1.000 +FRAME_CONFIG 2.000 + +# Use EK3 +EK2_ENABLE 0 +EK3_ENABLE 1 +AHRS_EKF_TYPE 3 + +# Enable external nav +# From https://ardupilot.org/copter/docs/common-vio-tracking-camera.html +GPS_TYPE 0 # Disable GPS +VISO_TYPE 1 # External vision +EK3_SRC1_POSXY 6 # External nav +EK3_SRC1_VELXY 6 # External nav +EK3_SRC1_POSZ 1 # Baro is the primary z source +EK3_SRC1_VELZ 6 # External nav z velocity influences EKF +COMPASS_USE 0 # Disable compass 1 +COMPASS_USE2 0 # Disable compass 2 +COMPASS_USE3 0 # Disable compass 3 +EK3_SRC1_YAW 6 # External nav + +# See https://github.com/clydemcqueen/bluerov2_ignition/issues/7 +SIM_BARO_RND 0.01 + +# Store thruster parameters as backups +SERVO1_FUNCTION 33 +SERVO2_FUNCTION 34 +SERVO3_FUNCTION 35 +SERVO4_FUNCTION 36 +SERVO5_FUNCTION 37 +SERVO6_FUNCTION 38 +SERVO7_FUNCTION 39 +SERVO8_FUNCTION 40 diff --git a/models/dave_robot_models/config/bluerov2_heavy_multibeam_sonar/robot_config.py b/models/dave_robot_models/config/bluerov2_heavy_multibeam_sonar/robot_config.py new file mode 100644 index 00000000..90b22ad9 --- /dev/null +++ b/models/dave_robot_models/config/bluerov2_heavy_multibeam_sonar/robot_config.py @@ -0,0 +1,105 @@ +from launch import LaunchDescription +from launch.actions import ( + DeclareLaunchArgument, + OpaqueFunction, + ExecuteProcess, +) +from launch.substitutions import LaunchConfiguration, PathJoinSubstitution +from launch_ros.actions import Node +from launch_ros.substitutions import FindPackageShare + + +def launch_setup(context, *args, **kwargs): + namespace = LaunchConfiguration("namespace").perform(context) + + thruster_joints = [] + for thruster in range(1, 9): + thruster_joints.append(f"/model/{namespace}/joint/thruster{thruster}_joint") + + bluerov2_heavy_arguments = ( + [f"{joint}/cmd_thrust@std_msgs/msg/Float64@gz.msgs.Double" for joint in thruster_joints] + + [f"{joint}/ang_vel@std_msgs/msg/Float64@gz.msgs.Double" for joint in thruster_joints] + + [ + f"{joint}/enable_deadband@std_msgs/msg/Bool@gz.msgs.Boolean" + for joint in thruster_joints + ] + + [ + f"/model/{namespace}/odometry@nav_msgs/msg/Odometry@gz.msgs.Odometry", + f"/model/{namespace}/odometry_with_covariance@nav_msgs/msg/Odometry@gz.msgs.OdometryWithCovariance", + f"/model/{namespace}/pose@geometry_msgs/msg/PoseArray@gz.msgs.Pose_V", + f"/model/{namespace}/imu@sensor_msgs/msg/Imu@gz.msgs.IMU", + f"/model/{namespace}/magnetometer@sensor_msgs/msg/MagneticField@gz.msgs.Magnetometer", + f"/model/{namespace}/camera/image@sensor_msgs/msg/Image@gz.msgs.Image", + f"/model/{namespace}/camera/camera_info@sensor_msgs/msg/CameraInfo@gz.msgs.CameraInfo", + f"/model/{namespace}/multibeam_sonar/point_cloud@sensor_msgs/msg/PointCloud2@gz.msgs.PointCloudPacked", + ] + ) + + tf_node = Node( + package="tf2_ros", + executable="static_transform_publisher", + arguments=[ + "--frame-id", + "world", + "--child-frame-id", + "bluerov2_heavy_multibeam_sonar/sonar_link/multibeam_sonar", + ], + ) + + bluerov2_heavy_bridge = Node( + package="ros_gz_bridge", + executable="parameter_bridge", + arguments=bluerov2_heavy_arguments, + output="screen", + ) + + mavros_file = LaunchConfiguration("mavros_file") + + mavros_node = Node( + package="mavros", + executable="mavros_node", + output="screen", + parameters=[mavros_file, {"use_sim_time": True}], + ) + + nodes = [bluerov2_heavy_bridge, mavros_node, tf_node] + + ardusub_params = LaunchConfiguration("ardusub_params").perform(context) + + ardusub_cmd = [ + "ardusub -S -w -M gazebo --defaults " + + ardusub_params + + " -IO --home 44.65870,-124.06556,0.0,270.0" + ] + + ardusub_process = ExecuteProcess(cmd=ardusub_cmd, shell=True, output="screen") + + processes = [ardusub_process] + + return nodes + processes + + +def generate_launch_description(): + args = [ + DeclareLaunchArgument( + "namespace", + default_value="", + description="Namespace", + ), + DeclareLaunchArgument( + "mavros_file", + default_value=PathJoinSubstitution( + [FindPackageShare("dave_robot_models"), "config", "mavros", "mavros.yaml"] + ), + description="Path to mavros.yaml file", + ), + DeclareLaunchArgument( + "ardusub_params", + default_value=PathJoinSubstitution( + [FindPackageShare("dave_robot_models"), "config", "bluerov2", "ardusub.parm"] + ), + description="Path to ardusub.parm file", + ), + ] + + return LaunchDescription(args + [OpaqueFunction(function=launch_setup)]) diff --git a/models/dave_robot_models/description/bluerov2_heavy/model.config b/models/dave_robot_models/description/bluerov2_heavy/model.config index b5149da4..09168b7e 100644 --- a/models/dave_robot_models/description/bluerov2_heavy/model.config +++ b/models/dave_robot_models/description/bluerov2_heavy/model.config @@ -16,4 +16,4 @@ Blue Robotics BlueROV2 Heavy configuration model - + \ No newline at end of file diff --git a/models/dave_robot_models/description/bluerov2_heavy/model.sdf b/models/dave_robot_models/description/bluerov2_heavy/model.sdf index ab3f53fe..af0ef3c8 100644 --- a/models/dave_robot_models/description/bluerov2_heavy/model.sdf +++ b/models/dave_robot_models/description/bluerov2_heavy/model.sdf @@ -118,72 +118,6 @@ camera_mount_link - - 0.35 0 -0.1 0 1.5708 0 - - 0.001 - - 0.0001 - 0 - 0 - 0.0001 - 0 - 0.0001 - - - - true - 30.0 - /model/bluerov2_heavy/multibeam_sonar - true - - - - - 512 - -1.13447 - 1.13447 - - - 300 - -0.10472 - 0.10472 - - - - 0.1 - 10.0 - - - - - 12 - 900e3 - 29.9e3 - 1500 - 220 - 10 - 10 - 0.02 - true - false - false - 5 - - point_cloud - sonar_image_raw - sonar_image - forward_sonar_optical_link - - - - - - - base_link - sonar_link - - - + \ No newline at end of file diff --git a/models/dave_robot_models/description/bluerov2_heavy_multibeam_sonar/model.config b/models/dave_robot_models/description/bluerov2_heavy_multibeam_sonar/model.config new file mode 100644 index 00000000..c4db97a0 --- /dev/null +++ b/models/dave_robot_models/description/bluerov2_heavy_multibeam_sonar/model.config @@ -0,0 +1,19 @@ + + + + BlueROV2 Heavy With Sonar + 1.0 + model.sdf + + + Evan Palmer + evanp922@gmail.com + + + Clyde McQueen + Rakesh Vivekanandan + + + Blue Robotics BlueROV2 Heavy (with Sonar) configuration model + + diff --git a/models/dave_robot_models/description/bluerov2_heavy_multibeam_sonar/model.sdf b/models/dave_robot_models/description/bluerov2_heavy_multibeam_sonar/model.sdf new file mode 100644 index 00000000..68b6afee --- /dev/null +++ b/models/dave_robot_models/description/bluerov2_heavy_multibeam_sonar/model.sdf @@ -0,0 +1,696 @@ + + + + 0 0 0 0 0 0 + + + + + + 0.0 0.0 0.011 0 0 0 + 13.0 + + 0.26 + 0 + 0 + 0.23 + 0 + 0.37 + + + + + + + model://meshes/bluerov2_heavy/bluerov2_heavy.dae + 0.025 0.025 0.025 + + + + + + + 0.0 0.0 0.06 0 0 0 + + + 0.457 0.575 0.05 + + + + + + + + 0 0 0 3.142 0 0 + 1 + 1000.0 + /model/bluerov2_heavy_multibeam_sonar/imu + + + + + + 0 0 0 0 0 0 + + 0.0001 + + 0.0001 + 0 + 0 + 0.0001 + 0 + 0.0001 + + + + 10 + true + 1 + /model/bluerov2_heavy_multibeam_sonar/camera + + 1.05 + + 1920 + 1080 + + + 0.1 + 10.0 + + + + 0.8 + 0.5 + 0.2 + + 85 + 107 + 47 + + + + + + 0.19 0 0.067 0 0 0 + + 0.0001 + + 0.0001 + 0 + 0 + 0.0001 + 0 + 0.0001 + + + + + + camera_mount_link + camera_link + + + + base_link + camera_mount_link + + + + 0.2 0 -0.13 0 0 0 + + 0.001 + + 0.0001 + 0 + 0 + 0.0001 + 0 + 0.0001 + + + + 0 0 0 0 0 0 + + + 0.6 0.6 0.6 + model://meshes/blueview_p900/p900.dae + + + 0 + 1 + + + 0 0 0 0 0 0 + + + model://meshes/blueview_p900/COLLISION-p900.dae + + + + + true + 30.0 + /model/bluerov2_heavy_multibeam_sonar/multibeam_sonar + true + + + + + 512 + -1.13447 + 1.13447 + + + 300 + -0.10472 + 0.10472 + + + + 0.1 + 10.0 + + + + + 12 + 900e3 + 29.9e3 + 1500 + 220 + 10 + 10 + 0.02 + true + true + 5 + + point_cloud + sonar_image_raw + sonar_image + forward_sonar_optical_link + + + + + + + base_link + sonar_link + + + + + base_link + 1025.0 + + 0 + 0 + 0 + 0 + 0 + 0 + + 0 + 0 + 0 + 0 + 0 + 0 + + -58.42 + -55.137 + -124.818 + -4.0 + -4.0 + -4.0 + + + + 0.14 -0.092 0.0 -1.571 1.571 -0.785 + + 0 0 0 -1.571 0 0 + + + model://meshes/t200/ccw_prop.dae + + + + + 0.002 + + 0.001 + 0 + 0 + 0.001 + 0 + 0.001 + + + + + + 0.14 0.092 0.0 -1.571 1.571 -2.356 + + 0 0 0 -1.571 0 0 + + + model://meshes/t200/ccw_prop.dae + + + + + 0.002 + + 0.001 + 0 + 0 + 0.001 + 0 + 0.001 + + + + + + -0.15 -0.092 0.0 -1.571 1.571 0.785 + + 0 0 0 1.571 0 0 + + + model://meshes/t200/cw_prop.dae + + + + + 0.002 + + 0.001 + 0 + 0 + 0.001 + 0 + 0.001 + + + + + + -0.15 0.092 0.0 -1.571 1.571 2.356 + + 0 0 0 1.571 0 0 + + + model://meshes/t200/cw_prop.dae + + + + + 0.002 + + 0.001 + 0 + 0 + 0.001 + 0 + 0.001 + + + + + + 0.118 -0.215 0.064 0 0 0 + + 0 0 0 -1.571 0 1.571 + + + model://meshes/t200/ccw_prop.dae + + + + + 0.002 + + 0.001 + 0 + 0 + 0.001 + 0 + 0.001 + + + + + + 0.118 0.215 0.064 0 0 0 + + 0 0 0 1.571 0 1.571 + + + model://meshes/t200/cw_prop.dae + + + + + 0.002 + + 0.001 + 0 + 0 + 0.001 + 0 + 0.001 + + + + + + -0.118 -0.215 0.064 0 0 0 + + 0 0 0 1.571 0 1.571 + + + model://meshes/t200/cw_prop.dae + + + + + 0.002 + + 0.001 + 0 + 0 + 0.001 + 0 + 0.001 + + + + + + -0.118 0.215 0.064 0 0 0 + + 0 0 0 -1.571 0 1.571 + + + model://meshes/t200/ccw_prop.dae + + + + + 0.002 + + 0.001 + 0 + 0 + 0.001 + 0 + 0.001 + + + + + + base_link + thruster1 + + 0 0 -1 + + + + + base_link + thruster2 + + 0 0 -1 + + + + + base_link + thruster3 + + 0 0 -1 + + + + + base_link + thruster4 + + 0 0 -1 + + + + + base_link + thruster5 + + 0 0 -1 + + + + + base_link + thruster6 + + 0 0 -1 + + + + + base_link + thruster7 + + 0 0 -1 + + + + + base_link + thruster8 + + 0 0 -1 + + + + + bluerov2_heavy_multibeam_sonar + thruster1_joint + 0.02 + 1025.0 + 0.1 + true + False + + + + bluerov2_heavy_multibeam_sonar + thruster2_joint + 0.02 + 1025.0 + 0.1 + true + False + + + + bluerov2_heavy_multibeam_sonar + thruster3_joint + + -0.02 + 1025.0 + 0.1 + true + False + + + + bluerov2_heavy_multibeam_sonar + thruster4_joint + + -0.02 + 1025.0 + 0.1 + true + False + + + + bluerov2_heavy_multibeam_sonar + thruster5_joint + 0.02 + 1025.0 + 0.1 + true + False + + + + bluerov2_heavy_multibeam_sonar + thruster6_joint + + -0.02 + 1025.0 + 0.1 + true + False + + + + bluerov2_heavy_multibeam_sonar + thruster7_joint + + -0.02 + 1025.0 + 0.1 + true + False + + + + bluerov2_heavy_multibeam_sonar + thruster8_joint + 0.02 + 1025.0 + 0.1 + true + False + + + + + 127.0.0.1 + 9002 + 5 + 1 + + + 0 0 0 3.142 0 0 + + + 0 0 0 3.142 0 1.571 + + + imu_sensor + + + + thruster1_joint + 1100 + 1900 + COMMAND + /model/bluerov2_heavy_multibeam_sonar/joint/thruster1_joint/cmd_thrust + -0.5 + 100 + + + thruster2_joint + 1100 + 1900 + COMMAND + /model/bluerov2_heavy_multibeam_sonar/joint/thruster2_joint/cmd_thrust + -0.5 + 100 + + + thruster3_joint + 1100 + 1900 + COMMAND + /model/bluerov2_heavy_multibeam_sonar/joint/thruster3_joint/cmd_thrust + -0.5 + 100 + + + thruster4_joint + 1100 + 1900 + COMMAND + /model/bluerov2_heavy_multibeam_sonar/joint/thruster4_joint/cmd_thrust + -0.5 + 100 + + + thruster5_joint + 1100 + 1900 + COMMAND + /model/bluerov2_heavy_multibeam_sonar/joint/thruster5_joint/cmd_thrust + -0.5 + 100 + + + thruster6_joint + 1100 + 1900 + COMMAND + /model/bluerov2_heavy_multibeam_sonar/joint/thruster6_joint/cmd_thrust + -0.5 + 100 + + + thruster7_joint + 1100 + 1900 + COMMAND + /model/bluerov2_heavy_multibeam_sonar/joint/thruster7_joint/cmd_thrust + -0.5 + 100 + + + thruster8_joint + 1100 + 1900 + COMMAND + /model/bluerov2_heavy_multibeam_sonar/joint/thruster8_joint/cmd_thrust + -0.5 + 100 + + + + + + map + base_link + 3 + 100 + + + + + + + + + + diff --git a/models/dave_worlds/worlds/dave_ocean_waves_sonar.world b/models/dave_worlds/worlds/dave_ocean_waves_sonar.world index 66e8f3b6..9b0212fa 100644 --- a/models/dave_worlds/worlds/dave_ocean_waves_sonar.world +++ b/models/dave_worlds/worlds/dave_ocean_waves_sonar.world @@ -112,20 +112,13 @@ - - - cylinder_sonar_tank_1 - https://fuel.gazebosim.org/1.0/hmoyen/models/Cylinder Sonar Tank - 0 0 -2 0 0 0 - - - - - cylinder_sonar_tank_2 - https://fuel.gazebosim.org/1.0/hmoyen/models/Cylinder Sonar Tank - 0 2 -2 0 0 0 - + + + https://fuel.gazebosim.org/1.0/hmoyen/models/Sunken Ship Distorted + + 15 2 -16 0 0 1 + diff --git a/models/dave_worlds/worlds/dave_ocean_waves_sonar_integrated.world b/models/dave_worlds/worlds/dave_ocean_waves_sonar_integrated.world new file mode 100644 index 00000000..8fcf052a --- /dev/null +++ b/models/dave_worlds/worlds/dave_ocean_waves_sonar_integrated.world @@ -0,0 +1,195 @@ + + + + + + + 0.01 0.01 0.01 1.0 + + + 12 + + + 1 + + + 0.001 + 1.0 + + + + + + + + + ogre2 + + + + + + + + + + 56.71897669633431 + 3.515625 + + + + + 50 0 150 0 0 0 + 1 1 1 1 + .1 .1 .1 1 + 0.3 0.3 -1 + false + + + + -50 0 -150 0 0 0 + 0.6 0.6 0.6 1 + 0 0 0 1 + -0.3 -0.3 -1 + false + + + + -100 500 -20 0 0 0 + 0.8 0.8 0.8 1 + 1 1 1 1 + -1 -1 0 + false + + + + -150 -130 50 0 0 0 + 0.6 0.6 0.6 1 + 0.2 0.2 0.2 1 + 0.5 0.5 -1 + false + + + + + + https://fuel.gazebosim.org/1.0/hmoyen/models/North East Down frame + + 0 0 0 0 0 0 + + + + + + https://fuel.gazebosim.org/1.0/OpenRobotics/models/Coast Water + + + + + + https://fuel.gazebosim.org/1.0/Cole/models/Sunken Ship + + 10 -5 -16 -0.4 0 -1.7 + + + + sunken_vase + 20 -3 -16 0 0 0 + https://fuel.ignitionrobotics.org/1.0/Cole/models/Sunken Vase + + + + sunken_vase_distorted + 20 -3.5 -16 0 0 0 + https://fuel.gazebosim.org/1.0/hmoyen/models/Sunken Vase Distorted + true + + + + sunken_vase2 + 20 -4 -16 0 0 0 + https://fuel.ignitionrobotics.org/1.0/Cole/models/Sunken Vase 02 + true + + + + Lionfish2 + 20 -4.5 -16 0 0 0 + https://fuel.ignitionrobotics.org/1.0/Cole/models/Lionfish + true + + + + Coral2 + 20 -5.0 -16 0 0 0 + https://fuel.ignitionrobotics.org/1.0/Cole/models/Coral02 + true + + + + Kelp3 + 20 -6.5 -16 0 0 0 + https://fuel.ignitionrobotics.org/1.0/Cole/models/Kelp 03 + true + + + + Kelp4 + 20 -7.5 -16 0 0 0 + https://fuel.ignitionrobotics.org/1.0/Cole/models/Kelp 04 + true + + + + + https://fuel.gazebosim.org/1.0/hmoyen/models/Sand Heightmap + 0 0 -16 0 0 0 + + + + + https://fuel.gazebosim.org/1.0/hmoyen/models/Hardhat Superribbed + + 20 -7 -16 0 0 0 + + + + + https://fuel.gazebosim.org/1.0/hmoyen/models/Torpedo MK46 + + 20 -1 -16 0 0 2 + + + + + https://fuel.gazebosim.org/1.0/hmoyen/models/MBARI MARS + + 27 4 -16 0 0 1 + + + + + 1025 + + 0 + 1 + + + + + +