深圳北理莫斯科大学 北极熊战队 哨兵导航仿真/实车包
本项目使用全向移动小车,附加 Livox Mid360 雷达与 IMU,在 RMUC/RMUL 地图进行导航算法仿真,仅需要调整参数即可移植到真实机器人中导航。
早期功能演示视频:寒假在家,怎么调车!?更适合新手宝宝的 RM 导航仿真
Gazebo 仿真 | Fast_LIO/Point_LIO + Navigation2 |
---|---|
动态避障 |
---|
一键偷家 |
---|
Topic name | Type | Note |
---|---|---|
/livox/lidar | livox_ros_driver2/msg/CustomMsg | Mid360 自定义消息类型 |
/livox/lidar/pointcloud | sensor_msgs/msg/PointCloud2 | ROS2 点云消息类型 |
/livox/imu | sensor_msgs/msg/Imu | Gazebo 插件仿真 IMU |
/cmd_vel | geometry_msgs/msg/Twist | 全向小车运动控制接口 |
当前开发环境为 Ubuntu22.04, ROS2 humble, Gazebo Classic 11.10.0
本项目已配置基础 Dockerfile,并可使用 Dev Container 进行仿真测试和开发。
DevContainer 的一个特征是将代码的运行环境与代码本身完全隔离开来,在效果上类似将 workspace 挂载到了容器中。
在 Docker-image 中仅仅包含有关系统的配置(例如修改 .baserc 或安装依赖包等),其本身不存储任何项目代码和工作空间,做到了代码与环境的完全隔离。
可以通过 devcontainer.json 配置文件,快速修改和分发容器配置。
与 VSCode 深度融合,一键启动,无需任何命令。
镜像仓库地址:DockerHub: lihanchen2004/pb_rm_simulation
安装 Docker
拉取镜像
docker pull lihanchen2004/pb_rm_simulation:1.0.0
在宿主机 VSCode 中 安装 ms-vscode-remote.remote-containers
插件
快捷键 Ctrl+Shift+P
, 输入并点击 Dev Containers:Rebuild and Reopen in Container
克隆仓库
git clone --recursive https://gitee.com/SMBU-POLARBEAR/pb_rmsimulation --depth=1
安装 Livox SDK2
sudo apt install cmake
git clone https://github.com/Livox-SDK/Livox-SDK2.git
cd ./Livox-SDK2/
mkdir build
cd build
cmake .. && make -j
sudo make install
安装依赖
cd pb_rm_simulation
rosdep install -r --from-paths src --ignore-src --rosdistro $ROS_DISTRO -y
编译
colcon build --symlink-install
world
:
仿真模式
RMUL
- 2024 Robomaster 3V3 场地
RMUC
- 2024 Robomaster 7V7 场地
真实环境
.pcd(ICP使用的点云图)
文件和 .yaml(Nav使用的栅格地图)
的名称mode
:
mapping
- 边建图边导航nav
- 已知全局地图导航lio
:
localization
(仅 mode:=nav
时本参数有效)
slam_toolbox
- 使用 slam_toolbox localization 模式定位,动态场景中效果更好amcl
- 使用 AMCL 经典算法定位icp
- 使用 icp_registration,仅在第一次启动或者手动设置 /initialpose 时进行点云配准。获得初始位姿后只依赖 LIO 进行定位,没有回环检测,在长时间运行后可能会出现累积误差。Tips:
lio_rviz
:
True
- 可视化 FAST_LIO 或 Point_LIO 的点云图nav_rviz
:
True
- 可视化 navigation2边建图边导航
ros2 launch rm_nav_bringup bringup_sim.launch.py \
world:=RMUL \
mode:=mapping \
lio:=fastlio \
lio_rviz:=False \
nav_rviz:=True
已知全局地图导航
ros2 launch rm_nav_bringup bringup_sim.launch.py \
world:=RMUL \
mode:=nav \
lio:=fastlio \
localization:=slam_toolbox \
lio_rviz:=False \
nav_rviz:=True
边建图边导航
ros2 launch rm_nav_bringup bringup_real.launch.py \
world:=YOUR_WORLD_NAME \
mode:=mapping \
lio:=fastlio \
lio_rviz:=False \
nav_rviz:=True
Tips:
pcd_save_en
改为 true
,并设置 .pcd 文件的路径,运行时新开终端输入命令 ros2 service call /map_save std_srvs/srv/Trigger
,即可保存点云文件。YOUR_WORLD_NAME
保持一致。已知全局地图导航
ros2 launch rm_nav_bringup bringup_real.launch.py \
world:=YOUR_WORLD_NAME \
mode:=nav \
lio:=fastlio \
localization:=slam_toolbox \
lio_rviz:=False \
nav_rviz:=True
Tips: 栅格地图文件和 pcd 文件需具为相同名称,分别存放在 src/rm_nav_bringup/map
和 src/rm_nav_bringup/PCD
中,启动导航时 world 指定为文件名前缀即可。
ros2 run teleop_twist_keyboard teleop_twist_keyboard
雷达 ip
本导航包已内置 livox_ros_driver2,可直接修改 MID360_config.json - lidar_configs
- ip
测量机器人底盘正中心到雷达的相对坐标
x, y 距离比较重要,将影响云台旋转时解算到 base_link 的坐标准确性
填入 measurement_params_real.yaml
若雷达倾斜放置,无需在此处填入 rpy,而是将点云旋转角度填入 MID360_config.json - extrinsic_parameter
测量雷达与地面的垂直距离
此参数影响点云分割效果
填入 segmentation_real.yaml - sensor_height
nav2_params
参数很多,比较重要的是 robot_radius 和 速度相关参数。详见 nav2官方文档
这个仿真包也是我学习的一个记录,也是我学习的一个起点。
很难想象一年前的五月,我连 Ubuntu 和 ROS 是都不知道。笔者大一时只是个混子,北极熊第一届视觉组成员(其实啥也没干),但误打误撞去了 2023 联盟赛广东站赛场。当时只是作为一个观众+摄影师,但赛场的氛围是无以言表的,回来后 RM 浓度就开始逐渐增高,尝试部署华师2023的视觉开源,也在这段时间逐渐学会了自学的方式,写下了第一篇 算法组文档 。
暑假时参加了“快递速达”的支线任务(比赛),那是第一次初识导航,还记得举着电脑拿着2D雷达在实验楼建图的喜悦。后来被春茧里华农的“自动驾驶”哨兵震撼到了,于是乎大二上和“实验楼安家组”出去喝粥路上,队长问我 24 赛季你想做啥,我毫不犹豫的答出了“导航”。
抱着玩一玩练练手的心态创建了本仓库,第一个 commit 在 2023-09-27,当时借鉴的还是 华农 2023 RMUL 哨兵导航开源包 和 湖工大RMUC地图,在此基础上只是加了 mid360 的仿真。后来 2023.10 月 中南大学 FYT 战队开源了RM 哨兵上位机算法,是当时少见的 ROS2 nav2 导航框架,于是乎当时就想着缝进初代导航包(直到现在也是中南 FYT 的模样)。在不断尝试新算法的过程中,对 Gazebo 和 ros2_launch 也有了更深入的了解。
如果没有开发这个仿真包,我可能也不会有机会接触到导航算法,也不会有机会接触到这么多优秀的开源项目。我还记得那是 2023.1.26,在港中深的哨兵上部署了我的仿真包( RMUC 联队),改改 launch 文件居然就能让实车动起来了,意料之外地实现了 Sim2Real。由于学校没有机械专业,哨兵在联盟赛前不到两周才完全出生,于是乎备赛期间一直都是在赛博调车优化。
上赛场了,从观众席到检录区。但当时由于在仿真中忽略了雷达偏心放置时的 tf 问题,导致实车云台旋转时定位不准,最终也没能在 RMUL 中发挥丝滑的导航走位...挺遗憾的。
鄙人非大佬,只是个缝合怪菜鸡。我的学习路径个人觉得是有点畸形的,并不是自下而上地先学理论再实践,而是自上而下地先实践再不断补理论的坑。但这种学习方式也不断地给我正反馈,梦里都在改代码,每天醒来都有盼头。
Mid360 点云仿真:参考了 livox_laser_simulation、 livox_laser_simulation_RO2、 Issue15: CustomMsg。
导航算法框架:基于 中南大学 FYT 战队 RM 哨兵上位机算法 修改并适配仿真,在原有基础上添加对 base_link 的建模,提供多种可选定位方式并完善 launch 文件。
感谢深技大 Shockley,对雷达跟随云台旋转时的速度变换问题提供了很好的解决思路,从而有了 fake_vel_transform 功能包。
感谢上海工程技术大学、辽宁科技大学、上海电力大学对本开源包的深度使用与交流,给了我很多优化方向。
还有很多很多很多 RM 网友给了我很多鼓励和帮助,这里就不一一列举了(已达成龙王结局,QQ 里 RM 分组九十多人)。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
1. Open source ecosystem
2. Collaboration, People, Software
3. Evaluation model