简要概述:本文主要指导mid-360的入门使用,从驱动出点云,到利用FAST-LIO2建图,进而利用其导航避障等,给出了具体学习路线,让路径变得明晰。
可以通过这个网页互动app来跟踪指导自己的学习进度,更加详细的指导尽在这里。
https://3015-01m3zj97tcq5bcpcsmkqr7z43t.sandbox.meoo.host/
1.准备工作
- 保证本机为ROS2 Humble
- 安装Ubuntu22.04
- 把电脑网卡设置静态网段IP192.168.1.50(要和Mid-360在同一个网段)
- 下载驱动功能包livox_ros_driver2-master,Livox-SDK2-master,查看点云程序LivoxViewer,rviz2
- 下载适配算法Fast-Lio2
2.驱动出点云
- 编译功能包,先改 MID360_config.json 里的 cmd_data_ip / push_msg_ip
并编译livox_ros_driver2
再编译Livox SDK2 - 详细终端命令见官方指导https://github.com/Livox-SDK/livox_ros_driver2
- 终端驱动 启用fast lio2
cd livox_ws
source install/setup.bash
[ros2 launch livox_ros_driver2 msg_MID360_launch.py]
新开终端
cd livox_ws
source install/setup.bash
ros2 launch fast_lio mapping.launch.py (此时在rviz2可以看到点云)
-
保存点云
# 在算法运行时,另开终端录制
ros2 bag record /cloud_registered /tf -o fastlio_mapping.bag
或者保存pcd
ros2 service call /map_save std_srvs/srv/Trigger
3.ROS2与TF骨架(开始进阶指导)
要理解机器人系统的『神经骨架』,TF树是整个导航栈的骨架
- 学习ROS2的五大通信机制(话题/服务/动作/参数/节点)
- 学会写节点(订阅,发布,定时器等)
- TF2坐标变换树(map-odom-basel_link)
- TF调试工具
- URDF建模(机器人的仿真模型,含惯量与碰撞体)
- 了解启动文件launch.py(可以一次性启动多个节点,省去手动一个一个启动)
- ROS2_control (底盘硬件抽象层,实车电机驱动接入的标准方式)
- 自定义msg/srv (以后的自动决策可以用)
- 调试工具链(rqt_graph看节点连接,rqt_console看日志,ros2 topic echo/info)
4.SLAM建图
以下概念要了解,尤其一些关键参数要学会调整(config/mif360.yaml文件的参数)
- 三维刚体运动,欧拉角
- 卡尔曼滤波
- IMU预积分
- Ikd-Tree
- FAST-LIO2流程(IMU预测-点云去畸变-迭代卡尔曼滤波-地图增量维护)
- 同类算法(Fast-LIO/Piont-LIO/LIO-SAM/Fast-LIVO2)
5.定位
一般流程:赛前建图-赛时加载先验地图-输出map-odom的TF-导航栈(几乎很少实时SLAM)
- FAST_LIO_LOCALIZATION(最常用的Mid-360定位方案,支持先验PCD地图)
- 初始位姿给定(rviz手动选点)
- 重定位(ICP粗配准,粒子散点)
- 2D降级(pointcloud_to_laserscan+AMCL+slam_toolbox)
- 定位质量评估(TF抖动,协方差)
- 里程计(来自激光点云+雷达内置IMU,原理:算法利用激光配准+IMU预积分紧耦合解算位姿)(也可以利用轮式里程计)
6.导航与避障
- Nav2架构
- 行为树BT
- 全局规划器
- 局部控制器
- Costmap(二维栅格障碍物地图)
- voxel_layer(体素层,直接接受原生3D点云)(避免把3D点云转换为二维激光丢失大量三维信息,失去感知三维能力)
- 底盘运动学
- 速度与加速度限制(限制太高会打滑导致定位漂移,限制太低任务超时,实时测调)
- 频率匹配
7.仿真 标定 工程化
- Gazebo(仿真器)
- 数字孪生工作流(即用仿真1 :1复刻真实场地来进行模拟验证)
- 雷达等参数标定(IMU零偏,轮式里程计)
- 时间同步(系统时间,雷达时间戳,bag时间三者对齐)
- 参数管理(yaml分环境,launch参数切换)
- 分布式通信(ROS_DOMAIN_ID隔离,DDS配置)
- 一键启动(驱动+定位+导航+决策)