Skip to content

感知概览

感知(Perception)是机器人系统理解周围环境的能力。它通过处理各种传感器数据,提取出机器人进行决策、导航和操作所需的环境信息。感知是机器人实现自主性的基础——没有可靠的感知,机器人就无法安全地在环境中行动。

激光雷达通过发射激光束并测量返回时间来计算距离,能够生成精确的 2D 或 3D 点云数据。它是机器人导航和建图中最常用的传感器之一:

  • 2D 激光雷达:扫描一个平面,适用于室内 2D 导航。ROS 2 中通过 sensor_msgs/LaserScan 消息发布数据。
  • 3D 激光雷达:扫描三维空间,适用于 3D 建图和障碍物检测。ROS 2 中通过 sensor_msgs/PointCloud2 消息发布数据。

深度相机(如 Intel RealSense、Microsoft Kinect、Orbbec)同时提供彩色图像和深度图像,适用于:

  • 短距离障碍物检测
  • 物体识别与位姿估计
  • 3D 环境重建

ROS 2 中深度数据通过 sensor_msgs/Image(带深度编码)或 sensor_msgs/PointCloud2 发布。

IMU 提供加速度计和陀螺仪数据,用于:

  • 姿态估计(roll/pitch/yaw)
  • 里程计融合
  • 运动状态检测

ROS 2 中通过 sensor_msgs/Imu 消息发布。

  • 超声波传感器:低成本的近距离测距,常用于避障。
  • GPS/GNSS:室外全局定位。
  • 轮式编码器:测量车轮转速,计算机器人位移。
  • 立体视觉相机:通过双目视差计算深度。
  • ToF(Time of Flight)相机:通过光飞行时间测量深度。

障碍物检测是安全导航的前提。常用方法包括:

  • 代价地图更新:Nav2 的 Costmap2D 将激光雷达或深度相机数据实时投射到栅格地图中,标记障碍物单元格。
  • 点云聚类:对 3D 点云进行聚类分割,识别离散的障碍物。
  • 地面分割:区分地面点和障碍物点,避免将地面误判为障碍。

在机械臂操作和服务机器人场景中,需要识别和定位特定物体:

  • 2D 目标检测:使用 YOLO、SSD 等深度学习模型检测图像中的物体。
  • 6 自由度位姿估计:确定物体在三维空间中的精确位姿,如 PoseCNN、DOPE 等方法。
  • 点云分割:使用 PointNet、PointNet++ 等网络直接处理 3D 点云。

同步定位与建图(SLAM)是机器人在未知环境中一边构建地图一边定位自身的技术:

  • 2D SLAM:如 SLAM Toolbox、Cartographer,使用 2D 激光雷达构建占据栅格地图。
  • 3D SLAM:如 LOAM、LIO-SAM、RTAB-Map,使用 3D 激光雷达或 RGB-D 相机构建 3D 地图。

语义感知(Semantic Perception)不仅检测障碍物的存在,还理解其语义含义(如「这是椅子」「这是人」「这是可推开的门」):

  • 语义分割:为图像或点云中的每个像素/点分配类别标签。
  • 实例分割:在语义分割基础上区分同一类别的不同实例。
  • 场景图(Scene Graph):构建描述场景中物体及其关系的结构化表示。

image_pipeline 提供了一套相机数据处理流水线:

  • image_proc:RAW 图像转彩色、去畸变
  • depthimage_to_laserscan:将深度图像转换为 2D 激光扫描数据
  • image_view:图像可视化

PCL 是 ROS 2 中处理 3D 点云的标准库,提供滤波、分割、配准、表面重建等功能。ROS 2 通过 pcl_ros 包提供节点级接口。

perception_pcl 提供了 PCL 与 ROS 2 的集成节点,如点云滤波、地面分割等。

Nav2 的 Costmap2D 通过插件化图层机制集成感知数据:

  • ObstacleLayer:从激光雷达或点云中检测障碍物。
  • VoxelLayer:3D 体素地图层,支持 3D 障碍物检测。
  • RangeSensorLayer:超声波/红外传感器层。

在仿真环境中,Gazebo、Webots 等仿真器提供了高保真的传感器仿真插件,支持激光雷达、相机、IMU、GPS 等各种传感器。详见 仿真概览。