该项目基于ROS2平台实现了自动驾驶中的简单定位功能,主要以学习为目的,面向初学者学习入门,因此代码侧重于可读性,及扩展性,尽可能将代码进行解耦,并遵循ROS2的项目规范,以及代码风格。
本项目的主要框架以及核心代码参考了任乾老师的从零开始做自动驾驶定位项目 (知乎文章)以及深蓝学院的多传感器融合定位课程。
环境要求
- ROS版本:
Humble
下载kitti数据集rosbag
mkdir ~/localization_data
# 将数据拷贝到~/localization_data目录下,然后进行解压
unzip kitti_lidar_only_2011_10_03_drive_0027_synced.zip
下载源码及安装依赖
# 使用git下载代码到ROS2工作空间的src目录
# mkdir -p ~/ros2_ws/src && cd ~/ros2_ws/src
git clone https://github.com/gezp/localization_for_autonomous_driving.git
# 进入ROS2工作空间, 安装依赖
# cd ~/ros2_ws
rosdep install -y -r -q --from-paths src --ignore-src --rosdistro humble
编译
colcon build --symlink-install
运行kitti数据集点云可视化demo
# 需要先source ros环境
ros2 launch localization_common hello_kitti.launch.py
lidar定位
- 实现lidar里程计功能:
lidar_odometry
- 实现基于lidar的建图功能:
lidar_mapping
- 实现基于lidar的定位功能:
lidar_localization
lidar + imu 多传感器融合定位
- 实现imu里程计(常规积分,预积分):
imu_odometry
- 实现基于卡尔曼滤波的定位功能(eskf):
kf_based_localization
- 实现基于松耦合LIO的建图功能:
loosely_lio_mapping
- 实现基于图优化的定位功能(sliding window):
graph_based_localization
代码优化及扩展
- 实现Loam-based Lidar Odometry
- 利用gnss-ins-sim仿真数据进行imu实验
- 支持其它slam数据集
本项目参考了许多其它类似项目,并参考并引用了部分代码,这里向以下项目的作者表示感谢!
- https://github.com/Little-Potato-1990/localization_in_auto_driving
- https://github.com/AlexGeControl/Sensor-Fusion-for-Localization-Courseware
- https://github.com/gaoxiang12/slam_in_autonomous_driving
- https://github.com/HKUST-Aerial-Robotics/VINS-Mono
- https://github.com/HKUST-Aerial-Robotics/A-LOAM