liuhj86 / VHDMap-SE

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Introduction

overview This is the official code repository of "VHDMap-SE: A Universal Vectorized High-definition Map Aided Vehicle State Estimator", which is accepted by IEEE Transactions on Intelligent Vehicles'24.

VHDMap-SE presents a universal UGV state estimation system and a query-based vectorized high-definition (VHD) map data exchange protocol. The system utilizes VHD maps to correct the lateral and longitudinal positions as well as the yaw orientation of UGVs. The data exchange protocol enables UGVs to obtain real-time VHD map information and process it efficiently. We provide comprehensive experimental results that showcase the effectiveness, accuracy, and robustness of our proposed system both in simulation and real-world scenarios.

Its main features are:

  • The system only utilizes common traffic elements in VHD map to correct UGV states, which includes lateral position, longitudinal position and yaw orientation.
  • The system accommodates the universal VHD map formats ASAM OpenDRIVE and Apollo OpenDRIVE.
  • The system adopts a query-based VHD map data exchange protocol to interact with VHD map server in real time. By using such a mechanism, VHD map data can be distributed from a central server to numerous agents.

Supplementory Materials

For more demo videos of VHDMap-SE, please visit https://liuhongji.site/VHDMap-SE/.

Prerequisites

ROS

Follow the official guide to install ROS1.

Build

mkdir ws
cd ws
mkdir src
cd src
git clone https://github.com/liuhj86/VHDMap-SE.git
cd ..
catkin_make

Run

source devel/setup.bash
roslaunch VHDMap-SE estimator.launch

System Initialization

Before the system can run successfully, it is necessary to obtain the orientation of the vehicle relative to the due north direction.If users' GNSS receiver has a double antenna, the heading angle relative to the due north direction can be obtained directly. If not, Mercator projection (MP) could be used to calculate it from two consecutive frames of GNSS data. To guarantee accuracy, we need to make sure that both frames of GNSS data used are obtained while the UGV is moving in a straight line. The reading of the angular velocity meter during UGV motion can be a good reference.

Therefore, please ensure that your vehicle drives in a straight line until the system initialization is successful before the system runs successfully (in principle, only 2 frames of consecutive GNSS data with good signal need to be received during the straight line movement process, so the duration of this process in general environments will not be too long). When the system initialization is successful, there will be corresponding output prompts.

Observation Protocols

Item Topic Data Flow Message Type Description
Lane Observation /camera/lane others->system sensor_msgs::NavSatFix 1. Distance to the left lane line: msg.position_covatiance[0];
2. Inclination angle of the left lane line (rad): msg.position_covatiance[1];
3. Distance to the right lane line: msg.position_covatiance[2];
4. Inclination angle of the left lane line (rad): msg.position_covatiance[3].
Longitudinal Observation /longitudinal_constraint_measurement others->system geometry_msgs::PoseArray 1. Distance of the longitudinal constraint target relative to the UGV along the X-axis direction in ENU frame: msg.poses[0].position.x;
2. Distance of the longitudinal constraint target relative to the UGV along the Y-axis direction in ENU frame: msg.poses[0].position.y;
3. Distance of the longitudinal constraint target relative to the UGV along the Z-axis direction in ENU frame (if there is Z-coordinate in map): msg.poses[0].position.z;
4. Distance measurement variance: msg.poses[3].position.x.
Map Request Lane Request: /map/request/lane
Longitudinal Constraint Point Request: /map/request/lc
system->map nav_msgs::Odometry 1. UGV position: msg.pose.pose.position;
2. UGV orientation: msg.pose.pose.orientation.
Lane Map Response /map/response/lane map->system sensor_msgs::PointCloud 1. Points valid flag: msg.channels[0].values[0];
2. Index of the separation point for the left and right lane line points: msg.channels[1].values[0];
3. Lane line points: msg.points[0-size].
Longitudinal Map Response /map/response/lc map->system geometry_msgs::PoseArray 1. Longitudinal constraint points: msg.points[0-size].

Citation

If you find this work useful in your research, please consider citing:

@ARTICLE{10497895,
  author={Liu, Hongji and Tang, Mingkai and Jia, Mingkai and Chen, Yingbing and Wu, Jin and Liu, Ming},
  journal={IEEE Transactions on Intelligent Vehicles}, 
  title={VHDMap-SE: A Universal Vectorized High-definition Map Aided Vehicle State Estimator}, 
  year={2024},
  volume={},
  number={},
  pages={1-15},
  keywords={State estimation;Roads;Real-time systems;Global navigation satellite system;Simultaneous localization and mapping;Protocols;Location awareness;intelligent vehicles;state estimation;HD map},
  doi={10.1109/TIV.2024.3388204}}

License

This project is licensed under the MIT License - see the LICENSE file for details.

About


Languages

Language:C++ 97.5%Language:C 1.5%Language:CMake 1.0%