Robotics StackExchange | Archived questions

It seems that buoyancy is not applied for the robot in the gazebo environment.

https://github.com/osrf/vrx

I am using the usv urdf file I created to open the gazevo world in the example link above. It seems to be able to load the model into the gazebo world, but there is a problem that the model continues to sink to the bottom. i want to know the solution for this

my urdf code is here:

<?xml version="1.0"?>
<robot name="1kw" xmlns:xacro="http://ros.org/wiki/xacro" >
<xacro:include filename="$(find wamv_gazebo)/urdf/1kw2.gazebo.xacro"/>
<xacro:include filename="$(find wamv_gazebo)/urdf/dynamics/wamv_gazebo_dynamics_plugin.xacro" />

<!-- Define robot constants -->
<xacro:property name="base_W" value="1.5"/>
<xacro:property name="base_D" value="0.09"/>
<xacro:property name="base_H" value="0.03"/>
<xacro:property name="base_M" value="0.08"/>

<xacro:macro name="base_inertia" params="m w d h">
    <inertial>
        <origin xyz="0 0 0" rpy="0 0 0" />      
        <mass value="${m}"/>
        <inertia ixx="${(m/12) * (d*d)}" ixy = "0" ixz = "0" iyy="${(m/12) * (w*w + d*d)}" iyz = "0" izz="${(m/12) * (w*w)}"/> 
    </inertial>
</xacro:macro>

<!-- Robot Footprint -->
<link name="base_footprint"/>

<joint name="base_joint" type="fixed">
    <parent link="base_footprint"/>
    <child link="base_link"/>
    <origin xyz="0.0 0.0 0.3" rpy="1.570796 0 0"/>
</joint>

<!-- USV Base -->
<link name="base_link">
    <visual>
        <geometry>
            <mesh filename="package://oneusv_urdf/mesh/1kw_ship_body2.stl" scale="0.001 0.001 0.001"/>
        </geometry>
        <origin rpy="0 0 0" xyz="-0.24 0 0.3"/>
        <material name="yellow">
            <color rgba="1 1 0 1"/>
        </material>
    </visual>

    <collision>
        <geometry>
            <mesh filename="package://oneusv_urdf/mesh/1kw_ship_body2.stl" scale="0.001 0.001 0.001"/>
        </geometry>
        <origin rpy="0 0 0" xyz="-0.24 0 0.3"/>
    </collision>

    <inertial>
        <mass value="1"/>
        <inertia ixx="1" ixy="0.0" ixz="0.0" iyy="1" iyz="0.0" izz="1"/>
    </inertial>
</link>

<!-- IMU -->
<joint name="imu_joint" type="fixed">
    <parent link="base_link"/>
    <child link="imu_link"/>
    <origin xyz="0.0 0 0.0" rpy="0 0 0"/>
</joint>

<link name="imu_link"/>

<joint name="lid_joint" type="fixed">
    <parent link="base_link"/>
    <child link="lid_link"/>
    <origin xyz="0.0 0.0 0" rpy="0 0 0"/>
</joint>

<!-- USV lid -->
<link name="lid_link">
    <visual>
        <geometry>
            <mesh filename="package://oneusv_urdf/mesh/1kw_ship_Lid.stl" scale="0.001 0.001 0.001"/>
        </geometry>
        <origin rpy="0 0 0" xyz="-0.24 0 0.3"/>
        <material name="yellow">
            <color rgba="1 1 0 1"/>
        </material>
    </visual>

    <collision>
        <geometry>
            <mesh filename="package://oneusv_urdf/mesh/1kw_ship_Lid.stl" scale="0.001 0.001 0.001"/>
        </geometry>
        <origin rpy="0 0 0" xyz="-0.24 0 0.3"/>
    </collision>

    <inertial>
        <mass value="1"/>
        <inertia ixx="10" ixy="0.0" ixz="0.0" iyy="10" iyz="0.0" izz="10"/>
    </inertial>
</link>

<joint name="lidar_joint" type="fixed">
    <parent link="lid_link"/>
    <child link="lidar_link"/>
    <origin xyz="0 0.235 0" rpy="0 0 0"/>
