tuftsBaxter / ROS-for-LabVIEW-Software

49 stars 23 forks source link

Error when deserializing message, buffer overrun, publisher in labview, subscriber in ubuntu machine. #4

Open gitting-around opened 7 years ago

gitting-around commented 7 years ago

Hello,

I have the following setup. There are two machines, one arm device with Ubuntu in which I run the ros master and a subscriber, and one labview system which connects to that master and runs a publisher. The subscriber and publisher node are the basic ones from the ros tutorials.

When publishing, I get the following error on the subscriber's side:

[ERROR] []: Exception thrown when deserializing message of length [] from []: Buffer Overrun if I have sent an empty message (empty string) or

in case it is not empty.

I was able to find one related post here: http://answers.ros.org/question/42336/error-1346057546695789920-exception-thrown-when-deserializing-message-of-length-91-from-nxt_lejos_proxy_mod-buffer-overrun/. As I understand it might be an endianness problem and in fact the arm device is little endian while the other is big endian.

I think that the problem lies on the publisher's side, in which the length of the ros message is written big endian, as such a crash is produced on the subscriber which reads it little endian. How can this be solved?

Thank you for your time. (I also posted a question on the ros answers: http://answers.ros.org/question/254711/error-when-deserializing-message-buffer-overrun-publisher-in-labview-subscriber-in-ubuntu-machine/ )

wcrooks commented 7 years ago

Hello,

I'm going to try to reproduce your error tomorrow. In the meantime, did you download ROS for LabVIEW through the VIPM or github? The version on github is the most up to date. And what version of Ubuntu are you using?

Thanks, Whitney

On Wed, Feb 15, 2017 at 8:11 AM, gitting-around notifications@github.com wrote:

Hello,

I have the following setup. There are two machines, one arm device with Ubuntu in which I run the ros master and a subscriber, and one labview system which connects to that master and runs a publisher. The subscriber and publisher node are the basic ones from the ros tutorials.

When publishing, I get the following error on the subscriber's side:

[ERROR] []: Exception thrown when deserializing message of length [] from []: Buffer Overrun if I have sent an empty message (empty string) or

[ERROR] []: Exception thrown when deserializing message of length [] from []: basic_string::_S_create in case it is not empty.

I was able to find one related post here: question/42336/error- 1346057546695789920-exception-thrown-when-deserializing- message-of-length-91-from-nxt_lejos_proxy_mod. As I understand it might be an endianness problem and in fact the arm device is little endian while the other is big endian.

I think that the problem lies on the publisher's side, in which the length of the ros message is written big endian, as such a crash is produced on the subscriber which reads it little endian. How can this be solved?

Thank you for your time. (I also posted a question on the ros answershttp://answers.ros.org/ question/254711/error-when-deserializing-message-buffer- overrun-publisher-in-labview-subscriber-in-ubuntu-machine/ )

— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub https://github.com/tuftsBaxter/ROS-for-LabVIEW-Software/issues/4, or mute the thread https://github.com/notifications/unsubscribe-auth/AIJru_fx5fkHap5xP_KzwjA3EfEzJDTtks5rcvl4gaJpZM4MBskp .

-- Whitney Crooks Ph.D. Candidate in Mechanical Engineering - Tufts University STEM Leaders Fellow IGERT Soft Material Robotics Associate Research Assistant at the Center for Engineering Education and Outreach

gitting-around commented 7 years ago

Hello,

The ubuntu version is 14.04.5. As for the other I need to ask my colleague who has done that download and get back to you.

Thank you for your efforts!

gitting-around commented 7 years ago

It was the VIPM.

wcrooks commented 7 years ago

Got it. This should be an easy fix then. The version up on our github https://github.com/tuftsBaxter/ROS-for-LabVIEW-Software is the most up to date and replacing the one you downloaded with the one on github should solve the problem.

Whitney

On Sun, Feb 19, 2017 at 2:52 PM, gitting-around notifications@github.com wrote:

It was the VIPM.

— You are receiving this because you commented. Reply to this email directly, view it on GitHub https://github.com/tuftsBaxter/ROS-for-LabVIEW-Software/issues/4#issuecomment-280943700, or mute the thread https://github.com/notifications/unsubscribe-auth/AIJru-y1mQn7guHLChjjUtUD9UklWaIiks5reJ2WgaJpZM4MBskp .

-- Whitney Crooks Ph.D. Candidate in Mechanical Engineering - Tufts University STEM Leaders Fellow IGERT Soft Material Robotics Associate Research Assistant at the Center for Engineering Education and Outreach

gitting-around commented 7 years ago

I downloaded the github version and I am running it on Labview 2016.

I create a vi in which I put the Ros_master_main and the Ros terminal. I run the master. On my ubuntu device I export the ROS_MASTER_URIto the ip of the master (of the windows computer which has the labview). If I run a publisher on the ubuntu, it doesn't give any errors, however on the master-web (accessible through the ros-terminal in labview) on the list of connected nodes, the node name is: lazy_search: lazy_search If I run a subscriber it gives me the following error: lazy_search66802]: bad xml-rpc URI: [ Again on the master web this node is shown as: lazy_search: lazy_search

If I also use a subscriber on the labview (the one in the folder Examples/RosExamples), it doesn't receive the messages published from the publisher running on ubuntu.

Any ideas? Thanks

gitting-around commented 7 years ago

I tried running the master on the Ubuntu machine. Using the publisher from the examples/rosexamples folder I was able to see the msg on the ubuntu. However if I try to publish from Ubuntu to the subscriber in labview, that doesn't work.

gitting-around commented 7 years ago

Ok, I realized why the subscriber wasn't working. I put the subscriber on a new vi and ran it. It opened the window where the message should show. If I typed run there as well, it works. I got confused because for the publisher, I only needed to run once.

I will try again with the master on the labview and let you know.

wcrooks commented 7 years ago

If I'm understanding correctly when you're running the publisher and subscriber provided in Examples/ROS Examples, you are not running them in a while loop (is that what you mean when you're saying running them once?). However, when you run a publisher and subscriber in the terminal you are only running them once.

ROS publishers default to latch until stopped, meaning they're publishing continuously. Similarly, subscribers echo until stopped. The reason why you couldn't duplicate this in LabVIEW with our examples is because the examples close the topic when you hit the stop button, meaning they are no longer publishing. The LabVIEW subscriber likely worked for you because your Ubuntu publisher was latched and the subscriber happened to catch the message. The Ubuntu subscriber, on the other hand, probably missed the message from the LabVIEW publisher that was run only once.

If you want to keep the LabVIEW publisher and subscriber running continuously but only run the VI once (not continuously), remove the ROS_Topic_Close.vi from the block diagram.

Hopefully that was what you're looking for, but please let me know if I misunderstood what you said.

On Wed, Feb 22, 2017 at 4:06 AM, gitting-around notifications@github.com wrote:

Ok, I realized why the subscriber wasn't working. I put the subscriber on a new vi and ran it. It opened the window where the message should show. If I typed run there as well, it works. I got confused because for the publisher, I only needed to run once.

I will try again with the master on the labview and let you know.

— You are receiving this because you commented. Reply to this email directly, view it on GitHub https://github.com/tuftsBaxter/ROS-for-LabVIEW-Software/issues/4#issuecomment-281610269, or mute the thread https://github.com/notifications/unsubscribe-auth/AIJru2mhnQoKFwUWMq5OopPkTQS8j-pWks5re_p9gaJpZM4MBskp .

-- Whitney Crooks Ph.D. Candidate in Mechanical Engineering - Tufts University STEM Leaders Fellow IGERT Soft Material Robotics Associate Research Assistant at the Center for Engineering Education and Outreach

gitting-around commented 7 years ago

I am not sure if I need to ask another question for this. Now I am struggling to have the ros master run on labview, and have a publisher and subscriber on ubuntu.

I am trying two things. First, on the ubuntu I have a talker and a listener (the simplest ones possible from the ros tutorials). I set the ROS_MASTER_URI to the ip of the labview master. I run the master on the labview. If I run the listener (the one that declares a subscriber node) the following error is shown on the ubuntu terminal: ] lazy_search... : Bad xml-rpc URI: [ I have uploaded what happens on the labview master vi (lvm1 and lvm2). lvm1 lvm2

Basically I only declare a subscriber, but the master seems to register a publisher and service as well.

If I run the publisher on ubuntu, there is no error, however no data is received if also put a subscriber on the labview. The labview master registers the following lvm3 lvm3

The second code I am trying uses a roslaunch file to run several nodes, one of which has the subscriber I need. When use roslaunch I get the BadStatusLine from python's httplib.

Any ideas? Thank you!

wcrooks commented 7 years ago

I'm having a similar problem when I try to reproduce your problem. I know it used to work, so I'm going to look back at an old version to see what we changed that may have broken this.

This might also be related to a problem that we're having with service clients/providers communicating between LabVIEW and roscore. We get the same bad XML RPC error there.

Hopefully I'll have something for you soon.

Whitney

On Wed, Feb 22, 2017 at 10:31 AM, gitting-around notifications@github.com wrote:

I am not sure if I need to ask another question for this. Now I am struggling to have the ros master run on labview, and have a publisher and subscriber on ubuntu.

I am trying two things. First, on the ubuntu I have a talker and a listener (the simplest ones possible from the ros tutorials). I set the ROS_MASTER_URI to the ip of the labview master. I run the master on the labview. If I run the listener (the one that declares a subscriber node) the following error is shown on the ubuntu terminal: ] lazy_search... : Bad xml-rpc URI: [ I have uploaded what happens on the labview master vi (lvm1 and lvm2). [image: lvm1] https://cloud.githubusercontent.com/assets/11443476/23216490/6aed2044-f916-11e6-8f33-68140e2dc701.png [image: lvm2] https://cloud.githubusercontent.com/assets/11443476/23216489/6ae9dab0-f916-11e6-96a7-40cd451b54d4.png

Basically I only declare a subscriber, but the master seems to register a publisher and service as well.

If I run the publisher on ubuntu, there is no error, however no data is received if also put a subscriber on the labview. The labview master registers the following lvm3 [image: lvm3] https://cloud.githubusercontent.com/assets/11443476/23216598/ce8977a6-f916-11e6-912b-ecdcbd8592a8.png

The second code I am trying uses a roslaunch file to run several nodes, one of which has the subscriber I need. When use roslaunch I get the BadStatusLine from python's httplib.

Any ideas? Thank you!

— You are receiving this because you commented. Reply to this email directly, view it on GitHub https://github.com/tuftsBaxter/ROS-for-LabVIEW-Software/issues/4#issuecomment-281703199, or mute the thread https://github.com/notifications/unsubscribe-auth/AIJru5s2u5F-gnR73J0IsmCyTM8bMi5_ks5rfFTegaJpZM4MBskp .

-- Whitney Crooks Ph.D. Candidate in Mechanical Engineering - Tufts University STEM Leaders Fellow IGERT Soft Material Robotics Associate Research Assistant at the Center for Engineering Education and Outreach

gitting-around commented 7 years ago

Thank you for your effort on this!

Regarding your previous comment. No, both subscriber and publisher on the labview run in a while loop. What I meant is that (ros master running remotely from labview) if I run the subscriber nothing shows up remotely, if I press stop button in the running vi, then run again, everything works. Another thing regarding the publisher on labview. Although I have got it to work a a couple of times, it happens that out of nowhere the receiver on the ubuntu stops getting the messages. If I do update and upgrade of the system on ubuntu, then it works again.

Cheers