Gazebo | Ignition | Community
Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

Fixed joint vs Continuous joint

I'm using Gazebo 9.7.0.

I'm adding a bumper sensor to my robot, and it appears different in Gazebo editor.

When the joint to the chassis is fixed:

image description

It seems that the gripper, the yellow box, it is part of the chassis, the blue rectangle.

And, when the joint is continuous: image description

The gripper appears as a link in the editor.

Which is the best type of joint to a contact sensor?

Maybe, it would be better to set the sensor in the chassis.

Fixed joint vs Continuous joint

I'm using Gazebo 9.7.0.

I'm adding a bumper sensor to my robot, and it appears different in Gazebo editor.

When the joint to the chassis is fixed:

image description

It seems that the gripper, the yellow box, it is part of the chassis, the blue rectangle.

And, when the joint is continuous: image description

The gripper appears as a link in the editor.

Which is the best type of joint to a contact sensor?

Maybe, it would be better to set the sensor in the chassis.

And also, if I add a libgazebo_ros_bumper.so plugin, the topic appears as part of the chassis if the joint is fixed:

/gazebo/odom_world/mybot/base_link/bumper_contact_sensor

Fixed joint vs Continuous joint

I'm using Gazebo 9.7.0.

I'm adding a bumper sensor to my robot, and it appears different in Gazebo editor.

When the joint to the chassis is fixed:

image description

It seems that the gripper, the yellow box, it is part of the chassis, the blue rectangle.

And, when the joint is continuous: image description

The gripper appears as a link in the editor.

Which is the best type of joint to a contact sensor?

Maybe, it would be better to set the sensor in the chassis.

And also, if I add a libgazebo_ros_bumper.so plugin, the topic appears as part of the chassis if the joint is fixed:

/gazebo/odom_world/mybot/base_link/bumper_contact_sensor

The joint is named sensor_joint, and the SDF generated from an URDF Xacro file is:

