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.959195182]: Kinematics solver could not be instantiated for joint group robot_arm.
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.
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?
I've had mixed success using the <mimic> tag for passive joints... I'm interested to hear what others say as I never found a good solution. (And if you're interested...)
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.
Mimic joints are not conidered passive by MoveIt per se. They're just handled differently.
@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
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.
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.