0
$\begingroup$

Rosanswers logo

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?


Originally posted by SpencerFlow on ROS Answers with karma: 11 on 2019-04-19

Post score: 0


Original comments

Comment by gvdhoorn on 2019-04-19:\

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".

Comment by gvdhoorn on 2019-04-19:
Could you please attach your images directly to the question? I've given you sufficient karma to do that.

Comment by SpencerFlow on 2019-04-19:
I've attached the design which lists the dependencies.

Comment by SpencerFlow on 2019-04-19:
Do I have any alternative methods of visualizing the robot with ROS and RVIZ?

Comment by gvdhoorn on 2019-04-20:
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.

Comment by gaspard_bourgeois on 2020-03-30:
Hello, did you finally find a way to model the Mearm robot ?

$\endgroup$

1 Answer 1

0
$\begingroup$

Rosanswers logo

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 have in ROS.


Originally posted by bakerhillpins with karma: 76 on 2019-06-18

This answer was ACCEPTED on the original site

Post score: 0

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.