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](http://wiki.ros.org/abb_driver) 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 how else will i be able to get *Moveit* side to work and include the external axis in the path planning?
p.s: I do not need to control a simultaneous movement of the arm+positioner or use the external axis to minimize movement of the arm. For now I need to only establish a way to control its angle. Similar to a dual arm concept but both joint states (arm+positioner) are received from the same port.
↧