[ROS2] CMU团队的Autonomous Exploration导航算法+MID-360部署到实车记录
Autonomous Exploration框架如图所示:

其中State estimation 和Motion contro l部分是需要我们去实现的,而在本次部署到实车过程中采用FAST_LIO算法实现了MID-360到导航算法之间的桥接,大致流程框图如下所示:

MID-360节点
1. 安装Livox-SDK2
shell
$ git clone https://github.com/Livox-SDK/Livox-SDK2.git
$ cd ./Livox-SDK2/
$ mkdir build
$ cd build
$ cmake .. && make -j
$ sudo make install
2. 安装livox_ros_driver2
shell
mkdir -p ws_livox/src && cd ws_livox/src
git clone https://github.com/Livox-SDK/livox_ros_driver2.git
source /opt/ros/humble/setup.sh
./build.sh humble
完成以上安装之后,测试MID-360是否能正常运行,将雷达连接到电脑上后,可以通过wireshark来查看雷达的IP地址,得到雷达地址后,并将本机的有线IPv4地址设置为192.168.1.50,子网掩码设置为255.255.255.0。
接着进入config文件夹中,编辑MID360_config.json文件,将"cmd_data_ip","push_msg_ip", "point_data_ip", "imu_data_ip"的ip设置为本机的有线ip,即刚才设置的192.168.1.50,然后将"ip"设置为雷达的ip即可。
3. 测试MID-360
运行下面launch文件查看点云:
shell
cd ws_livox
source install/setup.bash
roslaunch livox_ros_driver2 rviz_MID360.launch
此时可以通过rviz界面看到点云,但是注意,在实际使用该导航框架的时候不能运行该launch文件,因为MID-360原生的点云数据不是按照线束顺序进行排列的,因此不符合loam系列算法所支持的数据类型。
4. 运行MID-360
在实际运行的时候通过运行下面的launch文件启动雷达:
shell
ros2 launch livox_ros_driver2 msg_MID360.launch
这样雷达节点所发布的点云数据类型是livox_ros_driver::CustomMsg ,而FAST_LIO算法算是对MID360做了专门的适配,其接收的点云数据默认就是livox_ros_driver::CustomMsg。
FAST_LIO算法节点
1. 安装FAST_LIO
这里在编译的时候,官方文档进行了说明,需要先在livox_ros_driver2工作空间中进行source,即先要找到livox的包才能成功编译。
shell
cd ws_livox
source install/setup.bash
cd ..
mkdir -p fast_lio_Ws/src && cd fast_lio_Ws/src
git clone https://github.com/Ericsii/FAST_LIO.git --recursive
git checkout ROS2
cd ..
colcon build --symlink-install
source install/setup.bash
2. 运行FAST_LIO
shell
cd fast_lio_Ws
source install/setup.bash
ros2 launch fast_lio mapping.launch.py config_file:=avia.yaml
Autonomous Exploration导航算法
1. 安装
shell
sudo apt update
sudo apt install libusb-dev ros-humble-joy ros-humble-gazebo-msgs \
ros-humble-gazebo-plugins ros-humble-gazebo-ros ros-humble-gazebo-ros2-control \
ros-humble-gazebo-ros-pkgs ros-humble-pcl-ros
git clone https://github.com/HongbiaoZ/autonomous_exploration_development_environment.git
git checkout humble
colcon build --symlink-install --cmake-args -DCMAKE_BUILD_TYPE=Release
source install/setup.sh
2. 测试
通过运行仿真环境来测试安装是否成功:
shell
cd autonomous_exploration_development_environment
source install/setup.bash
ros2 launch vehicle_simulator system_indoor.launch
接着会打开一个rviz界面,里面有小车、雷达扫描到的点云,通过点击waypoint按键并在地图上设置目标点,如果小车会跟着目标点走,就说明整个的环境已经配置完成。
3. 实机运行
在实机运行之前需要对loam_interface节点进行修改,用于适配我们本次所需要的内容。
首先是laom_interface.launch文件中,将stateEstimationTopic 对应的话题修改为**/Odometry**,将registeredScanTopic对应的话题修改为**/cloud_registered**,这两个话题就是FAST_LIO节点所发布的。
接着修改loamInterface.cpp文件,在laserCloudHandler 和odometryHandler回调函数中,原本的代码是将各x、y、z以及四元数等部分进行了调换,估计是跟他们团队在测试的时候雷达的安装方式有关,而在本次使用过程中,激光雷达正装,即前方是x轴,左边是y轴,上方是z轴,故需要将所有对方位进行了调整的地方都还原成原本的即可。
同时还注意到src\local_planner\src\pathFollower.cpp 中发布的控制话题数据类型为geometry_msgs::msg::TwistStamped ,而我们通常使用的小车所对应的控制话题为geometry_msgs/Twist,这里只需要将对应的话题替换掉,然后删掉时间戳部分即可。
最后重新编译运行:
shell
colcon build --symlink-install --cmake-args -DCMAKE_BUILD_TYPE=Release
source install/setup.bash
ros2 launch vehicle_simulator system_real_robot.launch
然后就可以和测试的时候一样了,设置一个地图上的目标点,然后打开终端查看话题信息:
shell
ros2 topic echo /cmd_vel
小车节点
最后就是启动自己的小车节点,订阅/cmd_vel话题,在rviz中设置目标点就可以实现定点导航了。
相关参考链接
HongbiaoZ/autonomous_exploration_development_environment at humble
松灵机器人scout mini 自主导航(5)------采用 LIO-SAM +CMU exploration - 遥感摆烂人 - 博客园
总结
这是我尝试写的第一篇文章,希望能够对大家有所帮助。同时可能也会存在一些纰漏或者错误,欢迎指出!
有什么问题也可以在评论区讨论。