v2_humanoid_navigation_tutorial

Chapter 7: 动态障碍物检测与避障

开篇段落

本章是导航算法从静态世界走向动态现实的关键一步。前序章节我们假定了一个相对静止的环境,但真实的室内场景——无论是家庭、办公室还是商场——都充满了移动的人、物(如宠物、服务车)和其他 Humanoid。静态的 SLAM 地图在动态环境中会迅速失效,单纯依赖它的规划将导致频繁的碰撞或不必要的急停。本章的目标是深入探讨动态障碍物检测与规避的算法方案,构建一个从快速反应到深思熟虑的多层次安全系统。我们将从基础的、不依赖语义的几何方法(光流、深度变化)出发,过渡到能理解地形材质的于学习的可通行性分析。随后,我们将深入剖析经典的反应式避障算法(如速度障碍法及其变种 ORCA),并最终讨论如何通过轨迹预测,实现更符合社会规范的、有预见性的高级避让策略。学完本章,读者将能够为 Humanoid 设计一个分层的、鲁棒的动态避障系统,使其能够在复杂人流中安全、高效、合乎礼仪地穿行,真正融入人类环境。


7.1 几何避障:光流/深度/占据增量

几何避障是动态避障的基石,它构成了安全系统的第一道防线。这类方法不关心障碍物是什么(“What”),只关心“那里有个东西在动”(“Where” and “How”)。其核心思想是检测出与静态背景模型不一致的运动或占据变化,优点是速度快、不依赖昂贵的语义模型。

7.1.1 光流法 (Optical Flow)

光流描述了图像中像素亮度的时序运动模式。通过补偿机器人自身的运动(ego-motion)后,剩余的显著光流场通常对应于场景中的独立运动物体。

7.1.2 深度/点云增量法

当拥有深度数据时,动态检测变得更加直接和可靠。核心思想是“找不同”:当前场景中多出来的东西就是动态障碍。

7.1.3 占据增量法 (Occupancy Delta)

该方法将动态检测与三维占据地图(详见 Chapter 9)紧密结合,是目前最鲁棒的几何方法之一。


7.2 学习型可通行性估计 (Traversability)

几何方法无法理解语义。一个矮台阶在几何上是障碍,但 Humanoid 可以跨越;一滩水在几何上是平地,但应该避开。学习型可通行性估计通过数据驱动的方式,让机器人学会“哪里能走,哪里不好走,哪里绝对不能走”。


7.3 速度障碍/避碰优化 (VO/ORCA/Model Predictive Checks)

检测到障碍物后,机器人需要立即做出反应。这类算法在“速度空间”或短时“轨迹空间”中进行规划,为机器人选择一个既能朝向目标前进,又能避免在不久的将来发生碰撞的动作。

7.3.1 速度障碍法 (Velocity Obstacles, VO)

7.3.2 最优相互避碰算法 (ORCA)

ORCA 是对 VO 的重大改进,它通过引入“共同责任”原则,解决了振荡问题。

7.3.3 模型预测检查 (如 DWA, Trajectory Rollout)

这类方法将避障问题转化为一个短时域的轨迹优化问题,更适合考虑机器人的非完整约束和动力学特性。


7.4 台阶/坡道/玻璃/反光/地毯的特殊处理

现实世界充满了传感器的“陷阱”和需要特殊对待的几何结构。一个鲁棒的系统必须有专门的模块来处理这些“corner cases”。


7.5 预测轨迹与让行策略 (Social Navigation)

最高级的避障是“预判”,即预测其他智能体的意图,并做出符合社会规范的、可预测的让行。这使得机器人从一个“笨拙的闯入者”变为一个“有礼貌的参与者”。


本章小结

本章构建了一个完整的、从反应到预测的动态避障算法栈。它是一个逻辑上清晰、实现上可解耦的多层次系统:

  1. 安全底线 (Safety Layer):由几何方法(深度/占据增量)构成,确保在任何情况下都不会发生物理碰撞。这是最优先最快速的反应层。
  2. 环境理解 (Understanding Layer):通过学习型可通行性分析,赋予机器人理解地面语义的能力,使其能做出超越纯几何的智能决策,如跨越门槛、避开水渍。
  3. 反应规划 (Reactive Planning Layer):利用 ORCAMPC/DWA 等算法,在考虑机器人动力学和多重约束的情况下,实时生成无碰撞的局部轨迹。
  4. 社会交互 (Social Interaction Layer):通过轨迹预测社交规范建模,实现主动、礼让、可预测的避让行为,提升机器人的社会接受度。
  5. 异常处理 (Exception Handling):针对玻璃、镜面、台阶等特殊场景,设计专门的检测与应对策略,填补通用算法的盲点,确保系统的鲁棒性。

这些层次协同工作,共同确保 Humanoid 在动态、非结构化的真实世界中的安全、效率与合规性。


常见陷阱与错误 (Gotchas)

  1. 检测闪烁与决策抖动 (Detection Flickering & Decision Oscillations):原始的几何检测结果可能是断续的(前一帧检测到,后一帧丢失),导致机器人行为犹豫不决,反复横跳。
    • 解决方案:为每个检测到的动态障碍物实例化一个跟踪器(如基于卡尔曼滤波或更简单的IOU跟踪),为其维护一个包含位置、速度、置信度的状态。只有当一个障碍物被连续多帧稳定跟踪后,才对其采取强烈的避让动作。
  2. “冻结机器人”问题 (The Freezing Robot Problem):在拥挤环境中,避障算法可能发现所有方向都存在风险,导致机器人速度降为零并卡住。
    • 解决方案:引入动态参数调整。例如,当机器人长时间速度过低时,可以适当缩小安全边界(inflation radius),或暂时降低对社交规范的权重。同时,规划器应有一个“脱困”模式,允许它执行一些微小的、能打破僵局的“扰动”动作。
  3. 高延迟的位姿估计 (High-Latency Pose Estimation):自运动补偿是所有动态检测的前提。如果 VIO/SLAM 系统的位姿输出有显著延迟,那么补偿就是错误的,会导致静态物体被误识别为动态,或者动态物体被忽略。
    • 解决方案:必须对整个数据流进行端到端延迟分析。使用硬件时间戳进行同步,并通过预测模型(如匀速模型)对传入的位姿进行“前向外推”,以补偿计算和传输延迟。
  4. 过度依赖预测 (Over-reliance on Prediction):人类行为充满不确定性,任何预测模型都有其失效边界。如果系统完全信赖预测结果,当行人突然改变主意时,可能会导致危险。
    • 解决方案:采用置信度感知的规划。预测模型应输出不确定性(如轨迹的协方差)。高不确定性的预测应在代价地图中产生更弥散、权重更低的影响。同时,必须有一个快速的、不依赖预测的纯几何反应层(如于当前位置的 ORCA)作为最后的安全保障。
  5. 忽略机器人自身体积和形状 (Ignoring the Robot’s Body Model):将机器人视为一个点或圆盘进行规划,在狭窄空间或转身时是危险的。Humanoid 的形状复杂,其手臂或背包可能在转身时扫到旁边的物体。
    • 解决方案:在代价地图中,使用机器人精确的三维足迹(3D footprint)进行碰撞检测,而不仅仅是一个二维圆。这个足迹应根据机器人的当前姿态(如手臂位置)动态更新。这确保了规划出的轨迹对整个身体都是安全的。