Is there a simpler way than ROS for 5 DOF Dynamixel arm control

I will have a 5 or 6 DOF arm build with Dynamixel or HerculeX smart servos. I need to move the gripper along Cartesian trajectory, which I will calculate in my C++ application. I looked at ROS, but the learning curve is pretty steep and it looks like a major overkill for this use case. I don't need a distributed system with all the complexity it brings. Preferably, I would like to call a standalone C++ library or libraries to get the arm actuated.

What are my options? What will be the limitations of not using a full blown robotics framework like ROS or YARP in this case.

EDIT

Here is how I would like to code it:

vector<Point> way_points;
vector<Pose>  way_poses;

compute_Cartesian_trajectory(way_points, way_poses);   // my code
execute_Cartesian_trajectory(way_points, way_poses);   // library call


The last line can be spread over several library function calls and intermediate data structures, if needed. The end result should be the gripper physically following Cartesian trajectory given by way_points and way_poses.

• If you use ROS, you have a lot of other tools, e.g. RVIZ which is a nice visualization that you definitely need in some kind. – FooTheBar Oct 5 '15 at 11:56
• Can you elaborate on what you are trying to achieve, and what you need? Do you need something to do the Jacobian math for you, trajectory control, hardware interface, visualization, something else, or all of the above? Also, what are you calculating and what do you want the library to calculate? – Ben Oct 5 '15 at 17:37
• @Ben I edited my question with code example. I need Jacobian math, trajectory control, hardware interface, visualization is optional. – Paul Jurczak Oct 6 '15 at 0:58
• Why not using OpenGL directly? It seems the project is not impossible. You will have control over every thing. Use odeint C++ for solving the differential equations and OpenGL for the visualization and Eigen library for linear algebra. I did this for simulating quadrotor. – CroCo Oct 7 '15 at 0:33
• @CroCo It is doable, but I'm trying to avoid reinventing the wheel and focus on solving my core problem. There has been thousands of people, who did it before and I want to mostly reuse their effort. – Paul Jurczak Oct 7 '15 at 0:55

Cross post on YARP Q&A channel:

https://github.com/robotology/QA/issues/54

The library call could be as simple as these two OpenRave Python lines:

robot.GetController().SetPath(traj)
robot.WaitForController(0)


Of course the types would have to match and all that. You would also have to write a controller plugin, which I have heard can be quite a bit of work. (These are just Python bindings for the C++ API, but I am not familiar enough with the C++ API and the calls are slightly different).

That being said, I use OpenRave a lot for forward / inverse kinematics and Jacobian stuff. But wrote my own trajectory follower and robot interface.

You should also check out Orocos KDL, it seems to have some support for trajectories, but I don't know if will "execute" the trajectory.

• That looks great. I found a video of Dynamixel arm controlled with OpenRAVE, but he was using ax12_controller_core ROS package for hardware interface and ROS for glue logic. Can OpenRAVE provide glue logic while using ax12_controller_core? – Paul Jurczak Oct 6 '15 at 23:07
• No. OpenRave is pretty much a standalone library. Unlike ROS which is basically just a IPC library. OpenRave pretty much only knows how to talk to its own controllers, (which you can write a plugin for). – Ben Oct 7 '15 at 17:17