Ask Your Question
1

Is ROS the best way to communicate with an autonomous robot?

asked 2016-11-23 20:19:06 -0500

cchow gravatar image

I have a robot that I want to send occasional commands to, e.g. go to all these waypoints, return to home base, etc. It seems like ROS topics/actions are not a good fit for the link from the base station to the autonomous robot because the underlying hardware link is unreliable (wireless) and the robot is almost guaranteed to be outside comms range at least some of the time. This would mean that either the robot or the base station would lose connection to the ROS master.

Does it make sense to start up another service like a webserver to handle the communication between the base station and the robot, or is there some better way of handling communications between the base station and the robot? There doesn't seem to be a particularly idiomatic way to do this.

edit retag flag offensive close merge delete

2 Answers

Sort by ยป oldest newest most voted
1

answered 2016-11-24 00:46:31 -0500

gvdhoorn gravatar image

updated 2016-11-24 01:01:37 -0500

Does it make sense to start up another service like a webserver to handle the communication between the base station and the robot, or is there some better way of handling communications between the base station and the robot? There doesn't seem to be a particularly idiomatic way to do this.

In my experience people run the master on the robot itself in these cases, then connect to the robot from your base station in case a connection is necessary (ie: to inspect robot state, etc). You could then connect additional nodes (such as RViz) to your robot running on your base station if/when it is in range. Alternatively, a remoting UI using Robot Web Tools could be used (avoids need for connecting to the remote master, web based, so no ROS requirement on base station, etc).

UDPROS is often recommended in cases where you have a lossy link. When using RViz, this is just a checkmark in the UI. For other nodes you might need to change some things (see wiki/roscpp/Overview - Transport Hints).

If you really need a master on your base station, you could look into setting up a multi master system. multimaster_fkie is a (popular) package for this.

In general I would look into how people/teams that participate(d) in the various robotics challenges / competitions approach this problem (DRC, RoboCup, etc). One example that was presented at ROSCon this year ('16): ANYmal at the ARGOS Challenge: Tools and Experiences from the Autonomous Inspection of Oil & Gas Sites with a Legged Robot (slides (pages 33 to 36 are relevant), video). In most cases they have to deal with noisy, lossy and intermittent (radio) links as well.

Finally: the QoS settings supported by DDS make it very well suited for applications where you have to deal with non-ideal networks. ROS2 uses DDS as (one of the) middleware layer(s). It's at alpha 8 right now, but using the ros2/ros1_bridge package should make it possible to bridge two ROS1 node graphs across a lossy link.


Edit: re: "is ROS the best": that is a question that I think cannot be answered in a reasonable way: there are too many variables and scenarios for any particular answer/opinion to make sense to every user. There are definitely alternatives that make sense in some of those scenarios (like LCM, as @sai kiran mentioned), but they will all (including ROS) come with their own set of (dis)advantages. Only you can determine whether ROS fits your requirements.

edit flag offensive delete link more
1

answered 2016-11-24 00:18:30 -0500

sai kiran gravatar image

If you are using onboard computer on robot you can use sockets to establish communication . Alternatively you can you LCM and check this link regarding usage https://github.com/lcm-proj/lcm .

edit flag offensive delete link more

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Question Tools

Stats

Asked: 2016-11-23 20:19:06 -0500

Seen: 1,178 times

Last updated: Nov 24 '16