Gazebo | Ignition | Community
Ask Your Question
1

Why does my robot shake / wobble?

asked 2017-07-12 04:16:05 -0500

Panda1638 gravatar image

Dear Gazebo community,

I am having a problem with the simulation of a ABB IRB2400 robot in Gazebo. After sending a command to a controller of any link the robot model starts to misbehave.

I took the IRB2400 model from here: https://github.com/culletom/abb_dev/t...

When I use the EffortJointInterface with a controller for every joint the model starts spinning out of control as shown.

gif of misbehaving robot

Since I wanted to use MoveIt! I changed the EffortJointInterface to PositionJointInterface and the controller to a JointTrajectoryController. Sending a command now makes the model shake a little bit (shown in the following gif). I don't know where this comes from. Is this the fault of the controllers or is the model decription incorrect? Or is this even a problem with gazebo?

gif of misbehaving robot

Turning the gravity on lets the models shake right from the beginning. I guess that the problem is the controller. Is there a way to manipulate the way the position controller works? If i understood correctly you can't set PID parameters for a position controller. I tried to give PID parameters anyways but that don't seem to have any effect.

I am using Ubuntu 14.04, Gazebo 2.2 and ROS Indigo. Any ideas or hints are much appreciated.

My Controller YAML:

    # Publish all joint states -----------------------------------
joint_state_controller:
  type: joint_state_controller/JointStateController
  publish_rate: 50  

# Controlls the given joints 
arm_controller:
  type: position_controllers/JointTrajectoryController
  joints:
     - joint_1
     - joint_2
     - joint_3
     - joint_4
     - joint_5
     - joint_6
  constraints:
     goal_time: 0.6
     stopped_velocity_tolerance: 0.05
     joint_1: {trajectory: 0.1, goal: 0.1}
     joint_2: {trajectory: 0.1, goal: 0.1}
     joint_3: {trajectory: 0.1, goal: 0.1}
     joint_4: {trajectory: 0.1, goal: 0.1}
     joint_5: {trajectory: 0.1, goal: 0.1}
     joint_6: {trajectory: 0.1, goal: 0.1}
  gains: # Required because we're controlling an effort interface
     joint_1: {p: 1000,  d: 0, i: 0, i_clamp: 1}
     joint_2: {p: 1000,  d: 0, i: 0, i_clamp: 1}
     joint_3: {p: 1000,  d: 0, i: 0, i_clamp: 1}
     joint_4: {p: 1000,  d: 0, i: 0, i_clamp: 1}
     joint_5: {p: 1000,  d: 0, i: 0, i_clamp: 1}
     joint_6: {p: 1000,  d: 0, i: 0, i_clamp: 1}
  stop_trajectory_duration: 0.5
  state_publish_rate:  25
  action_monitor_rate: 10

The URDF

<!-- =================================================================================== -->
<!-- |    This document was autogenerated by xacro from /home/richard/catkin_ws/src/abb_dev/abb_irb2400_gazebo/urdf/irb2400.xacro | -->
<!-- |    EDITING THIS FILE BY HAND IS NOT RECOMMENDED                                 | -->
<!-- =================================================================================== -->
<robot name="abb_irb2400" xmlns:xacro="http://www.ros.org/wiki/xacro">
  <!--  <gazebo>
        <static>false</static>
    </gazebo> -->
  <!-- ros_control plugin -->
  <gazebo>
    <plugin filename="libgazebo_ros_control.so" name="gazebo_ros_control">
      <!-- <robotNamespace>/abb_irb2400</robotNamespace> -->
      <robotNamespace>/</robotNamespace>
      <robotSimType>gazebo_ros_control/DefaultRobotHWSim</robotSimType>
    </plugin>
  </gazebo>
  <gazebo reference="base_link">
    <material>Gazebo/Orange</material>
    <turnGravityOff>true</turnGravityOff>
    <!-- org: true -->
  </gazebo>
  <gazebo reference="link_1">
    <material>Gazebo/Orange</material>
    <turnGravityOff>true</turnGravityOff>
    <mu1>0.0</mu1>
    <!-- org: 0.2 -->
    <mu2>0.0</mu2>
    <!-- org: 0.2 -->
  </gazebo>
  <gazebo reference="link_2">
    <material>Gazebo/Orange</material>
    <turnGravityOff>true</turnGravityOff>
    <mu1>0.0</mu1>
    <mu2>0.0</mu2>
  </gazebo>
  <gazebo reference="link_3">
    <material>Gazebo/Orange</material>
    <turnGravityOff>true</turnGravityOff>
    <mu1>0.0</mu1>
    <mu2>0.0</mu2>
  </gazebo>
  <gazebo reference="link_4">
    <material ...
(more)
edit retag flag offensive close merge delete

1 Answer

Sort by ยป oldest newest most voted
1

answered 2017-07-12 10:14:29 -0500

nkoenig gravatar image

Shaking can be caused by bad model parameters (joint constraints, damping, etc), bad physics parameters (large step size for example), bad controllers (high torque values for example), or combinations of the three.

I would recommend narrowing down the possibilities. For example, you can disable controllers an check your model parameters.

I also recommend switching to gazebo 7 or gazebo 8. Gazebo 2.2 is very old, and many issues in Gazebo have been resolved since its release.

edit flag offensive delete link more

Comments

Thanks for your answer. Also i came across a solution yesterday. The shaking stopped after lowering the mass of the links to a unrealistic small number (to one). I tried everything else in advance. The way the robot shaked made me think it was unintentional behavior. Is there a way i can tune the position controllers inside of gazebo so i can work with realistic mass values? I will try the effort controllers now and see if the robot will not be totally messed up.

Panda1638 gravatar imagePanda1638 ( 2017-07-13 02:18:23 -0500 )edit

Is there any way to do this automatically, it is tiring and frustrating to see this behavior. I am using the braccio arm and trying to tune PID and friction and damping is very frustrating. Can we disable the Physics engine acting on the robot model somehow and get the arm movements to work by rostopic pub or something?

dpak.shimpo gravatar imagedpak.shimpo ( 2018-03-23 00:06:55 -0500 )edit

Could this shaking also be a result of joint_states receiving states from multiple places?

matthewmarkey gravatar imagematthewmarkey ( 2020-05-20 14:54:14 -0500 )edit

Question Tools

2 followers

Stats

Asked: 2017-07-12 04:16:05 -0500

Seen: 11,561 times

Last updated: Jul 12 '17