</joint>

<!-- USV lidar -->
<link name="lidar_link">
    <visual>
        <geometry>
            <mesh filename="package://oneusv_urdf/mesh/1kw_ship_Lidar.stl" scale="0.001 0.001 0.001"/>
        </geometry>
        <origin rpy="0 0 0" xyz="-0.24 -0.235 0.3"/>
        <material name="yellow">
            <color rgba="1 1 0 1"/>
        </material>
    </visual>

    <collision>
        <geometry>
            <mesh filename="package://oneusv_urdf/mesh/1kw_ship_Lidar.stl" scale="0.001 0.001 0.001"/>
        </geometry>
        <origin rpy="0 0 0" xyz="-0.24 -0.235 0.3"/>
    </collision>

    <inertial>
        <mass value="1"/>
        <inertia ixx="1" ixy="0.0" ixz="0.0" iyy="1" iyz="0.0" izz="1"/>
    </inertial>
</link>

<joint name="left_propeller_joint" type="continuous">
    <parent link="base_link"/>
    <child link="left_propeller_link"/>
    <origin xyz="0.6 -0.375 0.298" rpy="0 0 0"/>
    <axis rpy="0 0 0" xyz="1 0 0"/>
    <limit effort="100" velocity="100" />
    <dynamics friction="0.05" damping="0.05" />
</joint>

<!-- USV left propeller -->
<link name="left_propeller_link">
    <visual>
        <geometry>
            <mesh filename="package://oneusv_urdf/mesh/1kw_ship_left_propeller.stl" scale="0.001 0.001 0.001"/>
        </geometry>
        <origin rpy="0 0 0" xyz="-0.84 0.375 0.002"/>
        <material name="yellow">
            <color rgba="1 1 0 1"/>
        </material>
    </visual>

    <collision>
        <geometry>
            <mesh filename="package://oneusv_urdf/mesh/1kw_ship_left_propeller.stl" scale="0.001 0.001 0.001"/>
        </geometry>
        <origin rpy="0 0 0" xyz="-0.84 0.375 0.002"/>
    </collision>

    <inertial>
        <mass value="1"/>
        <inertia ixx="1" ixy="0.0" ixz="0.0" iyy="1" iyz="0.0" izz="1"/>
    </inertial>
</link>

<joint name="right_propeller_joint" type="continuous">
    <parent link="base_link"/>
    <child link="right_propeller_link"/>
    <origin xyz="0.6 -0.375 -0.298" rpy="0 0 0"/>
    <axis rpy="0 0 0" xyz="1 0 0"/>
    <limit effort="100" velocity="100" />
    <dynamics friction="0.05" damping="0.05" />
</joint>

<!-- USV right propeller -->
<link name="right_propeller_link">
    <visual>
        <geometry>
            <mesh filename="package://oneusv_urdf/mesh/1kw_ship_right_propeller.stl" scale="0.001 0.001 0.001"/>
        </geometry>
        <origin rpy="0 0 0" xyz="-0.84 0.375 0.598"/>
        <material name="yellow">
            <color rgba="1 1 0 1"/>
        </material>
    </visual>

    <collision>
        <geometry>
            <mesh filename="package://oneusv_urdf/mesh/1kw_ship_right_propeller.stl" scale="0.001 0.001 0.001"/>
        </geometry>
        <origin rpy="0 0 0" xyz="-0.84 0.375 0.598"/>
    </collision>

    <inertial>
        <mass value="1"/>
        <inertia ixx="1" ixy="0.0" ixz="0.0" iyy="1" iyz="0.0" izz="1"/>
    </inertial>
</link>

<joint name="front_antenna_joint" type="fixed">
    <parent link="base_link"/>
    <child link="front_antenna_link"/>
    <origin xyz="-0.7898 0.05 0" rpy="0 0 0"/>
</joint>

