How inertiallabs/inertiallabs-ros-pkgs works
1. Overall shape
- This repo is a ROS1 driver stack for Inertial Labs navigation sensors.
- It is split into three real packages plus an umbrella ROS package:
- inertiallabs_sdk: low-level device SDK
- inertiallabs_msgs: custom ROS message definitions
- inertiallabs_ins: ROS node that talks to the sensor and publishes topics
- inertiallabs_ros_pkgs: packaging/aggregation layer
2. Core runtime data path
- The main flow is: sensor hardware → SDK transport → SDK packet parser → ROS driver node → ROS topics.
- The driver converts Inertial Labs binary output into typed ROS messages for downstream consumers.
3. SDK boundary
- inertiallabs_sdk is the non-ROS hardware access layer.
- It contains transport and parsing code, with platform-specific implementations under src/platform/linux and src/platform/windows.
- It abstracts serial and network-style access through classes like Transport, ILDriver, NetClient, SerialPort, and packet parsing in UDDParser.
4. ROS driver boundary
- inertiallabs_ins/src/il_ins.cpp is the executable node.
- It is configured by ROS parameters such as ins_url and ins_output_format.
- This node is the bridge between the SDK and ROS: it opens the configured connection, selects the device packet format, and publishes decoded state.
5. Custom message model
- inertiallabs_msgs defines the ROS schema used by the driver.
- The messages are grouped by data domain:
- sensor_data.msg
- ins_data.msg
- gps_data.msg
- gnss_data.msg
- marine_data.msg
- These messages represent the sensor outputs that the node publishes.
6. Published topic groups
- The driver publishes onto /Inertial_Labs/* topics.
- Each topic corresponds to a message type and a logical sensor domain:
- raw IMU / environmental fields in sensor_data
- navigation solution in ins_data
- GNSS state in gnss_data
- GPS kinematics in gps_data
- marine motion metrics in marine_data
7. Packet-format driven behavior
- The node supports multiple Inertial Labs packet formats, selected by ins_output_format.
- The README maps these formats to device ICD packet IDs such as IL_OPVT, IL_OPVT2AHR, IL_SENSOR_DATA, and others.
- This means the same driver can present different subsets of data depending on what the sensor is configured to emit.
8. Connection and transport layer
- Runtime connection is described by ins_url strings like serial:..., tcp:..., and udp:....
- The README emphasizes serial operation, but the SDK structure shows transport abstractions for both serial and network clients.
- For architecture purposes, treat transport as a pluggable boundary below the ROS node.
9. Launch and configuration
- inertiallabs_ins/launch/ins.launch is the ROS launch entrypoint.
- It likely wires parameters and starts the driver node in a ROS-native way, while the README also documents direct rosrun execution.
- The node is subscriber-aware: it only needs to publish when there are active topic subscribers.
10. Build and packaging model
- This is a Catkin-based ROS1 repository, tested on Kinetic and Melodic.
- The README recommends catkin_make_isolated because the repo contains multiple packages with shared dependencies.
- inertiallabs_sdk is also built as a standalone C++ library, with example programs and Windows project files, but the ROS driver itself targets Linux.
11. Deployment assumptions
- The driver expects access to the sensor device node or network endpoint, and may require serial permissions and baud-rate alignment.
- The repository is oriented around direct hardware integration rather than cloud or backend services.
- The main external dependency is the Inertial Labs sensor itself, plus ROS1/catkin at build and runtime.
Main entry points: il_ins.cpp INS node · Transport.h Transport · package.xml ROS pkgs · ILDriver.h ILDriver
Components 16
ROS driver
Executable node and launch entrypoint
- INS node · Main ROS1 driver that connects to the sensor and publishes topics
inertiallabs_ins/src/il_ins.cpp - Launch file · ROS launch entrypoint for starting the INS driver
inertiallabs_ins/launch/ins.launch
SDK
Non-ROS transport and parsing layer
- ILDriver · Device-facing SDK entry that coordinates connection and packet flow
inertiallabs_sdk/include/inertiallabs_sdk/ILDriver.h - Transport · Pluggable access boundary for serial and network communication
inertiallabs_sdk/include/inertiallabs_sdk/Transport.h - UDD parser · Decodes Inertial Labs binary packets into structured data
inertiallabs_sdk/src/UDDParser.cpp - Linux net · Linux network transport implementation
inertiallabs_sdk/src/platform/linux/NetClient.cpp - Linux serial · Linux serial transport implementation
inertiallabs_sdk/src/platform/linux/SerialPort.cpp - Windows net · Windows network transport implementation
inertiallabs_sdk/src/platform/windows/NetClient.cpp - Windows serial · Windows serial transport implementation
inertiallabs_sdk/src/platform/windows/SerialPort.cpp
Messages
Custom ROS message definitions
- Sensor data · Raw IMU and environmental sensor fields
inertiallabs_msgs/msg/sensor_data.msg - INS data · Navigation solution and attitude state
inertiallabs_msgs/msg/ins_data.msg - GNSS data · GNSS status and satellite-state fields
inertiallabs_msgs/msg/gnss_data.msg - GPS data · GPS kinematics and position outputs
inertiallabs_msgs/msg/gps_data.msg - Marine data · Marine motion and vessel-related metrics
inertiallabs_msgs/msg/marine_data.msg
Umbrella package
Packaging and aggregation layer
- ROS pkgs · Umbrella ROS package for aggregation and packaging
inertiallabs_ros_pkgs/package.xml
Other components
- Sensor hardware · Inertial Labs navigation sensor or network endpoint
Connections 17
- Sensor hardware → Transport: stream data · Sensor output enters the SDK through a transport connection
- Transport → ILDriver: feeds · Transport delivers bytes and packets to the device driver
- ILDriver → UDD parser: parses via · Driver relies on packet parsing to decode device output
- UDD parser → INS node: decodes for · Parsed state is consumed by the ROS driver node
- INS node → Sensor data: publishes · Publishes raw sensor and environmental data
- INS node → INS data: publishes · Publishes navigation solution state
- INS node → GNSS data: publishes · Publishes GNSS-related status and fixes
- INS node → GPS data: publishes · Publishes GPS kinematics and position data
- INS node → Marine data: publishes · Publishes marine motion outputs
- Launch file → INS node: starts · ROS launch entrypoint starts the driver node
- INS node → Transport: opens · Node selects and opens the configured connection URL
- Transport → Linux serial: implements · Linux serial backend for the transport layer
- Transport → Linux net: implements · Linux network backend for the transport layer
- Transport → Windows serial: implements · Windows serial backend for the transport layer
- Transport → Windows net: implements · Windows network backend for the transport layer
- ROS pkgs → INS node: packages · Umbrella package groups the ROS driver package
- ROS pkgs → Sensor data: packages · Umbrella package groups the shared message package