Is ROS a good choice for UAVs?
I am on a team at school that creates an autonomous aircraft, and we are considering changing the framework that we use for our on board software. We are investigating ROS as a potential solution along with MAVROS to communicate with our autopilot. I’m worried, however, that the performance of ROS is less than desirable and it could cause us issues, especially since we this application is very real-time.
Specifically, our system would need to:
Run some neural networks on large images (images are ~20.1 MP and come in at ~1 per 3 seconds)
Control a gimbal that is capable of tracking GPS coordinates
Control a camera that is synchronized with the gimbal movements
Drop a payload from the plane
Communicate with ground servers with a low bandwidth and unreliable connection.
Our system would not be responsible for anything that concerns the actual flight of the aircraft. This is already done by our FCU (pixhawk cube running ardupilot), but this does make it necessary to convert between MAVLink messages and ROS messages via MAVROS.
Would ROS give performance issues for any of these tasks? We have also seen that ROS2 addresses some performance issues but MAVROS as of now does not have support for ROS2, so we would need to use a bridge between the two. Any suggestions would be greatly appreciated!
You should be fine using ROS. How are you running the neural network? Is it on a GPU? You also mentioned that you need to communicate with ground servers with a low bandwidth connection, this may create bottlenecks in the network. You may want to look into something that fixes the lost signals and avoids timeouts across the ROS network. But for everything else ROS is quite useful.
Yeah, we're using an NVIDIA TX2 as our OBC, so we plan to use the GPU capabilities for the neural networks.