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

Overview

ublox_driver

Authors/Maintainers: CAO Shaozu (shaozu.cao AT gmail.com)

The ublox_driver provides essential functionalities for u-blox GNSS receivers. This package is originally designed for u-blox ZED-F9P module according to the specification UBX-18010854, but should also be compatible to other 8-series or 9-series u-blox receivers as long as the interface is the same.

The following diagram shows all possible input and output options supported by ublox_driver.

ublox_driver diagram!

1. Prerequisites

1.1 C++11 Compiler

This package requires some features of C++11.

1.2 ROS

This package is developed under ROS Kinetic environment.

1.3 Eigen

We use Eigen 3.3.3 for matrix manipulation.

1.4 Boost

Our software utilizes Boost library for serial and socket manipulation. Using command sudo apt-get install libboost-all-dev to install Boost.

1.5 gnss_comm

This package also requires gnss_comm for ROS message definitions and some utility functions. Follow those instructions to build the gnss_comm package.

2. Build ublox_driver

Clone the repository to your catkin workspace (for example ~/catkin_ws/):

cd ~/catkin_ws/src/
git clone https://github.com/HKUST-Aerial-Robotics/ublox_driver.git

Then build the package with:

cd ~/catkin_ws/
catkin_make
source ~/catkin_ws/devel/setup.bash

3. Run with your u-blox receiver

Our software can take the serial stream from the u-blox receiver as an input source. Before running the package, you need to configure your receiver using u-center to output at least UBX-RXM-RAWX, UBX-RXM-SFRBX and UBX-NAV-PVT messages to a specific serial port (a sample config used in our system can be found at config/ucenter_config_f9p_gvins.txt). Then connecting your computer(Linux) with the receiver, make sure the serial port appears as a file in the /dev/ directory. Then add your account to dialout group to obtain permission on serial r/w operation via (no need to substitute $USER):

sudo usermod -aG dialout $USER

Open config/driver_config.yaml, set online and to_ros to 1, and adjust input_serial_port and serial_baud_rate according to your setting. Run the package with:

roslaunch ublox_driver ublox_driver.launch

Open another terminal, echo the ROS message by:

rostopic echo /ublox_driver/receiver_lla

If everything goes smoothly, there should be some ROS messages coming out. Note that some ROS topics remain inactive until the receiver gets GNSS signals.

Besides the ROS message, you can record the serial stream to a file(to_file option) or forward the stream to another serial port(to_serial option). All output options can be turned on simultaneously.

Obtain RTK Solution (Optional)

If your receiver owns an internal RTK engine (for example, ZED-F9P), you can input RTCM messages from the GNSS base station to the receiver in order to obtain the cm-level accurate RTK localization result. Our software can forward the RTCM stream from a local socket to the receiver's serial port. Nowadays many GNSS stations distribute their RTCM streams via NTRIP protocol and you can easily fetch the NTRIP data and map it to a local socket via RTKLIB. Following those commands to build RTKLIB and setup the RTCM stream:

git clone https://github.com/tomojitakasu/RTKLIB.git
cd RTKLIB/
git checkout rtklib_2.4.3
cd app/consapp/str2str/gcc/
make
./str2str -in ntrip://${NTRIP_SITE}:${NTRIP_PORT}/${MOUNT_POINT} -out tcpsvr://:3503

Then set the input_rtcm option to 1 in config/driver_config.yaml and launch the ros node with:

roslaunch ublox_driver ublox_driver.launch

If the field carr_soln in /ublox_driver/receiver_pvt message becomes 2, the RTK is in fix status. If you find the location of the GNSS base station reported in the RTCM message is somehow biased, you can apply correction via the variable rtk_correction_ecef in the config file.

4. Playback Log Files

Our package can also take an log file as the input. The log file can be recorded via u-center, RTKLIB or our package itself. To playback the log file, you need to set online to 0 and point ubx_filepath to your log file in the config file. Then launch the ros node with:

roslaunch ublox_driver ublox_driver.launch

Similar to the online receiver manner, all three output options are also supported in the playback mode. Note that the playback speed is controlled by the serial_baud_rate variable in the config file.

5. Synchronize System Time

In addition to message parsing and delivery, ublox_driver can also synchronize the local system time to the global time without the need of internet connection. Note that such synchronization is only in a coarse level and the accuracy is not guaranteed. To perform such synchronization, you need to set UTC_OFFSET macro in src/sync_system_time.cpp according to your timezone. Recompile and launch the driver with:

roslaunch ublox_driver ublox_driver.launch

Then open another terminal and run commands:

