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

How to use actions between multiple machines?

asked 2018-07-24 15:52:35 -0500

Passless11 gravatar image

I'm using two Raspberry Pi 3s, using the Kinetic distribution, operating on Ubuntu 16.04.4, and coding in Python.

One of my RPIs acts as an action client and communicates to the other RPI to control a motor through an action server. I wasn't sure how to create the .action file between the two devices, so I created a file on each RPI and made sure that their contents were exactly the same and named the same way. I'm assuming this is not the right way to do this.

When I tried running my code I encountered the following error:

[WARN] [1532463151.058451]: Could not process inbound connection: Client [/Motor_server] wants topic [/Motor/goal] to have datatype/md5sum [myPackage/MotorActionGoal/db2c943e960d8ab05a1b2456743aa16c], but our version has [myPackage/MotorActionGoal/baf12fadcf56882a7d77ecbc447eecbb] Dropping connection.

Can someone explain how to create the message files for multiple machines the correct way?

edit retag flag offensive close merge delete

1 Answer

Sort by ยป oldest newest most voted
1

answered 2018-10-03 09:38:24 -0500

Bruno Lima gravatar image

updated 2018-10-03 09:41:10 -0500

Hi,

It seems ROS is comparing the action file signatures from both devices in order to assure they are the same.

My suggestion is: put all related code into one single package (with server and client). Make sure the package is building correctly. Then copy the entire package folder from one device's workspace to another and heck if it works.

If so, consider using some version control system to keep your code synchronized across all needed devices.

Cheers,

edit flag offensive delete link more

Comments

2

Code generated from identical msg IDL should result in exactly the same message. The fact that the connection is dropped indicates that the files used to generate the action code are not identical.

Suggestion: put all .action (and .msg and .srv) files in their own pkg and use a VCS ..

gvdhoorn gravatar image gvdhoorn  ( 2018-10-03 13:08:04 -0500 )edit
2

.. to manage and distribute that.

No need to put everything in a single package. In fact, that just makes it harder to re-use your messages/actions/services in other packages.

gvdhoorn gravatar image gvdhoorn  ( 2018-10-03 13:08:33 -0500 )edit

I agree. If other packages are going to use your .action (and .msg and .srv), you should create individual packages for re-use purposes. But make sure it works the simplest possible way first. A running code is better than a beatiful one.

Bruno Lima gravatar image Bruno Lima  ( 2018-10-03 20:14:33 -0500 )edit

There is nothing beautiful about separating out your ROS API IDL from your business logic.

In fact, adding everything to the same pkg runs the risk of introducing the issue with build ordering between the consumers of your msg defs and the code generation targets.

gvdhoorn gravatar image gvdhoorn  ( 2018-10-04 01:51:31 -0500 )edit

Question Tools

1 follower

Stats

Asked: 2018-07-24 15:52:35 -0500

Seen: 260 times

Last updated: Oct 03 '18