<!-- USV front antenna -->
<link name="front_antenna_link">
    <visual>
        <geometry>
            <mesh filename="package://oneusv_urdf/mesh/1kw_ship_antenna_front.stl" scale="0.001 0.001 0.001"/>
        </geometry>
        <origin rpy="0 0 0" xyz="0.5498 -0.05 0.3"/>
        <material name="yellow">
            <color rgba="1 1 0 1"/>
        </material>
    </visual>

    <collision>
        <geometry>
            <mesh filename="package://oneusv_urdf/mesh/1kw_ship_antenna_front.stl" scale="0.001 0.001 0.001"/>
        </geometry>
        <origin rpy="0 0 0" xyz="0.5498 -0.05 0.3"/>
    </collision>

    <inertial>
        <mass value="1"/>
        <inertia ixx="1" ixy="0.0" ixz="0.0" iyy="1" iyz="0.0" izz="1"/>
    </inertial>
</link>

<joint name="back_antenna_joint" type="fixed">
    <parent link="base_link"/>
    <child link="back_antenna_link"/>
    <origin xyz="0.7328 0.05 0" rpy="0 0 0"/>
</joint>

<!-- USV back antenna -->
<link name="back_antenna_link">
    <visual>
        <geometry>
            <mesh filename="package://oneusv_urdf/mesh/1kw_ship_antenna_back.stl" scale="0.001 0.001 0.001"/>
        </geometry>
        <origin rpy="0 0 0" xyz="-0.9728 -0.05 0.3"/>
        <material name="yellow">
            <color rgba="1 1 0 1"/>
        </material>
    </visual>

    <collision>
        <geometry>
            <mesh filename="package://oneusv_urdf/mesh/1kw_ship_antenna_back.stl" scale="0.001 0.001 0.001"/>
        </geometry>
        <origin rpy="0 0 0" xyz="-0.9728 -0.05 0.3"/>
    </collision>

    <inertial>
        <mass value="1"/>
        <inertia ixx="1" ixy="0.0" ixz="0.0" iyy="1" iyz="0.0" izz="1"/>
    </inertial>
</link>

<joint name="left_cam_joint" type="fixed">
    <parent link="base_link"/>
    <child link="left_cam_link"/>
    <origin xyz="-0.812 -0.008 0.05" rpy="0 1.570796 0"/>
</joint>

<!-- USV left cam -->
<link name="left_cam_link">
    <visual>
        <geometry>
            <cylinder length="0.02" radius="0.01"/>
        </geometry>
        <origin rpy="0 0 0" xyz="0 0 0"/>
        <material name="yellow">
            <color rgba="1 1 0 1"/>
        </material>
    </visual>

    <collision>
        <geometry>
            <cylinder length="0.02" radius="0.01"/>
        </geometry>
        <origin rpy="0 0 0" xyz="0 0 0"/>
    </collision>

    <inertial>
        <mass value="1"/>
        <inertia ixx="1" ixy="0.0" ixz="0.0" iyy="1" iyz="0.0" izz="1"/>
    </inertial>
</link>

<joint name="right_cam_joint" type="fixed">
    <parent link="base_link"/>
    <child link="right_cam_link"/>
    <origin xyz="-0.812 -0.008 -0.05" rpy="0 1.570796 0"/>
</joint>

<!-- USV right cam -->
<link name="right_cam_link">
    <visual>
        <geometry>
            <cylinder length="0.02" radius="0.01"/>
        </geometry>
        <origin rpy="0 0 0" xyz="0 0 0"/>
        <material name="yellow">
            <color rgba="1 1 0 1"/>
        </material>
    </visual>

    <collision>
        <geometry>
            <cylinder length="0.02" radius="0.01"/>
        </geometry>
        <origin rpy="0 0 0" xyz="0 0 0"/>
    </collision>

    <inertial>
        <mass value="1"/>
        <inertia ixx="1" ixy="0.0" ixz="0.0" iyy="1" iyz="0.0" izz="1"/>
    </inertial>
</link>

and gazebo xacro and usv_plugin code are here

