ROSaic = ROS + mosaic

Binary Install

Overview

This repository hosts a ROS Melodic and Noetic driver (i.e. for Linux only) - written in C++ - that works with mosaic and AsteRx - two of Septentrio's cutting-edge GNSS/INS receiver families - and beyond. Since Noetic will only be supported until 2025, we plan to make ROSaic compatible with ROS2.

Main Features:

Please let the maintainers know of your success or failure in using the driver with other devices so we can update this page appropriately.

Dependencies

The master branch for this driver functions on both ROS Melodic (Ubuntu 18.04) and Noetic (Ubuntu 20.04). It is thus necessary to install the ROS version that has been designed for your Linux distro.

The serial and TCP/IP communication interface of the ROS driver is established by means of the Boost C++ library. In the unlikely event that the below installation instructions fail to install Boost on the fly, please install the Boost libraries via<br>
sudo apt install libboost-all-dev.

Compatiblity with PCAP captures are incorporated through pcap libraries. Install the necessary headers via<br>
sudo apt install libpcap-dev.

Usage

<details>

The binary release is now available for Melodic and Noetic. To install the binary package on Melodic for instance, simply run sudo apt-get install ros-melodic-septentrio-gnss-driver. </details>

<details>

Build from Source

Alternatively, the package can also be built from source using catkin_tools, where the latter can be installed using the command sudo apt-get install python-catkin-tools for Melodic or sudo apt-get install python3-catkin-tools for Noetic. The typical catkin_tools workflow should suffice:

source /opt/ros/${ROS_DISTRO}/setup.bash # In case you do not use the default shell of Ubuntu, you need to source another script, e.g. setup.sh.
mkdir -p ~/septentrio/src # Note: Change accordingly dependending on where you want your package to be installed.
cd ~/septentrio
catkin init # Initialize with a hidden marker file
catkin config --cmake-args -DCMAKE_BUILD_TYPE=RelWithDebInfo # CMake build types pass compiler-specific flags to your compiler. This type amounts to a release with debug info, while keeping debugging symbols and doing optimization. I.e. for GCC the flags would be -O2, -g and -DNDEBUG.
cd src
git clone https://github.com/septentrio-gnss/septentrio_gnss_driver
rosdep install . --from-paths -i # Might raise "rosaic: Unsupported OS [mint]" warning, if your OS is Linux Mint, since rosdep does not know Mint (and possible other OSes). In that case, add the "--os=ubuntu:saucy" option to "fool" rosdep into believing it faces some Ubuntu version. The syntax is "--os=OS_NAME:OS_VERSION".
catkin build # If catkin cannot find empy, tell catkin to use Python 3 by adding "-DPYTHON_EXECUTABLE=/usr/bin/python3".
echo "source ~/septentrio/devel/setup.bash" >> ~/.bashrc # It is convenient if the ROS environment variable is automatically added to your bash session every time a new shell is launched. Again, this works for bash shells only. Also note that if you have more than one ROS distribution installed, ~/.bashrc must only source the setup.bash for the version you are currently using.
source ~/.bashrc

</details>

<details>

Notes Before Usage

# Configuration Settings for the Rover Rx
device: tcp://xxx.xxx.xxx.xxx:xxxx
serial:
baudrate: 115200
rx_serial_port: USB1
hw_flow_control: off
frame_id: gnss
receiver_type: gnss
datum: ETRS89
poi_to_arp:
delta_e: 0.0
delta_n: 0.0
delta_u: 0.0
poi_to_aux1_arp:
delta_e: 0.0
delta_n: 0.0
delta_u: 0.0
ant_type: Unknown
ant_aux1_type: Unknown
ant_serial_nr: Unknown
ant_aux1_serial_nr: Unknown
leap_seconds: 18
polling_period:
pvt: 500
rest: 500
use_gnss_time: false
ntrip_settings:
mode: off
caster: 0
caster_port: 0
username: 0
password: 0
mountpoint: 0
ntrip_version: v2
send_gga: auto
rx_has_internet: false
rtcm_version: RTCMv2
rx_input_corrections_tcp: 6666
rx_input_corrections_serial: USB2
publish:
# For both GNSS and INS Rxs
navsatfix: false
gpsfix: true
gpgga: false
gprmc: false
gpst : false
pvtcartesian: false
pvtgeodetic: true
poscovcartesian: false
poscovgeodetic: true
velcovgeodetic: false
atteuler: true
attcoveuler: true
pose: false
diagnostics: false
# For GNSS Rx only
gpgsa: false
gpgsv: false
# For INS Rx only
insnavcart: false
insnavgeod: false
extsensormeas: false
imusetup: false
velsensorsetup: false
exteventinsnavcart: false
exteventinsnavgeod: false
# INS-Specific Parameters
ins_spatial_config:
att_offset:
heading: 0.0
pitch: 0.0
imu_orientation:
theta_x: 0.0
theta_y: 0.0
theta_z: 0.0
poi_to_imu:
delta_x: 0.0
delta_y: 0.0
delta_z: 0.0
ant_lever_arm:
x: 0.0
y: 0.0
z: 0.0
vel_sensor_lever_arm:
vsm_x: 0.0
vsm_y: 0.0
vsm_z: 0.0
ins_initial_heading: auto
ins_std_dev_mask:
att_std_dev: 0.0
pos_std_dev: 0.0
ins_use_poi: false

