参考高翔的自动驾驶与机器人中的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-msgsgit 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_pathconfig_path:代表配置文件路径,例如./config/config.yamldata_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.yamldata_path:代表数据集路径,例如./data/10.txt
pre_insystem/odom:代表惯性导航系统轮速计,类型为pre_interfaces::msg::WOdompre_insystem/imu:代表惯性导航系统IMU,类型为sensor_msgs::msg::Imupre_insystem/rtk:代表惯性导航系统RTK,类型为pre_interfaces::msg::RTKpre_insystem/navstate:代表惯性导航系统导航状态,类型为pre_interfaces::msg::NavState
上述话题的1、2、3部分都是惯性导航系统的接收部分,而4为惯性导航系统的发布部分,其中包含位姿信息和速度信息。详细的pre_interfaces定义见./src/pre_interfaces/msg文件夹
