Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Robot's joints break on Gazebo #19

Closed
skhbk opened this issue Nov 18, 2022 · 25 comments
Closed

Robot's joints break on Gazebo #19

skhbk opened this issue Nov 18, 2022 · 25 comments

Comments

@skhbk
Copy link

skhbk commented Nov 18, 2022

My Environment

  • Ubuntu 22.04.1
  • ROS 2 Humble desktop install

Description

When I start simulation by using ros2 launch ur_simulation_gazebo ur_sim_control.launch.py, the robot's joints break as in this image:
default_gzclient_camera(1)-2022-11-18T18_07_23 988005

To clarify this phenomenon, I changed the initial joint positions as follows:

shoulder_pan_joint: 0.0
shoulder_lift_joint: -1.4
elbow_joint: 2.2
wrist_1_joint: -2.37
wrist_2_joint: -1.57
wrist_3_joint: 0.0

If the controller is not activated, this does not happen (the robot just lies down).

My Attempts

Turning off gravity

I added turnGravityOff tag for each link in the URDF description:

<gazebo reference="shoulder_link">
    <turnGravityOff>true</turnGravityOff>
</gazebo>

Then the robot looks fine, but it may behave the same for external forces other than gravity.

Increasing damping and friction

Increasing the values of damping and friction for each joint in URDF made the robot stable, but the joints still shift a little.

<dynamics damping="1" friction="1"/>

Adding CFM and ERP

I didn't see the effect of this.

<gazebo reference="shoulder_pan_joint">
    <implicitSpringDamper>true</implicitSpringDamper>
    <stopCfm>0</stopCfm>
    <stopErp>0.2</stopErp>
</gazebo>
@fmauch
Copy link
Collaborator

fmauch commented Nov 24, 2022

Thanks for reporting this. This package is still in a rather early stage (hence it is not released as binary form) and we currently don't have many resources available to work on this, I'm afraid.

@skhbk
Copy link
Author

skhbk commented Nov 25, 2022

Thanks for your response.
Is this problem specific to my environment?

@danzimmerman
Copy link

danzimmerman commented Dec 9, 2022

Thanks for reporting this. This package is still in a rather early stage (hence it is not released as binary form) and we currently don't have many resources available to work on this, I'm afraid.

Are this package and the Ignition sim package in a similar state?

Thanks for your response.
Is this problem specific to my environment?

No, I'm seeing something similar on Rolling. The robot is actually undergoing slow relaxation oscillations in the relative joint poses in my case, but unfortunately my Gazebo video capture also isn't working 😅

(Edit: the oscillations and breaking joints happen for me in the all-zeros starting posture if I turn on a little bit of x-direction gravity)

@skhbk
Copy link
Author

skhbk commented Dec 12, 2022

Thanks, @danzimmerman.
I captured a video with all-zeros posture and some x-direction gravity.

breaking_joints.mp4

@danzimmerman
Copy link

I captured a video with all-zeros posture and some x-direction gravity.

Yes, very similar to what I'm seeing. If I figure anything out about workarounds/fixes, I'll post here and/or make a PR.

@relffok
Copy link
Contributor

relffok commented Mar 20, 2023

Yes, very similar to what I'm seeing. If I figure anything out about workarounds/fixes, I'll post here and/or make a PR.

I'm experiencing the same issue on humble (galactic was fine).
Feel free to document your process, maybe we can figure it out together!

@danzimmerman
Copy link

galactic was fine

That's interesting.

Will definitely document what I find if I find anything. I just got back to working on this.

@danzimmerman
Copy link

Can confirm it works fine on Galactic. (Ubuntu 20.04 native install)

https://www.youtube.com/watch?v=wRaylxmKC4w

@danzimmerman
Copy link

These issues seem similar, several different suggestions there.

ros-controls/gazebo_ros2_control#73
ros-controls/gazebo_ros2_control#54

@danzimmerman
Copy link

danzimmerman commented Mar 22, 2023

@relffok Among other discussion of the Gazebo fmax parameter, I found this comment from a while back (I added the bold emphasis):

@JaehyunShim Here is my comments ros-controls/gazebo_ros2_control#44 (comment). There are several ways to workaround it. Currently, I created an additional gazebo plugin to help calling SetParam("fmax", 0, ) inside the Load() function, so that when joint_limit_interface is ready, I can simply remove my own plugin. You can also modify the gazebo_ros2_control to add in your own fix.

It seems like there's something similar in gazebo_ros_control for Noetic here where the joint's fmax is set to the joint's effort limit:

{
  // joint->SetParam("fmax") must be called if joint->SetAngle() or joint->SetParam("vel") are
  // going to be called. joint->SetParam("fmax") must *not* be called if joint->SetForce() is
  // going to be called.
#if GAZEBO_MAJOR_VERSION > 2
  joint->SetParam("fmax", 0, joint_effort_limits_[j]);
#else
  joint->SetMaxForce(0, joint_effort_limits_[j]);
#endif
}

Workaround Comparison

I forked and modified gazebo_ros2_control implementation of GazeboSystem::registerJoints(...) here and set a random large limit:

  // At first we do a test with an arbitrary force limit of 1e6
  this->dataPtr->sim_joints_[j]->SetParam("fmax", 0, 1000000.0);

To get the robot to move, I'm using

ros2 launch ur_robot_driver test_joint_trajectory_controller.launch.py

As-Is ❌

On the as-is humble branch of gazebo_ros2_control, the robot is badly broken:

https://youtu.be/4MPdITYEl54

Workaround ✅

On my dz/humble-fmax-test branch, the robot seems to work fine:

https://youtu.be/Gdoyjp_Gego

Next Steps

According to this comment, this comment and the Noetic code in ROS 1 gazebo_ros_control above, this is something that should be handled with the joint limits interface.

So I need to look into ros2_control/joint_limits_interface to see what's going on there.

I don't think I have access to joint limit data where I hacked it in to gazebo_ros2_control.

Also worth noting is this joint friction/damping plus use_sim_time workaround suggested by @shonigmann here, however my galactic installation has a mix of use_sim_time settings on the nodes, as far as I can tell has zero damping or friction specified in the joints (retrieved with gz model --model-name ur --info) and that works fine.

@danzimmerman
Copy link

danzimmerman commented Mar 23, 2023

Another observation:

When I set fmax from the code, the joints' friction parameters change to the value I set.

In gazebo_ros2_control/src/gazebo_system.cpp:

this->dataPtr->sim_joints_[j]->SetParam("fmax", 0, 867530.9);

In the description retrieved with gz model --model-name ur --info:

joint {
  name: "ur::shoulder_pan_joint"
  id: 47
  angle: 0.0059931542239271
  type: REVOLUTE
  parent: "ur::base_link"
  parent_id: 11
  child: "ur::shoulder_link"
  child_id: 16
  pose {
    position {
      x: 0
      y: 0
      z: 0
    }
    orientation {
      x: 0
      y: 0
      z: 0
      w: 1
    }
  }
  axis1 {
    xyz {
      x: 0
      y: 0
      z: 1
    }
    limit_lower: -6.28319
    limit_upper: 6.28319
    limit_effort: 150
    limit_velocity: 3.14159
    damping: 0
    friction: 867530.9                       <---------- Set from code by setting fmax
    use_parent_model_frame: false
    xyz_expressed_in: ""
  }
}

There's a Gazebo Answers post suggesting they need to be set together:

https://answers.gazebosim.org/question/19635/modfy-a-joints-friction-value-deuring-exacution/?answer=19758#post-id-19758

There's an archived Bitbucket PR for Gazebo discussing this a bit:

https://osrf-migration.github.io/gazebo-gh-pages/#!/osrf/gazebo/pull-requests/1221/page/1

@danzimmerman
Copy link

danzimmerman commented Mar 23, 2023

Another Gazebo Answers post about fmax and friction:

https://answers.gazebosim.org/question/24487/change-joint-characteristics-at-runtime/

To lock a joint, I would set the fmax field to a large value and vel to 0 (this is also how we set joint friction, using both fmax and vel)

The dParamFMax parameter is set here in ODEJoint::SetParam(...) (and at Line 444 for friction, which as the post says uses vel and fmax).

It also appears that a max_force tag in the SDF would pass through to the fmax parameter here at Line 131.

max_force/fmax seem to be the maximum force for an ODE joint motor as described here:

http://ode.org/wiki/index.php/Manual#Stops_and_motor_parameters

Joint motors solve all these problems: they bring the body up to speed in one time step, provided that does not take more force than is allowed. Joint motors need no extra parameters because they are actually implemented as constraints. They can effectively see one time step into the future to work out the correct force.

In prior implementations it seems like people have been setting fmax to the joint effort limit but given the description above I'm not sure that's right. The effort limit is a separate parameter anyway:

limit_lower: -6.28319
limit_upper: 6.28319
limit_effort: 150            <--- effort limit from URDF xacro
limit_velocity: 3.14159
damping: 0
friction: 867530.9         <--- fmax set in code

Some more docs on joint motors:

https://classic.gazebosim.org/tutorials?tut=set_velocity&cat=#SetJointVelocityUsingJointMotors

The first call sets the key vel to the velocity the joint should travel at. It is meters per second for prismatic joints and radians per second for all others. The other call sets the key fmax. It is the maximum force or torque a joint motor may apply during a time step. Set it larger than the force required to be at the target velocity at the next time step. Set it smaller to apply a force over many time steps until the velocity is reached.

In velocity/position control, I'd think we'd always want to stay well over the minimal amount of joint torque to achieve the next joint velocity in simulation.

I'd think the effort limits from this page should probably be handled some other supervisory way (joint_limits_interface?) if they're included at all in Gazebo simulation. The real UR robot will not start slowly accumulating velocity errors if you exceed its joint limits, it'll just fault.

I'm going to see if I can pass max_force through from the .urdf.xacro file instead of injecting it in the source code.

@danzimmerman
Copy link

danzimmerman commented Mar 23, 2023

I'm going to see if I can pass max_force through from the .urdf.xacro file instead of injecting it in the source code.

I didn't get that to work yet. The draft PR mentioned above uses the joints' <dynamics> tags to add "friction" instead, which ultimately sets dParamFMax, but this is specific to ODE and a little confusing.

It's potentially a good interim workaround to this issue if you're planning to use Open Dynamics Engine. It's simple.

@relffok
Copy link
Contributor

relffok commented Mar 24, 2023

Excellent documentation, thanks so much! I haven't had the time to look into the reasons for the parameter adaptions, but I quickly tested the mentioned PR and I can confirm it works on debian humble (UR_gazebo and UR_descr from source) as I used ODE as well.

