ROS Architecture- "Device Manager" Style Implementation [closed]

asked 2012-09-17 07:07:03 -0500

Modus Ponens gravatar image

updated 2014-04-20 14:09:27 -0500

ngrennan gravatar image

Hello community,

There is an important part of ROS architecture that I couldn’t find. How can I write a generic, stand-alone package to be used by different robot models, without being aware of the robot it is running on?

Of course, I can extract the main logic to external package that can be reused, but I still need to write the rest of the program that must be aware of the robot it is running on.

For example, to simplify the problem, let’s say my package should play a pre-defined sound file on the robot as soon as one of its tactile sensors has been activated.

The wrong approach is to write one package for iRobot Roomba (for example) that listens to its sensor’s data, analyze bumper value, and send a play song command. And then create another package for Aldebaran’s NAO that uses the same logic but on a different API.

The correct approach would be: Each robot has its own ROS robot X drivers to be installed on each robot. Robot driver acts like a wrapper for the API of the specific robot and exposes common interface/topics. In this case, my business logic won’t be aware of the robot it is running on. It will listen to all the drivers’ tactile sensor topics and will publish on the driver’s play sound topic.

In order to encapsulate all the sensors and motors, there must be some kind of “device manager” that offers these services. For example, NAO has a camera, unlike Roomba that cannot offer the “Camera sensor” topic. This device manager should give this information to my program- whether the robot-driver publishes on the camera topic.

Is here already a solution for the “device manager” if not, what will be the best way to implement the missing part?

edit retag flag offensive reopen merge delete

Closed for the following reason question is not relevant or outdated by tfoote
close date 2013-08-27 17:46:08