ABB Plan with external (revolute) axis
Hi everyone,
Some background: I am quite fresh with ROS. The setup i am using includes ROS (kinetic), an ABB arm, ROS-I along with the abb_driver. Moveit for the motion planning, kinematics etc. Setup with just the arm is working as it is supposed to. The goal now is to control an external axis which is rotating.
As stated in the abb_driver wiki the driver supports up to 4 integrated external linear axis. But in this case the external axis is set in front of the robot on top of a fixed base.
As far as the message part goes, with a quick inspection I saw that a conversion from mm to m and vice-versa is happening at the RAPID side. From ROS side the information for the external axis seems to be incorporated into the joint_message
- joint_data
system. For the RAPID side, is it as simple as using conversion from degree2rad
instead of mm2m
in order to support a revolute joint?
Main question: If the message structure for the supported linear axis is possible to be used with a revolute joint, what is the correct way to add the external axis assembly in the URDF and Moveit?
Current idea:
- Add a world frame in the urdf.
- Add both the arm's and positioner's first links as children of the world frame (This will create a branch in the kinematic chain.).
- Place positioner_base in front of the robot with a fixed joint and attach the second link to the positioner_base with a revolute joint.
- Define a new positioner planning group.
- Define a new controller for that group.
I have tried this approach for now and set it up with MSA but as soon as I add the new joint in the joint_names.yaml
and execute the plan i get the error:
[ERROR] [1550352562.186055092]: Joint trajectory action failing on invalid joints
Moreover, IK solver does not like it if I create a planning_group that includes both "manipulator" and "positioner" as subgroups therefore i cannot incorporate them under the same planning_group. Currently i am using the TracIK kinematics plugin and it supports only chains.
If I create the second controller and name both of them accordingly: "manipulator", "positioner". I get the following error:
[ WARN] [1550403869.172061404]: Waiting for manipulator/joint_trajectory_action to come up
[ERROR] [1550403875.172279892]: Action client not connected: manipulator/joint_trajectory_action
Searching other posts for solutions i added two groups (inside robot_interface.launch
) in order to define two namespaces (i think at least) to start their own instance of joint_trajectory_action
but i still get the error.
Last, if I remove joint_7
(external axis) from the controller_joint_names
I can normally plan for the arm but I also get this:
[ WARN] [1550419157.365318143]: The complete state of the robot is not yet known. Missing joint_7
I am confused at this point since adding a second group which is also trying to connect to the same IP does not seem right (since the external axis is integrated in the abb controller). But ...
This is all possible, and should not be that difficult to setup.
If you haven't figured it out or someone hasn't responded earlier, I'll post something tomorrow.
Nice these are good news, and thanks for the fast response. If I figure it out in the meantime I will update the post.
An update on "Edit 2": Route No.2 is no longer an option since I do not have multimove option on the real IRC5 controller.