I am the newbie. Currently I would like to use BlueROV2 to acquire multi-sensor data in underwater including RGB camera, sonar, underwater GPS, … I already have BlueROV2 with its integrated camera, ping 360 SONAR and also waterlinked underwater GPS. I try to read through some topics related to data collection in this forum but it’s quite unclear. It seems like that pymavlink is used to get the sensor data but it can be used with camera and also sonar. I would like to get these sensors data with the timeline for further calibration and alignment. Since I am the newbie and have no experience. Could you please give me any direction? For example: software need to use, API or ROS? Thanks for helping! If I can acquire underwater camera, it can be a huge contribution to underwater research. I’ll publish it as a public dataset if I can acquire these multi-sensor data.
Pymavlink is a Python library for interfacing with MAVLink communications. ArduSub (the autopilot firmware running on the BlueROV2) receives commands and outputs telemetry (sensor data, system state, etc) via MAVLink messages, so Pymavlink can be a convenient way of programmatically communicating with and receiving data from the vehicle.
MAVLink is not relevant to the BlueROV2’s video streaming or scanning sonar functionality though. The standard BlueROV2 camera has a H264-encoded output stream that gets sent to the surface via UDP, and can be received by programs like gstreamer, ffmpeg, VLC, and more. Blue Robotics sonar products communicate using the Ping Protocol, which there are C++ and Python library options for.
QGC already records the MAVLink messages it receives in telemetry log (.tlog) files
These aren’t useful for live processing (as far as I’m aware), but are worth knowing about
The standard telemetry connection between the control station computer and the vehicle is a MAVLink Endpoint configured to talk to a particular UDP port
UDP ports can often only be used by one program at a time
You can set up additional MAVLink endpoints on the vehicle if you want your program to connect and receive telemetry via a different port (at the cost of sending the data twice), or you can get QGC to forward the data (if you’re sure you only want the data while QGC is running)