How to solve "FollowJointTrajectoryController: cannot execute multi-dof trajectories."

299 views
Skip to first unread message

Alessio Tonioni

unread,
Aug 24, 2013, 11:13:07 AM8/24/13
to moveit...@googlegroups.com
Hi moveit users,
I'm trying to control a simulated uav with moveit, but I can't connect the controller with moveit. 
I'm using the moveit_simple_controller_manager and an adapted interface of the uav controller to the followJointTrajectoryAction, the uav is controlled via geometry_msgs/Twist. The system seems to recognise my controller, but when I try to execute a trajectory I obtain the following error:

FollowJointTrajectoryController: cannot execute multi-dof trajectories.
 
Why I get this error? Is it impossible to pass multi-dof trajectory to the followJointTrajectory controller?
Maybe I'm missing something in the configuration file?

The uav is described as two link connected to the ground with a virtual floating joint, and the planning group contains this two link.
I attached to this message all the configuration file for the controller, as well as the controllerAdapter and the output from the moveit launch file with the error.

Any advice is welcome! thank you in advance.
controllers.yaml
quadrotor_moveit_controller_manager.launch
controllerAdapter.cpp
quadrotore.urdf
output.txt

Ioan Sucan

unread,
Aug 25, 2013, 10:08:45 AM8/25/13
to Alessio Tonioni, moveit-users
Hello Alessio,

Sorry for replying only to your second e-mail. You seem to be on the right path. As you have defined a virtual joint that is floating, a group consisting of that joint will compute plans for your robot. To confirm the setup is as expected, could you run:
 rosrun moveit_ros_planning moveit_print_planning_model_info

while your system is loaded and send me the output?


That said, you should not use the follow trajectory controllers as those are designed only for 1-dof joints. Yet your robot uses a 6-dof floating joint (a full robot pose) at every waypoint of the computed trajectory.
This also means you should not use the moveit_simple_controller_manager. Instead you should define your own controller plugin, just as the simple controller does, following this explanation:
http://moveit.ros.org/wiki/Executing_Trajectories_with_MoveIt!

In this controller you will look at the multi_dof section of the trajectory, which will define basically a sequence of transforms. Based on consecutive transforms, you can compute your twist and send it to your controller.
Let me know if you run into problems.

Ioan


Reply all
Reply to author
Forward
0 new messages