[ros-users] Hybridizing ROS with Blocking TCP/IP Stack

Matt Bergsma mjb4 at sfu.ca
Sat Mar 5 03:14:52 UTC 2011

Perhaps a bit of a weird question for you all. I have a pre-existing large
windows code base that communicates via TCP/IP sockets. And looking to bring
it into ros by writing a a ROS node that accepts the TCP/IP socket message
and converts it to the appropriate ROS topic. The problem I'm currently
running into is that ros::spinOnce doesn't seem to like to behave and
publish messages as requested. Currently We have a simple client TCP/IP that
accepts the message, does some stuff to it (which works) than publishes to
the move_base_simple/goal topic, well in theory. The publishing isn't
happening. Since we are using accept() to get a message from the socket
(which is a a blocking call),  the translator node, announces to the ros
network where its talking, spins once, than hits the blocking call to wait
for a message, than handles it, and publishes to the appropriate topic.
After the publishing command, it runs ros::spinOnce() again, then returns to
waiting for a socket message. Using printf messages I can see the
appropriate messages showing its getting stuck at the blocking call as
expected, but no messages are being sent on the ros topic. Any idea's of a
work around for this? Current thought is to spawn a thread for the TCP/IP
stack, and then using some combination of flag, and semaphore to control the
ROS publisher side of things. This code will need to be expanded to include
a couple ROS subscribers in the future as well.



-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osuosl.org/pipermail/ros-users/attachments/20110304/82d0d5a0/attachment-0002.html>

More information about the ros-users mailing list