ROS GNSS/INS driver for Inertial Labs positioning systems for the CARMA Platform

CARMA Inertial Labs GNSS/INS Driver

This is a fork of the Inertial Labs ROS package that is used for connecting to Inertial Labs GNSS/INS, IMU-P, AHRS, and AHRS-10 products. This fork has been modified to allow for building a Docker image that can serve as both a GNSS/INS driver as well as a standalone INS driver for the CARMA Platform.

Ubuntu 20.04 Installation

Assuming the CARMA Platform is installed at ~/carma_ws/src,

cd ~/carma_ws/src
git clone https://github.com/VT-ASIM-LAB/inertiallabs_gnss_driver.git
cd inertiallabs_gnss_driver/docker
sudo ./build-image.sh -d

After the Docker image is successfully built, add the following lines to the appropriate docker-compose.yml file in the carma-config directory, and make sure that the current user (and not root) is the owner of /dev/ttyUSB0.

inertiallabs-gnss-driver:
  image: usdotfhwastoldev/carma-inertiallabs-gnss-driver:develop
  container_name: inertiallabs-gnss-driver
  network_mode: host
  privileged: true
  devices:
    - /dev/ttyUSB0:/dev/ttyUSB0
  volumes_from:
    - container:carma-config:ro
  environment:
    - ROS_IP=127.0.0.1
  volumes:
    - /opt/carma/logs:/opt/carma/logs
    - /opt/carma/.ros:/home/carma/.ros
    - /opt/carma/vehicle/calibration:/opt/carma/vehicle/calibration
  command: bash -c '. ./devel/setup.bash && export ROS_NAMESPACE=$${CARMA_INTR_NS} && wait-for-it.sh localhost:11311 -- roslaunch /opt/carma/vehicle/config/drivers.launch drivers:=inertiallabs_gnss'

Finally, add the following lines to the drivers.launch file in the same directory as docker-compose.yml.

<include if="$(arg inertiallabs_gnss)" file="$(find inertiallabs_ins)/launch/ins.launch">
</include>

ins.launch is used as an example here and can be replaced with any other launch file in the inertiallabs_ins/launch directory.

ROS API (stable)

inertiallabs_ins

Nodes

  • il_ins

Topics

  • ``: .
  • ``: .
  • il_ins/discovery: publishes the CARMA DriverStatus message.

Services

  • ``

Parameters

  • ``: .
  • parameter: .

Examples

See the ins.launch file in the inertiallabs_ins/launch directory that is used to launch an Inertial Labs INS-D GNSS/INS system.

Original Inertial Labs ROS Documentation

ROS Packages for Inertial Labs Products. Current supported devices INS, IMU-P, AHRS, AHRS-10.

alt text

Picture of IMU

The inertiallabs_ros_pkgs package is a linux ROS driver for GPS-Aided Inertial Navigation Systems (INS), IMU-P, AHRS and AHRS-10 of Inertial Labs. The package is developed based on the official SDK v0.2 for Linux.

The package is tested on Ubuntu 16.04 LTS & 18.04 LTS with ROS Kinetic & ROS Melodic . You can install ROS from here.

License

  • The license for the official SDK is the MIT license which is included in the ins_ros/inertiallabs_sdk
  • The license for the other codes is Apache 2.0 whenever not specified.

Compiling

This is a Catkin package. Make sure the package is on ROS_PACKAGE_PATH after cloning the package to your workspace. And the normal procedure for compiling a catkin package will work.

$ cd <your_work_space>/src
$ git clone https://us.inertiallabs.com:31443/scm/ins/inertiallabs-ros-pkgs.git
$ cd <your_work_space>
$ catkin_make_isolated
$ source devel_isolated/setup.bash

Why catkin_make_isolated?

We developed a package for multiple devices with same dependencies, so to avoid conflicts we are compiling using catkin_make_isolated. If you need to use ins only, so you get the subpackages like inertiallabs_ins, inertiallabs_sdk, intertiallabs_msgs and intertiallabs_ros_pkgs to your workspace and use your own build system to compile it. You have to change the intertiallabs_ros_pkgs/intertiallabs_ros_pkgs/package.xml.

<exec_depend>inertiallabs_ins</exec_depend>

Node

example rosnodes:

for ins OPVT2AHR packet via USB serial port:

rosrun inertiallabs_ins il_ins url:=serial:/dev/ttyUSB0:460800 _ins_output_format:=0x58

for ins OPVT packet via UDP (INS hostname is used):

rosrun inertiallabs_ins il_ins _ins_url:=udp:INS-F2001234:23 _ins_output_format:=0x52

for ins OPVT packet via UDP (INS IP address is used):

