Ask Your Question
0

Is it possible for a joint to mimic multiple joints in urdf?

asked 2019-04-19 12:25:36 -0500

SpencerFlow gravatar image

updated 2019-04-19 12:57:22 -0500

I am trying to model the following robot in ROS Kinetic.

image description

The servos are mounted at the base of the robot and I have to make some of the joints mimic the servo for it to move correctly. The problem is that some of the joints movement are dependent upon both drivers and would need to mimic both. Is this possible in current versions of ROS. Is there some other method of getting this robot working?

edit retag flag offensive close merge delete

Comments

1

Is it possible for a joint to mimic multiple joints in urdf?

No, the mimic tag in urdf does not support contributions of multiple joints to the calculated joint position.

Is this possible in current versions of ROS

Note: this is a limitation of urdf, not "ROS".

gvdhoorn gravatar imagegvdhoorn ( 2019-04-19 12:36:23 -0500 )edit
1

Could you please attach your images directly to the question? I've given you sufficient karma to do that.

gvdhoorn gravatar imagegvdhoorn ( 2019-04-19 12:37:03 -0500 )edit

I've attached the design which lists the dependencies.

SpencerFlow gravatar imageSpencerFlow ( 2019-04-19 12:54:30 -0500 )edit

Do I have any alternative methods of visualizing the robot with ROS and RVIZ?

SpencerFlow gravatar imageSpencerFlow ( 2019-04-19 13:03:39 -0500 )edit

If you know the joint angles of the joints along the main kinematic chain (ie: from the base to the flange) you could create a urdf that models that chain (or tree) and that should allow you to visualise it.

gvdhoorn gravatar imagegvdhoorn ( 2019-04-20 00:41:53 -0500 )edit

1 Answer

Sort by ยป oldest newest most voted
0

answered 2019-06-18 09:05:28 -0500

bakerhillpins gravatar image

updated 2019-06-18 09:08:15 -0500

As mentioned in the comments, URDF doesn't support contributions of multiple joints to a single joint.

However, I was able to model the behavior (in a Dobot Magician) by placing multiple joints "on top of each other". I did this by placing a virtual link (has a 0 length) between 2 joints. From a visual perspective It will appear that a single joint on your arm is moving but the 2 joint frames will visible and in effect be additive since the joint is at the same location. For example:

<joint name="joint_rotator_to_reararm" type="revolute">
  <parent link="link_rotator" />
  <child link="link_reararm" />
  <origin rpy="0 0 0" xyz="0 0 0.082" />
  <axis xyz="0 1 0" />
  <limit effort="20" lower="-0.0872663888889" upper="1.570795" velocity="1" />
</joint>
<link name="link_reararm">
  <visual>
    <origin rpy="0 0 0" xyz="0 0 0" />
    <geometry>
      <mesh filename="package://xxx.dae" />
    </geometry>
  </visual>
  <collision>
    <origin rpy="0 0 0" xyz="0 0 0" />
    <geometry>
      <mesh filename="package://xxx.stl" />
    </geometry>
  </collision>
</link>
<joint name="joint_reararm_to_reararm_virtual" type="revolute">
  <parent link="link_reararm" />
  <child link="link_reararm_virtual" />
  <mimic joint="joint_rotator_to_reararm" multiplier="-1" offset="0" />
  <origin rpy="0 0 0" xyz="0 0 0.135" />
  <axis xyz="0 1 0" />
  <limit effort="20" lower="0" upper="0" velocity="1" />
</joint>
<link name="link_reararm_virtual">
</link>
<joint name="joint_reararm_virtual_to_forearm" type="revolute">
  <parent link="link_reararm_virtual" />
  <child link="link_forearm" />
  <origin rpy="0 0 0" xyz="0 0 0" />
  <axis xyz="0 1 0" />
  <limit effort="20" lower="-0.261799166667" upper="1.570795" velocity="1" />
</joint>
<link name="link_forearm">
  <visual>
    <origin rpy="0 0 0" xyz="0 0 0" />
    <geometry>
      <mesh filename="package://xxx.dae" />
    </geometry>
  </visual>
  <collision>
    <origin rpy="0 0 0" xyz="0 0 0" />
    <geometry>
      <mesh filename="package://xxx.stl" />
    </geometry>
  </collision>
</link>

So I'd think you could just place multiple mimic joints on top of each other to include their contribution to the movement of any particular joint.

This works great if you're just playing with the simple joint position sliders in Rviz as you can get accurate movement for the robot. I was able to model the Magician this way. However, when you try to use that model with moveit it falls apart because the default KDL solver doesn't support mimic joints. As I'm new to ROS I'm in the dark as to support for mimic joints with moveit and the available IK space. At least I've not found any way to use mimic joints in moveit and my searching foo has found nothing so far. I'm also unsure if multiple joints on top of each other is even valid. That being said I don't know that this solution serves any long term goals you might ... (more)

edit flag offensive delete link more

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Question Tools

2 followers

Stats

Asked: 2019-04-19 12:24:27 -0500

Seen: 134 times

Last updated: Jun 18