sudo su
source /opt/ros/kinetic/setup.bash
source ${YOUR_CATKIN_WORKSPACE}/devel/setup.bash
rosrun ublox_driver sync_system_time

The system time will be synchronized to the global time when the receiver gets a valid PVT solution.

6. Todo List

  • Config u-blox receiver when the driver gets launched
  • Infer timezone from geodetic location when sync time
  • Optimize time-sync function to improve precision

7. Acknowledgements

Many of the ephemeris parsing functions in our package are adapted from RTKLIB. We use mini-yaml for config parsing.

8. License

The source code is released under GPLv3 license.

Comments
  • issue while launching

    issue while launching

    Screenshot from 2021-09-09 15-46-17

    I didnot understood what changes must be made in u-centre 2 I just connected my ublocks zed f9p to my linux laptop and tried to launch it didnot worked so i put to default and tried launching

    opened by dineshrboson 15
  • Why is there no ionosphere topic?

    Why is there no ionosphere topic?

    Today, I use this ublox_driver to collect data. The collected rosbag info as follows:

    image

    Obviously, we drove for 21 minutes, but there is no /ublox_driver/iono_params topic. But your rosbag has /ublox_driver/iono_params topic. I know from your ublox_driver code( as follows) that both the ephemeris and the ionosphere are parsed from the RXM-SFRBX.

    image

    So I don't understand why there's ephemeris but there's no ionosphere. Is it something to do with the environment or the weather? Today's weather is cloudy, we collected data in the urban open environment. Or, could it have something to do with a GPS antenna?

    opened by JiangZhengok 9
  • Cannot get RTK solution

    Cannot get RTK solution

    @shaozu Hi, thanks for your nice work. I got a problem in getting RTK solution using ZED-F9P, ublox_driver and RTKLIB.

    Following your instructions, firstly I did these steps:

    1. Config ZED-F9P module: I enabled UBX-NAV-PVT , UBX-RXM-RAWX, UBX-RXM-SFRBX in u-center(Windows) and got the data;
    2. Test in GVINS: Using Realsense D435i and ZED-F9P, I successfully run GVINS;
    3. Test RTK in Windows: I entered my CORS username and password in "NTRIP Client" in u-center, and got "3D/DGNSS/FIX" solution;

    Secondly, I am trying to get RTK solution in ubuntu, and did these steps:

    1. Run str2str in RTKLIB: ./str2str -in ntrip://[my_username]:[my_password]@rtk.ntrip.qxwz.com:8002/RTCM32_GGB -out tcpsvr://:3503 or ./str2str -in ntrip://[my_username]:[my_password]@rtk.ntrip.qxwz.com:8002/AUTO -out tcpsvr://:3503 (configuration is the same as I did in u-center, including account, address, port and NTRIP mount point)

    2. Launch ublox_driver with rtcm stream

    and then I did not see carr_slon becomes 2 , just like this:

    Screenshot from 2022-05-04 17-45-07

    Then I try to check whether there are messages in port 3503, I cout some info in SocketHandler::startRead() and sometimes I see the info output in terminal. But I still can't get the RTK solution...

    So, is there something wrong with my operations ?

    And by the way, how can I get PVT solution without RTK fix and with RTK fix using one ZED-F9P module at the same time? Is that possible? I just need one for algorithm and the other for reference(RTK).

    opened by Mil1ium 7
  • 'Not received enough bytes ~' problem

    'Not received enough bytes ~' problem

    Hi!

    I guess i solved that problem. << I tried to launch 'ublox_driver.launch', but I got an error with the messages "Not received enough bytes: .... while expect ...". I think the problem might be related to the messages, but i couldn't know how can i fix it.

    but I still have an issue that i couldn't get a topic "/ublox_driver/time_pulse_info". When i execute the launch file, the terminal gives the error message like "E1105 12:31:57.385229 7462 ublox_message_processor.cpp:823] ubx rxmsfrbx length error: sat=E08 len=48". Is that error related to the issue i have? Screenshot from 2021-11-05 12-32-05

    opened by JuyeopHan 5
  • ublox_message_processor prints errors

    ublox_message_processor prints errors

    Hey,

    after flashing the provided config i get following prints from the node. Everything right?

    E0630 15:30:10.012120 26483 ublox_message_processor.cpp:305] ubx rxmrawx week=0 error
    E0630 15:31:45.277527 26483 ublox_message_processor.cpp:787] decode_bds_d1 error: frn=0 0 3
    E0630 15:32:14.297196 26483 ublox_message_processor.cpp:787] decode_bds_d1 error: frn=1 0 3
    
    opened by Squizzy911 5
  • help to obtain rtk solution

    help to obtain rtk solution

    If your receiver owns an internal RTK engine (for example, ZED-F9P), you can input RTCM messages from the GNSS base station to the receiver in order to obtain the cm-level accurate RTK localization result. Our software can forward the RTCM stream from a local socket to the receiver's serial port. Nowadays many GNSS stations distribute their RTCM streams via NTRIP protocol and you can easily fetch the NTRIP data and map it to a local socket via RTKLIB. Following those commands to build RTKLIB and setup the RTCM stream:

    I connected my zed f9ps base station to the ucentre, flashed 1.13 firmware and loaded base conf to it and in the tools->ntrip client-> I added one ip port and uname and password and selected mount point and clicked ok then I executed ./str2str -in ntrip://${NTRIP_SITE}:${NTRIP_PORT}/${MOUNT_POINT} -out tcpsvr://:3503 by changing all ntrip site and remaining respectively. and its keep on telling 401 unauthorized and I dont know where to enter uname and pw so thats 1st case and 2nd case is rtk2go.com 2101 port it does not ask for uname and password so I selected mount and configured ntrip client in ucentre so this time when I executed ./str2str -in ntrip://${NTRIP_SITE}:${NTRIP_PORT}/${MOUNT_POINT} -out tcpsvr://:3503 with ./str2str -in ntrip://$rtk2gocom:2101/ACACU -out tcpsvr://:3503 This time its showing bytespersecond and but the end its showing (2)waiting when I changed the yaml file to 1 in input_rtcm its saying you cannot connect to port 3503

    opened by dineshrboson 3
  • No ephm output. Any example config available?

    No ephm output. Any example config available?

    Hey,

    we are trying to get your GVINS package running. For this we want to use your Ublox driver. Unfortunately we don't get any messages from the topic ephm. We have enabled GPS, SBAS and Galileo here in Europe. Also the messages UBX-RXM-RAWX, UBX-RXM-SFRBX and UBX-NAV-PVT are set to be published.

    Can you maybe provide more info about your config or upload an example config? thank you!

    opened by Squizzy911 3
  • Bad accuracy with NTRIP data

    Bad accuracy with NTRIP data

    Hey,

    i am feeding the rtcm messages from my german ntrip provider over udp to your node. i am using "str2str" from the RTKLib. The gps position is drifting a lot.

    i dont have this problem with https://github.com/ros-agriculture/ublox_f9p and https://github.com/ros-agriculture/ntrip_ros.

    any idea what i am doing wrong? Is str2str not providing the correct data for you?

    Thank you!

    opened by Squizzy911 2
  • Obtaining a timestamp for the resulting topics

    Obtaining a timestamp for the resulting topics

    Thanks for sharing your impressive work! I am trying to make a rosbag from a .ubx file using ublox_driver (duration is ~90 minutes). After running ublox_driver and rosbag record -a, I obtain this rosbag: Screenshot from 2022-11-18 11-04-43

    I would like to modify the rosbag to use it online. The easiest way would be to replace message timestamps with header timestamps. Unfortunately, only /ublox_driver/receiver_lla has a header with a timestamp. So, what would be the right way of getting a timestamp for the rest of the topics to rewrite the rosbag? gnss_comm has several functions to convert from GNSS time to time_t, but I am not sure about the msg fields I have to use to make this conversion.

    opened by jcremona 0
  • The terminal window shows

    The terminal window shows "length error " And the message updates slowly when I echo.

    I ran the Ublox-Driver using the H-RTK-F9P and picked up the 6 messages. But it shows a "length error" in the Ublox-driver terminal window. Some of the messages updated slowly when I echoed them like the ublox_deiver/ephem , ublox_deiver/glo_ephem. But the others are normal. Why is this? Is something wrong with the device or the project? Or is the GNSS signal weak? Could you offer some advice, please?

    image

    Thanks for your attention.

    opened by SSZ1 0
  • The echoed six messages updates slowly.

    The echoed six messages updates slowly.

    I ran the Ublox-Driver using the H-RTK-F9P and picked up the 6 messages. But some of them updated slowly when I echoed them like the ublox_deiver/ephem , ublox_deiver/glo_ephem. But the others are normal. Why is this? Is something wrong with the device or the project?

    opened by SSZ1 0
  • Can the driver take UBX-RXM-RAWX, UBX-RXM-SFRBX and UBX-NAV-PVT raw data and publish the correct msgs?

    Can the driver take UBX-RXM-RAWX, UBX-RXM-SFRBX and UBX-NAV-PVT raw data and publish the correct msgs?

    Hi,

    I have collected UBX-RXM-RAWX, UBX-RXM-SFRBX and UBX-NAV-PVT raw data in a rosbag and want the ublox_driver to take this in and publish the desired msgs. Is this possible or is the best to translate the rosbag with these to a .ubx file? What format does such a file follow? Could you provide an example file?

    Or is there a better way of solving this?

    opened by maghauke 0
