Robotics StackExchange | Archived questions

rosserial over 433mhz 3DR radio

Hello,

I am using rosserial tru a serial cable. Recently I made a change in my setup to use a 3DR radio on both ends. I setup the radio to 115200 bauds, checked communications by other means, and then run my ros setup, and although it gives me a lot of errors, it "kind of" works. By "kind of" I mean it works intermittently. For example when using twist_teleop, you have to press and keep pressed the button, so it takes the command. the broadcasted odometry data will be only shown intermittently.

The error lines are below pasted below:

=============================================

wrong checksum for topic id and msg

Mismatched protocol version in packet: lost sync or rosserial_python is from different ros release than the rosserial client

Protocol version of client is unrecognized, expected Rev 1 (rosserial 0.5+)

Serial Port read returned short (expected 713 bytes, received 636 instead).

Serial Port read failure:

Packet Failed : Failed to read msg data

msg len is 93

Lost sync with device, restarting...

Setup publisher on odom [nav_msgs/Odometry]

Setup publisher on /tf [tf/tfMessage]

Setup publisher on odom [nav_msgs/Odometry]

Setup publisher on /tf [tf/tfMessage]

==============================================

none of those errors above happen when using a wired link. I believe it is due to the quality of the wireless link. And I am just broadcasting odometry data.

Any ideas or reccomendations how to make this kind of setup work?

Best regards, C.

Asked by wintermute on 2017-04-30 17:11:23 UTC

Comments

rosserial assumes that the connection is duplex (sending and receiving at the same time), not simplex (alternate sending or receiving), so check that.

Asked by Humpelstilzchen on 2017-05-01 00:56:17 UTC

Hello:

The radio I have is: http://ardupilot.org/copter/docs/common-3dr-radio-advanced-configuration-and-technical-information.html

So it appears that they are half-duplex, but have a buffer to make it work like full duplex.

Is there a way to make rosserial operate in half-duplex?

Best, C,

Asked by wintermute on 2017-05-01 08:03:53 UTC

Probably not. You could try if you have any control over the buffer of your rf modules. But I havn't got 100% success yet with mine.

Asked by Humpelstilzchen on 2017-05-01 10:24:09 UTC

I think I should clarify a bit. What I have observed on my radio link was: 1) Peer A starts to send a message 2) At the same time Peer B also wants to send a keep alive. 3) Keep alive does gets lost as Peer A is in transmit mode.

Asked by Humpelstilzchen on 2017-05-01 12:36:51 UTC

To work around that one would could implement a procedure which would give both peers alternating transmit slots. As rosserial does not do that at this moment I'ld suggest to implement your own protocol.

Asked by Humpelstilzchen on 2017-05-01 12:38:54 UTC

When you mean Peer A, Peer B, you also mean a control station right?

Another thing that I did not understand: why does rosserial need this much bandwidth, just to send simple odometry? I read elsewhere it requires >60kbps

Asked by wintermute on 2017-05-01 13:15:55 UTC

On of the peers is your PC with rosserial_python the other peer is the embedded controller running rosserial_client

Asked by Humpelstilzchen on 2017-05-01 13:18:53 UTC

Answers