In order to launch ROSaic, one must specify all arg fields of the rover.launch file which have no associated default values, i.e. for now only the param_file_name field. Hence, the launch command reads roslaunch septentrio_gnss_driver rover.launch param_file_name:=rover.

</details>

Inertial Navigation System (INS): Basics

</details>

<details>

Compensate for IMU Orientation

Capture (1)

</details>

ROSaic Parameters

The following is a list of ROSaic parameters found in the config/rover.yaml file.

Connectivity Specs

<details>

Receiver Type

<details>

Frame ID

<details>

Datum

<details>

POI-ARP Offset

<details>

Antenna Specs

<details>

Leap Seconds

<details>

Polling Periods

<details>

Time Systems

<details>

Correction Services

<details>

INS Specs

Parameters Configuring (Non-)Publishing of ROS Messages <details>

NMEA/SBF Messages to be Published

ROS Topic Publications

A selection of NMEA sentences, the majority being standardized sentences, and proprietary SBF blocks is translated into ROS messages, partly generic and partly custom, and can be published at the discretion of the user into the following ROS topics. All published ROS messages, even custom ones, start with a ROS generic header std_msgs/Header.msg, which includes the receiver time stamp as well as the frame ID, the latter being specified in the ROS parameter frame_id. <details>

Available ROS Topics

Suggestions for Improvements

<details>

Some Ideas

Adding New SBF Blocks or NMEA Sentences

<details>

Steps to Follow

Is there an SBF or NMEA message that is not being addressed while being important to your application? If yes, follow these steps:

  1. Find the log reference of interest in the publicly accessible, official documentation. Hence select the reference guide file, e.g. for mosaic-x5 in the product support section for mosaic-X5, Chapter 4, of Septentrio's homepage.
  2. Add a new .msg file to the septentrio_gnss_driver/msg folder.
  3. SBF: Add the new struct definition to the sbf_structs.hpp file.
  4. Parsing/Processing the message/block:
    • Both: Add a new include guard to let the compiler know about the existence of the header file (such as septentrio_gnss_driver/PVTGeodetic.h) that gets compiler-generated from the .msg file constructed in step 3.
    • SBF: Extend the NMEA_ID_Enum enumeration in the rx_message.hpp file with a new entry.
    • SBF: Extend the initialization of the RxIDMap map in the rx_message.cpp file with a new pair.
    • SBF: Add a new callback function declaration, a new method, to the io_comm_rx::RxMessage class in the rx_message.hpp file.
    • SBF: Add the latter's definition to the rx_message.cpp file.
    • SBF: Add a new C++ "case" (part of the C++ switch-case structure) in the rx_message.hpp file. It should be modeled on the existing evPVTGeodetic case, e.g. one needs a static counter variable declaration.
    • NMEA: Construct two new parsing files such as gpgga.cpp to the septentrio_gnss_driver/src/septentrio_gnss_driver/parsers/nmea_parsers folder and one such as gpgga.hpp to the septentrio_gnss_driver/include/septentrio_gnss_driver/parsers/nmea_parsers folder.
  5. Create a new publish/.. ROSaic parameter in the septentrio_gnss_driver/config/rover.yaml file, create a global boolean variable publish_... in the septentrio_gnss_driver/src/septentrio_gnss_driver/node/rosaic_node.cpp file, insert the publishing callback function to the C++ "multimap" IO.handlers_.callbackmap_ - which is already storing all the others - in the rosaic_node::ROSaicNode::defineMessages() method in the same file and add an extern bool publish_...; line to the septentrio_gnss_driver/include/septentrio_gnss_driver/node/rosaic_node.hpp file.
  6. Modify the septentrio_gnss_driver/CMakeLists.txt file by adding a new entry to the add_message_files section. </details>


septentrio_gnss_driver
Author(s): Tibor Dome
autogenerated on Fri Nov 5 2021 02:10:59