rosrun inertiallabs_ins il_ins _ins_url:=udp:192.168.0.249:23 _ins_output_format:=0x52

Example Usage

Parameters

url (string, default: serial:/dev/ttyUSB0:115200)

Port the device is connected to. Can be serial:[path to device]:[baudrate], tcp:[hostname or address]:[tcp server port], or udp:[hostname or address]:[udp server port]. Inertial Labs Driver supports serial connection

ins_output_format (int, 82)

The output data format of the INS data according to IL INS ICD.

 IL_SENSOR_DATA             0x50
 IL_OPVT                    0x52
 IL_MINIMAL_DATA            0x53
 IL_QPVT                    0x56
 IL_OPVT2A                  0x57
 IL_OPVT2AHR                0x58
 IL_OPVT2AW                 0x59
 IL_OPVTAD                  0x61
 MRU_OPVTHSSHR              0x64
 IL_OPVT_RAWIMU_DATA        0x66
 IL_OPVT_GNSSEXT_DATA       0x67
 IL_USER_DEFINED_DATA       0x95

Published Topics - feel free to modify using fields from IL::INSDataStruct

/Inertial_Labs/sensor_data (ins_ros/sensor_data)

Publish Gyro(x,y,z), Accelation(x,y,z), Magnetic (x,y,z), Temprature, Input Voltage, Pressure, Barometric height.

/Inertial_Labs/ins_data (ins_ros/ins_data)

Publish GPS INS Time, GPS IMU Time, Millisecond of the week, Latitude, Longitude, Altitude, Heading, Pitch, Roll, Orientation quaternion, East Velocity, North Velocity, Up Velocity values, Solution status, Position STD, Heading STD, Unit Status.

/Inertial_Labs/gps_data (ins_ros/gps_data)

Publish Latitude, Longitude, Altitude, Ground Speed, Track Direction, Vertical Speed values.

/Inertial_Labs/gnss_data (ins_ros/gnss_data)

Publish GNSS service Info 1, Info 2, Satellites Used, Velocity Latency, Heading status, Heading, Pitch, GDOP, PDOP, HDOP, VDOP, TDOP, New GNSS Flag, Age of differenctiol correction.

/Inertial_Labs/marine_data (ins_ros/marine_data)

Publish Heave, Surge, Sway, Heave Velocity, Surge Velocity, Sway Velocity, Significant Wave Height.

FAQ

  1. Why can't the driver open my serial device?
    Make sure you have ownership of the device in /dev.

  2. Why do I see a permission error during the initialization process of the driver?
    Most often, this is because the baud rate you set does not match the package size to be received. Try increase the baud rate.

  3. Why is the IMU data output rate much lower than what is set?
    This may be due to a recent change in the FTDI USB-Serial driver in the Linux kernel, the following shell script might help:

    bash
    # Reduce latency in the FTDI serial-USB kernel driver to 1ms
    # This is required due to https://github.com/torvalds/linux/commit/c6dce262
    for file in $(ls /sys/bus/usb-serial/devices/); do
      value=`cat /sys/bus/usb-serial/devices/$file/latency_timer`
      if [ $value -gt 1 ]; then
        echo "Setting low_latency mode for $file"
        sudo sh -c "echo 1 > /sys/bus/usb-serial/devices/$file/latency_timer"
      fi
    done
    
  4. Why is a field value always zero?
    Most likely, because this field is not provided in the selected INS data packet. The most versatile data packet is User-Defined Data, which allows to order any set of fields

Bug Report

Opening an issue is preferred. You can also send an E-mail to [email protected].

Similar Resources

ROS driver for the ICM-20948

ROS driver for the ICM-20948

ROS driver for the ICM-20948 1 Installation 1.1 Install ROS package on PC $ cd catkin_ws/src $ git clone https://github.com/Alpaca-zip/icm_20948.git

Apr 11, 2022

A driver for u-blox receiver (ZED-F9P) with ros support

ublox_driver Authors/Maintainers: CAO Shaozu (shaozu.cao AT gmail.com) The ublox_driver provides essential functionalities for u-blox GNSS receivers.

Dec 30, 2022

An Arduino library which allows you to communicate seamlessly with the full range of u-blox GNSS modules

An Arduino library which allows you to communicate seamlessly with the full range of u-blox GNSS modules

u-blox makes some incredible GNSS receivers covering everything from low-cost, highly configurable modules such as the SAM-M8Q all the way up to the surveyor grade ZED-F9P with precision of the diameter of a dime.

Dec 29, 2022

Basic definitions and utility functions for GNSS raw measurement processing

gnss_comm Authors/Maintainers: CAO Shaozu (shaozu.cao AT gmail.com) The gnss_comm package contains basic definitions and utility functions for GNSS ra