I also quickly used MoveIt to control the adapted robot, which I can confirm to work as well (with adaptions of #22)
I will have a closer look at your findings as soon as I find the time!

@santoshbalaji
Copy link

@danzimmerman your solution was very helpful. thanks !!!

@delipl
Copy link

delipl commented Apr 4, 2023

@Wiktor-99 worked with our own manipulator in gazebo simulation on ROS 2 Foxy and he found out solution for moving joints.
It is necessary to add dynamics tag with damping and friction and implicitSpringDamper for the joints with the gazebo reference.

<joint name="${prefix}wrist_3_joint" type="revolute">
  [...]
  <dynamics damping="0.7" friction="1.0"/>
</joint>

<gazebo reference="${prefix}wrist_3_joint">
  <implicitSpringDamper>true</implicitSpringDamper>
</gazebo>

I applied this to the ur_description and the joints don't break anymore.
image

@danzimmerman
Copy link

It is necessary to add dynamics tag with damping and friction and implicitSpringDamper for the joints with the gazebo reference.

In my tests, setting friction is enough. Wonder if that works for you?

@delipl
Copy link

delipl commented May 9, 2023

@danzimmerman I will check that!

@delipl
Copy link

delipl commented May 18, 2023

Hi!
I tested only friction parameter in dynamics tag:

<dynamics friction="1.0"/>

Here are the videos:
Screencast from 18.05.2023 14:25:40.webm
Screencast from 18.05.2023 14:21:30.webm

Screencast.from.18.05.2023.14.21.04.webm

The best solution is to add this 3 configurations for joints:

<joint name="${prefix}wrist_3_joint" type="revolute">
  [...]
  <dynamics damping="0.7" friction="1.0"/>
</joint>

<gazebo reference="${prefix}wrist_3_joint">
  <implicitSpringDamper>true</implicitSpringDamper>
</gazebo>

@danzimmerman
Copy link

Hi!
I tested only friction parameter in dynamics tag:

<dynamics friction="1.0"/>

I can confirm this result when friction is set to 1.0 for each joint in the UR3e.

image

UR3e Gazebo model, friction=1.0 in each joint
name: "ur"
id: 10
is_static: false
pose {
  position {
    x: -0.00029183954658583753
    y: -0.00011466868083646661
    z: 2.2929547897558578e-05
  }
  orientation {
    x: -0.0016056360667725928
    y: 0.0035283387897651446
    z: 1.4765924024855587e-05
    w: 0.99999248624185832
  }
}
joint {
  name: "ur::base_joint"
  id: 46
  type: FIXED
  parent: "world"
  parent_id: 0
  child: "ur::base_link"
  child_id: 11
  pose {
    position {
      x: 0
      y: 0
      z: 0
    }
    orientation {
      x: 0
      y: 0
      z: 0
      w: 1
    }
  }
}
joint {
  name: "ur::shoulder_pan_joint"
  id: 47
  angle: 0.42819187645724277
  type: REVOLUTE
  parent: "ur::base_link"
  parent_id: 11
  child: "ur::shoulder_link"
  child_id: 16
  pose {
    position {
      x: 0
      y: 0
      z: 2.7755575615628914e-17
    }
    orientation {
      x: 0
      y: 0
      z: 0
      w: 1
    }
  }
  axis1 {
    xyz {
      x: 0
      y: 0
      z: 1
    }
    limit_lower: -6.28319
    limit_upper: 6.28319
    limit_effort: 56
    limit_velocity: 3.14159
    damping: 0
    friction: 1
    use_parent_model_frame: false
    xyz_expressed_in: ""
  }
}
joint {
  name: "ur::shoulder_lift_joint"
  id: 48
  angle: -0.052294021552956593
  type: REVOLUTE
  parent: "ur::shoulder_link"
  parent_id: 16
  child: "ur::upper_arm_link"
  child_id: 21
  pose {
    position {
      x: -2.6469779601696886e-23
      y: 5.5511151231257827e-17
      z: -2.7755575615628914e-17
    }
    orientation {
      x: 0
      y: 0
      z: 0
      w: 1
    }
  }
  axis1 {
    xyz {
      x: 0
      y: 0
      z: 1
    }
    limit_lower: -6.28319
    limit_upper: 6.28319
    limit_effort: 56
    limit_velocity: 3.14159
    damping: 0
    friction: 1
    use_parent_model_frame: false
    xyz_expressed_in: ""
  }
}
joint {
  name: "ur::elbow_joint"
  id: 49
  angle: 1.171561654474381
  type: REVOLUTE
  parent: "ur::upper_arm_link"
  parent_id: 21
  child: "ur::forearm_link"
  child_id: 26
  pose {
    position {
      x: -2.7755575615628914e-17
      y: 5.5511151231257827e-17
      z: -2.7755678763066065e-17
    }
    orientation {
      x: 0
      y: -2.1175823681357508e-22
      z: 0
      w: 1
    }
  }
  axis1 {
    xyz {
      x: 0
      y: 0
      z: 1
    }
    limit_lower: -3.14159
    limit_upper: 3.14159
    limit_effort: 28
    limit_velocity: 3.14159
    damping: 0
    friction: 1
    use_parent_model_frame: false
    xyz_expressed_in: ""
  }
}
joint {
  name: "ur::wrist_1_joint"
  id: 50
  angle: 0.41676511434641839
  type: REVOLUTE
  parent: "ur::forearm_link"
  parent_id: 26
  child: "ur::wrist_1_link"
  child_id: 31
  pose {
    position {
      x: -1.1102230246251565e-16
      y: 5.5511151231257827e-17
      z: -5.5511151231257827e-17
    }
    orientation {
      x: 0
      y: -2.1175823681357508e-22
      z: 0
      w: 1
    }
  }
  axis1 {
    xyz {
      x: 0
      y: 0
      z: 1
    }
    limit_lower: -6.28319
    limit_upper: 6.28319
    limit_effort: 12
    limit_velocity: 6.28319
    damping: 0
    friction: 1
    use_parent_model_frame: false
    xyz_expressed_in: ""
  }
}
joint {
  name: "ur::wrist_2_joint"
  id: 51
  angle: 0.070364197122390948
  type: REVOLUTE
  parent: "ur::wrist_1_link"
  parent_id: 31
  child: "ur::wrist_2_link"
  child_id: 36
  pose {
    position {
      x: -4.9960035979239134e-16
      y: 2.7755575615628914e-17
      z: -1.5265566588595902e-16
    }
    orientation {
      x: 0
      y: 7.5515863655772091e-24
      z: 2.0209095383946746e-22
      w: 0.99999999999999989
    }
  }
  axis1 {
    xyz {
      x: 0
      y: 0
      z: 1
    }
    limit_lower: -6.28319
    limit_upper: 6.28319
    limit_effort: 12
    limit_velocity: 6.28319
    damping: 0
    friction: 1
    use_parent_model_frame: false
    xyz_expressed_in: ""
  }
}
joint {
  name: "ur::wrist_3_joint"
  id: 52
  angle: 0.41523934994008194
  type: REVOLUTE
  parent: "ur::wrist_2_link"
  parent_id: 36
  child: "ur::wrist_3_link"
  child_id: 41
  pose {
    position {
      x: -3.8857806413618311e-16
      y: -6.2450045135165055e-17
      z: 0
    }
    orientation {
      x: 0
      y: -2.9953303857266052e-23
      z: 2.995319383283953e-23
      w: 1
    }
  }
  axis1 {
    xyz {
      x: 0
      y: 0
      z: 1
    }
    limit_lower: -6.28319
    limit_upper: 6.28319
    limit_effort: 12
    limit_velocity: 6.28319
    damping: 0
    friction: 1
    use_parent_model_frame: false
    xyz_expressed_in: ""
  }
}
link {
  id: 11
  name: "ur::base_link"
  self_collide: false
  gravity: true
  kinematic: false
  enabled: true
  inertial {
    mass: 2
    pose {
      position {
        x: 0
        y: 0
        z: 0
      }
      orientation {
        x: 0
        y: 0
        z: 0
        w: 1
      }
    }
    ixx: 0.00305317
    ixy: 0
    ixz: 0
    iyy: 0.00305317
    iyz: 0
    izz: 0.005625
  }
  pose {
    position {
      x: 0
      y: 0
      z: 0.05
    }
    orientation {
      x: 0
      y: 0
      z: 0
      w: 1
    }
  }
  visual {
    name: "ur::base_link"
    id: 11
    parent_name: "ur"
    parent_id: 10
    pose {
      position {
        x: 0
        y: 0
        z: 0.05
      }
      orientation {
        x: 0
        y: 0
        z: 0
        w: 1
      }
    }
    type: LINK
  }
  visual {
    name: "ur::base_link::base_link_inertia_visual"
    id: 12
    parent_name: "ur::base_link"
    parent_id: 11
    pose {
      position {
        x: 0
        y: 0
        z: 0
      }
      orientation {
        x: 0
        y: 0
        z: 0
        w: 1
      }
    }
    geometry {
      type: MESH
      mesh {
        filename: "file:///home/<username>/ros/gz_ws/install/share/ur_description/meshes/ur3e/visual/base.dae"
        scale {
          x: 1
          y: 1
          z: 1
        }
      }
    }
    is_static: false
    scale {
      x: 1
      y: 1
      z: 1
    }
    type: VISUAL
  }
  collision {
    id: 13
    name: "ur::base_link::base_link_inertia_collision"
    laser_retro: 0
    pose {
      position {
        x: 0
        y: 0
        z: 0
      }
      orientation {
        x: 0
        y: 0
        z: 0
        w: 1
      }
    }
    geometry {
      type: MESH
      mesh {
        filename: "file:///home/<username>/ros/gz_ws/install/share/ur_description/meshes/ur3e/collision/base.stl"
        scale {
          x: 1
          y: 1
          z: 1
        }
      }
    }
    surface {
      friction {
        mu: 1
        mu2: 1
        fdir1 {
          x: 0
          y: 0
          z: 0
        }
        slip1: 0
        slip2: 0
        torsional {
          coefficient: 1
          use_patch_radius: true
          patch_radius: 0
          surface_radius: 0
          ode {
            slip: 0
          }
        }
      }
      restitution_coefficient: 0
      bounce_threshold: 100000
      soft_cfm: 0
      soft_erp: 0.2
      kp: 1000000000000
      kd: 1
      max_vel: 0.01
      min_depth: 0
      collide_without_contact: false
      collide_without_contact_bitmask: 1
      collide_bitmask: 65535
      elastic_modulus: 0
    }
    visual {
      name: "ur::base_link::base_link_inertia_collision"
      id: 13
      parent_name: "ur::base_link"
      parent_id: 11
      pose {
        position {
          x: 0
          y: 0
          z: 0
        }
        orientation {
          x: 0
          y: 0
          z: 0
          w: 1
        }
      }
      type: COLLISION
    }
    visual {
      name: "ur::base_link::base_link_inertia_collision__COLLISION_VISUAL__"
      id: 14
      parent_name: "ur::base_link"
      parent_id: 11
      cast_shadows: false
      pose {
        position {
          x: 0
          y: 0
          z: 0
        }
        orientation {
          x: 0
          y: 0
          z: 0
          w: 1
        }
      }
      geometry {
        type: MESH
        mesh {
          filename: "file:///home/<username>/ros/gz_ws/install/share/ur_description/meshes/ur3e/collision/base.stl"
          scale {
            x: 1
            y: 1
            z: 1
          }
        }
      }
      material {
        script {
          uri: "file://media/materials/scripts/gazebo.material"
          name: "Gazebo/OrangeTransparent"
        }
      }
      is_static: false
      type: COLLISION
    }
  }
  canonical: true
  enable_wind: false
}
link {
  id: 16
  name: "ur::shoulder_link"
  self_collide: false
  gravity: true
  kinematic: false
  enabled: true
  inertial {
    mass: 2
    pose {
      position {
        x: 0
        y: 0
        z: 0
      }
      orientation {
        x: 0
        y: 0
        z: 0
        w: 1
      }
    }
    ixx: 0.00809316
    ixy: 0
    ixz: 0
    iyy: 0.00809316
    iyz: 0
    izz: 0.005625
  }
  pose {
    position {
      x: -0.0031929675645683397
      y: -0.0024436684988631005
      z: 0.2018075259645494
    }
    orientation {
      x: -0.015931455122378209
      y: -0.0046494161702490752
      z: 0.97716915521373915
      w: -0.21181362979238819
    }
  }
  visual {
    name: "ur::shoulder_link"
    id: 16
    parent_name: "ur"
    parent_id: 10
    pose {
      position {
        x: -0.0031929675645683397
        y: -0.0024436684988631005
        z: 0.2018075259645494
      }
      orientation {
        x: -0.015931455122378209
        y: -0.0046494161702490752
        z: 0.97716915521373915
        w: -0.21181362979238819
      }
    }
    type: LINK
  }
  visual {
    name: "ur::shoulder_link::shoulder_link_visual"
    id: 17
    parent_name: "ur::shoulder_link"
    parent_id: 16
    pose {
      position {
        x: 0
        y: 0
        z: 0
      }
      orientation {
        x: 0
        y: 0
        z: 0.99999999999911982
        w: 1.3267948966775328e-06
      }
    }
    geometry {
      type: MESH
      mesh {
        filename: "file:///home/<username>/ros/gz_ws/install/share/ur_description/meshes/ur3e/visual/shoulder.dae"
        scale {
          x: 1
          y: 1
          z: 1
        }
      }
    }
    is_static: false
    scale {
      x: 1
      y: 1
      z: 1
    }
    type: VISUAL
  }
  collision {
    id: 18
    name: "ur::shoulder_link::shoulder_link_collision"
    laser_retro: 0
    pose {
      position {
        x: 0
        y: 0
        z: 0
      }
      orientation {
        x: 0
        y: 0
        z: 0.99999999999911982
        w: 1.3267948966775328e-06
      }
    }
    geometry {
      type: MESH
      mesh {
        filename: "file:///home/<username>/ros/gz_ws/install/share/ur_description/meshes/ur3e/collision/shoulder.stl"
        scale {
          x: 1
          y: 1
          z: 1
        }
      }
    }
    surface {
      friction {
        mu: 1
        mu2: 1
        fdir1 {
          x: 0
          y: 0
          z: 0
        }
        slip1: 0
        slip2: 0
        torsional {
          coefficient: 1
          use_patch_radius: true
          patch_radius: 0
          surface_radius: 0
          ode {
            slip: 0
          }
        }
      }
      restitution_coefficient: 0
      bounce_threshold: 100000
      soft_cfm: 0
      soft_erp: 0.2
      kp: 1000000000000
      kd: 1
      max_vel: 0.01
      min_depth: 0
      collide_without_contact: false
      collide_without_contact_bitmask: 1
      collide_bitmask: 65535
      elastic_modulus: 0
    }
    visual {
      name: "ur::shoulder_link::shoulder_link_collision"
      id: 18
      parent_name: "ur::shoulder_link"
      parent_id: 16
      pose {
        position {
          x: 0
          y: 0
          z: 0
        }
        orientation {
          x: 0
          y: 0
          z: 0.99999999999911982
          w: 1.3267948966775328e-06
        }
      }
      type: COLLISION
    }
    visual {
      name: "ur::shoulder_link::shoulder_link_collision__COLLISION_VISUAL__"
      id: 19
      parent_name: "ur::shoulder_link"
      parent_id: 16
      cast_shadows: false
      pose {
        position {
          x: 0
          y: 0
          z: 0
        }
        orientation {
          x: 0
          y: 0
          z: 0.99999999999911982
          w: 1.3267948966775328e-06
        }
      }
      geometry {
        type: MESH
        mesh {
          filename: "file:///home/<username>/ros/gz_ws/install/share/ur_description/meshes/ur3e/collision/shoulder.stl"
          scale {
            x: 1
            y: 1
            z: 1
          }
        }
      }
      material {
        script {
          uri: "file://media/materials/scripts/gazebo.material"
          name: "Gazebo/OrangeTransparent"
        }
      }
      is_static: false
      type: COLLISION
    }
  }
  enable_wind: false
}
link {
  id: 21
  name: "ur::upper_arm_link"
  self_collide: false
  gravity: true
  kinematic: false
  enabled: true
  inertial {
    mass: 3.42
    pose {
      position {
        x: -0.121825
        y: 0
        z: 0.12
      }
      orientation {
        x: 5.93570830084467e-12
        y: 0.70710901804279691
        z: 5.93570830084467e-12
        w: 0.70710454432322223
      }
    }
    ixx: 0.0217285
    ixy: 0
    ixz: 0
    iyy: 0.0217285
    iyz: 0
    izz: 0.00961875
  }
  pose {
    position {
      x: -0.00033758897217561832
      y: -0.0013243889702794528
      z: 0.20182111521721133
    }
    orientation {
      x: -0.17923352724829547
      y: 0.6841869880722663
      z: 0.69664348932376774
      w: -0.12021379640266194
    }
  }
  visual {
    name: "ur::upper_arm_link"
    id: 21
    parent_name: "ur"
    parent_id: 10
    pose {
      position {
        x: -0.00033758897217561832
        y: -0.0013243889702794528
        z: 0.20182111521721133
      }
      orientation {
        x: -0.17923352724829547
        y: 0.6841869880722663
        z: 0.69664348932376774
        w: -0.12021379640266194
      }
    }
    type: LINK
  }
  visual {
    name: "ur::upper_arm_link::upper_arm_link_visual"
    id: 22
    parent_name: "ur::upper_arm_link"
    parent_id: 21
    pose {
      position {
        x: -7.72917564369549e-23
        y: 5.5511151231257827e-17
        z: 0.11999999999999997
      }
      orientation {
        x: 0.49999999999662686
        y: -0.5000018366025516
        z: -0.49999999999662686
        w: 0.49999816339744829
      }
    }
    geometry {
      type: MESH
      mesh {
        filename: "file:///home/<username>/ros/gz_ws/install/share/ur_description/meshes/ur3e/visual/upperarm.dae"
        scale {
          x: 1
          y: 1
          z: 1
        }
      }
    }
    is_static: false
    scale {
      x: 1
      y: 1
      z: 1
    }
    type: VISUAL
  }
  collision {
    id: 23
    name: "ur::upper_arm_link::upper_arm_link_collision"
    laser_retro: 0
    pose {
      position {
        x: -7.72917564369549e-23
        y: 5.5511151231257827e-17
        z: 0.11999999999999997
      }
      orientation {
        x: 0.49999999999662686
        y: -0.5000018366025516
        z: -0.49999999999662686
        w: 0.49999816339744829
      }
    }
    geometry {
      type: MESH
      mesh {
        filename: "file:///home/<username>/ros/gz_ws/install/share/ur_description/meshes/ur3e/collision/upperarm.stl"
        scale {
          x: 1
          y: 1
          z: 1
        }
      }
    }
    surface {
      friction {
        mu: 1
        mu2: 1
        fdir1 {
          x: 0
          y: 0
          z: 0
        }
        slip1: 0
        slip2: 0
        torsional {
          coefficient: 1
          use_patch_radius: true
          patch_radius: 0
          surface_radius: 0
          ode {
            slip: 0
          }
        }
      }
      restitution_coefficient: 0
      bounce_threshold: 100000
      soft_cfm: 0
      soft_erp: 0.2
      kp: 1000000000000
      kd: 1
      max_vel: 0.01
      min_depth: 0
      collide_without_contact: false
      collide_without_contact_bitmask: 1
      collide_bitmask: 65535
      elastic_modulus: 0
    }
    visual {
      name: "ur::upper_arm_link::upper_arm_link_collision"
      id: 23
      parent_name: "ur::upper_arm_link"
      parent_id: 21
      pose {
        position {
          x: -7.72917564369549e-23
          y: 5.5511151231257827e-17
          z: 0.11999999999999997
        }
        orientation {
          x: 0.49999999999662686
          y: -0.5000018366025516
          z: -0.49999999999662686
          w: 0.49999816339744829
        }
      }
      type: COLLISION
    }
    visual {
      name: "ur::upper_arm_link::upper_arm_link_collision__COLLISION_VISUAL__"
      id: 24
      parent_name: "ur::upper_arm_link"
      parent_id: 21
      cast_shadows: false
      pose {
        position {
          x: -7.72917564369549e-23
          y: 5.5511151231257827e-17
          z: 0.11999999999999997
        }
        orientation {
          x: 0.49999999999662686
          y: -0.5000018366025516
          z: -0.49999999999662686
          w: 0.49999816339744829
        }
      }
      geometry {
        type: MESH
        mesh {
          filename: "file:///home/<username>/ros/gz_ws/install/share/ur_description/meshes/ur3e/collision/upperarm.stl"
          scale {
            x: 1
            y: 1
            z: 1
          }
        }
      }
      material {
        script {
          uri: "file://media/materials/scripts/gazebo.material"
          name: "Gazebo/OrangeTransparent"
        }
      }
      is_static: false
      type: COLLISION
    }
  }
  enable_wind: false
}
link {
  id: 26
  name: "ur::forearm_link"
  self_collide: false
  gravity: true
  kinematic: false
  enabled: true
  inertial {
    mass: 1.26
    pose {
      position {
        x: -0.1066
        y: 0
        z: 0.027
      }
      orientation {
        x: 5.93570830084467e-12
        y: 0.70710901804279691
        z: 5.93570830084467e-12
        w: 0.70710454432322223
      }
    }
    ixx: 0.00654457
    ixy: 0
    ixz: 0
    iyy: 0.00654457
    iyz: 0
    izz: 0.00354375
  }
  pose {
    position {
      x: 0.22955942692413636
      y: 0.10321529180164256
      z: 0.22386526429097495
    }
    orientation {
      x: 0.21599623336306034
      y: 0.68885990295106492
      z: 0.49103362087718117
      w: -0.4875486072664596
    }
  }
  visual {
    name: "ur::forearm_link"
    id: 26
    parent_name: "ur"
    parent_id: 10
    pose {
      position {
        x: 0.22955942692413636
        y: 0.10321529180164256
        z: 0.22386526429097495
      }
      orientation {
        x: 0.21599623336306034
        y: 0.68885990295106492
        z: 0.49103362087718117
        w: -0.4875486072664596
      }
    }
    type: LINK
  }
  visual {
    name: "ur::forearm_link::forearm_link_visual"
    id: 27
    parent_name: "ur::forearm_link"
    parent_id: 26
    pose {
      position {
        x: -8.3266738281831529e-17
        y: 8.3266726846886741e-17
        z: 0.026999999999999958
      }
      orientation {
        x: 0.49999999999662686
        y: -0.5000018366025516
        z: -0.49999999999662686
        w: 0.49999816339744829
      }
    }
    geometry {
      type: MESH
      mesh {
        filename: "file:///home/<username>/ros/gz_ws/install/share/ur_description/meshes/ur3e/visual/forearm.dae"
        scale {
          x: 1
          y: 1
          z: 1
        }
      }
    }
    is_static: false
    scale {
      x: 1
      y: 1
      z: 1
    }
    type: VISUAL
  }
  collision {
    id: 28
    name: "ur::forearm_link::forearm_link_collision"
    laser_retro: 0
    pose {
      position {
        x: -8.3266738281831529e-17
        y: 8.3266726846886741e-17
        z: 0.026999999999999958
      }
      orientation {
        x: 0.49999999999662686
        y: -0.5000018366025516
        z: -0.49999999999662686
        w: 0.49999816339744829
      }
    }
    geometry {
      type: MESH
      mesh {
        filename: "file:///home/<username>/ros/gz_ws/install/share/ur_description/meshes/ur3e/collision/forearm.stl"
        scale {
          x: 1
          y: 1
          z: 1
        }
      }
    }
    surface {
      friction {
        mu: 1
        mu2: 1
        fdir1 {
          x: 0
          y: 0
          z: 0
        }
        slip1: 0
        slip2: 0
        torsional {
          coefficient: 1
          use_patch_radius: true
          patch_radius: 0
          surface_radius: 0
          ode {
            slip: 0
          }
        }
      }
      restitution_coefficient: 0
      bounce_threshold: 100000
      soft_cfm: 0
      soft_erp: 0.2
      kp: 1000000000000
      kd: 1
      max_vel: 0.01
      min_depth: 0
      collide_without_contact: false
      collide_without_contact_bitmask: 1
      collide_bitmask: 65535
      elastic_modulus: 0
    }
    visual {
      name: "ur::forearm_link::forearm_link_collision"
      id: 28
      parent_name: "ur::forearm_link"
      parent_id: 26
      pose {
        position {
          x: -8.3266738281831529e-17
          y: 8.3266726846886741e-17
          z: 0.026999999999999958
        }
        orientation {
          x: 0.49999999999662686
          y: -0.5000018366025516
          z: -0.49999999999662686
          w: 0.49999816339744829
        }
      }
      type: COLLISION
    }
    visual {
      name: "ur::forearm_link::forearm_link_collision__COLLISION_VISUAL__"
      id: 29
      parent_name: "ur::forearm_link"
      parent_id: 26
      cast_shadows: false
      pose {
        position {
          x: -8.3266738281831529e-17
          y: 8.3266726846886741e-17
          z: 0.026999999999999958
        }
        orientation {
          x: 0.49999999999662686
          y: -0.5000018366025516
          z: -0.49999999999662686
          w: 0.49999816339744829
        }
      }
      geometry {
        type: MESH
        mesh {
          filename: "file:///home/<username>/ros/gz_ws/install/share/ur_description/meshes/ur3e/collision/forearm.stl"
          scale {
            x: 1
            y: 1
            z: 1
          }
        }
      }
      material {
        script {
          uri: "file://media/materials/scripts/gazebo.material"
          name: "Gazebo/OrangeTransparent"
        }
      }
      is_static: false
      type: COLLISION
    }
  }
  enable_wind: false
}
link {
  id: 31
  name: "ur::wrist_1_link"
  self_collide: false
  gravity: true
  kinematic: false
  enabled: true
  inertial {
    mass: 0.8
    pose {
      position {
        x: 0
        y: 0
        z: 0
      }
      orientation {
        x: 0
        y: 0
        z: 0
        w: 1
      }
    }
    ixx: 0.002085
    ixy: 0
    ixz: 0
    iyy: 0.002085
    iyz: 0
    izz: 0.00225
  }
  pose {
    position {
      x: 0.27815935638517741
      y: 0.2686571459299667
      z: 0.037768674316212385
    }
    orientation {
      x: 0.366646034821522
      y: 0.59301467442843436
      z: 0.4289831492184763
      w: -0.57434984003548883
    }
  }
  visual {
    name: "ur::wrist_1_link"
    id: 31
    parent_name: "ur"
    parent_id: 10
    pose {
      position {
        x: 0.27815935638517741
        y: 0.2686571459299667
        z: 0.037768674316212385
      }
      orientation {
        x: 0.366646034821522
        y: 0.59301467442843436
        z: 0.4289831492184763
        w: -0.57434984003548883
      }
    }
    type: LINK
  }
  visual {
    name: "ur::wrist_1_link::wrist_1_link_visual"
    id: 32
    parent_name: "ur::wrist_1_link"
    parent_id: 31
    pose {
      position {
        x: -1.6653340964806023e-16
        y: 2.7755575615628914e-17
        z: -0.104
      }
      orientation {
        x: 0.70710807985947366
        y: -1.4973541021779167e-22
        z: 1.4973596022767479e-22
        w: 0.70710548251123639
      }
    }
    geometry {
      type: MESH
      mesh {
        filename: "file:///home/<username>/ros/gz_ws/install/share/ur_description/meshes/ur3e/visual/wrist1.dae"
        scale {
          x: 1
          y: 1
          z: 1
        }
      }
    }
    is_static: false
    scale {
      x: 1
      y: 1
      z: 1
    }
    type: VISUAL
  }
  collision {
    id: 33
    name: "ur::wrist_1_link::wrist_1_link_collision"
    laser_retro: 0
    pose {
      position {
        x: -1.6653340964806023e-16
        y: 2.7755575615628914e-17
        z: -0.104
      }
      orientation {
        x: 0.70710807985947366
        y: -1.4973541021779167e-22
        z: 1.4973596022767479e-22
        w: 0.70710548251123639
      }
    }
    geometry {
      type: MESH
      mesh {
        filename: "file:///home/<username>/ros/gz_ws/install/share/ur_description/meshes/ur3e/collision/wrist1.stl"
        scale {
          x: 1
          y: 1
          z: 1
        }
      }
    }
    surface {
      friction {
        mu: 1
        mu2: 1
        fdir1 {
          x: 0
          y: 0
          z: 0
        }
        slip1: 0
        slip2: 0
        torsional {
          coefficient: 1
          use_patch_radius: true
          patch_radius: 0
          surface_radius: 0
          ode {
            slip: 0
          }
        }
      }
      restitution_coefficient: 0
      bounce_threshold: 100000
      soft_cfm: 0
      soft_erp: 0.2
      kp: 1000000000000
      kd: 1
      max_vel: 0.01
      min_depth: 0
      collide_without_contact: false
      collide_without_contact_bitmask: 1
      collide_bitmask: 65535
      elastic_modulus: 0
    }
    visual {
      name: "ur::wrist_1_link::wrist_1_link_collision"
      id: 33
      parent_name: "ur::wrist_1_link"
      parent_id: 31
      pose {
        position {
          x: -1.6653340964806023e-16
          y: 2.7755575615628914e-17
          z: -0.104
        }
        orientation {
          x: 0.70710807985947366
          y: -1.4973541021779167e-22
          z: 1.4973596022767479e-22
          w: 0.70710548251123639
        }
      }
      type: COLLISION
    }
    visual {
      name: "ur::wrist_1_link::wrist_1_link_collision__COLLISION_VISUAL__"
      id: 34
      parent_name: "ur::wrist_1_link"
      parent_id: 31
      cast_shadows: false
      pose {
        position {
          x: -1.6653340964806023e-16
          y: 2.7755575615628914e-17
          z: -0.104
        }
        orientation {
          x: 0.70710807985947366
          y: -1.4973541021779167e-22
          z: 1.4973596022767479e-22
          w: 0.70710548251123639
        }
      }
      geometry {
        type: MESH
        mesh {
          filename: "file:///home/<username>/ros/gz_ws/install/share/ur_description/meshes/ur3e/collision/wrist1.stl"
          scale {
            x: 1
            y: 1
            z: 1
          }
        }
      }
      material {
        script {
          uri: "file://media/materials/scripts/gazebo.material"
          name: "Gazebo/OrangeTransparent"
        }
      }
      is_static: false
      type: COLLISION
    }
  }
  enable_wind: false
}
link {
  id: 36
  name: "ur::wrist_2_link"
  self_collide: false
  gravity: true
  kinematic: false
  enabled: true
  inertial {
    mass: 0.8
    pose {
      position {
        x: 0
        y: 0
        z: 0
      }
      orientation {
        x: 0
        y: 0
        z: 0
        w: 1
      }
    }
    ixx: 0.002085
    ixy: 0
    ixz: 0
    iyy: 0.002085
    iyz: 0
    izz: 0.00225
  }
  pose {
    position {
      x: 0.19878929179925789
      y: 0.2320294496953221
      z: 0.033795121868799155
    }
    orientation {
      x: -0.14211509513124285
      y: 0.70924321835618853
      z: -0.14677927280846864
      w: -0.67470971686008119
    }
  }
  visual {
    name: "ur::wrist_2_link"
    id: 36
    parent_name: "ur"
    parent_id: 10
    pose {
      position {
        x: 0.19878929179925789
        y: 0.2320294496953221
        z: 0.033795121868799155
      }
      orientation {
        x: -0.14211509513124285
        y: 0.70924321835618853
        z: -0.14677927280846864
        w: -0.67470971686008119
      }
    }
    type: LINK
  }
  visual {
    name: "ur::wrist_2_link::wrist_2_link_visual"
    id: 37
    parent_name: "ur::wrist_2_link"
    parent_id: 36
    pose {
      position {
        x: -4.9960036108159625e-16
        y: 2.124844926931163e-50
        z: -0.0853500000000001
      }
      orientation {
        x: 0
        y: 1.6155871338926322e-27
        z: -7.7048348339792173e-23
        w: 0.99999999999999989
      }
    }
    geometry {
      type: MESH
      mesh {
        filename: "file:///home/<username>/ros/gz_ws/install/share/ur_description/meshes/ur3e/visual/wrist2.dae"
        scale {
          x: 1
          y: 1
          z: 1
        }
      }
    }
    is_static: false
    scale {
      x: 1
      y: 1
      z: 1
    }
    type: VISUAL
  }
  collision {
    id: 38
    name: "ur::wrist_2_link::wrist_2_link_collision"
    laser_retro: 0
    pose {
      position {
        x: -4.9960036108159625e-16
        y: 2.124844926931163e-50
        z: -0.0853500000000001
      }
      orientation {
        x: 0
        y: 1.6155871338926322e-27
        z: -7.7048348339792173e-23
        w: 0.99999999999999989
      }
    }
    geometry {
      type: MESH
      mesh {
        filename: "file:///home/<username>/ros/gz_ws/install/share/ur_description/meshes/ur3e/collision/wrist2.stl"
        scale {
          x: 1
          y: 1
          z: 1
        }
      }
    }
    surface {
      friction {
        mu: 1
        mu2: 1
        fdir1 {
          x: 0
          y: 0
          z: 0
        }
        slip1: 0
        slip2: 0
        torsional {
          coefficient: 1
          use_patch_radius: true
          patch_radius: 0
          surface_radius: 0
          ode {
            slip: 0
          }
        }
      }
      restitution_coefficient: 0
      bounce_threshold: 100000
      soft_cfm: 0
      soft_erp: 0.2
      kp: 1000000000000
      kd: 1
      max_vel: 0.01
      min_depth: 0
      collide_without_contact: false
      collide_without_contact_bitmask: 1
      collide_bitmask: 65535
      elastic_modulus: 0
    }
    visual {
      name: "ur::wrist_2_link::wrist_2_link_collision"
      id: 38
      parent_name: "ur::wrist_2_link"
      parent_id: 36
      pose {
        position {
          x: -4.9960036108159625e-16
          y: 2.124844926931163e-50
          z: -0.0853500000000001
        }
        orientation {
          x: 0
          y: 1.6155871338926322e-27
          z: -7.7048348339792173e-23
          w: 0.99999999999999989
        }
      }
      type: COLLISION
    }
    visual {
      name: "ur::wrist_2_link::wrist_2_link_collision__COLLISION_VISUAL__"
      id: 39
      parent_name: "ur::wrist_2_link"
      parent_id: 36
      cast_shadows: false
      pose {
        position {
          x: -4.9960036108159625e-16
          y: 2.124844926931163e-50
          z: -0.0853500000000001
        }
        orientation {
          x: 0
          y: 1.6155871338926322e-27
          z: -7.7048348339792173e-23
          w: 0.99999999999999989
        }
      }
      geometry {
        type: MESH
        mesh {
          filename: "file:///home/<username>/ros/gz_ws/install/share/ur_description/meshes/ur3e/collision/wrist2.stl"
          scale {
            x: 1
            y: 1
            z: 1
          }
        }
      }
      material {
        script {
          uri: "file://media/materials/scripts/gazebo.material"
          name: "Gazebo/OrangeTransparent"
        }
      }
      is_static: false
      type: COLLISION
    }
  }
  enable_wind: false
}
link {
  id: 41
  name: "ur::wrist_3_link"
  self_collide: false
  gravity: true
  kinematic: false
  enabled: true
  inertial {
    mass: 0.35
    pose {
      position {
        x: 0
        y: 0
        z: -0.02
      }
      orientation {
        x: 0
        y: 0
        z: 0
        w: 1
      }
    }
    ixx: 0.000136267
    ixy: 0
    ixz: 0
    iyy: 0.000136267
    iyz: 0
    izz: 0.0001792
  }
  pose {
    position {
      x: 0.16276614751979787
      y: 0.31585212014835995
      z: 0.032659652528992549
    }
    orientation {
      x: 0.5121387620028891
      y: 0.53047836407871252
      z: 0.26682326057570127
      w: -0.62057388062524232
    }
  }
  visual {
    name: "ur::wrist_3_link"
    id: 41
    parent_name: "ur"
    parent_id: 10
    pose {
      position {
        x: 0.16276614751979787
        y: 0.31585212014835995
        z: 0.032659652528992549
      }
      orientation {
        x: 0.5121387620028891
        y: 0.53047836407871252
        z: 0.26682326057570127
        w: -0.62057388062524232
      }
    }
    type: LINK
  }
  visual {
    name: "ur::wrist_3_link::wrist_3_link_visual"
    id: 42
    parent_name: "ur::wrist_3_link"
    parent_id: 41
    pose {
      position {
        x: -3.8857805861880479e-16
        y: -6.9388939039072284e-17
        z: -0.092099999999999918
      }
      orientation {
        x: 0.70710807985947366
        y: 0
        z: 0
        w: 0.70710548251123639
      }
    }
    geometry {
      type: MESH
      mesh {
        filename: "file:///home/<username>/ros/gz_ws/install/share/ur_description/meshes/ur3e/visual/wrist3.dae"
        scale {
          x: 1
          y: 1
          z: 1
        }
      }
    }
    is_static: false
    scale {
      x: 1
      y: 1
      z: 1
    }
    type: VISUAL
  }
  collision {
    id: 43
    name: "ur::wrist_3_link::wrist_3_link_collision"
    laser_retro: 0
    pose {
      position {
        x: -3.8857805861880479e-16
        y: -6.9388939039072284e-17
        z: -0.092099999999999918
      }
      orientation {
        x: 0.70710807985947366
        y: 0
        z: 0
        w: 0.70710548251123639
      }
    }
    geometry {
      type: MESH
      mesh {
        filename: "file:///home/<username>/ros/gz_ws/install/share/ur_description/meshes/ur3e/collision/wrist3.stl"
        scale {
          x: 1
          y: 1
          z: 1
        }
      }
    }
    surface {
      friction {
        mu: 1
        mu2: 1
        fdir1 {
          x: 0
          y: 0
          z: 0
        }
        slip1: 0
        slip2: 0
        torsional {
          coefficient: 1
          use_patch_radius: true
          patch_radius: 0
          surface_radius: 0
          ode {
            slip: 0
          }
        }
      }
      restitution_coefficient: 0
      bounce_threshold: 100000
      soft_cfm: 0
      soft_erp: 0.2
      kp: 1000000000000
      kd: 1
      max_vel: 0.01
      min_depth: 0
      collide_without_contact: false
      collide_without_contact_bitmask: 1
      collide_bitmask: 65535
      elastic_modulus: 0
    }
    visual {
      name: "ur::wrist_3_link::wrist_3_link_collision"
      id: 43
      parent_name: "ur::wrist_3_link"
      parent_id: 41
      pose {
        position {
          x: -3.8857805861880479e-16
          y: -6.9388939039072284e-17
          z: -0.092099999999999918
        }
        orientation {
          x: 0.70710807985947366
          y: 0
          z: 0
          w: 0.70710548251123639
        }
      }
      type: COLLISION
    }
    visual {
      name: "ur::wrist_3_link::wrist_3_link_collision__COLLISION_VISUAL__"
      id: 44
      parent_name: "ur::wrist_3_link"
      parent_id: 41
      cast_shadows: false
      pose {
        position {
          x: -3.8857805861880479e-16
          y: -6.9388939039072284e-17
          z: -0.092099999999999918
        }
        orientation {
          x: 0.70710807985947366
          y: 0
          z: 0
          w: 0.70710548251123639
        }
      }
      geometry {
        type: MESH
        mesh {
          filename: "file:///home/<username>/ros/gz_ws/install/share/ur_description/meshes/ur3e/collision/wrist3.stl"
          scale {
            x: 1
            y: 1
            z: 1
          }
        }
      }
      material {
        script {
          uri: "file://media/materials/scripts/gazebo.material"
          name: "Gazebo/OrangeTransparent"
        }
      }
      is_static: false
      type: COLLISION
    }
  }
  enable_wind: false
}
visual {
  name: "ur"
  id: 10
  parent_name: "default"
  parent_id: 1
  pose {
    position {
      x: -0.00029183954658583753
      y: -0.00011466868083646661
      z: 2.2929547897558578e-05
    }
    orientation {
      x: -0.0016056360667725928
      y: 0.0035283387897651446
      z: 1.4765924024855587e-05
      w: 0.99999248624185832
    }
  }
  type: MODEL
}
scale {
  x: 1
  y: 1
  z: 1
}
self_collide: false
enable_wind: false
plugin {
  name: "gazebo_ros2_control"
  filename: "libgazebo_ros2_control.so"
  innerxml: "<parameters>/home/<username>/ros/gz_ws/install/share/ur_simulation_gazebo/config/ur_controllers.yaml</parameters>\n"
}

Joint dynamics settings
<xacro:property name="joint_dyn_dict"
      value="${dict(
          joint_dynamics=dict(
              shoulder_pan_joint=dict(damping=0.0, friction=1.0),
              shoulder_lift_joint=dict(damping=0.0, friction=1.0),
              elbow_joint=dict(damping=0.0, friction=1.0),
              wrist_1_joint=dict(damping=0.0, friction=1.0),
              wrist_2_joint=dict(damping=0.0, friction=1.0),
              wrist_3_joint=dict(damping=0.0, friction=1.0)))}"
    />

