Initial

函数功能:通过传入最终装甲板,选择锁定装甲板,进入初始化状态

bool ArmorTrack::Initial(std::vector<Armor> &Armors) {
    if(Armors.empty())  return false;   //如果为空直接返回

    //====================预测初始化====================

    /** 根据装甲板的分数从大到小排序 */
    sort(Armors.begin(),Armors.end(),
         [](Armor &armor1,Armor &armor2){
             return armor1.grade > armor2.grade;});

    /** 锁定装甲板流程 */
    enemy_armor = Armors[0];                                        // 选择锁定装甲板
    enemy_armor.world_position = AS.pixel2imu(enemy_armor);      // 最终装甲板的世界坐标系为像素转换为imu坐标系
    tracking_id = enemy_armor.id;                                   // 设置跟踪id,根据最优装甲板选择
    tracker_state = DETECTING;                                      // 跟踪状态设置为初始化状态

    /** 初始化卡尔曼 */
    KF.Initial();    //卡尔曼初始化
    // 传入世界坐标系,设置初始速度为0
    KF.setPosAndSpeed(enemy_armor.world_position,Eigen::Vector3d(0,0,0));
    return true;
}

初始化函数,这里的逻辑便是根据装甲板的分数进行排序,然后选择分数最高的一个装甲板作为最终装甲板进行跟踪

同时记录下装甲板ID、坐标信息,进行卡尔曼的初始化,为预测做准备


tracker_state 在 Armor_Track.h 中,共有4个状态,在后续会有更加详细的介绍

/** 跟踪状态 */
enum TrackerState {
    MISSING,            // 没有目标,跳过该部分
    DETECTING,          // 还未开始跟踪,作为跟踪第一帧的切换,初始化好卡尔曼
    LOSING,             // 处于丢失状态,还会保留预测
    TRACKING,           // 处于跟踪状态
};

关于上述代码中 AS.pixel2imu(enemy_armor)KF.Initial() 的部分不会在本篇进行详细的展开

像素转换为imu坐标系部分 将会在 "空间位姿解算篇" 进行详细展开

卡尔曼滤波部分 将会在 "算法篇" 进行详细展开

在本篇使用的时候将会进行简单的介绍

results matching ""

    No results matching ""