GNSS/INS data pre-processing design#
Overview#
A GNSS (Global Navigation Satellite System) receiver measures the position of its antenna as latitude, longitude, and altitude. An INS (Inertial Navigation System) also gives the orientation. The sensing component converts these measurements to a pose of base_link in the map frame. Localization uses this pose.
- GNSS/INS driver
NavSatFix and orientation - GNSS poser
Pose in the map frame - Localization
Initial pose and regularization
The autoware_gnss_poser package of Autoware Core does this conversion. It is the only GNSS preprocessing node in the sensor kits of autoware_launch.
Inputs#
| Topic in the sample sensor kit | Message type | Description |
|---|---|---|
/sensing/gnss/ublox/nav_sat_fix or /sensing/gnss/septentrio/nav_sat_fix | sensor_msgs/msg/NavSatFix | Position of the antenna. header.frame_id is the antenna frame. |
/autoware_orientation | autoware_sensing_msgs/msg/GnssInsOrientationStamped | Orientation from the INS, in the ENU (East, North, Up) convention |
/map/map_projector_info | autoware_map_msgs/msg/MapProjectorInfo | Projection of the map, from the map projection loader |
GnssInsOrientationStamped holds a quaternion and the root mean square error of the rotation around each axis (rmse_rotation_x, rmse_rotation_y, and rmse_rotation_z).
Outputs#
| Topic | Message type | Description |
|---|---|---|
/sensing/gnss/pose | geometry_msgs/msg/PoseStamped | Pose of base_link in the map frame |
/sensing/gnss/pose_with_covariance | geometry_msgs/msg/PoseWithCovarianceStamped | The same pose with a covariance |
/sensing/gnss/fixed | autoware_internal_debug_msgs/msg/BoolStamped | true if the receiver has a fix |
TF map to gnss_base_link | tf2_msgs/msg/TFMessage | The same pose as a transform, with the gnss_base_frame name |
Processing in autoware_gnss_poser#
For each NavSatFix message, the node does these steps:
- Wait for the map projection. The node needs
/map/map_projector_info. If the map uses theLocalprojector type, the node cannot convert the GNSS position and publishes no pose. - Check the fix. The node publishes the fix status. If the
NavSatFixstatus is lower thanSTATUS_FIX, the node skips the message. - Project the position. The node projects the latitude and longitude to the map frame with the map projection. It converts the altitude to the vertical datum of the map.
- Smooth the position (optional). With
gnss_pose_pub_methodset to1(average) or2(median), the node uses the lastbuff_epochpositions. The default0uses each position as it is. - Set the orientation. If
use_gnss_ins_orientationistrue(default), the node uses the lastGnssInsOrientationStampedmessage. If it isfalse, the node calculates the heading from the difference between two positions. - Move the pose to
base_link. The node transforms the antenna pose tobase_linkwith the static TF from the antenna frame. If this TF is not available, the node publishes the antenna pose.
The position covariance comes from the NavSatFix message. If the message has no covariance, the node uses 10.0 for x, y, and z. The orientation covariance is the square of the INS rotation error. Without INS orientation, the node uses 0.1 for roll and pitch and 1.0 for yaw.
GNSS receivers in the sample sensor kit#
The gnss.launch.xml file of sample_sensor_kit_launch selects the receiver with the gnss_receiver launch argument:
ublox(default): theublox_gpsdriver with thezed_f9p.yamlconfigurationseptentrio: theseptentrio_gnss_driverwith themosaic_x5_rover.launch.xmllaunch file
autoware_sensing_launch also has a gnss_postprocessor.launch.xml file for Septentrio receivers. It launches autoware_gnss_poser and the septentrio_heading_converter.py script. This script converts the AttEuler heading of the Septentrio driver to a GnssInsOrientationStamped message.
Users of the GNSS pose#
- The pose initializer (
autoware_pose_initializer) reads/sensing/gnss/pose_with_covarianceto find the initial pose. - The NDT scan matcher reads the same topic for its regularization. Regularization is off in the default parameters.
- Eagleye (
pose_sourceortwist_sourceset toeagleye) does not useautoware_gnss_poser. It reads/sensing/gnss/ublox/nav_sat_fixand/sensing/gnss/ublox/navpvtdirectly.
GNSS-INS velocity and acceleration#
The input types table also lists geometry_msgs/msg/TwistWithCovarianceStamped for the GNSS-INS velocity and geometry_msgs/msg/AccelWithCovarianceStamped for the GNSS-INS acceleration. Autoware defines no topic for them. The Sensing interface page gives "Not defined" as their topic.
No node of the sensing component reads these messages. Eagleye can read a GNSS velocity as TwistWithCovarianceStamped (velocity_source_type: 3 of its gnss_converter node). The default eagleye_config.param.yaml of autoware_launch reads the u-blox NavPVT message (velocity_source_type: 2) instead. No node of Autoware 2.0.0 reads a GNSS acceleration.