Owner
HKUST Aerial Robotics Group
HKUST Aerial Robotics Group
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.

Darko Lukić 19 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.

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 /

null 157 Jan 2, 2023
Filter driver which support changing DPI of mouse that does not support hardware dpi changing.

Custom Mouse DPI Driver 하드웨어 DPI 변경이 불가능한 마우스들의 DPI 변경을 가능하게 하는 필터 드라이버 경고: 해당 드라이버는 완전히 테스트 되지 않았습니다 Install 해당 드라이버는 서명이 되어있지않습니다. 드라이버를 사용하려면 tests

storycraft 4 Sep 23, 2022
QN8035 based Raspberry Pi FM radio receiver

QN8035 based Raspberry Pi FM radio receiver. QN8035 is a single-chip stereo FM radio receiver IC designed by the Quintic Corporation. This receiver su

Dilshan R Jayakody 8 Oct 6, 2022
Si5351 and Arduino based superheterodyne receiver

Arduino Superheterodyne Receiver In this project, we will upgrade a traditional shortwave superheterodyne receiver with an Arduino base tuner. This tu

Dilshan R Jayakody 20 Nov 14, 2022
somfy remote receiver for stm32 platform

SOMFY library for STM32 http://www.github.com/NimaLTD https://www.instagram.com/github.nimaltd/ https://www.youtube.com/channel/UCUhY7qY1klJm1d2kulr9c

