Skip to content

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.

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:

  1. 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.
  2. Use a reusable transport. transport_drivers gives serial and UDP nodes for ROS 2.
  3. Use standard messages from the table above, and SI units (REP 103).
  4. 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.
  5. Convert frames in the driver. Publish ENU and FLU data, and state in the README when the device outputs NED or FRD.
  6. Report health. Publish diagnostic_msgs/DiagnosticArray (for example through diagnostic_updater) with connection state, data rate, and device status flags such as DVL bottom lock.
  7. Make it configurable. Expose port, baud rate, frame ID, and rates as ROS parameters, and supply a launch file and an example configuration.
  8. Release it. Add CI (action-ros-ci or industrial_ci) and release the package to the ROS build farm so others can apt install it. Then add it to the catalog.