<?xml version="1.0"?>
<robot name="1kw" xmlns:xacro="http://ros.org/wiki/xacro" >
<xacro:arg name="laser_visual" default="false"/>
<xacro:arg name="imu_visual"   default="false"/>
<xacro:arg name="cam_visual"   default="false"/>

<gazebo reference="base_link">
    <material>Gazebo/Gray</material>
</gazebo>

<gazebo reference="lid_link">
    <material>Gazebo/White</material>
</gazebo>

<gazebo reference="front_antenna_link">
    <material>Gazebo/White</material>
</gazebo>

<gazebo reference="back_antenna_link">
    <material>Gazebo/White</material>
</gazebo>

<gazebo reference="left_cam_link">
    <material>Gazebo/FlatBlack</material>
        <sensor type="camera" name="left_sensor">
        <update_rate>30.0</update_rate>
    <visualize>$(arg cam_visual)</visualize>
        <camera name="left_camera">
            <horizontal_fov>1.3962634</horizontal_fov>
            <image>
                <width>1280</width>
                <height>720</height>
                <format>R8G8B8</format>
            </image>
            <clip>
                <near>0.05</near>
                <far>300</far>
            </clip>
            <noise>
                <type>gaussian</type>
                <!-- Noise is sampled independently per pixel on each frame.
                     That pixel's noise value is added to each of its color
                      channels, which at that point lie in the range [0,1]. -->
                <mean>0.0</mean>
                <stddev>0.007</stddev>
            </noise>
        </camera>
        <plugin name="camera_plugin_left" filename="libgazebo_ros_camera.so">
            <alwaysOn>true</alwaysOn>
            <updateRate>0.0</updateRate>
            <cameraName>left_camera</cameraName>
            <imageTopicName>image_raw_left</imageTopicName>
            <cameraInfoTopicName>camera_info</cameraInfoTopicName>
            <frameName>left_cam_link</frameName>
            <hackBaseline>0.07</hackBaseline>
            <distortionK1>0.0</distortionK1>
            <distortionK2>0.0</distortionK2>
            <distortionK3>0.0</distortionK3>
            <distortionT1>0.0</distortionT1>
            <distortionT2>0.0</distortionT2>
        </plugin>
        </sensor>
</gazebo>

<gazebo reference="right_cam_link">
    <material>Gazebo/FlatBlack</material>
        <sensor type="camera" name="right_sensor">
        <update_rate>30.0</update_rate>
    <visualize>$(arg cam_visual)</visualize>
        <camera name="right_camera">
            <horizontal_fov>1.3962634</horizontal_fov>
            <image>
                <width>1280</width>
                <height>720</height>
                <format>R8G8B8</format>
            </image>
            <clip>
                <near>0.05</near>
                <far>300</far>
            </clip>
            <noise>
                <type>gaussian</type>
                <!-- Noise is sampled independently per pixel on each frame.
                     That pixel's noise value is added to each of its color
                      channels, which at that point lie in the range [0,1]. -->
                <mean>0.0</mean>
                <stddev>0.007</stddev>
            </noise>
        </camera>
        <plugin name="camera_plugin_right" filename="libgazebo_ros_camera.so">
            <alwaysOn>true</alwaysOn>
            <updateRate>0.0</updateRate>
            <cameraName>right_camera</cameraName>
            <imageTopicName>image_raw_right</imageTopicName>
            <cameraInfoTopicName>camera_info</cameraInfoTopicName>
            <frameName>right_cam_link</frameName>
            <hackBaseline>0.07</hackBaseline>
            <distortionK1>0.0</distortionK1>
            <distortionK2>0.0</distortionK2>
            <distortionK3>0.0</distortionK3>
            <distortionT1>0.0</distortionT1>
            <distortionT2>0.0</distortionT2>
        </plugin>
        </sensor> 
</gazebo>

<gazebo reference="imu_link">
    <sensor type="imu" name="imu">
        <always_on>true</always_on>
        <visualize>$(arg imu_visual)</visualize>
    </sensor>
</gazebo>

