SLAM 系统配置与启动流程
核心文件: slam_config.launch.py, slam_params.yaml
涉及节点: input_control_node, lidar_sensor_node, slam_core_node
功能目标: 实现里程计、激光雷达和 SLAM 算法的集成,生成 /map。
1. 节点网络结构
系统使用 slam_toolkit 进行地图构建,并通过 /odom 提供位置信息以增强建图稳定性。
2. 坐标变换树设计
SLAM 系统依赖于完整的 TF 树。根据 Launch 文件,TF 树结构如下:
map->odom: 由slam_core_node发布,用于修正全局位姿。odom->base_link: 由input_control_node发布,表示局部连续位姿。base_link->laser: 静态发布器定义在slam_config.launch.py中:
- 配置值:
x=0.1, y=0, z=0.15 - 物理意义: 雷达位于机器人前部上方 10cm 和 15cm 处。
base_link->imu_link: 静态发布器定义:
- 配置值:
x=0.05, y=0, z=0.1
3. 启动文件解析 (slam_config.launch.py)
Launch 文件控制整个系统的启动,以下是关键配置:
3.1 关键参数调整:每转脉冲数
# ===【重要设置】===
# 更新默认值为 2550.0,避免覆盖节点中的正确设定
pulses_per_rotation = LaunchConfiguration('pulses_per_rotation', default='1320.0')
3.2 节点配置详情
input_control_node(驱动):
- 串口路径: 默认
/dev/ttyUSB1(需确认实际端口)。 - 滑移补偿系数:
skid_compensation设为1.6,适用于四轮差速机器人。 - EKF频率:
50.0Hz,确保高频率的平滑性。
lidar_sensor_node(雷达):
- 波特率:
1000000,适用于 S2/S3 系列雷达。 - 工作模式:
HighDensity,适合室内环境。
slam_core_node(算法):
- 运行模式:
async_slam_core_node,适合低性能嵌入式平台。
4. 参数配置分析 (slam_params.yaml)
配置文件影响地图质量,以下参数需注意:
| 参数 | 值 | 描述 |
|---|---|---|
use_odom |
true |
使用 STM32 提供的里程计数据。 |
enable_scan_matching |
true |
开启扫描匹配来校正误差。 |
resolution |
0.05 |
地图分辨率设为 5cm。对于大环境可调至 0.1m。 |
odom_linear_covariance |
0.5 |
里程计线性协方差,数值越大信任度越低。 |
max_laser_range |
18.0 |
设置为 18 米,适合大多数室内场景。 |
transform_timeout |
1.5 |
TF 超时时间,允许一定延迟。 |
5. 启动与调试指南
5.1 权限设置
运行前授予 USB 串口权限:
sudo chmod 777 /dev/ttyUSB*
5.2 启动命令
执行以下命令启动系统:
ros2 launch robot_slam slam_config.launch.py \
serial_port:=/dev/ttyUSB1 \
lidar_port:=/dev/ttyUSB0 \
pulses_per_rotation:=2550.0
5.3 验证步骤
- 检查 TF 树:
ros2 run tf2_tools view_frames
确认 map -> odom -> base_link -> laser 完整。
2. 检查里程计:
ros2 topic echo /odom
推动机器人前进 1 米,检查 pose.position.x 是否接近 1.0。
3. RViz 观察: 在 RViz 中应看到地图随着机器人移动而扩展,红色激光点应紧贴墙壁边缘。