ROSaic = ROS + mosaic


This repository hosts a ROS Melodic and Noetic driver (i.e. for Linux only) - written in C++ - that works with mosaic - one of Septentrio's cutting-edge GNSS 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.


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.


The binary release is now available for Melodic, yet will take another few days for Noetic. To install the binary package on Melodic, simply run<br>
sudo apt-get install ros-melodic-septentrio-gnss-driver.

Alternatively, the package can also be built from source using catkin_tools, where the latter can be installed using the command<br>
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.
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
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
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

ROSaic Parameters

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

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.

Suggestions for Improvements

Adding New SBF Blocks or NMEA Sentences

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.

Author(s): Tibor Dome
autogenerated on Tue May 11 2021 02:16:55