I’m new here. I’m trying to use a Raspberry Pi to communicate and get data from a Cerulean 450 Side Scan sonar using Python via the UDP Ethernet port. I tried using the script simplePingExample.py with the IP 192.168.2.92 (default IP) to check the connection, but I keep receiving “Failed to init Ping!”. Could you direct me to a source to find out more information about connecting to 450 SS via Python and Ethernet connection? Do I have to write my own communication code using the PingMessage class?
Hi @td1191 -
While some Cerulean products do use the Ping protocol to communicate, the script you mention is not intended for use with them! The example file you reference is intended for use with the Ping2 SingleBeam sonar.
The intended interface for Cerulean Sonars is the SonarView application, which can be installed on your computer or as an Extension in BlueOS.
If you are trying to develop your own code to interface with a Cerulean product, you could try asking them for input!
Ton, I think I responded to you on our zendesk support forum already, but on another note, I would recommend TCP vs. UDP to communicate with the Omnsican 450 side scan.
Thank you for your response, Tony. Please correct me if I’m wrong, but does BlueOS replace Raspian OS if I want to run on a Raspberry Pi? I have a few other functions to run on Raspian, and I want to acquire data from the 450 SS at the same time.
Thank you for your response, Larry. I was about to establish a socket to talk to the 450 SS. However, I’m a bit confused with the command described in the API. If I understand correctly, I only need to send os_ping_params (2197) to start/stop the pinging state. So what about the os_mono_profil (2198)? Is that the return packet that the socket from the Pi should listen to?
Hi @td1191 -
That’s correct - BlueOS is a flavor of linux for the Raspberry Pi that strives to make it easier to develop marine robotics applications. You can likely accomplish your other functions in BlueOS in parallel to communicating with the 450SS.
BlueOS doesn’t support Raspberry Pi 5 - yet! It is possible to run SonarView on a Pi4 as an extension, you may be able to run the standalone linux SonarView on the Desktop on a Raspberry Pi (not running BlueOS)…
I downloaded the AppImage file for SonarView (both x86 and arm64) and tried unzipping it using xarchiver but it shows “Archive format is not recognised”. I’m currently using a RPi 5 running Raspian OS. Is it possible to run BlueOS Docker image in a container in RPi 5 just for SonarView?
Edit: I was able to run SonarView docker image on the RPi 5 without any issue so far. However, if the sonar scanners are controlled by SonarView, how can we combine the motion of the vehicle to the scanned data from the sensor?
If you can explain more about the vehicle and the application, we might have further suggestions.
Just for example, on the Blue Boat with BlueOS, you can use SonarView to start Omniscan(s) pinging and logging data, then disconnect from the vehicle while it executes an autonomous mission. On its return you can reconnect with SonarView to stop the pining, close the log, then use SonarView to play through the log files you have collected. You can also then export the data for subsequent processing in other software.
Actually, my question is about these sample videos here. How does SonarView obtain the heading and the depth of the vehicle to generate these playbacks after recording?
I’m not the expert so I might not be saying this quite right, but SonarView subscribes to vehicle position and heading messages from MAVLINK. These messages are also recorded in the svlog file.
As for altitude from the bottom, SonarView discerns this from the ping data. The 3D renderings are based on this altitude and the assumption of a flat bottom
SonarView pulls vehicle data from the mavlink2rest api, which is built in to BlueOS but can also be installed standalone.
That data is stored in the .svlog file encapsulated in one of our packets, along with all of the sonar data.
We look at the Attitude message for the heading. We use local_position_ned if it’s available, otherwise we fall back to using the position from global_position_int.
Thanks for the explanation, Nick. If we have a custom vehicle running a custom firmware on a RPi with SonarView docker file, is there a way for us to integrate the vehicle’s motion to the record from SonarView? For example, is there a document describing how mavlink2rest was used with SonarView to obtain the scans in this link? Furthermore, is there a way to encode the binary data ourselves to the svlog format so SonarView can read it?
Sorry that I ask many questions. I just want to make sure I utilize the available resource/documents before I spend the effort to write my own communication code for the Cerulean 450 SS from scratch for my custom vehicle. I really appreciate all your help!
Hi @td1191 -
If your vehicle ran BlueOS, it would already be running Mavlink2Rest and you could install the SonarView extension - this seems the easiest approach. You can run other Ardupilot firmware with BlueOS and the Navigator (or Pixhawk) autopilots.
If you don’t want to run BlueOS, you could likely install Mavlink2Rest on your system and configure it to receive the vehicle motion data from your autopilot.
Writing your own code to log position and sonar data is a big undertaking, so the BlueOS route would definitely be our recommendation!