View Full Version : ROS simple_arm_server for dual arm robot

03-06-2014, 03:22 PM

I'm running the simple_arm_server ((2x3-DOF) 6-DOF test.py) on an arbotix controlled bioloid humanoid, but it currently only works with one 3-DOF arm. Does anyone know how to configure things in ROS to work on two 3-DOF arms so that I can say "left_arm move there and right_arm move here", preferrably keeping URDF-file as is?

My current configuration throws errors like: "...trajectory name does not match action name..." if it comes to the arm which was not defined as root_link and tip_link. The other arm works fine though.


03-08-2014, 05:56 PM
I'm not sure what "test.py" means, but if you are using the simple_arm_server node originally developed by me, you would need to run 2 instances, one for each arm, with each having a different name. Similarly, you would have two instances of the arm_kinematics node running, one configured for each arm.


03-09-2014, 03:01 PM
"test.py" means "simple_arm_server_test.py" (originally written by Michael Ferguson :-)). I did what you wrote and it works.
-Cloned simple_arm_server.py 2 times to left_arm_server.py and right_arm_server.py.
-Cloned arm_kinematics.cpp 2 times to left_arm_kinematics.cpp and right_arm_kinematics.cpp.
-Configured launch-files to to start left_arm_server.py + left_arm_kinematics with 6-DOF- the same procedure for right_arm_.

When I run simple_arm_server_test.py with working parameters for right or left arm I get a solution (TRUE) from the corresponding arm-ik-solver but an error -31 (FALSE) from the other arm-ik-solver. Despite simple_arm_server_test.py sometimes shows success:FALSE the arms are moving to the correct position.

/arbotix error:
"trajectory joint names does not match action controlled joint names"
This happens because left_arm and right_arm -chains want to find a solution as both ar listening to MoveArm.action.

Ist this error, because I have to setup another action or like above clone MoveArm.action 2 times to MoveLeftArm.action and MoveRightArm.action?
Is simple_arm_server and arm_kinematics working on hydro?
Thanks a lot and good work you've done!


03-10-2014, 07:18 PM
You don't need to copy the files -- especially the .action files. What you need to do is remap node names and arguments http://wiki.ros.org/Remapping Arguments Normally this is done by creating a launch file. For instance:


<node name="left_arm_kinematics" pkg="simple_arm_server" type="simple_arm_server.py">
<remap from="move_arm" to="move_left_arm" />

<node name="right_arm_kinematics" pkg="simple_arm_server" type="simple_arm_server.py">
<remap from="move_arm" to="move_right_arm" />


(http://wiki.ros.org/Remapping Arguments)
This will launch an instance of simple_arm_server.py, with a runtime name of "left_arm_kinematics" and connect to an action client called "move_left_arm". You would also do a similar thing for the arm_kinematics, specifying different parameters. I would read up on launch files, they are extremely helpful and actually quite simple once you get started.

As for hydro, arm_kinematics is pretty much deprecated/gone. MoveIt took over for arm_navigation and desired to use C++ API calls rather than ROS API. I'm not sure the state of kinematics ROS API within hydro. simple_arms is noted as deprecated and was never really released to either groovy or hydro.


03-11-2014, 09:03 AM
Ok, I'll keep the launch files in mind.
Now I've punched the above solution on my raspberry pi compiled everything and it works but I got ik solutions at about 55 seconds and the arm motion is not being executed as smooth as from my pc. I guess IKfast is not available as a plugin to arm_kinematics, so is there any place in the ik-solving chain I can finetune for performance issues?

I guess it's hard to bring up MoveIt on an armhf.

Thanks for your help.