[ROS2] CMU团队的Autonomous Exploration算法+MID-360部署到实车记录

[ROS2] CMU团队的Autonomous Exploration导航算法+MID-360部署到实车记录

Autonomous Exploration框架如图所示:

其中State estimationMotion 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文件,在laserCloudHandlerodometryHandler回调函数中,原本的代码是将各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

Development Environment

hku-mars/FAST_LIO at ROS2

Livox-SDK/Livox-SDK2

Livox-SDK/livox_ros_driver2

松灵机器人scout mini 自主导航(5)------采用 LIO-SAM +CMU exploration - 遥感摆烂人 - 博客园

总结

这是我尝试写的第一篇文章,希望能够对大家有所帮助。同时可能也会存在一些纰漏或者错误,欢迎指出!

有什么问题也可以在评论区讨论。

相关推荐
拾光Ծ2 小时前
哈希表进阶:挑战用哈希桶封装unordered_set和unordered_map,帮你深度理解迭代器!!!
数据结构·c++·哈希算法·散列表
草莓熊Lotso2 小时前
《算法闯关指南:优选算法--滑动窗口》--15.串联所有单词的子串,16.最小覆盖子串
开发语言·c++·人工智能·算法
念越3 小时前
VS2022安装与第一个C程序编写教程
c++·vscode
云深处@3 小时前
【C++11】特殊类&&单例模式
开发语言·c++
ADDDDDD_Trouvaille3 小时前
2026.2.15——OJ83-85题
c++·算法
Ronaldinho Gaúch4 小时前
算法题中的日期问题
开发语言·c++·算法
zenpluck5 小时前
RTAB-Map学习记录(1)--论文阅读
c++·论文阅读·学习·机器人
郝学胜-神的一滴5 小时前
Effective Modern C++ 条款36:如果有异步的必要请指定std::launch::async
开发语言·数据结构·c++·算法
小此方5 小时前
Re:从零开始的 C++ STL篇(六)一篇文章彻底掌握C++stack&queue&deque&priority_queue
开发语言·数据结构·c++·算法·stl