参考高翔的自动驾驶与机器人中的SLAM技术的第四章,使用ROS2实现基于图优化和预积分的惯性导航系统。
- 对ROS2做了深度集成
- 使用c++17标准。
- 使用了较新版的Sophus和g2o库
- ROS2 Foxy
- C++17
- Ubuntu20.04
- Eigen3
- geometry_msgs
- sensor_msgs
- Pangolin 0.9.1
- g2o_20201223
- Sophus 1.22.10
- yaml-cpp
针对Pangolin、DBoW3和g2o,需要去上述指定的地址下载源码,然后编译安装。 对于没有指定地址的三方库,可以使用如下命令安装:
sudo apt update
sudo apt install libeigen3-dev libyaml-cpp-dev ros-foxy-geometry-msgs ros-foxy-sensor-msgs
git clone https://github.com/sunshanlu/INSystem.git
cd ORB-SLAM2-ROS2
colcon build
根据需求,创建配置文件,并运行,配置文件的示例在config文件夹下。config.yaml文件的每一项都做了注释,可以参考。
source ./install/setup.bash
./install/pre_insystem/lib/pre_insystem/pre_insystem_dataset config_path data_path
config_path
:代表配置文件路径,例如./config/config.yaml
data_path
:代表数据集路径,例如./data/10.txt
source ./install/setup.bash
ros2 run pre_insystem pre_insystem_ros2 --ros-args -p ConfigPath:={config_path}
在此文件夹中新开终端运行数据发布示例
source ./install/setup.bash
ros2 run data_publisher data_publisher_node --ros-args -p DataPath:={data_path}
config_path
:代表配置文件路径,例如./config/config.yaml
data_path
:代表数据集路径,例如./data/10.txt
pre_insystem/odom
:代表惯性导航系统轮速计,类型为pre_interfaces::msg::WOdom
pre_insystem/imu
:代表惯性导航系统IMU,类型为sensor_msgs::msg::Imu
pre_insystem/rtk
:代表惯性导航系统RTK,类型为pre_interfaces::msg::RTK
pre_insystem/navstate
:代表惯性导航系统导航状态,类型为pre_interfaces::msg::NavState
上述话题的1、2、3部分都是惯性导航系统的接收部分,而4为惯性导航系统的发布部分,其中包含位姿信息和速度信息。详细的pre_interfaces定义见./src/pre_interfaces/msg
文件夹