vector<int> not_assigned_detections; vector<int>::iterator it; for(int i=0;i<detections.size();i++) { it=find(assignment.begin(), assignment.end(), i); if(it==assignment.end()) { not_assigned_detections.push_back(i); } }
时间: 2023-06-17 22:03:52 浏览: 118
这段代码的作用是将未被分配的检测结果的索引存储在一个名为 `not_assigned_detections` 的向量中。具体来说,这段代码首先创建一个空的向量 `not_assigned_detections`,然后遍历所有检测结果,查找它们是否被分配给任何一个跟踪器。如果某个检测结果的索引未在 `assignment` 向量中出现,那么说明它未被分配,因此将它的索引存储在 `not_assigned_detections` 向量中。最后,`not_assigned_detections` 向量中存储的就是所有未被分配的检测结果的索引。
相关问题
if(not_assigned_detections.size()!=0) { for(int i=0;i<not_assigned_detections.size();i++) { CTrack* tr=new CTrack(detections[not_assigned_detections[i]],dt,Accel_noise_mag); tracks.push_back(tr); } }
这段代码是一个目标跟踪算法中的一部分。首先,通过检测算法检测到一些目标,然后将这些目标与已经跟踪的目标进行匹配,从而确定哪些目标需要被更新跟踪,哪些目标是新的需要被跟踪的目标。
在这段代码中,如果存在未匹配的检测目标,则将其作为新的目标跟踪。对于每个未匹配的检测目标,创建一个新的跟踪器对象(CTrack),并将其添加到跟踪器列表(tracks)中。跟踪器对象包含目标的状态信息、跟踪器的ID、以及一些其他的属性。在后续的跟踪过程中,会使用这些信息来更新跟踪器的状态,以及确定哪些跟踪器需要被删除。
需要注意的是,这段代码只处理未匹配的检测目标,已经匹配的目标会被更新跟踪,而不会被处理。这是因为已经匹配的目标会被分配到对应的跟踪器对象中进行处理。
while (true) { bool all_tasks_completed = true; for (int j = 0; j < tasks.size(); j++) { if (tasks[j].completed == 0) { all_tasks_completed = false; break; } } AGVScheduler scheduler; scheduler.assign_task_to_agv(tasks, agvs);//開始分配任務 // 遍历所有 AGV,更新位置和状态 for (int i = 0; i < agvs.size(); i++) { if (agvs[i].available_ == false) { moveAgvs(i); std:: cout << "agv.id:"<< agvs[i].id_ << "___task.id :" << agvs[i].task_id << endl; } } if (all_tasks_completed) { break; } },修改函數:遍歷所有的任務,有任務的completed為0,則進行分配。否則則推出
好的,根据您的描述,您需要对 `assign_task_to_agv()` 函数进行修改,使其只分配未完成的任务。可以将函数修改为以下形式:
```
void AGVScheduler::assign_task_to_agv(vector<Task>& tasks, vector<AGV>& agvs) {
for (int i = 0; i < agvs.size(); i++) {
if (agvs[i].available_) {
for (int j = 0; j < tasks.size(); j++) {
if (tasks[j].completed == 0) {
agvs[i].assign_task(tasks[j]);
tasks[j].assigned_to_agv = true;
break;
}
}
}
}
}
```
在这个修改后的函数中,首先遍历所有的 AGV,如果某个 AGV 是空闲的,则遍历所有的任务,找到第一个未完成的任务并将其分配给该 AGV。如果 AGV 已经被分配了任务,则继续遍历下一个 AGV。
注意,在分配任务时,需要将任务的 assigned_to_agv 标志设置为 true,否则在后续的循环中,该任务可能会被重复分配。
阅读全文