<gazebo>
    <plugin name="imu_plugin" filename="libgazebo_ros_imu.so">
        <alwaysOn>true</alwaysOn>
        <frameName>imu_link</frameName>
        <bodyName>imu_link</bodyName>
        <topicName>imu</topicName>
        <serviceName>imu_service</serviceName>
        <gaussianNoise>0.0</gaussianNoise>
        <updateRate>10.0</updateRate>
        <imu>
            <noise>
                <type>gaussian</type>
                <rate>
                    <mean>0.0</mean>
                    <stddev>2e-4</stddev>
                    <bias_mean>0.0000075</bias_mean>
                    <bias_stddev>0.0000008</bias_stddev>
                </rate>
                <accel>
                    <mean>0.0</mean>
                    <stddev>1.7e-2</stddev>
                    <bias_mean>0.1</bias_mean>
                    <bias_stddev>0.001</bias_stddev>
                </accel>
            </noise>
        </imu>
    </plugin>
</gazebo>

<gazebo reference="lidar_link">
    <material>Gazebo/Blue</material>
    <sensor type="gpu_ray" name="3d_lidar_sensor">
        <update_rate>10</update_rate>
        <ray>
            <scan>
                <horizontal>
                    <samples>18750</samples>
                    <resolution>0.1</resolution>
                    <min_angle>-3.141592</min_angle>
                    <max_angle>3.141592</max_angle>
                </horizontal>
                <vertical>
                    <samples>16</samples>
                    <resolution>1</resolution>
                    <min_angle>-3.141592/12</min_angle>
                    <max_angle>3.141592/12</max_angle>
                </vertical>
            </scan>
            <range>
                <min>0.1</min>
                <max>130</max>
            </range>
            <noise>
                <type>gaussian</type>
                <mean>0.0</mean>
                <stddev>0.01</stddev>
            </noise>
        </ray>
        <plugin name="3d_lidar_plugin" filename="libgazebo_ros_velodyne_gpu_laser.so">
            <topicName>velodyne_lidar</topicName>
            <frameName>lidar_link</frameName>
            <min_intensity>0</min_intensity>
        </plugin>
    </sensor>     
</gazebo>

<gazebo>
    <plugin name="object_controller" filename="libgazebo_ros_planar_move.so">
        <commandTopic>cmd_vel</commandTopic>
        <odometryTopic>odom</odometryTopic>
        <odometryFrame>odom</odometryFrame>
        <odometryRate>1.0</odometryRate>
        <robotBaseFrame>base_link</robotBaseFrame>
    </plugin>

<?xml version="1.0"?>
 <robot xmlns:xacro="http://ros.org/wiki/xacro">
 <xacro:macro name="usv_dynamics_gazebo" params="name width:=0.09 length:=1.5">
<!--Gazebo Plugin for simulating WAM-V dynamics-->
<gazebo>
  <plugin name="usv_dynamics_1kw" filename="libusv_gazebo_dynamics_plugin.so">
    <bodyName>base_footprint</bodyName>
    <!-- Must be same as the ocean model!-->
    <waterLevel>0</waterLevel>
    <waterDensity>997.8</waterDensity>
    <!-- Added mass -->
    <xDotU>0.0</xDotU>
    <yDotV>0.0</yDotV>
    <nDotR>0.0</nDotR>
    <!-- Linear and quadratic drag -->
    <xU>100</xU>
    <xUU>100</xUU>
    <yV>80.0</yV>
    <yVV>0.0</yVV>
    <zW>500.0</zW>
    <kP>50.0</kP>
    <mQ>50.0</mQ>
    <nR>400.0</nR>
    <nRR>0.0</nRR>
    <!-- General dimensions -->
    <!--<boatArea>2.2</boatArea>-->
    <hullRadius>0.213</hullRadius>
    <boatWidth>${width}</boatWidth>
    <boatLength>${length}</boatLength>
    <!-- Length discretization, AKA, "N" -->
    <length_n>2</length_n>
    <!-- Wave model -->
    <wave_model>ocean_waves</wave_model>
  </plugin>
</gazebo>

/xacro:macro

Asked by asdasd1 on 2022-11-27 23:07:27 UTC

Comments

Answers