for (int i = 0; i < agvs.size(); i++) { for (int j = 0; j < tasks.size(); j++) { if (tasks[j].id == agvs[i].get_task_id()) { completed_task_index = j; break; } } if (tasks[completed_task_index].completed == 2 ) { // 如果已经完成任务 paths[i].clear(); continue; // 跳过此次循环 } if (! paths[i].empty()) { Node* next_node = paths[i][0]; float speed = agvs[i].getSpeed(); float distance = sqrt(pow(next_node->x - agvs[i].getCurrentX(), 2) + pow(next_node->y - agvs[i].getCurrentY(), 2)); float time = distance / speed * 1000; //node_Value[next_node->x][next_node->y] = 10; QTimer::singleShot(time, this, &, i, next_node { agvs[i].setCurrentX(next_node->x); agvs[i].setCurrentY(next_node->y); this->update(); // 在窗口中重绘 }); } },添加代碼,獲取agv的current的x和y,輸入_MAP[][] = 1,黨agv不在那個點的時候,變爲0
时间: 2023-12-14 11:39:53 浏览: 17
你可以在这段代码中添加以下代码来获取 AGV 的当前 X 和 Y 坐标:
```cpp
int agv_x = agvs[i].getCurrentX();
int agv_y = agvs[i].getCurrentY();
```
然后,你可以使用这些坐标来更新 `_MAP` 数组:
```cpp
if (_MAP[agv_x][agv_y] != 1) {
_MAP[agv_x][agv_y] = 1;
}
```
这将在 AGV 不在 `_MAP` 数组中的位置时将该位置的值设置为 1。如果你想在 AGV 离开该位置时将该值设置为 0,你可以在 AGV 移动到新位置之前添加以下代码:
```cpp
int prev_x = agv_x;
int prev_y = agv_y;
// 移动 AGV 的代码
_MAP[prev_x][prev_y] = 0;
```
这将将 AGV 上一个位置的值设置为 0。注意,这只适用于 `_MAP` 数组是全局变量的情况,如果 `_MAP` 数组是类成员变量,你需要使用类的实例变量来访问该变量。
相关问题
AGVScheduler scheduler; scheduler.assign_task_to_agv(tasks, agvs); for (int i = 0; i < agvs.size(); i++) { moveAgvs(i); },增加函數,直到所有的任務都已經完成
您的问题似乎是一段代码,而不是一个问题。不过我可以看出这是一个AGV调度器,用于将任务分配给AGV并控制它们完成任务。如果您想让所有任务都完成后停止调度器,您可以使用一个while循环,检查任务是否全部完成,然后再退出循环。
示例代码:
```
AGVScheduler scheduler;
scheduler.assign_task_to_agv(tasks, agvs);
bool all_tasks_completed = false;
while (!all_tasks_completed) {
all_tasks_completed = true;
for (int i = 0; i < agvs.size(); i++) {
moveAgvs(i);
if (!agvs[i].isTaskCompleted()) {
all_tasks_completed = false;
}
}
}
```
这段代码将不断循环,直到所有任务都完成并退出循环。
//輸出path for (int i = 0; i < agvs.size(); i++) { for (int j = 0; j < paths[i].size(); j++) { _MAP[paths[i][j]->x][ paths[i][j]->y] = 5; } } //模擬小車行駛 for (int i = 0; i < agvs.size(); i++) { if (! paths[i].empty()) { Node* next_node = paths[i][0]; float speed = agvs[i].getSpeed(); float distance = sqrt(pow(next_node->x - agvs[i].getCurrentX(), 2) + pow(next_node->y - agvs[i].getCurrentY(), 2)); float time = distance / speed * 1000; //node_Value[next_node->x][next_node->y] = 10; QTimer::singleShot(time, this, [&, i, next_node]() { agvs[i].setCurrentX(next_node->x); agvs[i].setCurrentY(next_node->y); this->update(); // 在窗口中重绘 }); } } //如果任務完成停止定時器 for (int i = 0; i < tasks.size(); i++) { if (tasks[i].completed != 2) { allTasksCompleted = false; break; } } if (allTasksCompleted) { timer->stop(); update(); } } },添加黨agv的current坐標輸入_MAP中,值為0
可以在第一个 for 循环中添加以下代码来实现:
```
for (int i = 0; i < agvs.size(); i++) {
_MAP[agvs[i].getCurrentX()][agvs[i].getCurrentY()] = 0;
}
```
这样就可以将所有 AGV 的当前位置对应的地图值设为 0。完整的代码如下:
```
for (int i = 0; i < agvs.size(); i++) {
for (int j = 0; j < paths[i].size(); j++) {
_MAP[paths[i][j]->x][paths[i][j]->y] = 5;
}
}
for (int i = 0; i < agvs.size(); i++) {
_MAP[agvs[i].getCurrentX()][agvs[i].getCurrentY()] = 0;
}
for (int i = 0; i < agvs.size(); i++) {
if (!paths[i].empty()) {
Node* next_node = paths[i][0];
float speed = agvs[i].getSpeed();
float distance = sqrt(pow(next_node->x - agvs[i].getCurrentX(), 2) + pow(next_node->y - agvs[i].getCurrentY(), 2));
float time = distance / speed * 1000;
QTimer::singleShot(time, this, [&, i, next_node]() {
agvs[i].setCurrentX(next_node->x);
agvs[i].setCurrentY(next_node->y);
this->update();
});
}
}
for (int i = 0; i < tasks.size(); i++) {
if (tasks[i].completed != 2) {
allTasksCompleted = false;
break;
}
}
if (allTasksCompleted) {
timer->stop();
update();
}
```