if (agvs[i].current_x == agvs[i].end_x_ && agvs[i].current_y == agvs[i].end_y_)//如果到達充電站 { agvs[i].setbattery(100); agvs[i].setAvailable(true);//小車設置為可用 tasks[completed_task_index].completed = 2;//任務完成 scheduler.assign_task_to_agv(tasks, agvs); },增加代碼:充電站變爲可用
时间: 2024-02-25 08:51:42 浏览: 71
可以在`agv`类中添加一个`bool`类型的成员变量`is_charging_station_available`,表示充电站是否可用。然后在上述代码中,当小车到达充电站时,将`is_charging_station_available`设为`true`,表示充电站可用。修改后的代码如下:
```
if (agvs[i].current_x == agvs[i].end_x_ && agvs[i].current_y == agvs[i].end_y_) {
agvs[i].setbattery(100);
agvs[i].setAvailable(true);
tasks[completed_task_index].completed = 2;
agvs[i].is_charging_station_available = true; // 充电站变为可用
scheduler.assign_task_to_agv(tasks, agvs);
}
```
相关问题
if (tasks[completed_task_index].Task_type == 1) { // 如果是充电任务 if (agvs[i].current_x == agvs[i].end_x_ && agvs[i].current_y == agvs[i].end_y_ ) { // 如果到达充电站 if (agvs[i].battery_ < 100) { std::thread charge_thread([&]() { agv_charge(i); }); charge_thread.detach(); } } { // 更新路径 Node* start_node = new Node(agvs[i].current_x, agvs[i].current_y); Node* end_node = new Node(agvs[i].getEndX(), agvs[i].getEndY()); std::vector<Node*> path = astar.getPath(start_node, end_node); path.erase(path.begin()); paths[i] = path; } }翻譯一下
这段代码是一个条件语句。首先判断当前完成的任务类型是否为充电任务(Task_type == 1)。如果是充电任务并且AGV车辆已经到达了充电站(current_x == end_x_ && current_y == end_y_),那么判断车辆电量是否小于100。如果小于100,则创建一个新的线程(charge_thread),该线程执行充电任务(agv_charge(i)),并将该线程分离(detach),让其在后台自行运行。
如果当前完成的任务不是充电任务或者充电站还未到达,则更新AGV车辆的路径。首先创建起点(start_node)和终点(end_node)节点,然后使用A*算法(astar.getPath())计算出新的路径(path),并将路径的第一个节点(起点)删除。最后将更新后的路径存储到全局变量paths[i]中。
class Charge { public: Charge(int id_ ,int charge_x_,int charge_y_ ,bool charge_available_); int id; // 充電站ID int charge_x, charge_y; // 充電站位置 bool charge_available; //充電站是否可用; void setavailable( bool available ); std::vector<Charge> charges; };,if (agvs[i].current_x == agvs[i].end_x_ && agvs[i].current_y == agvs[i].end_y_)//如果到達充電站 { agvs[i].setbattery(100); agvs[i].setAvailable(true);//小車設置為可用 tasks[completed_task_index].completed = 2;//任務完成 scheduler.assign_task_to_agv(tasks, agvs); },增加代碼:充電站變爲可用
可以在`Charge`类中添加一个`setAvailable`函数来设置充电站的可用状态。修改后的代码如下:
```
class Charge {
public:
Charge(int id_, int charge_x_, int charge_y_, bool charge_available_);
int id; // 充電站ID
int charge_x, charge_y; // 充電站位置
bool charge_available; // 充電站是否可用
void setAvailable(bool available); // 设置充电站的可用状态
std::vector<Charge> charges;
};
void Charge::setAvailable(bool available) {
charge_available = available;
}
```
然后在上述代码中,当小车到达充电站时,可以通过充电站的ID找到对应的充电站,并将其设为可用。修改后的代码如下:
```
if (agvs[i].current_x == agvs[i].end_x_ && agvs[i].current_y == agvs[i].end_y_) {
agvs[i].setbattery(100);
agvs[i].setAvailable(true);
tasks[completed_task_index].completed = 2;
for (int j = 0; j < charges.size(); j++) {
if (agvs[i].end_x_ == charges[j].charge_x && agvs[i].end_y_ == charges[j].charge_y) {
charges[j].setAvailable(true); // 充电站变为可用
break;
}
}
scheduler.assign_task_to_agv(tasks, agvs);
}
```
阅读全文