Specify passive joints in URDF within kinematic chain for Moveit
I'm trying to generate an IKFast plugin of a 4DOF arm (UArm swift), since the standard kdl solver does not work well with arms with less than 6 DOFs.
However, there is a problem: there is a passive joint that is not actuated in the kinematic chain, and I wanted to ask if there is any possibility to specify this in the urdf file? Excluding it will not work since then the endeffector is not connected to the robot, nor does setting it to type fixed is possible because then the endeffector positions would be wrong.
In the IKFast plugin, I managed to set that joint to passive to calculate a 4DOF solution. However, when I run the plugin with Moveit, following error occurs:
[FATAL] [1508331380.959032822]: Joint numbers mismatch: URDF has 5 and IKFast has 4 [ERROR] [1508331380.959088561]: Kinematics solver of type 'robot/IKFastKinematicsPlugin' could not be initialized for group 'robotarm' [ERROR] [1508331380.959195182]: Kinematics solver could not be instantiated for joint group robotarm.
Asked by rfn123 on 2017-10-18 08:21:06 UTC
Comments
If I read your question text, it would seem that the issue lies with MoveIt, as you mention that you've succeeded in generating an IKFast plugin for the arm.
Asked by gvdhoorn on 2017-10-18 08:29:18 UTC
Hi, yes I generated the ikfast plugin with some workarounds(although I doubt the solver is really correct). Perhaps I should reformulate my question...Is there any way to handle that passive joint in moveit or in the urdf so I can test the generated IKFast plugin?
Asked by rfn123 on 2017-10-18 16:08:20 UTC
I've had mixed success using the tag for passive joints... I'm interested to hear what others say as I never found a good solution. (And if you're interested...)
Asked by mcevoyandy on 2017-10-18 23:57:16 UTC
You can configure joints to be considered passive using the MoveIt Setup Assistant. There's a specific tab for it. MoveIt should not expect joint state updates for those joints and also not include them in planning in that case, afaik.
Asked by gvdhoorn on 2017-10-19 02:48:00 UTC
Mimic joints are not conidered passive by MoveIt per se. They're just handled differently.
Asked by gvdhoorn on 2017-10-19 02:48:27 UTC
@gvdhoorn I did specialize the joint as passive during setup, but Moveit still expects a controller for that joint. I think because that joint is included in the kinematic chain, and ignoring it will interrupt the chain. But the joint is not actuated and has no controller
Asked by rfn123 on 2017-10-19 02:56:23 UTC
Without seeing your robot, and the URDF you made it's hard to give you suggestions. A 4dof arm doesn't necessary need a passive joint in the chain, even if it has one in reality.
Please embed a picture of your robot, and show us your urdf.
Asked by gvdhoorn on 2017-10-19 02:58:53 UTC
Googling for
uarm swift ros
led me to: uArm-Developer/SwiftproForROS. That looks like the mfgs official Github account.You could perhaps see how they did things.
Asked by gvdhoorn on 2017-10-19 03:05:29 UTC
I am actually rewriting their official package now since they didn't use ros_control. And that package also has the same problems I had, which was the reason i wanted to generate an IK fast plugin.
Asked by rfn123 on 2017-10-19 03:09:43 UTC