However, if I set the friction higher, here, to 1.0x the joint's effort limit, the model is stable with no damping. For example, these settings are stable:

UR3e Gazebo model
name: "ur"
id: 10
is_static: false
pose {
  position {
    x: 1.7664581161916394e-07
    y: 9.8421628554235216e-07
    z: 6.1777577546606732e-08
  }
  orientation {
    x: 1.0063997217110073e-05
    y: -1.8200132416254767e-06
    z: -1.6235609612999127e-07
    w: 0.99999999994768851
  }
}
joint {
  name: "ur::base_joint"
  id: 46
  type: FIXED
  parent: "world"
  parent_id: 0
  child: "ur::base_link"
  child_id: 11
  pose {
    position {
      x: 0
      y: 0
      z: 0
    }
    orientation {
      x: 0
      y: 0
      z: 0
      w: 1
    }
  }
}
joint {
  name: "ur::shoulder_pan_joint"
  id: 47
  angle: 8.2505567948309988e-05
  type: REVOLUTE
  parent: "ur::base_link"
  parent_id: 11
  child: "ur::shoulder_link"
  child_id: 16
  pose {
    position {
      x: 0
      y: 0
      z: 2.7755575615628914e-17
    }
    orientation {
      x: 0
      y: 0
      z: 0
      w: 1
    }
  }
  axis1 {
    xyz {
      x: 0
      y: 0
      z: 1
    }
    limit_lower: -6.28319
    limit_upper: 6.28319
    limit_effort: 56
    limit_velocity: 3.14159
    damping: 0
    friction: 56
    use_parent_model_frame: false
    xyz_expressed_in: ""
  }
}
joint {
  name: "ur::shoulder_lift_joint"
  id: 48
  angle: -1.569999232182308
  type: REVOLUTE
  parent: "ur::shoulder_link"
  parent_id: 16
  child: "ur::upper_arm_link"
  child_id: 21
  pose {
    position {
      x: -2.6469779601696886e-23
      y: 5.5511151231257827e-17
      z: -2.7755575615628914e-17
    }
    orientation {
      x: 0
      y: 0
      z: 0
      w: 1
    }
  }
  axis1 {
    xyz {
      x: 0
      y: 0
      z: 1
    }
    limit_lower: -6.28319
    limit_upper: 6.28319
    limit_effort: 56
    limit_velocity: 3.14159
    damping: 0
    friction: 56
    use_parent_model_frame: false
    xyz_expressed_in: ""
  }
}
joint {
  name: "ur::elbow_joint"
  id: 49
  angle: -1.614056065690761e-06
  type: REVOLUTE
  parent: "ur::upper_arm_link"
  parent_id: 21
  child: "ur::forearm_link"
  child_id: 26
  pose {
    position {
      x: -2.7755575615628914e-17
      y: 5.5511151231257827e-17
      z: -2.7755678763066065e-17
    }
    orientation {
      x: 0
      y: -2.1175823681357508e-22
      z: 0
      w: 1
    }
  }
  axis1 {
    xyz {
      x: 0
      y: 0
      z: 1
    }
    limit_lower: -3.14159
    limit_upper: 3.14159
    limit_effort: 28
    limit_velocity: 3.14159
    damping: 0
    friction: 28
    use_parent_model_frame: false
    xyz_expressed_in: ""
  }
}
joint {
  name: "ur::wrist_1_joint"
  id: 50
  angle: 9.3461879187017871e-06
  type: REVOLUTE
  parent: "ur::forearm_link"
  parent_id: 26
  child: "ur::wrist_1_link"
  child_id: 31
  pose {
    position {
      x: -1.1102230246251565e-16
      y: 5.5511151231257827e-17
      z: -5.5511151231257827e-17
    }
    orientation {
      x: 0
      y: -2.1175823681357508e-22
      z: 0
      w: 1
    }
  }
  axis1 {
    xyz {
      x: 0
      y: 0
      z: 1
    }
    limit_lower: -6.28319
    limit_upper: 6.28319
    limit_effort: 12
    limit_velocity: 6.28319
    damping: 0
    friction: 12
    use_parent_model_frame: false
    xyz_expressed_in: ""
  }
}
joint {
  name: "ur::wrist_2_joint"
  id: 51
  angle: -0.70649922833953216
  type: REVOLUTE
  parent: "ur::wrist_1_link"
  parent_id: 31
  child: "ur::wrist_2_link"
  child_id: 36
  pose {
    position {
      x: -4.9960035979239134e-16
      y: 2.7755575615628914e-17
      z: -1.5265566588595902e-16
    }
    orientation {
      x: 0
      y: 7.5515863655772091e-24
      z: 2.0209095383946746e-22
      w: 0.99999999999999989
    }
  }
  axis1 {
    xyz {
      x: 0
      y: 0
      z: 1
    }
    limit_lower: -6.28319
    limit_upper: 6.28319
    limit_effort: 12
    limit_velocity: 6.28319
    damping: 0
    friction: 12
    use_parent_model_frame: false
    xyz_expressed_in: ""
  }
}
joint {
  name: "ur::wrist_3_joint"
  id: 52
  angle: 1.6066448162987967e-06
  type: REVOLUTE
  parent: "ur::wrist_2_link"
  parent_id: 36
  child: "ur::wrist_3_link"
  child_id: 41
  pose {
    position {
      x: -3.8857806413618311e-16
      y: -6.2450045135165055e-17
      z: 0
    }
    orientation {
      x: 0
      y: -2.9953303857266052e-23
      z: 2.995319383283953e-23
      w: 1
    }
  }
  axis1 {
    xyz {
      x: 0
      y: 0
      z: 1
    }
    limit_lower: -6.28319
    limit_upper: 6.28319
    limit_effort: 12
    limit_velocity: 6.28319
    damping: 0
    friction: 12
    use_parent_model_frame: false
    xyz_expressed_in: ""
  }
}
link {
  id: 11
  name: "ur::base_link"
  self_collide: false
  gravity: true
  kinematic: false
  enabled: true
  inertial {
    mass: 2
    pose {
      position {
        x: 0
        y: 0
        z: 0
      }
      orientation {
        x: 0
        y: 0
        z: 0
        w: 1
      }
    }
    ixx: 0.00305317
    ixy: 0
    ixz: 0
    iyy: 0.00305317
    iyz: 0
    izz: 0.005625
  }
  pose {
    position {
      x: 0
      y: 0
      z: 0.05
    }
    orientation {
      x: 0
      y: 0
      z: 0
      w: 1
    }
  }
  visual {
    name: "ur::base_link"
    id: 11
    parent_name: "ur"
    parent_id: 10
    pose {
      position {
        x: 0
        y: 0
        z: 0.05
      }
      orientation {
        x: 0
        y: 0
        z: 0
        w: 1
      }
    }
    type: LINK
  }
  visual {
    name: "ur::base_link::base_link_inertia_visual"
    id: 12
    parent_name: "ur::base_link"
    parent_id: 11
    pose {
      position {
        x: 0
        y: 0
        z: 0
      }
      orientation {
        x: 0
        y: 0
        z: 0
        w: 1
      }
    }
    geometry {
      type: MESH
      mesh {
        filename: "file:///home/dan/ros/gz_ws/install/share/ur_description/meshes/ur3e/visual/base.dae"
        scale {
          x: 1
          y: 1
          z: 1
        }
      }
    }
    is_static: false
    scale {
      x: 1
      y: 1
      z: 1
    }
    type: VISUAL
  }
  collision {
    id: 13
    name: "ur::base_link::base_link_inertia_collision"
    laser_retro: 0
    pose {
      position {
        x: 0
        y: 0
        z: 0
      }
      orientation {
        x: 0
        y: 0
        z: 0
        w: 1
      }
    }
    geometry {
      type: MESH
      mesh {
        filename: "file:///home/dan/ros/gz_ws/install/share/ur_description/meshes/ur3e/collision/base.stl"
        scale {
          x: 1
          y: 1
          z: 1
        }
      }
    }
    surface {
      friction {
        mu: 1
        mu2: 1
        fdir1 {
          x: 0
          y: 0
          z: 0
        }
        slip1: 0
        slip2: 0
        torsional {
          coefficient: 1
          use_patch_radius: true
          patch_radius: 0
          surface_radius: 0
          ode {
            slip: 0
          }
        }
      }
      restitution_coefficient: 0
      bounce_threshold: 100000
      soft_cfm: 0
      soft_erp: 0.2
      kp: 1000000000000
      kd: 1
      max_vel: 0.01
      min_depth: 0
      collide_without_contact: false
      collide_without_contact_bitmask: 1
      collide_bitmask: 65535
      elastic_modulus: 0
    }
    visual {
      name: "ur::base_link::base_link_inertia_collision"
      id: 13
      parent_name: "ur::base_link"
      parent_id: 11
      pose {
        position {
          x: 0
          y: 0
          z: 0
        }
        orientation {
          x: 0
          y: 0
          z: 0
          w: 1
        }
      }
      type: COLLISION
    }
    visual {
      name: "ur::base_link::base_link_inertia_collision__COLLISION_VISUAL__"
      id: 14
      parent_name: "ur::base_link"
      parent_id: 11
      cast_shadows: false
      pose {
        position {
          x: 0
          y: 0
          z: 0
        }
        orientation {
          x: 0
          y: 0
          z: 0
          w: 1
        }
      }
      geometry {
        type: MESH
        mesh {
          filename: "file:///home/dan/ros/gz_ws/install/share/ur_description/meshes/ur3e/collision/base.stl"
          scale {
            x: 1
            y: 1
            z: 1
          }
        }
      }
      material {
        script {
          uri: "file://media/materials/scripts/gazebo.material"
          name: "Gazebo/OrangeTransparent"
        }
      }
      is_static: false
      type: COLLISION
    }
  }
  canonical: true
  enable_wind: false
}
link {
  id: 16
  name: "ur::shoulder_link"
  self_collide: false
  gravity: true
  kinematic: false
  enabled: true
  inertial {
    mass: 2
    pose {
      position {
        x: 0
        y: 0
        z: 0
      }
      orientation {
        x: 0
        y: 0
        z: 0
        w: 1
      }
    }
    ixx: 0.00809316
    ixy: 0
    ixz: 0
    iyy: 0.00809316
    iyz: 0
    izz: 0.005625
  }
  pose {
    position {
      x: 2.7853444170520962e-07
      y: 1.1372628390970756e-06
      z: 0.20184985675060552
    }
    orientation {
      x: 5.743475973535535e-06
      y: 3.123253744542718e-05
      z: 0.99999999918315985
      w: -2.5004427505359085e-05
    }
  }
  visual {
    name: "ur::shoulder_link"
    id: 16
    parent_name: "ur"
    parent_id: 10
    pose {
      position {
        x: 2.7853444170520962e-07
        y: 1.1372628390970756e-06
        z: 0.20184985675060552
      }
      orientation {
        x: 5.743475973535535e-06
        y: 3.123253744542718e-05
        z: 0.99999999918315985
        w: -2.5004427505359085e-05
      }
    }
    type: LINK
  }
  visual {
    name: "ur::shoulder_link::shoulder_link_visual"
    id: 17
    parent_name: "ur::shoulder_link"
    parent_id: 16
    pose {
      position {
        x: 0
        y: 0
        z: 0
      }
      orientation {
        x: 0
        y: 0
        z: 0.99999999999911982
        w: 1.3267948966775328e-06
      }
    }
    geometry {
      type: MESH
      mesh {
        filename: "file:///home/dan/ros/gz_ws/install/share/ur_description/meshes/ur3e/visual/shoulder.dae"
        scale {
          x: 1
          y: 1
          z: 1
        }
      }
    }
    is_static: false
    scale {
      x: 1
      y: 1
      z: 1
    }
    type: VISUAL
  }
  collision {
    id: 18
    name: "ur::shoulder_link::shoulder_link_collision"
    laser_retro: 0
    pose {
      position {
        x: 0
        y: 0
        z: 0
      }
      orientation {
        x: 0
        y: 0
        z: 0.99999999999911982
        w: 1.3267948966775328e-06
      }
    }
    geometry {
      type: MESH
      mesh {
        filename: "file:///home/dan/ros/gz_ws/install/share/ur_description/meshes/ur3e/collision/shoulder.stl"
        scale {
          x: 1
          y: 1
          z: 1
        }
      }
    }
    surface {
      friction {
        mu: 1
        mu2: 1
        fdir1 {
          x: 0
          y: 0
          z: 0
        }
        slip1: 0
        slip2: 0
        torsional {
          coefficient: 1
          use_patch_radius: true
          patch_radius: 0
          surface_radius: 0
          ode {
            slip: 0
          }
        }
      }
      restitution_coefficient: 0
      bounce_threshold: 100000
      soft_cfm: 0
      soft_erp: 0.2
      kp: 1000000000000
      kd: 1
      max_vel: 0.01
      min_depth: 0
      collide_without_contact: false
      collide_without_contact_bitmask: 1
      collide_bitmask: 65535
      elastic_modulus: 0
    }
    visual {
      name: "ur::shoulder_link::shoulder_link_collision"
      id: 18
      parent_name: "ur::shoulder_link"
      parent_id: 16
      pose {
        position {
          x: 0
          y: 0
          z: 0
        }
        orientation {
          x: 0
          y: 0
          z: 0.99999999999911982
          w: 1.3267948966775328e-06
        }
      }
      type: COLLISION
    }
    visual {
      name: "ur::shoulder_link::shoulder_link_collision__COLLISION_VISUAL__"
      id: 19
      parent_name: "ur::shoulder_link"
      parent_id: 16
      cast_shadows: false
      pose {
        position {
          x: 0
          y: 0
          z: 0
        }
        orientation {
          x: 0
          y: 0
          z: 0.99999999999911982
          w: 1.3267948966775328e-06
        }
      }
      geometry {
        type: MESH
        mesh {
          filename: "file:///home/dan/ros/gz_ws/install/share/ur_description/meshes/ur3e/collision/shoulder.stl"
          scale {
            x: 1
            y: 1
            z: 1
          }
        }
      }
      material {
        script {
          uri: "file://media/materials/scripts/gazebo.material"
          name: "Gazebo/OrangeTransparent"
        }
      }
      is_static: false
      type: COLLISION
    }
  }
  enable_wind: false
}
link {
  id: 21
  name: "ur::upper_arm_link"
  self_collide: false
  gravity: true
  kinematic: false
  enabled: true
  inertial {
    mass: 3.42
    pose {
      position {
        x: -0.121825
        y: 0
        z: 0.12
      }
      orientation {
        x: 5.93570830084467e-12
        y: 0.70710901804279691
        z: 5.93570830084467e-12
        w: 0.70710454432322223
      }
    }
    ixx: 0.0217285
    ixy: 0
    ixz: 0
    iyy: 0.0217285
    iyz: 0
    izz: 0.00961875
  }
  pose {
    position {
      x: 3.918183354635e-07
      y: 2.087238063334397e-06
      z: 0.20184845911463806
    }
    orientation {
      x: -0.49983210018104046
      y: 0.50021095701643148
      z: 0.50019325054294794
      w: 0.49976352630078519
    }
  }
  visual {
    name: "ur::upper_arm_link"
    id: 21
    parent_name: "ur"
    parent_id: 10
    pose {
      position {
        x: 3.918183354635e-07
        y: 2.087238063334397e-06
        z: 0.20184845911463806
      }
      orientation {
        x: -0.49983210018104046
        y: 0.50021095701643148
        z: 0.50019325054294794
        w: 0.49976352630078519
      }
    }
    type: LINK
  }
  visual {
    name: "ur::upper_arm_link::upper_arm_link_visual"
    id: 22
    parent_name: "ur::upper_arm_link"
    parent_id: 21
    pose {
      position {
        x: -7.72917564369549e-23
        y: 5.5511151231257827e-17
        z: 0.11999999999999997
      }
      orientation {
        x: 0.49999999999662686
        y: -0.5000018366025516
        z: -0.49999999999662686
        w: 0.49999816339744829
      }
    }
    geometry {
      type: MESH
      mesh {
        filename: "file:///home/dan/ros/gz_ws/install/share/ur_description/meshes/ur3e/visual/upperarm.dae"
        scale {
          x: 1
          y: 1
          z: 1
        }
      }
    }
    is_static: false
    scale {
      x: 1
      y: 1
      z: 1
    }
    type: VISUAL
  }
  collision {
    id: 23
    name: "ur::upper_arm_link::upper_arm_link_collision"
    laser_retro: 0
    pose {
      position {
        x: -7.72917564369549e-23
        y: 5.5511151231257827e-17
        z: 0.11999999999999997
      }
      orientation {
        x: 0.49999999999662686
        y: -0.5000018366025516
        z: -0.49999999999662686
        w: 0.49999816339744829
      }
    }
    geometry {
      type: MESH
      mesh {
        filename: "file:///home/dan/ros/gz_ws/install/share/ur_description/meshes/ur3e/collision/upperarm.stl"
        scale {
          x: 1
          y: 1
          z: 1
        }
      }
    }
    surface {
      friction {
        mu: 1
        mu2: 1
        fdir1 {
          x: 0
          y: 0
          z: 0
        }
        slip1: 0
        slip2: 0
        torsional {
          coefficient: 1
          use_patch_radius: true
          patch_radius: 0
          surface_radius: 0
          ode {
            slip: 0
          }
        }
      }
      restitution_coefficient: 0
      bounce_threshold: 100000
      soft_cfm: 0
      soft_erp: 0.2
      kp: 1000000000000
      kd: 1
      max_vel: 0.01
      min_depth: 0
      collide_without_contact: false
      collide_without_contact_bitmask: 1
      collide_bitmask: 65535
      elastic_modulus: 0
    }
    visual {
      name: "ur::upper_arm_link::upper_arm_link_collision"
      id: 23
      parent_name: "ur::upper_arm_link"
      parent_id: 21
      pose {
        position {
          x: -7.72917564369549e-23
          y: 5.5511151231257827e-17
          z: 0.11999999999999997
        }
        orientation {
          x: 0.49999999999662686
          y: -0.5000018366025516
          z: -0.49999999999662686
          w: 0.49999816339744829
        }
      }
      type: COLLISION
    }
    visual {
      name: "ur::upper_arm_link::upper_arm_link_collision__COLLISION_VISUAL__"
      id: 24
      parent_name: "ur::upper_arm_link"
      parent_id: 21
      cast_shadows: false
      pose {
        position {
          x: -7.72917564369549e-23
          y: 5.5511151231257827e-17
          z: 0.11999999999999997
        }
        orientation {
          x: 0.49999999999662686
          y: -0.5000018366025516
          z: -0.49999999999662686
          w: 0.49999816339744829
        }
      }
      geometry {
        type: MESH
        mesh {
          filename: "file:///home/dan/ros/gz_ws/install/share/ur_description/meshes/ur3e/collision/upperarm.stl"
          scale {
            x: 1
            y: 1
            z: 1
          }
        }
      }
      material {
        script {
          uri: "file://media/materials/scripts/gazebo.material"
          name: "Gazebo/OrangeTransparent"
        }
      }
      is_static: false
      type: COLLISION
    }
  }
  enable_wind: false
}
link {
  id: 26
  name: "ur::forearm_link"
  self_collide: false
  gravity: true
  kinematic: false
  enabled: true
  inertial {
    mass: 1.26
    pose {
      position {
        x: -0.1066
        y: 0
        z: 0.027
      }
      orientation {
        x: 5.93570830084467e-12
        y: 0.70710901804279691
        z: 5.93570830084467e-12
        w: 0.70710454432322223
      }
    }
    ixx: 0.00654457
    ixy: 0
    ixz: 0
    iyy: 0.00654457
    iyz: 0
    izz: 0.00354375
  }
  pose {
    position {
      x: 0.00019775220717024015
      y: 2.4873806324927733e-05
      z: 0.44539801092770737
    }
    orientation {
      x: -0.49983279782290546
      y: 0.50021076399604825
      z: 0.50019298933709466
      w: 0.49976328318618751
    }
  }
  visual {
    name: "ur::forearm_link"
    id: 26
    parent_name: "ur"
    parent_id: 10
    pose {
      position {
        x: 0.00019775220717024015
        y: 2.4873806324927733e-05
        z: 0.44539801092770737
      }
      orientation {
        x: -0.49983279782290546
        y: 0.50021076399604825
        z: 0.50019298933709466
        w: 0.49976328318618751
      }
    }
    type: LINK
  }
  visual {
    name: "ur::forearm_link::forearm_link_visual"
    id: 27
    parent_name: "ur::forearm_link"
    parent_id: 26
    pose {
      position {
        x: -8.3266738281831529e-17
        y: 8.3266726846886741e-17
        z: 0.026999999999999958
      }
      orientation {
        x: 0.49999999999662686
        y: -0.5000018366025516
        z: -0.49999999999662686
        w: 0.49999816339744829
      }
    }
    geometry {
      type: MESH
      mesh {
        filename: "file:///home/dan/ros/gz_ws/install/share/ur_description/meshes/ur3e/visual/forearm.dae"
        scale {
          x: 1
          y: 1
          z: 1
        }
      }
    }
    is_static: false
    scale {
      x: 1
      y: 1
      z: 1
    }
    type: VISUAL
  }
  collision {
    id: 28
    name: "ur::forearm_link::forearm_link_collision"
    laser_retro: 0
    pose {
      position {
        x: -8.3266738281831529e-17
        y: 8.3266726846886741e-17
        z: 0.026999999999999958
      }
      orientation {
        x: 0.49999999999662686
        y: -0.5000018366025516
        z: -0.49999999999662686
        w: 0.49999816339744829
      }
    }
    geometry {
      type: MESH
      mesh {
        filename: "file:///home/dan/ros/gz_ws/install/share/ur_description/meshes/ur3e/collision/forearm.stl"
        scale {
          x: 1
          y: 1
          z: 1
        }
      }
    }
    surface {
      friction {
        mu: 1
        mu2: 1
        fdir1 {
          x: 0
          y: 0
          z: 0
        }
        slip1: 0
        slip2: 0
        torsional {
          coefficient: 1
          use_patch_radius: true
          patch_radius: 0
          surface_radius: 0
          ode {
            slip: 0
          }
        }
      }
      restitution_coefficient: 0
      bounce_threshold: 100000
      soft_cfm: 0
      soft_erp: 0.2
      kp: 1000000000000
      kd: 1
      max_vel: 0.01
      min_depth: 0
      collide_without_contact: false
      collide_without_contact_bitmask: 1
      collide_bitmask: 65535
      elastic_modulus: 0
    }
    visual {
      name: "ur::forearm_link::forearm_link_collision"
      id: 28
      parent_name: "ur::forearm_link"
      parent_id: 26
      pose {
        position {
          x: -8.3266738281831529e-17
          y: 8.3266726846886741e-17
          z: 0.026999999999999958
        }
        orientation {
          x: 0.49999999999662686
          y: -0.5000018366025516
          z: -0.49999999999662686
          w: 0.49999816339744829
        }
      }
      type: COLLISION
    }
    visual {
      name: "ur::forearm_link::forearm_link_collision__COLLISION_VISUAL__"
      id: 29
      parent_name: "ur::forearm_link"
      parent_id: 26
      cast_shadows: false
      pose {
        position {
          x: -8.3266738281831529e-17
          y: 8.3266726846886741e-17
          z: 0.026999999999999958
        }
        orientation {
          x: 0.49999999999662686
          y: -0.5000018366025516
          z: -0.49999999999662686
          w: 0.49999816339744829
        }
      }
      geometry {
        type: MESH
        mesh {
          filename: "file:///home/dan/ros/gz_ws/install/share/ur_description/meshes/ur3e/collision/forearm.stl"
          scale {
            x: 1
            y: 1
            z: 1
          }
        }
      }
      material {
        script {
          uri: "file://media/materials/scripts/gazebo.material"
          name: "Gazebo/OrangeTransparent"
        }
      }
      is_static: false
      type: COLLISION
    }
  }
  enable_wind: false
}
link {
  id: 31
  name: "ur::wrist_1_link"
  self_collide: false
  gravity: true
  kinematic: false
  enabled: true
  inertial {
    mass: 0.8
    pose {
      position {
        x: 0
        y: 0
        z: 0
      }
      orientation {
        x: 0
        y: 0
        z: 0
        w: 1
      }
    }
    ixx: 0.002085
    ixy: 0
    ixz: 0
    iyy: 0.002085
    iyz: 0
    izz: 0.00225
  }
  pose {
    position {
      x: 0.00036334252068871383
      y: 0.13109407964587383
      z: 0.65858557360701964
    }
    orientation {
      x: -0.49983417795110846
      y: 0.50021372516429452
      z: 0.50019174872973793
      w: 0.49976018069858874
    }
  }
  visual {
    name: "ur::wrist_1_link"
    id: 31
    parent_name: "ur"
    parent_id: 10
    pose {
      position {
        x: 0.00036334252068871383
        y: 0.13109407964587383
        z: 0.65858557360701964
      }
      orientation {
        x: -0.49983417795110846
        y: 0.50021372516429452
        z: 0.50019174872973793
        w: 0.49976018069858874
      }
    }
    type: LINK
  }
  visual {
    name: "ur::wrist_1_link::wrist_1_link_visual"
    id: 32
    parent_name: "ur::wrist_1_link"
    parent_id: 31
    pose {
      position {
        x: -1.6653340964806023e-16
        y: 2.7755575615628914e-17
        z: -0.104
      }
      orientation {
        x: 0.70710807985947366
        y: -1.4973541021779167e-22
        z: 1.4973596022767479e-22
        w: 0.70710548251123639
      }
    }
    geometry {
      type: MESH
      mesh {
        filename: "file:///home/dan/ros/gz_ws/install/share/ur_description/meshes/ur3e/visual/wrist1.dae"
        scale {
          x: 1
          y: 1
          z: 1
        }
      }
    }
    is_static: false
    scale {
      x: 1
      y: 1
      z: 1
    }
    type: VISUAL
  }
  collision {
    id: 33
    name: "ur::wrist_1_link::wrist_1_link_collision"
    laser_retro: 0
    pose {
      position {
        x: -1.6653340964806023e-16
        y: 2.7755575615628914e-17
        z: -0.104
      }
      orientation {
        x: 0.70710807985947366
        y: -1.4973541021779167e-22
        z: 1.4973596022767479e-22
        w: 0.70710548251123639
      }
    }
    geometry {
      type: MESH
      mesh {
        filename: "file:///home/dan/ros/gz_ws/install/share/ur_description/meshes/ur3e/collision/wrist1.stl"
        scale {
          x: 1
          y: 1
          z: 1
        }
      }
    }
    surface {
      friction {
        mu: 1
        mu2: 1
        fdir1 {
          x: 0
          y: 0
          z: 0
        }
        slip1: 0
        slip2: 0
        torsional {
          coefficient: 1
          use_patch_radius: true
          patch_radius: 0
          surface_radius: 0
          ode {
            slip: 0
          }
        }
      }
      restitution_coefficient: 0
      bounce_threshold: 100000
      soft_cfm: 0
      soft_erp: 0.2
      kp: 1000000000000
      kd: 1
      max_vel: 0.01
      min_depth: 0
      collide_without_contact: false
      collide_without_contact_bitmask: 1
      collide_bitmask: 65535
      elastic_modulus: 0
    }
    visual {
      name: "ur::wrist_1_link::wrist_1_link_collision"
      id: 33
      parent_name: "ur::wrist_1_link"
      parent_id: 31
      pose {
        position {
          x: -1.6653340964806023e-16
          y: 2.7755575615628914e-17
          z: -0.104
        }
        orientation {
          x: 0.70710807985947366
          y: -1.4973541021779167e-22
          z: 1.4973596022767479e-22
          w: 0.70710548251123639
        }
      }
      type: COLLISION
    }
    visual {
      name: "ur::wrist_1_link::wrist_1_link_collision__COLLISION_VISUAL__"
      id: 34
      parent_name: "ur::wrist_1_link"
      parent_id: 31
      cast_shadows: false
      pose {
        position {
          x: -1.6653340964806023e-16
          y: 2.7755575615628914e-17
          z: -0.104
        }
        orientation {
          x: 0.70710807985947366
          y: -1.4973541021779167e-22
          z: 1.4973596022767479e-22
          w: 0.70710548251123639
        }
      }
      geometry {
        type: MESH
        mesh {
          filename: "file:///home/dan/ros/gz_ws/install/share/ur_description/meshes/ur3e/collision/wrist1.stl"
          scale {
            x: 1
            y: 1
            z: 1
          }
        }
      }
      material {
        script {
          uri: "file://media/materials/scripts/gazebo.material"
          name: "Gazebo/OrangeTransparent"
        }
      }
      is_static: false
      type: COLLISION
    }
  }
  enable_wind: false
}
link {
  id: 36
  name: "ur::wrist_2_link"
  self_collide: false
  gravity: true
  kinematic: false
  enabled: true
  inertial {
    mass: 0.8
    pose {
      position {
        x: 0
        y: 0
        z: 0
      }
      orientation {
        x: 0
        y: 0
        z: 0
        w: 1
      }
    }
    ixx: 0.002085
    ixy: 0
    ixz: 0
    iyy: 0.002085
    iyz: 0
    izz: 0.00225
  }
  pose {
    position {
      x: 0.085713351212226757
      y: 0.13109919831668315
      z: 0.65851573804648744
    }
    orientation {
      x: -0.24477257751200432
      y: 0.663697987295043
      z: -0.24453624200255489
      w: 0.66316920412961489
    }
  }
  visual {
    name: "ur::wrist_2_link"
    id: 36
    parent_name: "ur"
    parent_id: 10
    pose {
      position {
        x: 0.085713351212226757
        y: 0.13109919831668315
        z: 0.65851573804648744
      }
      orientation {
        x: -0.24477257751200432
        y: 0.663697987295043
        z: -0.24453624200255489
        w: 0.66316920412961489
      }
    }
    type: LINK
  }
  visual {
    name: "ur::wrist_2_link::wrist_2_link_visual"
    id: 37
    parent_name: "ur::wrist_2_link"
    parent_id: 36
    pose {
      position {
        x: -4.9960036108159625e-16
        y: 2.124844926931163e-50
        z: -0.0853500000000001
      }
      orientation {
        x: 0
        y: 1.6155871338926322e-27
        z: -7.7048348339792173e-23
        w: 0.99999999999999989
      }
    }
    geometry {
      type: MESH
      mesh {
        filename: "file:///home/dan/ros/gz_ws/install/share/ur_description/meshes/ur3e/visual/wrist2.dae"
        scale {
          x: 1
          y: 1
          z: 1
        }
      }
    }
    is_static: false
    scale {
      x: 1
      y: 1
      z: 1
    }
    type: VISUAL
  }
  collision {
    id: 38
    name: "ur::wrist_2_link::wrist_2_link_collision"
    laser_retro: 0
    pose {
      position {
        x: -4.9960036108159625e-16
        y: 2.124844926931163e-50
        z: -0.0853500000000001
      }
      orientation {
        x: 0
        y: 1.6155871338926322e-27
        z: -7.7048348339792173e-23
        w: 0.99999999999999989
      }
    }
    geometry {
      type: MESH
      mesh {
        filename: "file:///home/dan/ros/gz_ws/install/share/ur_description/meshes/ur3e/collision/wrist2.stl"
        scale {
          x: 1
          y: 1
          z: 1
        }
      }
    }
    surface {
      friction {
        mu: 1
        mu2: 1
        fdir1 {
          x: 0
          y: 0
          z: 0
        }
        slip1: 0
        slip2: 0
        torsional {
          coefficient: 1
          use_patch_radius: true
          patch_radius: 0
          surface_radius: 0
          ode {
            slip: 0
          }
        }
      }
      restitution_coefficient: 0
      bounce_threshold: 100000
      soft_cfm: 0
      soft_erp: 0.2
      kp: 1000000000000
      kd: 1
      max_vel: 0.01
      min_depth: 0
      collide_without_contact: false
      collide_without_contact_bitmask: 1
      collide_bitmask: 65535
      elastic_modulus: 0
    }
    visual {
      name: "ur::wrist_2_link::wrist_2_link_collision"
      id: 38
      parent_name: "ur::wrist_2_link"
      parent_id: 36
      pose {
        position {
          x: -4.9960036108159625e-16
          y: 2.124844926931163e-50
          z: -0.0853500000000001
        }
        orientation {
          x: 0
          y: 1.6155871338926322e-27
          z: -7.7048348339792173e-23
          w: 0.99999999999999989
        }
      }
      type: COLLISION
    }
    visual {
      name: "ur::wrist_2_link::wrist_2_link_collision__COLLISION_VISUAL__"
      id: 39
      parent_name: "ur::wrist_2_link"
      parent_id: 36
      cast_shadows: false
      pose {
        position {
          x: -4.9960036108159625e-16
          y: 2.124844926931163e-50
          z: -0.0853500000000001
        }
        orientation {
          x: 0
          y: 1.6155871338926322e-27
          z: -7.7048348339792173e-23
          w: 0.99999999999999989
        }
      }
      geometry {
        type: MESH
        mesh {
          filename: "file:///home/dan/ros/gz_ws/install/share/ur_description/meshes/ur3e/collision/wrist2.stl"
          scale {
            x: 1
            y: 1
            z: 1
          }
        }
      }
      material {
        script {
          uri: "file://media/materials/scripts/gazebo.material"
          name: "Gazebo/OrangeTransparent"
        }
      }
      is_static: false
      type: COLLISION
    }
  }
  enable_wind: false
}
link {
  id: 41
  name: "ur::wrist_3_link"
  self_collide: false
  gravity: true
  kinematic: false
  enabled: true
  inertial {
    mass: 0.35
    pose {
      position {
        x: 0
        y: 0
        z: -0.02
      }
      orientation {
        x: 0
        y: 0
        z: 0
        w: 1
      }
    }
    ixx: 0.000136267
    ixy: 0
    ixz: 0
    iyy: 0.000136267
    iyz: 0
    izz: 0.0001792
  }
  pose {
    position {
      x: 0.08566066805473424
      y: 0.20114854985977121
      z: 0.59871981837749
    }
    orientation {
      x: -0.64201255121099854
      y: 0.6422182960257139
      z: 0.29639275377029656
      w: 0.29584942090501687
    }
  }
  visual {
    name: "ur::wrist_3_link"
    id: 41
    parent_name: "ur"
    parent_id: 10
    pose {
      position {
        x: 0.08566066805473424
        y: 0.20114854985977121
        z: 0.59871981837749
      }
      orientation {
        x: -0.64201255121099854
        y: 0.6422182960257139
        z: 0.29639275377029656
        w: 0.29584942090501687
      }
    }
    type: LINK
  }
  visual {
    name: "ur::wrist_3_link::wrist_3_link_visual"
    id: 42
    parent_name: "ur::wrist_3_link"
    parent_id: 41
    pose {
      position {
        x: -3.8857805861880479e-16
        y: -6.9388939039072284e-17
        z: -0.092099999999999918
      }
      orientation {
        x: 0.70710807985947366
        y: 0
        z: 0
        w: 0.70710548251123639
      }
    }
    geometry {
      type: MESH
      mesh {
        filename: "file:///home/dan/ros/gz_ws/install/share/ur_description/meshes/ur3e/visual/wrist3.dae"
        scale {
          x: 1
          y: 1
          z: 1
        }
      }
    }
    is_static: false
    scale {
      x: 1
      y: 1
      z: 1
    }
    type: VISUAL
  }
  collision {
    id: 43
    name: "ur::wrist_3_link::wrist_3_link_collision"
    laser_retro: 0
    pose {
      position {
        x: -3.8857805861880479e-16
        y: -6.9388939039072284e-17
        z: -0.092099999999999918
      }
      orientation {
        x: 0.70710807985947366
        y: 0
        z: 0
        w: 0.70710548251123639
      }
    }
    geometry {
      type: MESH
      mesh {
        filename: "file:///home/dan/ros/gz_ws/install/share/ur_description/meshes/ur3e/collision/wrist3.stl"
        scale {
          x: 1
          y: 1
          z: 1
        }
      }
    }
    surface {
      friction {
        mu: 1
        mu2: 1
        fdir1 {
          x: 0
          y: 0
          z: 0
        }
        slip1: 0
        slip2: 0
        torsional {
          coefficient: 1
          use_patch_radius: true
          patch_radius: 0
          surface_radius: 0
          ode {
            slip: 0
          }
        }
      }
      restitution_coefficient: 0
      bounce_threshold: 100000
      soft_cfm: 0
      soft_erp: 0.2
      kp: 1000000000000
      kd: 1
      max_vel: 0.01
      min_depth: 0
      collide_without_contact: false
      collide_without_contact_bitmask: 1
      collide_bitmask: 65535
      elastic_modulus: 0
    }
    visual {
      name: "ur::wrist_3_link::wrist_3_link_collision"
      id: 43
      parent_name: "ur::wrist_3_link"
      parent_id: 41
      pose {
        position {
          x: -3.8857805861880479e-16
          y: -6.9388939039072284e-17
          z: -0.092099999999999918
        }
        orientation {
          x: 0.70710807985947366
          y: 0
          z: 0
          w: 0.70710548251123639
        }
      }
      type: COLLISION
    }
    visual {
      name: "ur::wrist_3_link::wrist_3_link_collision__COLLISION_VISUAL__"
      id: 44
      parent_name: "ur::wrist_3_link"
      parent_id: 41
      cast_shadows: false
      pose {
        position {
          x: -3.8857805861880479e-16
          y: -6.9388939039072284e-17
          z: -0.092099999999999918
        }
        orientation {
          x: 0.70710807985947366
          y: 0
          z: 0
          w: 0.70710548251123639
        }
      }
      geometry {
        type: MESH
        mesh {
          filename: "file:///home/dan/ros/gz_ws/install/share/ur_description/meshes/ur3e/collision/wrist3.stl"
          scale {
            x: 1
            y: 1
            z: 1
          }
        }
      }
      material {
        script {
          uri: "file://media/materials/scripts/gazebo.material"
          name: "Gazebo/OrangeTransparent"
        }
      }
      is_static: false
      type: COLLISION
    }
  }
  enable_wind: false
}
visual {
  name: "ur"
  id: 10
  parent_name: "default"
  parent_id: 1
  pose {
    position {
      x: 1.7664581161916394e-07
      y: 9.8421628554235216e-07
      z: 6.1777577546606732e-08
    }
    orientation {
      x: 1.0063997217110073e-05
      y: -1.8200132416254767e-06
      z: -1.6235609612999127e-07
      w: 0.99999999994768851
    }
  }
  type: MODEL
}
scale {
  x: 1
  y: 1
  z: 1
}
self_collide: false
enable_wind: false
plugin {
  name: "gazebo_ros2_control"
  filename: "libgazebo_ros2_control.so"
  innerxml: "<parameters>/home/dan/ros/gz_ws/install/share/ur_simulation_gazebo/config/ur_controllers.yaml</parameters>\n"
}

