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 and GNSS/INS receiver families - and beyond. Since Noetic will only be supported until 2025, a ROS2 version is available in the branch 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.

Additional ROS packages have to be installed for the GPSFix message.

sudo apt install ros-$ROS_DISTRO-nmea-msgs ros-$ROS_DISTRO-gps-common.

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.

Conversions from LLA to UTM are incorporated through GeographicLib. Install the necessary headers via<br>
sudo apt install libgeographic-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-$ROS_DISTRO-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

</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>

UTM Zone Locking

<details>

Datum

<details>

POI-ARP Offset

<details>

Antenna Attitude Offset

<details>

Antenna Specs

<details>

Leap Seconds

<details>

Polling Periods

<details>

Time Systems

<details>

RTK corrections

<details>

INS Specs

<details>

Logger

Parameters Configuring 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 Sat Mar 11 2023 03:12:56