Moveit planning Group foo is not a chain
Hi all,
In a simulated (gazebo) environment i've placed a motoman ma1400 welding robot ( https://github.com/kleinma/ma1400_sim ) on top of a track (prismatic joint). Furthermore I've added a rotating table. In moveit I can succesfully plan and execute motion for the table and the robot on the track. But now I want to create a single planning group that plans both the table and all joints of the robot on the track.
This is not a question of planning and executing motion synchronously as for example is asked in: https://answers.ros.org/question/2351... In that case both arms get a goal pose request in world frame.
What I want is to plan for an end effector goal of the weld tip of the motoman on track relative to the table. However when I create a moveit plan group which contains all joints it gives the error as shown below.
how should i set up my moveit plan group such that i can plan for the endeffector relative to the table frame with all joints?
[ INFO] [1540451728.075267997, 6.971000000]: Loading robot model 'weldtablecell'... [ INFO] [1540451728.075307271, 6.971000000]: No root/virtual joint specified in SRDF. Assuming fixed joint [ INFO] [1540451728.113952048, 7.014000000]: Loading robot model 'weldtablecell'... [ INFO] [1540451728.113994511, 7.014000000]: No root/virtual joint specified in SRDF. Assuming fixed joint [ERROR] [1540451728.135902717, 7.036000000]: Group 'all' is not a chain [ERROR] [1540451728.135934967, 7.036000000]: Kinematics solver of type >'kdl_kinematics_plugin/KDLKinematicsPlugin' could not be initialized for group 'all' [ERROR] [1540451728.136160612, 7.036000000]: Kinematics solver could not be instantiated for joint group all. [ INFO] [1540451728.261226293, 7.166000000]: Starting scene monitor [ INFO] [1540451728.264050719, 7.169000000]: Listening to '/move_group/monitored_planning_scene' [ INFO] [1540451728.334397629, 7.242000000]: Constructing new MoveGroup connection for group >'manipulator' in namespace '' [ INFO] [1540451729.513772641, 8.420000000]: Ready to take commands for planning group manipulator.
Chains cannot have branches. To plan for something not a chain, define a group of just joints.
Note: most IK solvers cannot work with non-chain groups though.
As to
moto_ros_interface.cpp
and how it interfaces with thegazebo_ros_control
setup: I would suggest to use a joint group controller. That reduces the nr of topics to 1 and also re-establishes the coupling in time between the joints that is now missing.Note also:
position_controllers/JointPositioController
does not use any PID, it just forwards. See also #q245802.Depending on how
gazebo_ros_control
then interfaces with Gazebo, this makes me wonder if the interpolation strategy implemented inmoto_ros_interface.cpp
actually .... works: the eventual behaviour of the robot will depend on whether there is an additional PID between the node, Gazebo and
gazebo_ros_control
and how that works.Thanks for the help. Are you aware of any IK solvers that can work with non-chain groups? I tried KDL, SRV and LMA but all gave similar errors. As for the moto_ros_interface I will have a look at that. Although i'm not focussing on the execution but on planning.
Btw there is a workaround (but i'm not a big fan.) by creating a single chain by making the table a parent link of the current root frame of the rails + manipulator.
I also figured out this workaround. But to be honest I do not like it very much. I would also appreciate to plan with the system even if it is not a proper serial chain. Would really like to know, which IK solver is capable of doing that.