v2_humanoid_navigation_tutorial

Chapter 5. 人形与行人跟踪(Humanoid/Person Tracking)

开篇段落

本章是 Humanoid 室内导航中“感知”环节的核心基石,专门讨论如何稳定、准确地跟踪环境中的人和 Humanoid。一个优秀的导航系统不仅要“看到”人,更要理解他们的位置、意图和动态,从而实现安全、高效且符合社会规范的交互。这要求跟踪系统超越简单的目标检测,进入到对身份、姿态、轨迹和意图的持续性理解。我们将从现代多目标跟踪(MOT)的“检测后跟踪”范式出发,深入剖析其每个模块的算法选型与权衡。随后,我们将探讨如何利用三维姿态和步态先验来丰富跟踪状态,解决长时遮挡这一经典难题,并拥挤、反射等复杂场景设计鲁棒性策略。最终,本章将落脚于如何将一个高性能的跟踪系统无缝地耦合到导航规划模块中,为其提供动态体积约束与各向异性的社交导航代价。本章的学习目标是让读者能够设计并评估一套完整的、服务于复杂导航任务的行人跟踪算法方案。


5.1 基础:检测→ReID→多目标跟踪(MOT)数据关联

现代多目标跟踪(MOT)系统,特别是服务于实时应用的系统,大多遵循“检测后跟踪”(Tracking-by-Detection, TBD)的范式。这是一个逻辑清晰、易于调试和迭代的模块化流水线。

                                            +------------------------+
                                            |   4. 轨迹管理         |
                                            | (Track Management)     |
                                            | - Init, Confirm, Lost  |
+------------+     +-----------------+      | - State Update         |
| 图像序列   | --> | 1. 行人检测器   | --+--> +------------------------+
| (Frames)   |     | (Person Detector) |   |
+------------+     +-----------------+   |   +------------------------+
                             |           |-->|   3. 数据关联         |
                             |               | (Data Association)     |
                             |               | - Cost Matrix          |
                             v               | - Matching (Hungarian) |
                   +------------------+      +------------------------+
                   | 2. 外观特征提取  |              ^
                   | (ReID Extractor) |--------------+
                   +------------------+

5.1.1 行人检测器 (Person Detector)

5.1.2 外观特征提取 (Re-identification, ReID)

5.1.3 数据关联 (Data Association)

这是 MOT 的核心,负责将当前帧的检测 $D_t$ 与已存活的轨迹集合 $\mathcal{T}_{t-1}$ 进行匹配。

  1. 运动模型与状态预测:
    • 每个轨迹 $T_i \in \mathcal{T}_{t-1}$ 内部维护一个状态估计器,最常用的是卡尔曼滤波器 (Kalman Filter)
    • 状态向量 $\mathbf{x}$: 通常包含位置、尺寸和它们的一阶导数(速度),例如 $\mathbf{x} = [c_x, c_y, a, h, \dot{c}_x, \dot{c}_y, \dot{a}, \dot{h}]^T$,其中 $(c_x, c_y)$ 是中心点,a 是宽高比,h 是高度。
    • 预测: 在处理第 t 帧之前,卡尔曼滤波器首先为每个轨迹预测其在当前帧的状态 $\hat{\mathbf{x}}_t$ 和协方差矩阵 $\mathbf{P}_t$。
  2. 代价矩阵构建:
    • 构建一个 $N \times M$ 的代价矩阵 $C$,其中 $N$ 是轨迹数,$M$ 是检测数。$C_{ij}$ 表示将第 $j$ 个检测 $d_j$ 关联到第 $i$ 个轨迹 $T_i$ 的代价。
    • 运动代价 ($C_{motion}$): 使用马氏距离 (Mahalanobis Distance) 计算预测的 bbox 与实际检测的 bbox 之间的差异。它优于欧氏距离,因为它考虑了预测的不确定性(协方差 $\mathbf{P}_t$)。 $d_M(T_i, d_j) = \sqrt{(\mathbf{y}_j - H\hat{\mathbf{x}}_i)^T S_i^{-1} (\mathbf{y}_j - H\hat{\mathbf{x}}_i)}$ 其中 $\mathbf{y}_j$ 是检测 $d_j$ 的测量值, $H$ 是观测矩阵,$S_i$ 是创协方差。
    • 外观代价 ($C_{appearance}$): 计算新检测的 ReID 特征 $f_j$ 与轨迹 $T_i$ 外观特征库(gallery)的余弦距离。轨迹的 gallery 通常会保存最近几帧的特征,以增加鲁棒性。 $d_A(T_i, d_j) = 1 - \max_{f_k \in \text{gallery}(T_i)} (\cos(f_j, f_k))$
    • 组合代价: $C_{ij} = \lambda d_M(T_i, d_j) + (1-\lambda) d_A(T_i, d_j)$

      Rule-of-Thumb: $\lambda$ 的选择是场景相关的。对于低速、遮挡少的场景,外观信息更可靠,$\lambda$ 可取 0.2-0.4。对于高速、拥挤、姿态变化大的场景,运动信息更稳定,$\lambda$ 可取 0.7-0.9。

  3. 匹配门控 (Gating):
    • 在计算昂贵的外观代价之前,先用廉价的运动代价进行一次筛选。只对马氏距离小于某个阈值 $\chi^2$(根据卡方分布设定,如 95% 置信区间)的 (轨迹, 检测) 对计算完整代价。这能极大地减少计算量并排除不合理的匹配。
  4. 分配问题求解:
    • 有了代价矩阵后,这就是一个分配问题。匈牙利算法 (Hungarian Algorithm)Jonker-Volgenant 算法可用于找到最优匹配(总代价最小)。对于实时性要求更高的场景,简单的贪心匹配也是一种可行的次优策略。