<?xml version="1.0" encoding="utf-8"?>
<!-- =================================================================================== -->
<!-- |    This document was autogenerated by xacro from nav_odom_description/urdf/mybot.xacro | -->
<!-- |    EDITING THIS FILE BY HAND IS NOT RECOMMENDED                                 | -->
<!-- =================================================================================== -->
<robot name="mybot" xmlns:xacro="http://www.ros.org/wiki/xacro">
  <!-- If a <gazebo> element is used without a reference="" property, it is
       assumed the <gazebo> element is for the whole robot model. -->
  <gazebo>
    <plugin filename="libgazebo_ros_control.so" name="gazebo_ros_control">
      <robotNamespace>/mybot</robotNamespace>
    </plugin>
  </gazebo>
  <gazebo reference="chassis">
    <material>Gazebo/Blue</material>
  </gazebo>
  <gazebo reference="caster_wheel">
    <preserveFixedJoint>true</preserveFixedJoint>
    <mu1>0.0</mu1>
    <!-- Equals to zero to remove the friction. -->
    <mu2>0.0</mu2>
    <!-- Equals to zero to remove the friction. -->
    <material>Gazebo/Red</material>
  </gazebo>
  <!-- BUMPER -->
  <gazebo reference="gripper">
    <preserveFixedJoint>true</preserveFixedJoint>
    <material>Gazebo/Yellow</material>
    <sensor name="bumper_contact_sensor" type="contact">
      <always_on>true</always_on>
      <update_rate>30.0</update_rate>
      <contact>
        <collision>gripper_collision_collision</collision>
      </contact>
      <plugin filename="libgazebo_ros_bumper.so" name="gripper_bumper">
        <bumperTopicName>gripper_contact_sensor_state</bumperTopicName>
        <frameName>gripper</frameName>
      </plugin>
    </sensor>
  </gazebo>
  <material name="black">
    <color rgba="0.0 0.0 0.0 1.0"/>
  </material>
  <material name="blue">
    <color rgba="0.0 0.0 0.8 1.0"/>
  </material>
  <material name="green">
    <color rgba="0.0 0.8 0.0 1.0"/>
  </material>
  <material name="grey">
    <color rgba="0.2 0.2 0.2 1.0"/>
  </material>
  <material name="orange">
    <color rgba="1.0 0.423529411765 0.0392156862745 1.0"/>
  </material>
  <material name="brown">
    <color rgba="0.870588235294 0.811764705882 0.764705882353 1.0"/>
  </material>
  <material name="red">
    <color rgba="0.8 0.0 0.0 1.0"/>
  </material>
  <material name="white">
    <color rgba="1.0 1.0 1.0 1.0"/>
  </material>
  <!-- CYLINDER INERTIA -->
  <!-- BOX INERTIA -->
  <!-- SPHERE INERTIA -->
  <!-- WHEEL MACRO -->
  <link name="base_link"/>
  <joint name="base_joint" type="fixed">
    <parent link="base_link"/>
    <child link="chassis"/>
  </joint>
  <!-- CHASSIS -->
  <link name="chassis">
    <collision>
      <origin rpy="0 0 0" xyz="0 0 0.1"/>
      <geometry>
        <box size="0.4 0.2 0.1"/>
      </geometry>
    </collision>
    <visual>
      <origin rpy="0 0 0" xyz="0 0 0.1"/>
      <geometry>
        <box size="0.4 0.2 0.1"/>
      </geometry>
      <material name="orange"/>
    </visual>
    <inertial>
      <origin rpy="0 0 0" xyz="0 0 0.1"/>
      <mass value="50.0"/>
      <inertia ixx="0.208333333333" ixy="0" ixz="0" iyy="0.708333333333" iyz="0" izz="0.708333333333"/>
    </inertial>
  </link>
  <!-- CASTER WHEEL -->
  <joint name="caster_joint" type="fixed">
    <parent link="chassis"/>
    <child link="caster_wheel"/>
  </joint>
  <link name="caster_wheel">
    <collision>
      <origin rpy="0 0 0" xyz="-0.15 0 0.05"/>
      <geometry>
        <sphere radius="0.05"/>
      </geometry>
    </collision>
    <visual>
      <origin rpy="0 0 0" xyz="-0.15 0 0.05"/>
      <geometry>
        <sphere radius="0.05"/>
      </geometry>
    </visual>
    <inertial>
      <origin rpy="0 0 0" xyz="-0.15 0 0.05"/>
      <mass value="5"/>
      <inertia ixx="0.005" ixy="0" ixz="0" iyy="0.005" iyz="0" izz="0.005"/>
    </inertial>
  </link>
  <!-- BUMPER SENSOR -->
  <joint name="sensor_joint" type="fixed">
    <parent link="chassis"/>
    <child link="gripper"/>
  </joint>
  <link name="gripper">
    <collision name="gripper_collision">
      <origin rpy="0 0 0" xyz="0.2 0 0.2"/>
      <geometry>
        <box size="0.05 0.05 0.05"/>
      </geometry>
    </collision>
    <visual>
      <origin rpy="0 0 0" xyz="0.225 0 0.1"/>
      <geometry>
        <box size="0.05 0.05 0.05"/>
      </geometry>
      <material name="blue"/>
    </visual>
    <inertial>
      <mass value="0.1"/>
      <origin rpy="0 0 0" xyz="0 0 0"/>
      <inertia ixx="4.16666666667e-05" ixy="0" ixz="0" iyy="4.16666666667e-05" iyz="0" izz="4.16666666667e-05"/>
    </inertial>
  </link>
  <link name="left_wheel">
    <collision>
      <origin rpy="0 1.57079632679 1.57079632679" xyz="0 0 0"/>
      <geometry>
        <cylinder length="0.05" radius="0.1"/>
      </geometry>
    </collision>
    <visual>
      <origin rpy="0 1.57079632679 1.57079632679" xyz="0 0 0"/>
      <geometry>
        <cylinder length="0.05" radius="0.1"/>
      </geometry>
      <material name="black"/>
    </visual>
    <inertial>
      <origin rpy="0 1.57079632679 1.57079632679" xyz="0 0 0"/>
      <mass value="5"/>
      <inertia ixx="0.0135416666667" ixy="0" ixz="0" iyy="0.0135416666667" iyz="0" izz="0.025"/>
    </inertial>
  </link>

  <gazebo reference="left_wheel">
    <mu1 value="1.0"/>
    <mu2 value="1.0"/>
    <kp value="10000000.0"/>
    <kd value="1.0"/>
    <fdir1 value="1 0 0"/>
    <material>Gazebo/Black</material>
  </gazebo>
  <joint name="left_wheel_hinge" type="continuous">
    <parent link="chassis"/>
    <child link="left_wheel"/>
    <origin rpy="0 0 0" xyz="0.0 0.125 0.1"/>
    <axis rpy="0 0 0" xyz="0 1 0"/>
    <limit effort="100" velocity="100"/>
    <joint_properties damping="0.0" friction="0.0"/>
  </joint>
  <!-- Transmission is important to link the joints and the controller -->
  <transmission name="left_trans">
    <type>transmission_interface/SimpleTransmission</type>
    <joint name="left_wheel_hinge">
      <hardwareInterface>hardware_interface/EffortJointInterface</hardwareInterface>
    </joint>
    <actuator name="leftMotor">
      <hardwareInterface>hardware_interface/EffortJointInterface</hardwareInterface>
      <mechanicalReduction>10</mechanicalReduction>
    </actuator>
  </transmission>
  <link name="right_wheel">
    <collision>
      <origin rpy="0 1.57079632679 1.57079632679" xyz="0 0 0"/>
      <geometry>
        <cylinder length="0.05" radius="0.1"/>
      </geometry>
    </collision>
    <visual>
      <origin rpy="0 1.57079632679 1.57079632679" xyz="0 0 0"/>
      <geometry>
        <cylinder length="0.05" radius="0.1"/>
      </geometry>
      <material name="black"/>
    </visual>
    <inertial>
      <origin rpy="0 1.57079632679 1.57079632679" xyz="0 0 0"/>
      <mass value="5"/>
      <inertia ixx="0.0135416666667" ixy="0" ixz="0" iyy="0.0135416666667" iyz="0" izz="0.025"/>
    </inertial>
  </link>

  <gazebo reference="right_wheel">
    <mu1 value="1.0"/>
    <mu2 value="1.0"/>
    <kp value="10000000.0"/>
    <kd value="1.0"/>
    <fdir1 value="1 0 0"/>
    <material>Gazebo/Black</material>
  </gazebo>
  <joint name="right_wheel_hinge" type="continuous">
    <parent link="chassis"/>
    <child link="right_wheel"/>
    <origin rpy="0 0 0" xyz="0.0 -0.125 0.1"/>
    <axis rpy="0 0 0" xyz="0 1 0"/>
    <limit effort="100" velocity="100"/>
    <joint_properties damping="0.0" friction="0.0"/>
  </joint>
  <!-- Transmission is important to link the joints and the controller -->
  <transmission name="right_trans">
    <type>transmission_interface/SimpleTransmission</type>
    <joint name="right_wheel_hinge">
      <hardwareInterface>hardware_interface/EffortJointInterface</hardwareInterface>
    </joint>
    <actuator name="rightMotor">
      <hardwareInterface>hardware_interface/EffortJointInterface</hardwareInterface>
      <mechanicalReduction>10</mechanicalReduction>
    </actuator>
  </transmission>