Nima Askari ----- نیما عسکری 3 Dec 10, 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

null 26 Nov 20, 2022
A set of tutorial projects for creating a simple digital radio receiver based on the STM32G431KB microcontroller

simple-radio Обучающие проекты по созданию простого цифрового радиоприемника на базе микроконтроллера STM32G431KB. Разработка программ выполнялась в W

null 9 Sep 21, 2022
ESP32-Skid-Steer - Bruder Catepillar Skid Steer model converted to RC, controlled by an ESP32 with 2 analog joysticks and a receiver that is an ESP32 on the model.

ESP32-Skid-Steer Bruder Catepillar Skid Steer model converted to RC, controlled by an ESP32 with 2 analog joysticks and a receiver that is an ESP32 on

null 6 Oct 27, 2022
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

null 3 Apr 11, 2022
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

null 2 Dec 26, 2021
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

Kento Oki 72 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 Installation (for users) Install Ultralea

null 68 Jan 5, 2023
Hygieia, a vulnerable driver traces scanner written in C++ as an x64 Windows kernel driver.

Hygieia The Greek goddess of health, her name is the source for the word "hygiene". Hygieia is a windows driver that works similarly to how pagewalkr

Deputation 103 Dec 4, 2022
SinMapper - usermode driver mapper that forcefully loads any signed kernel driver

usermode driver mapper that forcefully loads any signed kernel driver (legit cert) with a big enough section (example: .data, .rdata) to map your driver over. the main focus of this project is to prevent modern anti-cheats (BattlEye, EAC) from finding your driver and having the power to hook anything due to being inside of legit memory (signed legit driver).

null 170 Dec 29, 2022
3D printer control board based on ESP32,support 8 Driver motors.

PandaZHU use ESP32 as the mcu for 3D printer motherboard. Zhu is Chinese for bamboo it has larger memory and more powerful than normal 32bit 3D printe

Mark 48 Dec 31, 2022
image_projection is a ROS package to create various projections from multiple calibrated cameras.

image_projection Overview image_projection is a ROS package to create various projections from multiple calibrated cameras. Use cases involve: Rectify

Technische Universität Darmstadt ROS Packages 118 Dec 22, 2022
A ROS based Open Source Simulation Environment for Robotics Beginners

A ROS based Open Source Simulation Environment for Robotics Beginners

Sulegeyixiu 131 Jan 5, 2023
Isaac ROS image_pipeline package for hardware-accelerated image processing in ROS2.

isaac_ros_image_pipeline Overview This metapackage offers similar functionality as the standard, CPU-based image_pipeline metapackage, but does so by

NVIDIA AI IOT 32 Dec 15, 2022