// 得到agv的路綫 for (int i = 0; i < agvs.size(); i++) { if (agvs[i].getLoad() == true) { // 如果是负载的状态 if (agvs[i].getCurrentX() == agvs[i].getEndX() && agvs[i].getCurrentY() == agvs[i].getEndY()) { // 如果到达终点 agvs[i].setLoad(false); // 设置为空载状态 agvs[i].setState(true); std :: cout << "agv__id :" << agvs[i].getid() << " ,agv_get_task_id :" << agvs[i].get_task_id() << endl; for (int j = 0; j < tasks.size(); j++) { if (tasks[j].id == agvs[i].get_task_id()) { completed_task_index = j; break; } } if (completed_task_index != -1) { tasks[completed_task_index].completed = 2; } task_to_agv(); // 更新任务分配 update(); // 更新AGV状态 } else { // 否则行驶到终点 Node* start_node = new Node(agvs[i].getCurrentX(), agvs[i].getCurrentY()); Node* end_node1 = new Node(agvs[i].getEndX(), agvs[i].getEndY()); std::vector<Node*> path_to_end = astar.getPath(start_node, end_node1); path_to_end.erase(path_to_end.begin()); std::vector<Node*> path; path.insert(path.end(), path_to_end.begin(), path_to_end.end()); paths[i] = path; } } else { // 如果是空载的状态 if (agvs[i].getCurrentX() == agvs[i].getStartX() && agvs[i].getCurrentY() == agvs[i].getStartY()) { // 如果到达起点 agvs[i].setLoad(true); // 设置为负载状态 } else { // 否则行驶到起点 Node* start_node = new Node(agvs[i].getCurrentX(), agvs[i].getCurrentY()); Node* end_node = new Node(agvs[i].getStartX(), agvs[i].getStartY()); std::vector<Node*> path_to_start = astar.getPath(start_node, end_node); std::vector<Node*> path; path.insert(path.end(), path_to_start.begin() + 1, path_to_start.end()); paths[i] = path; } } },添加代碼:根據path得到的坐標繪製直綫,得到agv得到的路綫
时间: 2024-01-21 17:19:21 浏览: 52
可以在代码中添加如下部分来实现根据path绘制直线的功能:
```c++
// 在agv类中添加一个绘制路线的函数
void AGV::draw_path(cv::Mat& img, const std::vector<Node*>& path) {
for (int i = 0; i < path.size() - 1; i++) {
cv::line(img, cv::Point(path[i]->x * 10 + 5, path[i]->y * 10 + 5), cv::Point(path[i + 1]->x * 10 + 5, path[i + 1]->y * 10 + 5), cv::Scalar(0, 255, 0), 1);
}
}
// 在主函数中调用该函数绘制路线
for (int i = 0; i < agvs.size(); i++) {
AGV& agv = agvs[i];
// ...
if (agv.getState() == true) {
agv.draw_path(map, paths[i]);
}
// ...
}
```
其中,`cv::Mat& img` 表示绘制路线的图片,`const std::vector<Node*>& path` 表示AGV要行驶的路线。在函数中,我们使用 `cv::line` 函数绘制从 `path` 中相邻的两个节点之间的直线。最后,在主函数中,我们调用 `agv.draw_path(map, paths[i])` 函数来绘制每个AGV的路线。
阅读全文