ROS2自动巡航

ROS2自动巡航:基于深度相机的智能导航系统

本文将详细介绍如何使用ROS2系统和深度相机实现机器人的自动巡航功能。整个系统通过鲁班猫(使用ubuntu22.04系统)深度相机获取环境信息,结合SLAM算法进行地图构建,最后利用Nav2导航系统实现自主导航。

1. 系统硬件与数据流

1.1 硬件连接

通过 USB 连接鲁班猫深度相机,并启动 ROS 2 驱动节点 astra_camera,该节点会产生以下核心数据流:

1.2 核心数据类型

(1) 深度图 (sensor_msgs/Image)

  • 格式:灰度图像
  • 数据含义:每个像素的值代表距离(如 1000 代表 1000毫米)
  • 作用:提供环境的深度信息,用于3D重建和障碍物检测

(2) RGB彩色图 (sensor_msgs/Image)

  • 格式:普通彩色摄像头画面
  • 作用:提供环境的视觉信息,用于视觉识别和地图标注

(3) 点云数据 (sensor_msgs/PointCloud2)

  • 数据内容:驱动底层将深度图与彩色图对齐合成后输出的3D点云
  • 包含信息:X、Y、Z三维坐标和颜色信息
  • 作用:提供完整的三维环境信息,用于SLAM和导航

(4) 相机内参 (sensor_msgs/CameraInfo)

  • 数据格式:描述镜头畸变、焦距等光学参数的矩阵文件
  • 作用:供后续算法进行图像校准和畸变校正

1.3 RTABMAP算法集成

使用ROS2系统中的 rtabmap 节点功能,将上述数据以及巡检小车的位移数据通过消息订阅方式传递给RTABMAP算法。RTABMAP通过消息发布方式输出以下数据:

  • 2D栅格地图:二维平面地图,用于路径规划
  • 3D全局彩色点云地图:完整的三维环境模型
  • 节点信息:SLAM过程中的关键帧和位姿信息
  • 误差修正后的小车坐标值:经算法优化后的精确位置信息

2. Nav2导航实现流程

2.1 初次建图阶段

步骤1:启动基础控制程序

1
2
# 启动机器人的基础控制节点
ros2 launch my_robot_bringup my_robot.launch.py

步骤2:启动深度相机驱动

1
2
# 启动Astra深度相机
ros2 launch astra_camera astra_camera.launch.py

此时,深度相机开始产生三维点云信息,为SLAM提供数据源。

步骤3:点云数据转换

1
2
# 将3D点云转换为2D激光扫描数据
ros2 run pointcloud_to_laserscan pointcloud_to_laserscan_node

这一步将复杂的3D点云数据转换为Nav2可以处理的2D激光扫描数据格式。

步骤4:SLAM建图

1
2
# 使用slam_toolbox进行地图构建
ros2 launch slam_toolbox async_slam_toolbox.launch.py

系统读取2D点云数据进行数据采集,实时构建环境地图。

步骤5:保存地图

1
2
# 保存构建好的地图
ros2 run nav2_map_server map_saver_cli -f ~/map_navigation

将构建的地图保存为文件,然后关闭slam_toolbox节点。

2.2 自动导航阶段

2.2.1 系统配置

由于Nav2默认是2D导航,需要配置Nav2以支持处理3D点云数据作为障碍物源。主要配置文件包括:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# nav2_params.yaml
obstacle_layer:
enabled: true
observation_sources: scan point_cloud
scan:
sensor: scan
max_obstacle_height: 2.0
min_obstacle_height: 0.0
min_z: 0.0
max_z: 3.0
clearing: true
marking: true
point_cloud:
sensor: point_cloud
max_obstacle_height: 2.0
min_obstacle_height: 0.1
min_z: 0.1
max_z: 3.0
clearing: true
marking: true

2.2.2 启动导航系统

1
2
# 使用保存的地图启动Nav2
ros2 launch nav2_bringup navigation.launch.py map:=~/map_navigation.yaml

此时,系统具备了实时避障能力,小车可以根据地图进行自主导航。

3. 自动导航实现机制

3.1 导航指令发送

服务器需要发送巡检的位置坐标和角度信息给小车端。数据格式如下:

1
2
3
4
5
6
7
8
9
# 导航目标数据结构
from nav2_msgs.action import NavigateToPose

goal_msg = NavigateToPose.Goal()
goal_msg.pose.header.frame_id = 'map'
goal_msg.pose.pose.position.x = 3.5 # 目标位置X坐标
goal_msg.pose.pose.position.y = 2.0 # 目标位置Y坐标
goal_msg.pose.pose.position.z = 0.0 # Z坐标(2D导航通常为0)
goal_msg.pose.pose.orientation.w = 1.0 # 朝向角度

3.2 导航流程

  1. 数据打包:将位置信息打包为 nav2_msgs/action/NavigateToPose 数据类型
  2. 消息发送:将数据包在本地发送到Nav2算法自动监听的动作接口 /navigate_to_pose
  3. 路径规划:Nav2收到目标后,自动进行全局路径规划和局部路径规划
  4. 实时导航:小车根据规划路径自动向目标方向进行导航,同时实时避障

4. 总结

基于ROS2和深度相机的自动巡航系统充分利用了现代机器人感知和导航技术。通过鲁班猫深度相机获取环境信息,结合RTABMAP进行SLAM建图,最后利用Nav2实现智能导航,整个系统具有高精度、实时性和鲁棒性的特点,为各种自动化应用场景提供了可靠的解决方案。

系统的模块化设计使其具有良好的扩展性,可以根据具体需求添加更多的感知模块和功能模块,进一步提升系统的智能化水平。


ROS2自动巡航
https://codechangeworld.pages.dev/2026/07/08/ROS2自动巡航/
作者
子非鱼
发布于
2026年7月8日
许可协议