Author/Maintainer: CAO Shaozu (shaozu.cao AT gmail.com), LU Xiuyuan (xluaj AT connect.ust.hk)
This repository hosts dataset collected during the development of GVINS. The dataset contains GNSS raw measurement, visual and inertial data which are necessary for GNSS-Visual-Inertial fusion algorithm.
1. Sensor Suit
The visual and inertial data are collected using a VI-Sensor. The VI-Sensor has two Aptina MT9V034 image sensors, which form a stereo camera together, and a Analog Devices ADIS 16448 IMU. The image and inertial data from the VI-Sensor are well synchronized by hardware design. A detailed spec sheet of this sensor can be found here. The camera and IMU parameters can be found in
1.2. u-blox ZED-F9P Receiver
We use u-blox ZED-F9P to collect GNSS raw measurements and ground truth location. The ZED-F9P owns an internal RTK engine which is capable to provide receiver's location at an accuracy of 1cm in open area. To obtain the RTK solution, a real-time RTCM stream from a 3km away GNSS observation station is fed to the receiver. The GNSS antenna in our platform is a Tallysman’s TW3882.
The time system between the VI-Sensor and the GNSS receiver is synchronized via Pluse Per Second (PPS) signal. The synchronization process is illustrated in the figure below:
- The GNSS receiver reports the time information of next PPS signal. In our system the reporting frequency is set to 1Hz.
- The PPS signal from the GNSS receiver is used to trigger the external interrupt of VI-Sensor. In our system the frequency of PPS is set to 0.2 Hz.
- When VI-Sensor is interrupted by the PPS signal, it reports its local time to the host computer.
In this way the host computer knows both the global and local timestamps of the PPS signal so these two time systems get aligned together.
3. Dataset Details
The dataset is released in the form of rosbag and currently there are two rosbags available:
The data items within the rosbag are listed below:
|/external_trigger||gvins/LocalSensorExternalTrigger||-||publish when VI-Sensor is trigger. definition|
|/ublox_driver/receiver_lla||sensor_msgs/NavSatFix||10Hz||Receiver's GNSS solution (brief).|
|/ublox_driver/receiver_pvt||gnss_comm/GnssPVTSolnMsg||10Hz||Receiver's GNSS solution (verbose). definition|
|/ublox_driver/range_meas||gnss_comm/GnssMeasMsg||10Hz||GNSS raw measurement. definition|
|/ublox_driver/ephem||gnss_comm/GnssEphemMsg||-||The broadcast ephemeris of GPS, Galileo and BeiDou. definition|
|/ublox_driver/glo_ephem||gnss_comm/GnssGloEphemMsg||-||The broadcast ephemeris of GLONASS. definition|
|/ublox_driver/iono_params||gnss_comm/StampedFloat64Array||-||The broadcast ionospheric parameters. definition|
|/ublox_driver/time_pulse_info||gnss_comm/GnssTimePulseInfoMsg||1Hz||The time information of next PPS signal. definition.|
The toolkit provided in this package requires gnss_comm library.
4.1. Convert GNSS raw measurement to RINEX File
Many GNSS softwares like RTKLIB accept RINEX file as the input. To convert the GNSS raw measurements in the rosbag to the corresponding RINEX file, firstly clone this repo to your catkin workspace and set
toolkit/src/bag2rinex.cpp. Then build and run the toolkit with:
cd ~/catkin_ws/ catkin_make source devel/setup.bash rosrun gvins_dataset_toolkit bag2rinex
The observation RINEX file should be generated after a while. The corresponding GNSS ephemeris RINEX file can be found in
4.2 Save RTK solution to csv file
To extract the RTK solution and status to a local csv file, firstly set
toolkit/src/bag2rtk_solution.cpp. Then build and run the toolkit with:
cd ~/catkin_ws/ catkin_make source devel/setup.bash rosrun gvins_dataset_toolkit bag2rtk_solution
Each record in the generated csv file is in the form of:
gnss_ts_ns, ecef_px, ecef_py, ecef_pz, enu_vx, enu_vy, enu_vz, fix_type, valid_fix, diff_soln, carr_soln
, with each item described in the following:
|gnss_ts_ns||GNSS time of the navigation epoch (expressed as Unix timestamp in ns)|
|ecef_p*||The x, y, z component of the position in ECEF frame|
|enu_v*||The x, y, z component of the velocity in ENU frame|
|fix_type||GNSS fix type (0=no fix, 1=dead reckoning only, 2=2D-fix, 3=3D-fix, 4=GNSS+dead reckoning combined, 5=time only fix)|
|valid_fix||if fix valid (1=valid fix)|
|diff_soln||if differential correction were applied (1=applied)|
|carr_soln||carrier phase range solution status (0=no carrier phase, 1=float, 2=fix)|
The dataset is released under CC-BY-NC-SA-4.0 license.