Access to data received by rosbridge TCP server
Greetings,
I launched a rosbridge TCP server, and I can send data to it. But where is that data? Ie: How can I retrieve that data so I can manipulate it, process it, and do things with it? I've traced the code in rosbridge_server, which starts a threaded socket listener. The handler for that is in tcp_hander.py, which gobbles up the message and passes it to self.protocol.incoming() which is in protcol.py. Finally, it's passed to some operation: self.operationsop
Which seems that it can be registered?
def register_operation(self, opcode, handler):
self.operations[opcode] = handler
Not sure this is even the right path. Thanks!
Thanks!
This question is a bit strange:
rosbridge
is used to allow remote javascript/whatever programs to communicate with a ROS node graph/application. There is a limited set of operations you can sendrosbridge
, some of which are publishing a message, subscribing to topics, invoking a service and retrieving the value of a parameter (there are more, these are just examples).You don't send
rosbridge
arbitrary data, so the question "where is that data?" is at least unexpected.If you've sent
rosbridge
an op to publish a message (for instance), the "data" would be the JSON dict which describes the message to publish, the topic, etc. The corresponding ROS message would then be created byrosbridge
upon reception of your JSON dict, and it would publish the ROS message to the ROS application.What happens to the message after it has been published depends on whether there are ...(more)
I see. Okay, thanks. I guess the question more is: What is the proper way to send data arbitrary data from a non-ROS platform to ROS to be published? In this case, I am looking to send IMU data and publish it as an imu message.
I took the rosbridge TCP server, and overwrote the handler. I grabbed the data and published it. This wasn't bad, but don't necessarily believe it's the "correct" way.
rosbridge would be one such way. It's pretty often used for the kind of thing you describe.
well it isn't necessary. As that is exactly what
rosbridge
already does for you, provided you use the correct JSON message (ie: the correctop
and other fields).It would help if you could better describe what you are trying to do -- in particular, on which platform, with which programming language and over which connections.
Right now, your post is a good example of an xy-problem, and we should try to avoid answering those.
Please add more information to your original ...(more)
Understood. My goal is take take the IMU data from a quadrotor and get it into the an IMU topic in ROS. My platform is MATLAB/Simulink. Due to the nature of my specific platform (hardware deployment to the quadrotor) I cannot use ROS toolbox. Additionally, as far as networking goes, I only have access to "stream clients" and "stream servers" (Blasts values over the network, more or less).
I will have to do some digging to see if I can format and send JSON through the platform, but I feel like it may be a limitation.
If you're limited to raw bytes over a socket, then writing a small (Python) script which reads from that socket and converts it into ROS messages may be the most efficient/straightforward.
You could of course hack
rosbridge
, but that seems rather unclean to me.Great. Thanks for the advice!