ROS Resources: Documentation | Support | Discussion Forum | Index | Service Status | ros @ Robotics Stack Exchange
Ask Your Question

implementing realtime controllers with ros_control

asked 2013-09-28 07:38:06 -0500

updated 2013-09-29 06:36:24 -0500

Hi All,

I'm starting to implement a better control framework for a manipulator. I'd like keep some level of compatibility with the ros_control project thats under development. I'm looking to implement a RT velocity controller using Xenomai Native API, and communicating with user space via shared memory. It appears that interacting with this shared memory should be the job of robot_hw class, which seems to load an interface.

Should I look to only modify the interface classes (joint_state_interface, actuator_interface) to conduct the memsharing operations? ie, is that the intention of ros_control, that users only have to adjust the interface classes to marry up with their hardware arrangement? Or is there some lower level?

EDIT The method by which the realtime controller is implemented is really not important, I just would like to know at which part of the ros_control api I should implement access to the lower level realtime controllers. Ie which classes should I modify to include the access point to the hardware.

any guidance would be welcome



edit retag flag offensive close merge delete

2 Answers

Sort by ยป oldest newest most voted

answered 2013-09-30 12:50:52 -0500

updated 2013-09-30 12:59:03 -0500

I found the information I was looking for and answers my questions:

well done to the team developing this package

edit flag offensive delete link more


Can you share how you integrated the RT Xenomai Native API with a ros_control hardware interface? I'm interested in doing the same, thanks!

Dave Coleman gravatar image Dave Coleman  ( 2013-11-15 12:25:53 -0500 )edit

I'm still working through it. The main issue is that the only reason for implementing xenomai is for accurate timing of the cm object. I think this means that the cm object should run within xenomai kernel but I'm not sure it would work with the networking elements of ros. Will share testing.

PeterMilani gravatar image PeterMilani  ( 2013-11-18 13:23:09 -0500 )edit

answered 2013-09-30 21:17:51 -0500

Adolfo Rodriguez T gravatar image

If I understand correctly, you are using Xenomai to communicate with your hardware, and you want to expose the raw data (sensors, actuators) to ros_control. If so, you don't need to modify any of the existing ros_control classes, but rather create a RobotHW abstraction class for your robot and populate its hardware interfaces. Take a look at this simple example for inspiration.

ros_control does not know whether Xenomai or a realtime shared memory is being used. It only knows about the addresses of the raw data, and what they represent. This allows you to transparently switch between hardware and simulation backends.

P.S. I had intermittent Internet access and had prepared a draft answer offline. I see that by now you figured this one out, but I'm putting up this post for completeness.

edit flag offensive delete link more


No problem, the framework you guys have chosen certainly makes it easier and the documentation is pretty clear. Earlier this year I was trying to follow the PR2 controller manager documentation, it was like being trapped in a maze! For fuerte install, I'd have to download ros_control from source?

PeterMilani gravatar image PeterMilani  ( 2013-10-01 17:04:46 -0500 )edit

The official Fuerte branch is badly outdated. I was keeping Fuerte backports in my forks of ros_control&friends, but it's starting to lag behind as well, as we're about to migrate to Hydro. You can still find the forks in [PAL's organization](, fuerte_backport branch.

Adolfo Rodriguez T gravatar image Adolfo Rodriguez T  ( 2013-10-01 21:47:10 -0500 )edit

I'll probably just upgrade, there's a few other updates in Hydro I'd like to use. Cheers

PeterMilani gravatar image PeterMilani  ( 2013-10-01 22:21:18 -0500 )edit

Question Tools



Asked: 2013-09-28 07:38:06 -0500

Seen: 2,578 times

Last updated: Sep 30 '13