CARLA教程-06-目标跟踪(OC-SORT)与移动轨迹
06 目标跟踪 (OC-SORT) + 移动轨迹
检测之后接 OC-SORT 做多目标跟踪,给每个目标分配稳定 ID,并绘制移动轨迹。
6.1 OC-SORT 简介
OC-SORT(Observation-Centric SORT)是纯运动模型的多目标跟踪器,输入每帧检测 [x1,y1,x2,y2,score],输出带 track ID 的轨迹。适合拥挤和非线性运动场景,实时性好。
6.2 依赖
OC-SORT 的 kalmanfilter.py 用了 filterpy,装到系统 python:
1 | /usr/bin/python3 -m pip install filterpy |
association.py 的 linear_assignment 有 lap/scipy 回退,系统 python 有 scipy 就行,不用装 lap。
6.3 在节点里引入 OC-SORT
OC-SORT 仓库不需要 pip install,加路径即可。在 carla_detector.py 顶部:
1 | import sys |
6.4 OC-SORT API
1 | tracker = OCSort(det_thresh=0.5) # 其他参数默认: max_age=30, min_hits=3, iou_threshold=0.3 |
img_info和img_size都传原图尺寸,scale=1,不做坐标缩放。
返回的 track_id = 内部 id + 1。
OC-SORT 不跟踪类别,需把 track 框匹配回检测框(IoU)拿类别。
6.5 集成到检测节点
在检测回调里,检测后喂给 tracker,再把 track 框匹配回检测拿类别:
1 | # 1. 检测得到 boxes, scores, cids (已过滤) |
6.6 移动轨迹
维护一个 track_id -> [中心点列表] 的字典,每帧追加当前中心点,画折线:
1 | trails = defaultdict(list) |
颜色按 track_id 生成稳定值,不同目标不同色。
6.7 发布带 track_id 的检测结果
Detection2D 消息有个 id 字段(string),用来放 track_id:
1 | d = Detection2D() |
⚠️ humble 的
vision_msgs/BoundingBox2D.center是vision_msgs/Pose2D,结构是center.position.x/y+center.theta(不是center.x)。直接用center.x会报'Pose2D' object has no attribute 'x'。
6.8 最终效果
rviz2 里 /carla/hero/rgb/detection_image 显示:
- 每个目标一个稳定 ID 的框(颜色按 ID 区分)。
- 标签
类别:ID(如car:1、person:3)。 - 移动轨迹(彩色折线,保留最近 40 个点)。
完整节点代码见 scripts/carla_detector.py。