Dec 21, 2022

Multi-GNSS Precise Point Postioning with Ambiguity Resolution

This is demo for multi-GNSS precise point positioning with ambiguity resolution (PPP-AR), which is based on RTKLIB and RTKLIB_demo5. FEATURES ppp-ar w

Sep 30, 2022

An open source GNSS receiver

greta-oto An open source GNSS receiver This project is an open source project of a consumer level GNSS receiver. It has the capability to receive L1 b

Nov 20, 2022

CS:APP is an excellent material for learning computer systems and systems programming

CS:APP is an excellent material for learning computer systems and systems programming. However, it is inconvenient to use a virtual machine for self-learners. In this repo, I build a Docker image with most pre-requistes installed and attached all lab materials in it.

Nov 11, 2022

x64 Windows kernel driver mapper, inject unsigned driver using anycall

x64 Windows kernel driver mapper, inject unsigned driver using anycall

anymapper x64 Windows kernel driver mapper, inject unsigned driver using anycall This project is WIP. Todo Fix: Can't make API calls from IAT nor func

Dec 26, 2022

Driver leap - Self-sustainable fork of SteamVR driver for Leap Motion controller with updated vendor libraries

Driver leap - Self-sustainable fork of SteamVR driver for Leap Motion controller with updated vendor libraries

Driver Leap Self-sustainable fork of SteamVR driver for Leap Motion controller with updated vendor libraries Installation (for users) Install Ultralea

Jan 5, 2023
Tightly coupled GNSS-Visual-Inertial system for locally smooth and globally consistent state estimation in complex environment.
Tightly coupled GNSS-Visual-Inertial system for locally smooth and globally consistent state estimation in complex environment.

GVINS GVINS: Tightly Coupled GNSS-Visual-Inertial Fusion for Smooth and Consistent State Estimation. paper link Authors: Shaozu CAO, Xiuyuan LU and Sh

Dec 30, 2022
A dataset containing synchronized visual, inertial and GNSS raw measurements.
A dataset containing synchronized visual, inertial and GNSS raw measurements.

GVINS-Dataset Author/Maintainer: CAO Shaozu (shaozu.cao AT gmail.com), LU Xiuyuan (xluaj AT connect.ust.hk) This repository hosts dataset collected du

Dec 21, 2022
The Gecko SDK (GSDK) combines all Silicon Labs 32-bit IoT product software development kits (SDKs) based on Gecko Platform into a single, integrated SDK.

Silicon Labs Gecko SDK (GSDK) The Gecko SDK (GSDK) combines Silicon Labs wireless software development kits (SDKs) and Gecko Platform into a single, i

Dec 28, 2022
Raspberry Pi Pico (RP2040) and Micro-ROS (ROS 2) Integration

The Pico is an amazing microcontroller and I couldn't wait for ROS 2 support or Arduino Core, so here is my approach. Once the Arduino Core for RP2040 is out it will be easier to use micro_ros_arduino.

Jun 19, 2022
Loads a signed kernel driver which allows you to map any driver to kernel mode without any traces of the signed / mapped driver.
Loads a signed kernel driver which allows you to map any driver to kernel mode without any traces of the signed / mapped driver.

CosMapper Loads a signed kernel driver (signed with leaked cert) which allows you to map any driver to kernel mode without any traces of the signed /

Jan 2, 2023
Linux kernel labs

Linux Kernel Labs This repo illustrates how to write Linux kernel module labs safely and gracefully in a simple and concise way. Contrary to most work

Dec 22, 2022
Doom port to the Ikea Tradfri RGB1923R5 and any device using Silicon labs EFR32MG21 based modules

MG21DOOM Doom port to the Ikea Tradfri RGB1923R5 lamp and any device using Silicon labs EFR32MG21 based modules. Coded by Nicola Wrachien. WARNING Do

Aug 2, 2022
XV6 Labs - for Operating System
 XV6 Labs - for Operating System

XV6 Labs - for Operating System Source: https://pdos.csail.mit.edu/6.828/2021/xv6.html Lab 1 Utilities Including some user-space programs sleep.c Noth

Nov 5, 2021
Historical Bell Labs ratfor code. Plus an attempt to modernize it.

RATFOR --- Rational Fortran This repository tracks the history of the original C version of the Bell Labs ratfor translator written by Brian Kernighan

May 5, 2022
Best practices, conventions, and tricks for ROS. Do you want to become a robotics master? Then consider graduating or working at the Robotics Systems Lab at ETH in Z├╝rich!

ROS Best Practices, Conventions and Tricks Best practices for ROS2 in the making. See the Foxy branch in the meanwhile. This is a loose collection of

Jan 5, 2023