</robot>

Fixed joint vs Continuous joint

I'm using Gazebo 9.7.0.

I'm adding a bumper sensor to my robot, and it appears different in Gazebo editor.

When the joint to the chassis is fixed:

image description

It seems that the gripper, the yellow box, it is part of the chassis, the blue rectangle.

And, when the joint is continuous: image description

The gripper appears as a link in the editor.

Which is the best type of joint to a contact sensor?

Maybe, it would be better to set the sensor in the chassis.

And also, if I add a libgazebo_ros_bumper.so plugin, the topic appears as part of the chassis if the joint is fixed:

/gazebo/odom_world/mybot/base_link/bumper_contact_sensor

The joint is named sensor_joint, and the SDF generated from an URDF Xacro file is:

<?xml version="1.0" encoding="utf-8"?>
<!-- =================================================================================== -->
<!-- |    This document was autogenerated by xacro from nav_odom_description/urdf/mybot.xacro | -->
<!-- |    EDITING THIS FILE BY HAND IS NOT RECOMMENDED                                 | -->
<!-- =================================================================================== -->
<robot name="mybot" xmlns:xacro="http://www.ros.org/wiki/xacro">
  <!-- If a <gazebo> element is used without a reference="" property, it is
       assumed the <gazebo> element is for the whole robot model. -->
  <gazebo>
    <plugin filename="libgazebo_ros_control.so" name="gazebo_ros_control">
      <robotNamespace>/mybot</robotNamespace>
    </plugin>
  </gazebo>
  <gazebo reference="chassis">
    <material>Gazebo/Blue</material>
  </gazebo>
  <gazebo reference="caster_wheel">
    <preserveFixedJoint>true</preserveFixedJoint>
    <mu1>0.0</mu1>
    <!-- Equals to zero to remove the friction. -->
    <mu2>0.0</mu2>
    <!-- Equals to zero to remove the friction. -->
    <material>Gazebo/Red</material>
  </gazebo>
  <!-- BUMPER -->
  <gazebo reference="gripper">
    <preserveFixedJoint>true</preserveFixedJoint>
    <material>Gazebo/Yellow</material>
    <sensor name="bumper_contact_sensor" type="contact">
      <always_on>true</always_on>
      <update_rate>30.0</update_rate>
      <contact>
        <collision>gripper_collision_collision</collision>
      </contact>
      <plugin filename="libgazebo_ros_bumper.so" name="gripper_bumper">
        <bumperTopicName>gripper_contact_sensor_state</bumperTopicName>
        <frameName>gripper</frameName>
      </plugin>
    </sensor>
  </gazebo>
  <material name="black">
    <color rgba="0.0 0.0 0.0 1.0"/>
  </material>
  <material name="blue">
    <color rgba="0.0 0.0 0.8 1.0"/>
  </material>
  <material name="green">
    <color rgba="0.0 0.8 0.0 1.0"/>
  </material>
  <material name="grey">
    <color rgba="0.2 0.2 0.2 1.0"/>
  </material>
  <material name="orange">
    <color rgba="1.0 0.423529411765 0.0392156862745 1.0"/>
  </material>
  <material name="brown">
    <color rgba="0.870588235294 0.811764705882 0.764705882353 1.0"/>
  </material>
  <material name="red">
    <color rgba="0.8 0.0 0.0 1.0"/>
  </material>
  <material name="white">
    <color rgba="1.0 1.0 1.0 1.0"/>
  </material>
  <!-- CYLINDER INERTIA -->
  <!-- BOX INERTIA -->
  <!-- SPHERE INERTIA -->
  <!-- WHEEL MACRO -->
  <link name="base_link"/>
  <joint name="base_joint" type="fixed">
    <parent link="base_link"/>
    <child link="chassis"/>
  </joint>
  <!-- CHASSIS -->
  <link name="chassis">
    <collision>
      <origin rpy="0 0 0" xyz="0 0 0.1"/>
      <geometry>
        <box size="0.4 0.2 0.1"/>
      </geometry>
    </collision>
    <visual>
      <origin rpy="0 0 0" xyz="0 0 0.1"/>
      <geometry>
        <box size="0.4 0.2 0.1"/>
      </geometry>
      <material name="orange"/>
    </visual>
    <inertial>
      <origin rpy="0 0 0" xyz="0 0 0.1"/>
      <mass value="50.0"/>
      <inertia ixx="0.208333333333" ixy="0" ixz="0" iyy="0.708333333333" iyz="0" izz="0.708333333333"/>
    </inertial>
  </link>
  <!-- CASTER WHEEL -->
  <joint name="caster_joint" type="fixed">
    <parent link="chassis"/>
    <child link="caster_wheel"/>
  </joint>
  <link name="caster_wheel">
    <collision>
      <origin rpy="0 0 0" xyz="-0.15 0 0.05"/>
      <geometry>
        <sphere radius="0.05"/>
      </geometry>
    </collision>
    <visual>
      <origin rpy="0 0 0" xyz="-0.15 0 0.05"/>
      <geometry>
        <sphere radius="0.05"/>
      </geometry>
    </visual>
    <inertial>
      <origin rpy="0 0 0" xyz="-0.15 0 0.05"/>
      <mass value="5"/>
      <inertia ixx="0.005" ixy="0" ixz="0" iyy="0.005" iyz="0" izz="0.005"/>
    </inertial>
  </link>
  <!-- BUMPER SENSOR -->
  <joint name="sensor_joint" type="fixed">
    <parent link="chassis"/>
    <child link="gripper"/>
  </joint>
  <link name="gripper">
    <collision name="gripper_collision">
      <origin rpy="0 0 0" xyz="0.2 0 0.2"/>
      <geometry>
        <box size="0.05 0.05 0.05"/>
      </geometry>
    </collision>
    <visual>
      <origin rpy="0 0 0" xyz="0.225 0 0.1"/>
      <geometry>
        <box size="0.05 0.05 0.05"/>
      </geometry>
      <material name="blue"/>
    </visual>
    <inertial>
      <mass value="0.1"/>
      <origin rpy="0 0 0" xyz="0 0 0"/>
      <inertia ixx="4.16666666667e-05" ixy="0" ixz="0" iyy="4.16666666667e-05" iyz="0" izz="4.16666666667e-05"/>
    </inertial>
  </link>
  <link name="left_wheel">
    <collision>
      <origin rpy="0 1.57079632679 1.57079632679" xyz="0 0 0"/>
      <geometry>
        <cylinder length="0.05" radius="0.1"/>
      </geometry>
    </collision>
    <visual>
      <origin rpy="0 1.57079632679 1.57079632679" xyz="0 0 0"/>
      <geometry>
        <cylinder length="0.05" radius="0.1"/>
      </geometry>
      <material name="black"/>
    </visual>
    <inertial>
      <origin rpy="0 1.57079632679 1.57079632679" xyz="0 0 0"/>
      <mass value="5"/>
      <inertia ixx="0.0135416666667" ixy="0" ixz="0" iyy="0.0135416666667" iyz="0" izz="0.025"/>
    </inertial>
  </link>

  <gazebo reference="left_wheel">
    <mu1 value="1.0"/>
    <mu2 value="1.0"/>
    <kp value="10000000.0"/>
    <kd value="1.0"/>
    <fdir1 value="1 0 0"/>
    <material>Gazebo/Black</material>
  </gazebo>
  <joint name="left_wheel_hinge" type="continuous">
    <parent link="chassis"/>
    <child link="left_wheel"/>
    <origin rpy="0 0 0" xyz="0.0 0.125 0.1"/>
    <axis rpy="0 0 0" xyz="0 1 0"/>
    <limit effort="100" velocity="100"/>
    <joint_properties damping="0.0" friction="0.0"/>
  </joint>
  <!-- Transmission is important to link the joints and the controller -->
  <transmission name="left_trans">
    <type>transmission_interface/SimpleTransmission</type>
    <joint name="left_wheel_hinge">
      <hardwareInterface>hardware_interface/EffortJointInterface</hardwareInterface>
    </joint>
    <actuator name="leftMotor">
      <hardwareInterface>hardware_interface/EffortJointInterface</hardwareInterface>
      <mechanicalReduction>10</mechanicalReduction>
    </actuator>
  </transmission>
  <link name="right_wheel">
    <collision>
      <origin rpy="0 1.57079632679 1.57079632679" xyz="0 0 0"/>
      <geometry>
        <cylinder length="0.05" radius="0.1"/>
      </geometry>
    </collision>
    <visual>
      <origin rpy="0 1.57079632679 1.57079632679" xyz="0 0 0"/>
      <geometry>
        <cylinder length="0.05" radius="0.1"/>
      </geometry>
      <material name="black"/>
    </visual>
    <inertial>
      <origin rpy="0 1.57079632679 1.57079632679" xyz="0 0 0"/>
      <mass value="5"/>
      <inertia ixx="0.0135416666667" ixy="0" ixz="0" iyy="0.0135416666667" iyz="0" izz="0.025"/>
    </inertial>
  </link>

  <gazebo reference="right_wheel">
    <mu1 value="1.0"/>
    <mu2 value="1.0"/>
    <kp value="10000000.0"/>
    <kd value="1.0"/>
    <fdir1 value="1 0 0"/>
    <material>Gazebo/Black</material>
  </gazebo>
  <joint name="right_wheel_hinge" type="continuous">
    <parent link="chassis"/>
    <child link="right_wheel"/>
    <origin rpy="0 0 0" xyz="0.0 -0.125 0.1"/>
    <axis rpy="0 0 0" xyz="0 1 0"/>
    <limit effort="100" velocity="100"/>
    <joint_properties damping="0.0" friction="0.0"/>
  </joint>
  <!-- Transmission is important to link the joints and the controller -->
  <transmission name="right_trans">
    <type>transmission_interface/SimpleTransmission</type>
    <joint name="right_wheel_hinge">
      <hardwareInterface>hardware_interface/EffortJointInterface</hardwareInterface>
    </joint>
    <actuator name="rightMotor">
      <hardwareInterface>hardware_interface/EffortJointInterface</hardwareInterface>
      <mechanicalReduction>10</mechanicalReduction>
    </actuator>
  </transmission>
</robot>