Radar: Preparation of SLAM Mapping Software Environment
02 - 阶段二执行记录:SLAM 建图软件环境准备
1. 概述
最终选型:Cartographer(理由见 01_阶段二规划 文档)
2. 已完成步骤
2.1 安装 apt 依赖 【待用户手动执行】
当前环境无 sudo 权限,以下命令需在小车上手动执行:
# 安装 Cartographersudoapt update sudoaptinstall-y ros-humble-cartographer ros-humble-cartographer-ros # 安装 Nav2 地图服务器(保存地图用)sudoaptinstall-y ros-humble-nav2-map-server # 安装 URDF 工具(编译 description 包需要)sudoaptinstall-y ros-humble-robot-state-publisher ros-humble-joint-state-publisher ros-humble-xacro 以上三条命令也可以合并为一条执行。
2.2 设置 LIDAR_TYPE 环境变量 【已完成】
已写入 ~/.bashrc:
exportLIDAR_TYPE=4ros 源码中的 launch 文件会读取此变量,自动选择对应的雷达配置。
2.3 复制建图相关包到工作空间并编译 【已完成】
从源码目录复制了 3 个包到 ~/ydlidar_ws/src/:
| 包名 | 作用 | 编译类型 |
|---|---|---|
yahboomcar_nav | 建图/导航 launch 文件 + 参数配置 | ament_python |
yahboomcar_description | URDF 模型(TF 坐标关系) | ament_python |
yahboomcar_msgs | 自定义消息类型 | ament_cmake |
编译命令:
cd ~/ydlidar_ws colcon build --symlink-install --packages-select yahboomcar_description yahboomcar_msgs yahboomcar_nav 编译结果:3 个包全部成功(仅有 setuptools 弃用警告,不影响运行)。
2.4 TF Frame 分析 【无需修复】
分析结论:
| 组件 | Frame 名称 | 来源 |
|---|---|---|
雷达驱动 /scan | laser | ydlidar_4ros.yaml 中 frame_id: laser |
| URDF 模型 | laser_link | yahboomcar_X3.urdf 中固定关节 |
| launch 静态 TF | base_link → laser | laser_bringup_launch.py |
两者共存不冲突:
- URDF 的
laser_link用于 RViz 模型可视化 - 静态 TF 的
laser用于实际/scan数据的坐标变换 - Cartographer 按
/scan消息的frame_id(laser)查 TF,走静态 TF 链路
2.5 Cartographer 配置优化 【已完成】
针对 TG30 雷达创建了两份 Cartographer 配置文件:
tg30_2d.lua(正式建图用,有 odom)
| 参数 | 原值 | 新值 | 说明 |
|---|---|---|---|
tracking_frame | base_footprint | 不变 | 跟踪底盘 |
use_odometry | true | 不变 | 使用底盘里程计 |
min_range | 0.1 | 0.05 | TG30 最小 0.01m |
max_range | 8 | 12.0 | TG30 最远 64m,室内取 12m |
missing_data_ray_length | 0.5 | 5.0 | 增大无数据射线长度 |
publish_frame_projected_to_2d | false | true | 2D 投影 |
optimize_every_n_nodes | 注释掉 | 30 | 启用全局优化 |
min_score | 0.7 | 0.65 | 适当放宽回环检测 |
tg30_2d_no_odom.lua(手持测试用,无 odom)
| 参数 | 值 | 说明 |
|---|---|---|
tracking_frame | base_link | 无 odom,直接跟踪 base_link |
published_frame | base_link | 发布到 base_link |
provide_odom_frame | true | Cartographer 自行生成 odom |
use_odometry | false | 不使用里程计 |
optimize_every_n_nodes | 20 | 更频繁优化,补偿漂移 |
min_score | 0.55 | 放宽匹配阈值 |
2.6 创建 Launch 文件 【已完成】
创建了两个新 launch 文件:
| 文件 | 用途 | 启动命令 |
|---|---|---|
map_cartographer_test_launch.py | 无底盘手持测试 | ros2 launch yahboomcar_nav map_cartographer_test_launch.py |
map_cartographer_tg30_launch.py | 正式建图(底盘到后用) | ros2 launch yahboomcar_nav map_cartographer_tg30_launch.py |
测试版 launch 启动的内容:
- 雷达驱动(
4ros_ydlidar_launch.py) - 静态 TF:
base_footprint → base_link(高度 0.0815m) - 静态 TF:
base_link → laser(位移 + yaw 旋转) - Cartographer 节点(无 odom 模式)
- 栅格地图发布节点
正式版 launch 启动的内容:
- 底盘 + 雷达(
laser_bringup_launch.py) - Cartographer 节点(有 odom 模式)
- 栅格地图发布节点
3. 当前工作空间文件结构
~/ydlidar_ws/src/ ├── ydlidar_ros2_driver-master/ # 雷达驱动(阶段一已编译) ├── yahboomcar_description/ # URDF 机器人模型 ← 新增 │ ├── urdf/yahboomcar_X3.urdf # X3 小车模型 │ └── meshes/ # 3D 模型文件 ├── yahboomcar_msgs/ # 自定义消息 ← 新增 ├── yahboomcar_nav/ # 导航建图包 ← 新增 │ ├── launch/ │ │ ├── map_cartographer_test_launch.py ← 新建(手持测试) │ │ ├── map_cartographer_tg30_launch.py ← 新建(正式建图) │ │ ├── map_cartographer_launch.py # 原始 launch │ │ ├── save_map_launch.py # 保存地图 │ │ └── ... │ └── params/ │ ├── tg30_2d.lua ← 新建(有 odom 配置) │ ├── tg30_2d_no_odom.lua ← 新建(无 odom 配置) │ ├── lds_2d.lua # 原始配置 │ └── dwb_nav_params.yaml # 导航参数 4. TF 坐标链
手持测试模式(无底盘)
map → odom → base_link → laser ↑ ↑ ↑ Cartographer 静态TF 静态TF 自动生成 (0,0,0.0815) (0.0435,0,0.11,yaw=π) base_footprint 在手持模式下通过静态 TF 连接到 base_link
正式建图模式(有底盘)
map → odom → base_footprint → base_link → laser ↑ ↑ ↑ ↑ SLAM 底盘编码器 URDF固定关节 静态TF +EKF 5. 底盘的操作流程
# 第一步:安装 apt 依赖(如果还没装)sudoaptinstall-y ros-humble-cartographer ros-humble-cartographer-ros sudoaptinstall-y ros-humble-nav2-map-server sudoaptinstall-y ros-humble-robot-state-publisher ros-humble-joint-state-publisher ros-humble-xacro # 第二步:安装底盘驱动(根据底盘型号)# 具体命令待底盘到了再确定# 第三步:启动建图 ros2 launch yahboomcar_nav map_cartographer_tg30_launch.py # 第四步:遥控小车在房间里慢速移动,RViz 中观察地图构建 rviz2 # 添加 Map + LaserScan 显示# 第五步:建图满意后保存 ros2 launch yahboomcar_nav save_map_launch.py # 地图保存到 ~/ydlidar_ws/src/yahboomcar_nav/maps/yahboomcar.pgm + .yaml6. 手持测试建图流程(可选,底盘到之前)
# 前提:已安装 Cartographer(sudo apt install ...)# 第一步:启动 ros2 launch yahboomcar_nav map_cartographer_test_launch.py # 第二步:手持雷达在房间里慢慢走(要求平稳,不能快速移动)# 第三步:在另一个终端打开 RViz 观察 rviz2 # 添加 Map 显示(topic: /map)# 添加 LaserScan 显示(topic: /scan)# 第四步:保存地图 ros2 launch yahboomcar_nav save_map_launch.py 注意:手持建图精度较低,仅作为验证 Cartographer 是否正常工作。正式地图需等底盘到了重建。
7. 阶段二完成状态
| 序号 | 步骤 | 状态 |
|---|---|---|
| 2.1 | 安装 apt 依赖 | 待用户手动执行 |
| 2.2 | 设置 LIDAR_TYPE 环境变量 | 已完成 |
| 2.3 | 复制并编译建图相关包 | 已完成 |
| 2.4 | TF Frame 分析 | 已完成(无需修复) |
| 2.5 | Cartographer 配置优化 | 已完成 |
| 2.6 | 创建 Launch 文件 | 已完成 |