5.1.4 轨迹管理 (Track Management)

负责轨迹生命周期维护。


5.2 三维姿态/骨架估计与步态先验

对于与人交互的 Humanoid 来说,2D bbox 提供的几何和意图信息远远不够。3D 姿态是解锁精细化社交导航的关键。


5.3 时遮挡与再识别

当一个人被柱子、人群或墙角长时间遮挡(超过 max_age)后再次出现,简单的 MOT 系统会错误地分配一个新 ID(ID Switch)。这对于需要长期交互的任务是致命的。


5.4 人群集/镜面/弱光场景的鲁棒化

导航算法必须能在各种非理想的“长尾”场景下保持稳定。


5.5 与导航的耦合

行人跟踪的最终价值体现在它如何赋能下游的规划与控制模块。

      <-- Person's Heading (from 3D pose)

                 (High Cost Ellipse)
          /////////////////////////////
         //                         //
        //       (Frontal Zone)      //
       //                           //
      +-----------------------------+
     |   (Medium Cost Circle)      |
     |                             |
     |       ^ (Person)            |  <-- Social cost field as sum of Gaussians
     |      (Personal Zone)        |
     |                             |
      +-----------------------------+

通过在总代价中加入这个社交成本,路径规划器会自然地生成更平滑、更符合社会直觉的绕行轨迹,例如从人身后绕过,而不是在最后一刻从侧面惊险地擦过。


本章小结

本章系统性地拆解了服务于 Humanoid 导航的行人跟踪算法方案,强调了从基础到高级、从感知到应用的完整链路。


常见陷阱与错误 (Gotchas)

  1. ID 切换 (ID Switching):
    • 现象: 两个外观相似的人擦肩而过时,他们的轨迹 ID 发生交换。
    • 原因: 在近距离交叉点,运动模型的预测位置高度重叠,如果此时他们的 ReID 特征也因姿态、光照相似而难以区分,匹配算法就可能出错。
    • 调试技巧: 可视化匹配过程中的代价矩阵。检查导致错误匹配的单元格 $C_{ij}$ 的运动代价和外观代价的构成。如果外观代价是主因,考虑增强 ReID 模型或在短时交叉时临时提高运动代价的权 $\lambda$。
  2. 轨迹碎片化 (Track Fragmentation):
    • 现象: 同一个人在场景中连续移动,却被分配了多个不连续的轨迹 ID。
    • 原因: 1) 检测器不稳定,导致频繁漏检。2) max_age 参数设置过小,轨迹因几次短暂遮挡就被错误地删除。3) ReID 特征在姿态或光照剧烈变化时漂移,导致无法与旧轨迹关联。
    • 调试技巧: 检查被终止轨迹的最后几帧和新轨迹的最初几帧,分析是检测失败还是 ReID 失败。适当增大 max_age,并检查 5.3 节的轨迹拼接逻辑是否被正确触发。
  3. 坐标系与时间戳混乱:
    • 现象: 跟踪到的 3D 行人在世界坐标系中抖动、漂移,或与机器人自身的运动不一致。
    • 原因: 传感器数据(图像、IMU)的时间戳未精确同步;相机内参、外参(相机到机器人基座的变换)不准;机器人自身的定位(SLAM/VIO)有漂移。
    • 调试技巧: 立严格的时间同步机制(如 PTP)。使用 TF (Transform) 库管理所有坐标系变换。在静态场景下,验证一个静止的人其在 map 坐标系下的位置是否稳定。可视化所有坐标系,检查时间戳和变换关系。
  4. 过度谨慎或鲁莽的社交行为:
    • 现象: 机器人要么在人流中畏缩不前(过度谨慎),要么以不礼貌的方式穿行(鲁莽)。
    • 原因: 社交代价场参数标定不当。过大或过高的代价导致机器人“社交恐惧”,而过小或形状不合理的代价则无法起到引导作用。
    • 调试技巧: 将代价地图可视化,观察社交场的形状、范围和强度是否符合预期。在仿真环境中对不同的人群密度和场景布局进行测试,系统性地调整高斯模型的权重、均值和协方差参数,找到一个在安全性和通行效率之间的良好平衡。
  5. 忽略视野边界效应 (Field-of-View Edge Effects):
    • 现象: 一个人走出视野后马上又走回来,系统却分配了一个新 ID。
    • 原因: max_age 机制没有考虑物体是否在视野边界。一个在图像中心的物体丢失,很可能是被遮挡;而在边界丢失,则极有可能是走出了视野。
    • 调试技巧: 在轨迹管理中,当一个轨迹的最后观测位置靠近图像边界时,可以给它一个更长的“失活”缓冲时间,或者在再识别阶段优先匹配那些从视野外围重新进入的轨迹。