Drivers and interfaces¶
This page answers two questions: does my sensor have a maintained ROS 2 driver? and which message type should it publish?
ROS 2 driver status by vendor¶
Checked in October 2026 against each vendor's public repositories. "Official" means the vendor publishes or maintains the driver.
| Sensor | Vendor / product | ROS 2 driver | Source |
|---|---|---|---|
| DVL | Water Linked A50, A125 | Official | waterlinked_dvl (humble, jazzy branches) |
| DVL | Nortek Nucleus | Official | nucleus_driver |
| DVL | Teledyne RDI (Workhorse, Pathfinder, Tasman) | None found from vendor | Community and lab drivers; WHOI DSL has ROS 1 drivers |
| INS / IMU | SBG Systems | Official, binary release | sbg_ros2_driver |
| INS / IMU | MicroStrain by HBK | Official, binary release | microstrain_inertial |
| INS / IMU | Xsens (Movella) MTi | Vendor support repository | Xsens MTi ROS driver |
| INS / IMU | Advanced Navigation | Vendor example driver (Humble) | ros2-driver |
| INS / IMU | VectorNav | Community | dawonn/vectornav (ros2 branch) |
| INS | Exail (PHINS), Kearfott, Sonardyne SPRINT | None public | Usually NMEA or vendor protocols over serial or Ethernet |
| GNSS | Any NMEA 0183 receiver | Binary release | nmea_navsat_driver (ros2 branch) |
| GNSS | u-blox F9P and others | Community, binary release | ublox_dgnss, ublox |
| GNSS | Swift Navigation | Official | swiftnav-ros2 |
| Imaging sonar | Blue Robotics Ping360 | Community (no official ROS 2 driver) | ping360_sonar, bluerobotics_ping360, blueos-ros2 |
| Echosounder | Blue Robotics Ping2 | Community | blueos-ros2; build on ping-python |
| Imaging sonar | Blueprint Subsea Oculus | Community | blueprint_oculus_sonar, oculus_ros2, liboculus |
| Multibeam | Cerulean Surveyor 240-16 | Community | cerulean_surveyor_mbes |
| Sonar | Tritech, Imagenex, Teledyne BlueView, Kongsberg | No maintained public driver found | Use the vendor SDK in your own node |
| Acoustic modem | WHOI Micro-Modem | ROS 1, ROS 2 support in progress | ros_acomms |
| Acoustic modem | EvoLogics, Sonardyne, Teledyne Benthos | None found | Only an old ROS 1 EvoLogics driver exists |
| Autopilot | ArduSub, ArduPilot Rover, PX4 | Binary release | mavros, ardusub_driver, ArduPilot and PX4 DDS interfaces |
| Camera | USB, V4L2, GStreamer streams | Binary release | usb_cam, gscam |
If your sensor has no driver, see Write your own driver below. Most marine sensors speak NMEA 0183 or a simple binary protocol over serial or UDP.
Navigation sensors¶
| Project | What it does | ROS | Vehicles | Activity |
|---|---|---|---|---|
| sbg_ros2_driver SBG Systems (official) |
Official ROS 2 driver for SBG Systems IMU, AHRS, and INS products (for example Ellipse). | ROS 2 | Any | Active Jul 2026 |
| microstrain_inertial MicroStrain by HBK (official) |
Official ROS and ROS 2 driver for MicroStrain inertial sensors (3DM-GX5, CV7, GQ7, and others). The default branch is ros2. | ROS 2 ROS 1 | Any | Active Oct 2026 |
| Xsens MTi ROS driver Movella / Xsens support |
ROS 1 and ROS 2 drivers for Xsens MTi sensors, built on the Xsens Device API, with an NTRIP client for RTK corrections. The ros2 branch supports Foxy, Humble, and Jazzy. | ROS 2 ROS 1 | Any | Active Feb 2026 |
| vectornav Community (dawonn) |
Community driver for VectorNav VN-100, VN-200, and VN-300; ROS 2 on the ros2 branch. No official VectorNav ROS 2 driver was found. | ROS 2 ROS 1 | Any | Low activity Mar 2025 |
| Advanced Navigation ROS 2 driver Advanced Navigation |
Example ROS 2 driver from Advanced Navigation for its INS products, tested on Ubuntu 22.04 and ROS 2 Humble. | ROS 2 | Any | Low activity Apr 2025 |
| waterlinked_dvl Water Linked (official, contributed by Oregon State RDML) |
Official ROS 2 driver for the Water Linked DVL A50 and A125, with humble and jazzy branches. | ROS 2 | ROV AUV | Active Aug 2026 |
| Nortek Nucleus driver Nortek (official) |
Official Python driver for the Nortek Nucleus navigation sensor (DVL with AHRS and pressure), with ROS 2 packages and a BlueOS extension. | ROS 2 Non-ROS | ROV AUV | Active Oct 2026 |
| Water Linked DVL A50 driver (ROS 1) Water Linked |
Original ROS 1 driver for the Water Linked DVL A50. Archived; use waterlinked_dvl for ROS 2. | ROS 1 | ROV AUV | Archived Feb 2024 |
| nmea_navsat_driver ros-drivers |
Generic NMEA 0183 GNSS driver that publishes sensor_msgs/NavSatFix. ROS 2 on the ros2 branch. | ROS 2 ROS 1 | USV Any | Active Oct 2026 |
| ublox_dgnss Aussie Robots |
ROS 2 driver for u-blox ZED-F9P and related receivers over USB, with RTK support. | ROS 2 | USV Any | Active Oct 2026 |
| ublox KumarRobotics |
Long-standing u-blox GNSS driver; ROS 2 on the ros2 branch. | ROS 2 ROS 1 | USV Any | Low activity Sep 2025 |
| swiftnav-ros2 Swift Navigation (official) |
ROS 2 driver for Swift Navigation GNSS receivers (Piksi Multi, Duro). | ROS 2 | USV Any | Low activity Jul 2024 |
Sonar¶
| Project | What it does | ROS | Vehicles | Activity |
|---|---|---|---|---|
| ping360_sonar Centrale Nantes |
Driver for the Blue Robotics Ping360 scanning imaging sonar (image and scan output). The default branch is ros2. | ROS 2 ROS 1 | ROV AUV | Active Jul 2026 |
| bluerobotics_ping360 URI Smart Ocean Systems Lab |
ROS 2 Jazzy driver for the Ping360 with serial and UDP links, sector scanning, and point cloud output. | ROS 2 | ROV AUV | Low activity May 2025 |
| blueprint_oculus_sonar URI Smart Ocean Systems Lab |
ROS 2 Jazzy driver for Blueprint Subsea Oculus multibeam imaging sonars. Publishes polar and Cartesian images over UDP. | ROS 2 | ROV AUV | Active Nov 2025 |
| oculus_ros2 ENSTA Bretagne |
Community ROS 2 driver for Blueprint Subsea Oculus sonars, built on the oculus_driver library. | ROS 2 | ROV AUV | Low activity Nov 2023 |
| liboculus UW Applied Physics Laboratory |
C++ library for the Blueprint Subsea Oculus sonar network protocol, used by ROS drivers. | Non-ROS | ROV AUV | Active Sep 2026 |
| cerulean_surveyor_mbes URI Smart Ocean Systems Lab |
ROS 2 driver for the Cerulean Surveyor 240-16 multibeam echosounder (raw and XYZ ranges, serial or UDP). | ROS 2 | ROV AUV USV | Active Mar 2026 |
| blueos-ros2 Community (Kalvik Jakkala) |
Community BlueOS extension that runs ROS 2 Jazzy on Blue Robotics vehicles and bundles Ping1D, Ping360, and Sonoptix Echo drivers. Blue Robotics does not ship an official ROS 2 driver. | ROS 2 | ROV USV | Low activity Aug 2025 |
| ping-python Blue Robotics (official) |
Python library for Blue Robotics Ping-protocol devices (Ping2 echosounder, Ping360). Base for custom ROS nodes. | Non-ROS | ROV AUV USV | Active Aug 2026 |
Cameras, lidar, and AIS¶
| Project | What it does | ROS | Vehicles | Activity |
|---|---|---|---|---|
| usb_cam ros-drivers |
Driver for V4L2 USB cameras, common for low-cost ROV cameras. | ROS 2 ROS 1 | Any | Active Feb 2026 |
| ros2_v4l2_camera TIER IV |
ROS 2 driver for Video4Linux2 cameras. | ROS 2 | Any | Active Sep 2026 |
| gscam ros-drivers |
GStreamer-based camera driver. Useful for the H.264 RTP/UDP video streams that ROV cameras and BlueOS publish. | ROS 2 ROS 1 | Any | Active Feb 2026 |
| ouster-ros Ouster (official) |
Official driver for Ouster lidars, often used on surface vehicles for docking and obstacle detection. | ROS 2 ROS 1 | USV | Active Sep 2026 |
| marine_ais Roland Arsenault (UNH CCOM) |
AIS message decoding and ROS messages for vessel traffic, used with Project11. The default branch is jazzy. | ROS 2 ROS 1 | USV | Active Aug 2026 |
| transport_drivers ros-drivers |
Reusable serial and UDP driver nodes for ROS 2. A good base when you write a driver for a serial or Ethernet marine sensor. | ROS 2 | Any | Active Mar 2026 |
Message definitions¶
Use standard ROS messages where they fit, and the community marine_msgs set for sonar, DVL, and radar data. Do not invent a new message type if one of these fits.
| Project | What it does | ROS | Vehicles | Activity |
|---|---|---|---|---|
| marine_msgs UW APL, USF, NPS, UNH CCOM |
Community message definitions. marine_acoustic_msgs has Dvl, RawSonarImage, ProjectedSonarImage, SonarDetections, and SonarRanges; marine_sensor_msgs has RadarSector, RadarEcho, and TurbidityNTU. Released as binaries from Noetic through Lyrical and Rolling. | ROS 2 ROS 1 | Any | Low activity Mar 2024 |
| maritime_interfaces ROS Maritime Robotics Working Group |
Placeholder for standard maritime interfaces. The main branch has no message definitions yet (proposals live on branches); use marine_msgs today. | ROS 2 | Any | Dormant Jul 2022 |
Which message for which sensor¶
| Sensor | Recommended message | Notes |
|---|---|---|
| IMU / AHRS | sensor_msgs/Imu |
Orientation in ENU and FLU per REP 103 and REP 145. Many marine INS units output NED; convert in the driver. |
| DVL velocity | marine_acoustic_msgs/Dvl for raw data; geometry_msgs/TwistWithCovarianceStamped for fusion |
robot_localization takes a twist input. Set frame_id to the DVL frame and publish its mounting transform. |
| DVL altitude / single-beam echosounder | sensor_msgs/Range |
|
| Depth / pressure | sensor_msgs/FluidPressure (pascals) |
Convert to depth in a separate node, and publish depth as a geometry_msgs/PoseWithCovarianceStamped with only z set for the EKF. |
| GNSS | sensor_msgs/NavSatFix |
Fuse it through navsat_transform_node, not directly. |
| USBL / LBL fix | geometry_msgs/PoseWithCovarianceStamped or geographic_msgs/GeoPoseStamped |
No dedicated community message exists yet. Give a realistic covariance. |
| Imaging sonar | marine_acoustic_msgs/ProjectedSonarImage or RawSonarImage |
sonar_image_proc can display and convert these. |
| Multibeam / profiling sonar | marine_acoustic_msgs/SonarDetections or SonarRanges |
Also publish sensor_msgs/PointCloud2 for generic tools. |
| Radar | marine_sensor_msgs/RadarSector, RadarEcho |
|
| CTD, turbidity | marine_sensor_msgs/TurbidityNTU; CTD has no standard message yet |
Use sensor_msgs/Temperature and FluidPressure for parts of a CTD. |
| AIS | Messages from marine_ais |
See Frames and conventions for frame IDs, units, and sign conventions.
WHOI Deep Submergence Lab software¶
The WHOI Deep Submergence Lab (DSL) maintains ROS 1 drivers and tools for deep submergence vehicles in its Bitbucket workspace. This includes drivers for Teledyne RDI DVLs, inertial navigation systems, CTDs, altimeters, and the ds_msgs message set, plus the ds_sim Gazebo plugins. Some repositories need access approval. The software comes from many years of field use on vehicles such as Sentry and Jason, and is a useful reference when you write a ROS 2 driver for the same instruments.
Write your own driver¶
Many marine instruments have no ROS 2 driver. A good driver is small and predictable:
- Separate the protocol from ROS. Put parsing in a plain library with unit tests, and keep the ROS node thin. This also lets you reuse the parser in post-processing tools.
- Use a reusable transport. transport_drivers gives serial and UDP nodes for ROS 2.
- Use standard messages from the table above, and SI units (REP 103).
- Timestamp correctly. Stamp each message with the time of measurement, not the time of publication. If the device gives a hardware time, map it to ROS time and document how. See time synchronization.
- Convert frames in the driver. Publish ENU and FLU data, and state in the README when the device outputs NED or FRD.
- Report health. Publish
diagnostic_msgs/DiagnosticArray(for example throughdiagnostic_updater) with connection state, data rate, and device status flags such as DVL bottom lock. - Make it configurable. Expose port, baud rate, frame ID, and rates as ROS parameters, and supply a launch file and an example configuration.
- Release it. Add CI (action-ros-ci or industrial_ci) and release the package to the ROS build farm so others can
apt installit. Then add it to the catalog.