ROS2 StarlingV2 image streaming
-
Hi,
I am trying to stream images from the hires camera over ros using the starlingV2 drone for a robotics application. I am facing a lot of issues due to network bandwidth.
I would like to know what the best approach to stream images from the hires_small_color camera stream to a host computer at a modest rate of 5hz. I have tried the following approaches
Simply streaming the raw images over a ros topic at a rate higher than 1 hz seems to lead to significant latency and lag which at worst case has crashed my qvio and caused the drone to crash. Running iperf seems to suggest a bandwidth of about 200Mbits between my host computer and the drone, so I imagine the issue here is in the serialization of the images.
Using a RTSP server seems to stream the images quickly, but for my use case I require accurate and aligned timestamps with QVIO.
I have tried to subscribe to the /hires_small_encoded topic, but the entire mpa_to_ros2 program crashes with this error.
Interface hires_small_encoded now publishing terminate called after throwing an instance of 'std::bad_alloc' what(): std::bad_alloc
I recently reflashed a recalibrated my starling2 drone. The following are the outputs of voxl-version
-------------------------------------------------------------------------------- system-image: 1.7.8-M0054-14.1a-perf kernel: #1 SMP PREEMPT Sat May 18 00:10:25 UTC 2024 4.19.125 -------------------------------------------------------------------------------- hw platform: M0054 mach.var: 1.0.1 -------------------------------------------------------------------------------- voxl-suite: 1.3.3 --------------------------------------------------------------------------------
I am looking for any advice as to how to stream the hires_small images from the drone to a host computer at around 5hz.
-
Wow, I had this same exact problem! Hopefully we get some feedback from the Devs soon.
-
@gitcoder You really shouldn't use ROS for this, especially when network bandwidth is limited. ROS and ROS 2 add significant network bandwidth both local to the device and over the network.
If you really need it over ROS 2, you should use a compressimage sensor message. Here's some code we found through a search https://answers.ros.org/question/385599/how-to-publish-a-compressedimage-in-ros2-foxy/