代码位置:/apollo/modules/perception/lidar/common/object_sequence.h
看起来像是一个存储跟踪障碍物的容器
public:
bool AddTrackedFrameObjects
bool GetTrackInTemporalWindow
protected:
RemoveStaleTracks
这里定义了3中类型的噶关键字。包含id, time, TrackedObjects。
typedef int TrackIdKey;
typedef double TimeStampKey;
typedef std::map<TimeStampKey, std::shared_ptr<apollo::perception::base::Object>>
TrackedObjects;
成员变量
TimeStampKey current_;
std::map<TrackIdKey, TrackedObjects> sequence_;
std::mutex mutex_;
static constexpr TimeStampKey kMaxTimeOut = 5.0; // 5 second
object_sequence.cc
void ObjectSequence::RemoveStaleTracks(TimeStampKey current_stamp)
通过传入当前的时间,移除两类tracked objects。
- 最新的跟踪时间超过kMaxTimeOut=5s的障碍物, 已经停止tracking,超过5s没有track的障碍物。可能已经离开车辆视野
- Tracked Objects中,会删除5s之前的跟踪信息
bool ObjectSequence::AddTrackedFrameObjects(
const std::vector<ObjectPtr>& objects, TimeStampKey timestamp)
std::lock_guard<std::mutex> lock(mutex_);
遍历传入的障碍物,根据障碍物的id去sequence_中搜索。
- 如果没有在map中找到障碍物id,就在sequence中添加新的tracked object。
- 如果在map中找到障碍物id,就更新tracked object的timestamp和obj。
- 移除陈旧的tracked objects, 更新时间
bool ObjectSequence::GetTrackInTemporalWindow(TrackIdKey track_id,
TrackedObjects* track,
TimeStampKey window_time)
通过传入障碍物和窗口时间,获取在一时间窗口中的障碍物track信息。
时间窗口 = 当前时间 - 窗口开始时间(但是remove stale tracks中会删除大于5s的track,所以这个窗口一般小于5s)