From my fork:

Joint dynamics settings in xacro file
<xacro:property name="fric_scale" value="1.0" />  
    <xacro:property name="joint_dyn_dict"
      value="${dict(
          joint_dynamics=dict(
              shoulder_pan_joint=dict(damping=0.0, friction=fric_scale*jnt_limits['shoulder_pan_joint']['max_effort']),
              shoulder_lift_joint=dict(damping=0.0, friction=fric_scale*jnt_limits['shoulder_lift_joint']['max_effort']),
              elbow_joint=dict(damping=0.0, friction=fric_scale*jnt_limits['elbow_joint']['max_effort']),
              wrist_1_joint=dict(damping=0.0, friction=fric_scale*jnt_limits['wrist_1_joint']['max_effort']),
              wrist_2_joint=dict(damping=0.0, friction=fric_scale*jnt_limits['wrist_2_joint']['max_effort']),
              wrist_3_joint=dict(damping=0.0, friction=fric_scale*jnt_limits['wrist_3_joint']['max_effort'])))}"
    />
Resulting URDF joints
<joint name="shoulder_pan_joint" type="revolute">
    <parent link="base_link_inertia"/>
    <child link="shoulder_link"/>
    <origin rpy="0 0 0" xyz="0 0 0.15185"/>
    <axis xyz="0 0 1"/>
    <limit effort="56.0" lower="-6.283185307179586" upper="6.283185307179586" velocity="3.141592653589793"/>
    <safety_controller k_position="20" k_velocity="0.0" soft_lower_limit="-6.133185307179586" soft_upper_limit="6.133185307179586"/>
    <dynamics damping="0.0" friction="56.0"/>
  </joint>
  <joint name="shoulder_lift_joint" type="revolute">
    <parent link="shoulder_link"/>
    <child link="upper_arm_link"/>
    <origin rpy="1.570796327 0 0" xyz="0 0 0"/>
    <axis xyz="0 0 1"/>
    <limit effort="56.0" lower="-6.283185307179586" upper="6.283185307179586" velocity="3.141592653589793"/>
    <safety_controller k_position="20" k_velocity="0.0" soft_lower_limit="-6.133185307179586" soft_upper_limit="6.133185307179586"/>
    <dynamics damping="0.0" friction="56.0"/>
  </joint>
  <joint name="elbow_joint" type="revolute">
    <parent link="upper_arm_link"/>
    <child link="forearm_link"/>
    <origin rpy="0 0 0" xyz="-0.24355 0 0"/>
    <axis xyz="0 0 1"/>
    <limit effort="28.0" lower="-3.141592653589793" upper="3.141592653589793" velocity="3.141592653589793"/>
    <safety_controller k_position="20" k_velocity="0.0" soft_lower_limit="-2.991592653589793" soft_upper_limit="2.991592653589793"/>
    <dynamics damping="0.0" friction="28.0"/>
  </joint>
  <joint name="wrist_1_joint" type="revolute">
    <parent link="forearm_link"/>
    <child link="wrist_1_link"/>
    <origin rpy="0 0 0" xyz="-0.2132 0 0.13105"/>
    <axis xyz="0 0 1"/>
    <limit effort="12.0" lower="-6.283185307179586" upper="6.283185307179586" velocity="6.283185307179586"/>
    <safety_controller k_position="20" k_velocity="0.0" soft_lower_limit="-6.133185307179586" soft_upper_limit="6.133185307179586"/>
    <dynamics damping="0.0" friction="12.0"/>
  </joint>
  <joint name="wrist_2_joint" type="revolute">
    <parent link="wrist_1_link"/>
    <child link="wrist_2_link"/>
    <origin rpy="1.570796327 0 0" xyz="0 -0.08535 -1.750557762378351e-11"/>
    <axis xyz="0 0 1"/>
    <limit effort="12.0" lower="-6.283185307179586" upper="6.283185307179586" velocity="6.283185307179586"/>
    <safety_controller k_position="20" k_velocity="0.0" soft_lower_limit="-6.133185307179586" soft_upper_limit="6.133185307179586"/>
    <dynamics damping="0.0" friction="12.0"/>
  </joint>
  <joint name="wrist_3_joint" type="revolute">
    <parent link="wrist_2_link"/>
    <child link="wrist_3_link"/>
    <origin rpy="1.570796326589793 3.141592653589793 3.141592653589793" xyz="0 0.0921 -1.8890025766262e-11"/>
    <axis xyz="0 0 1"/>
    <limit effort="12.0" lower="-6.283185307179586" upper="6.283185307179586" velocity="6.283185307179586"/>
    <safety_controller k_position="20" k_velocity="0.0" soft_lower_limit="-6.133185307179586" soft_upper_limit="6.133185307179586"/>
    <dynamics damping="0.0" friction="12.0"/>
  </joint>

