Moveit execution fails - invalid joints
Hey guys,
I'm working on a ROS-Industrial package for the ABB-IRB14000, and recently have run into a new problem. Despite connecting to the robot perfectly fine(I'm using a real robot), and being able to plan trajectories, when I give the command to execute, I get the following error:
[ERROR] [1469166414.255451135]: Joint trajectory action failing on invalid joints
[ERROR] [1469166414.255451135]: Joint trajectory action failing on invalid joints
[ WARN] [1469166414.255676736]: Controller left_arm failed with error code INVALID_JOINTS
[ WARN] [1469166414.255676736]: Controller right_arm failed with error code INVALID_JOINTS
Any ideas what is wrong? I'm using ROS-Indigo, with Ubuntu 14.04, with ABB RobotWare 6.03.
EDIT 1:
Here is my controllers.yaml
file:
controller_list:
- name: "left_arm"
action_ns: joint_trajectory_action
type: FollowJointTrajectory
joints:
- gripper_l_joint
- yumi_joint_1_l
- yumi_joint_2_l
- yumi_joint_3_l
- yumi_joint_4_l
- yumi_joint_5_l
- yumi_joint_6_l
- yumi_joint_7_l
- name: "right_arm"
action_ns: joint_trajectory_action
type: FollowJointTrajectory
joints:
- gripper_r_joint
- yumi_joint_1_r
- yumi_joint_2_r
- yumi_joint_3_r
- yumi_joint_4_r
- yumi_joint_5_r
- yumi_joint_6_r
- yumi_joint_7_r
The only other thing I use for the joints is a joint_names_yumi.yaml
file, which is pretty basic:
controller_joint_names: ['gripper_l_joint', 'gripper_r_joint', 'yumi_joint_1_l', 'yumi_joint_1_r', 'yumi_joint_2_l', 'yumi_joint_2_r', 'yumi_joint_3_l', 'yumi_joint_3_r', 'yumi_joint_4_l', 'yumi_joint_4_r', 'yumi_joint_5_l', 'yumi_joint_5_r', 'yumi_joint_6_l', 'yumi_joint_6_r', 'yumi_joint_7_l', 'yumi_joint_7_r', ]
EDIT 2: Pastebin of roslaunch --screen
: http://pastebin.com/vB0YdYpP
Asked by karthikj219 on 2016-07-22 00:56:24 UTC
Answers
You still don't mention which driver / package you are using, so I'm guessing a bit here, but:
I'm not entirely sure, but it's possible that your trajectory is failing to execute because it does not include all the joints that you configured the motion interface with. joint_names_yumi.yaml
contains all joints, so any instance of the joint_trajectory_action
node (I am using ROS-Industrial abb_driver
and industrial_robot_client
terminology) will assume it is responsible for all those joints. JointTrajectoryAction::goalCB(..) checks incoming goals to make sure they contain the joints it has been configured for, using industrial_utils::isSimilar(..) here, and it will reject goals for which that function returns false
.
It's likely that you have either a single instance of joint_trajectory_action
, and are sending goals with per-arm trajectories, or have two instances but have set the parameter only once.
Asked by gvdhoorn on 2016-07-22 03:48:21 UTC
Comments
Sorry about that, I'm using the abb_driver
and industrial_robot_client
. When I run my launch file, and generate the list of running topics, I get separate instances of joint_trajectory_action
for both arms. I'm unsure what you mean by "set the parameter only once." Can you elaborate please?
Asked by karthikj219 on 2016-07-22 04:11:50 UTC
If the controller_joint_names
parameter is present in the global namespace, both instances of joint_trajectory_action
will use it. So both instances would then need goals to contain all joints. You could try to namespace your joint_trajectory_action
instances, and give them different params.
Asked by gvdhoorn on 2016-07-22 04:28:49 UTC
Please also include any files to which you refer in your question and / or comments. It's rather hard to help you without knowing what those files do / contain.
Also: the joint_trajectory_action
will probably output some diagnostic info if you run your launch file with roslaunch --screen ..
.
Asked by gvdhoorn on 2016-07-22 04:31:29 UTC
I've put all the files I've used on Github here. The launch file I'm running is execute.launch
, and the package name is test1_moveit_config
. The urdf and meshes for the robot are in the package testpack
.
Asked by karthikj219 on 2016-07-22 05:56:46 UTC
Also, on running roslaunch --screen ...
the only additional diagnostic info I get is that the joints have been added to list parameter, and user-specified joint names have been found.
Asked by karthikj219 on 2016-07-22 05:58:33 UTC
Have you tried namespacing the joint_trajectory_action
nodes, and then providing them with their own subset of the joints they should accept goals for?
Asked by gvdhoorn on 2016-07-22 06:03:18 UTC
The test1_moveit_config
item in your repository appears to be a symlink, or at least not something that can be opened?
Asked by gvdhoorn on 2016-07-22 06:05:06 UTC
Hey, sorry. Here is the fixed link, they're in 2 separate repositories now.
Asked by karthikj219 on 2016-07-22 06:10:47 UTC
launch/execute.launch loads both files, which contain the same parameter, so the last one will override the first.
Asked by gvdhoorn on 2016-07-22 06:25:24 UTC
Are you sure you also don't see the log output from this line on your console when started with roslaunch --screen ..
?
Asked by gvdhoorn on 2016-07-22 06:27:48 UTC
And with the namespacing in your robot_interface.launch you also get the same error(s)?
Asked by gvdhoorn on 2016-07-22 06:30:08 UTC
Yes, it does show Filtered joint names to 8 joints
after saying joints added to list parameter. . Didn't notice it earlier. I'm not sure what to do to fix this.
Asked by karthikj219 on 2016-07-22 06:35:06 UTC
And you also see this line when run with --screen
? Perhaps just copy/paste all console output into your OP.
Asked by gvdhoorn on 2016-07-22 06:49:50 UTC
You'll have to verify that your Goals include all joints that a particular joint_trajectory_action
expects. MoveIt should be instructed to construct them as such.
Asked by gvdhoorn on 2016-07-22 06:50:44 UTC
My goals definitely include all the joints required for a trajectory action. I checked that before I posted the question, and it was fine, which is why I've been stuck with this for some time now.
Asked by karthikj219 on 2016-07-22 07:07:17 UTC
industrial_utils::isSimilar(..) is a small function. Perhaps you could see what it gets for input, and why specifically it fails (some printfs / breakpoints)?
Asked by gvdhoorn on 2016-07-22 07:56:11 UTC
I fixed it. Turns out it was a simple mistake, the planning group I was using did not contain two of the joints (the 2 gripper joints). Changing that resolved the issue.
Asked by karthikj219 on 2016-07-27 04:27:14 UTC
Comments
My goals definitely include all the joints required for a trajectory action.
So that comment wasn't entirely correct then ? :)
Asked by gvdhoorn on 2016-08-13 11:52:44 UTC
Yeah, my bad. I didn't check it properly.
Asked by karthikj219 on 2016-08-18 12:20:53 UTC
HI! karthikj219! I have the same problem like you,can you teach me how to solve this problem?how to find the problem, this is my question:question
Asked by Josephlin on 2016-10-13 09:06:53 UTC
Apologies for digging this back up so long after the original post, but where were the joints found to be missing from, your controller.yaml file?
Is there a reference list of joints stored anywhere, so that I can check for differences against my culprit file? @karthikj219
Asked by nisur on 2018-07-13 02:46:54 UTC
Comments
Could you include the
config/controllers.yaml
from the MoveIt configuration? And also anything that configures the joints for the driver you are using (which you don't mention).Asked by gvdhoorn on 2016-07-22 02:57:54 UTC