Robotics StackExchange | Archived questions

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

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

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