image

That setting, friction set to 1.0x the joint effort limit, should be equivalent to the ROS 1 behavior.

Will try to figure out where damping goes into ODE and whether either of these approaches alters reported joint efforts while the robot is moving (though it looks like I'm getting all-zero efforts on /joint_states at the moment)

@Gaurang-1402
Copy link

Hi, how are you opening this robot in Gazebo, can you please provide the exact command?

@Icon45
Copy link

Icon45 commented Jul 2, 2023

Hi @Gaurang-1402,

the exact command I used was:

ros2 launch ur_simulation_gazebo ur_sim_control.launch.py ur_type:=ur10

This launches a ur10. If you want a different robot you can change it after the "=". You can find selectable options in the ur_sim_control.launch.py-file.

@danzimmerman
Copy link

@fmauch Based on a quick test here, it looks like ros-controls/gazebo_ros2_control#213 fixed this issue.

https://youtu.be/_63QoHyDAsA

@Carrot404
Copy link

Carrot404 commented Aug 8, 2023

Hi, @danzimmerman,
It did not work for me when I am using ros2 branch of Universal_Robots_ROS2_Gazebo_Simulation with latest version of gazebo_ros2_control in ROS Humble.
Still need modifications of dynamics or friction ?

Thanks in advance!

@fmauch
Copy link
Collaborator

fmauch commented Dec 15, 2023

Things seem to be fine by now, so closing this.

@fmauch fmauch closed this as completed Dec 15, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

9 participants