[solved] Help to model a 3 DOF robotic arm URDF

asked 2019-02-18 16:20:37 -0500

dmast gravatar image

updated 2019-06-28 12:23:35 -0500

Hi all, for an university project i'm building a 3 DOF robotic arm. The structure is very simple and i've successfully ended the design in Solidworks and used the Solidworks to URDF plugin to export the URDF file.

This is the lateral view of the ended design. As you can see from the image the robot has a structure (a sort of double pendulum, shown in red) to keep the end effector always parallel to the ground. My problem is that i'm not able to model that structure in the URDF.

The current version of the robot is composed of the following links:

  • ground_link
  • base_link
  • shoulder_link
  • arm_link
  • forearm_link
  • tool_link

But as you can see from this video (i ran roslaunch robotic_arm_description display.launch) when i move arm_link forward , the end effector doesn't stay parallel to ground (obviously) because the latter structure has not been taken into account in the URDF.

I was thinking to use the tag mimic in the joint description to specify all the passive joints in that structure, but i don't think it's the correct way.

Looking on internet i found the Swift robot ROS package (link here), with a similar structure, but it is not clear how they solved the problem.

I'm using ROS Kinetic 1.12.14 on Ubuntu 16.04 and any advice on how to solve the problem would be very appreciated.

edit retag flag offensive close merge delete


I don't know if you got any further with this or not but I've been working on the same problem with a different Arm (Dobot Magician). I was able to model the behavior of the arm using the mimic joint (so the EF stays parallel to the ground) and this worked great with the visual sliders for joint position that come up as part of the display in Rviz. However, I can't figure out how to use moveit with mimic joints as the default setup doesn't support them and I'm still learning about other options (new to ROS).

I also looked over the Swift project you linked to hoping that they might have the answer but the changes they made to add the mimic joint don't have any followup commits that detail how they might have solved the use of mimic joints in moveit ...(more)

bakerhillpins gravatar image bakerhillpins  ( 2019-06-18 10:21:10 -0500 )edit

Thank you for your reply! I also managed to model the robot using mimic tag in the URDF. Here is the github repo for the final project.

Regarding MoveIt!, as you mentioned before, it seems that it doesn't supports closed kinematic chains like our robots, but when I was documenting about it, i found this page. Here is explained how to create your own MoveIt! plugin with the function of an IK-solver. I don't know if it is the correct way to solve the problem, but I think it's worth trying.

dmast gravatar image dmast  ( 2019-06-28 12:20:03 -0500 )edit

Did you ended up writting an IK solver for this robot ? Did you find a way to solve your problem ?

gaspard_bourgeois gravatar image gaspard_bourgeois  ( 2020-03-30 17:56:59 -0500 )edit

Hi, yes i wrote an IK function in closed form, more informations about the project here. If you go to wArm_ros->warm_description->src->joint_publisher.cpp, there is a function called warm_ik which implements inverse kinematics for the robot. I can also provide you with geometric calculations if you need them.

dmast gravatar image dmast  ( 2020-03-31 03:51:41 -0500 )edit