"ISO 3691-4:2020标准解读:叉车型AGV的安全要求与验证"

需积分: 5 24 下载量 55 浏览量 更新于2024-01-26 1 收藏 1.41MB PDF 举报
ISO 3691-4:2020是一项国际标准化组织制定的关于工业车辆安全要求和验证的标准,特别针对无人驾驶工业车辆及其系统进行规范。该标准的发布填补了欧盟原有AGV标准EN 1525:1997和EN 1526:1997已经废止的空白,对于AGV行业的规范和安全管理起到了至关重要的作用。 ISO 3691-4:2020标准的发布对于AGV行业来说是一个重要的里程碑。在此之前,欧盟原有的AGV标准已经废止,并且一直没有发布新的标准,因此AGV行业的发展受到了一定的影响。随着ISO 3691-4:2020标准的发布,欧洲标准委员会也已经审批通过采用该标准,并且正式布指日可待。这对于AGV行业来说是一项积极的变革,将促进AGV行业的健康发展。 ISO 3691-4:2020标准主要的交叉引用标准有ISO 3691-1、ISO 3691-2和ISO 3691-6,这些标准与ISO 3691-4:2020标准相互关联,共同构成了对AGV行业的全面规范和要求。ISO 3691-1标准涉及到工业车辆的一般要求,ISO 3691-2标准涉及到乘坐式和站驾式工业车辆的安全要求,ISO 3691-6标准涉及到給水车的安全要求。这些标准共同构成了对于工业车辆的全面规范和安全要求,保障了工业车辆的安全运行。 作为一项针对无人驾驶工业车辆及其系统的标准,ISO 3691-4:2020标准的发布对于AGV行业来说是一项重大的进步。该标准将有效促进AGV行业的健康发展,增强AGV行业的国际竞争力。在ISO 3691-4:2020标准的指导下,AGV行业将能够更好地规范自身的生产和管理,不断提高产品的安全性和可靠性,满足市场的需求。 总之,ISO 3691-4:2020标准的发布填补了欧盟原有的AGV标准废止的空白,对于AGV行业的健康发展至关重要。随着这一标准的出台,AGV行业将能够更好地规范自身的生产和管理,满足市场的需求,增强自身的国际竞争力。相信在ISO 3691-4:2020标准的指导下,AGV行业的未来将更加光明和可期。

void AGVScheduler::assign_task_to_agv(std::vector<Task>& tasks, std::vector<AGV>& agvs) { // 首先按照任务的完成状态、优先级进行排序 std::sort(tasks.begin(), tasks.end(), [](const Task& task_1, const Task& task_2) { if (task_1.completed != task_2.completed) { return !task_1.completed; } else { return task_1.priority < task_2.priority; } }); for (const auto& task : tasks) { std::cout << "Task name: " << task.id << ", Completed: " << task.completed << ", Priority: " << task.priority << std::endl; } // 遍历任务列表,分配任务给可用的小车 for (auto& task : tasks) { if (!task.completed) { AGV* closest_agv = nullptr; // 初始化为 nullptr while (closest_agv == nullptr) { // 查找可用的小车 for (auto& agv : agvs) { if (agv.getState()) { closest_agv = &agv; break; } } if (closest_agv == nullptr) { // 没有可用的小车,等待一段时间再查找 std::this_thread::sleep_for(std::chrono::seconds(1)); } } // 找到最近的可用小车 int min_distance = INT_MAX; for (auto& agv : agvs) { if (agv.getState()) { int distance = abs(agv.getCurrentX()- task.start_x) + abs(agv.getCurrentY() - task.start_y); if (distance < min_distance) { min_distance = distance; closest_agv = &agv; } } } // 将任务分配给 AGV 对象的起点和终点坐标 closest_agv->setStartCoord(task.start_x, task.start_y); closest_agv->setEndCoord(task.end_x, task.end_y); closest_agv->setState(false); task.completed = true; std::cout << closest_agv->getid() << "," << task.id << endl; } } },當沒有小車用的時候就卡死,添加代碼,找到可用小車的開始運行,沒找到可用小車的一直等待,直到有可用小車

2023-05-24 上传

void AGVScheduler::assign_task_to_agv(std::vector<Task>& tasks, std::vector<AGV>& agvs) { // 首先按照任务的完成状态、优先级进行排序 std::sort(tasks.begin(), tasks.end(), [](const Task& task_1, const Task& task_2) { if (task_1.completed != task_2.completed) { return task_1.completed < task_2.completed; // 未完成的任务排在已完成的任务前面 } else { return task_1.priority < task_2.priority; // 同一完成状态下,按照优先级排序 } }); for (const auto& task : tasks) { //std::cout << "Task name: " << task.id << ", Completed: " << task.completed << ", Priority: " << task.priority << std::endl; } // 遍历任务列表,分配任务给可用的小车 for (auto& task : tasks) { if (task.completed == 0) { // 只分配未完成的任务 AGV* closest_agv = nullptr; int wait_time = 0; // 等待时间计数器 // 初始化为 nullptr while (closest_agv == nullptr && wait_time < 1) { // 最多等待 1 秒钟 // 查找可用的小车 for (auto& agv : agvs) { if (agv.getState()) { closest_agv = &agv; break; } } if (closest_agv == nullptr) { // 没有可用的小车,等待一段时间再查找 std::this_thread::sleep_for(std::chrono::seconds(1)); wait_time++; } } if (closest_agv != nullptr) { // 找到可用小车 // 找到最近的可用小车 int min_distance = INT_MAX; for (auto& agv : agvs) { if (agv.getState()) { int distance = abs(agv.getCurrentX()- task.start_x) + abs(agv.getCurrentY() - task.start_y); if (distance < min_distance) { min_distance = distance; closest_agv = &agv; } } } // 将任务分配给 AGV 对象的起点和终点坐标 closest_agv->set_task_id(task.id); closest_agv->setStartCoord(task.start_x, task.start_y); closest_agv->setEndCoord(task.end_x, task.end_y); closest_agv->setState(false); // 小车被占用 task.completed = 1; // 任务状态修改为进行中 std::cout << "agv_id" << closest_agv->getid() << "————" << "task_id"<<task.id << "task_completed"<< task.completed << endl; } else { std::cout << "task_id-" << task.id << "No available AGV!" << "task_completed"<< task.completed <<endl; } } },修改代碼為在最後輸出所有task的agvid,taskid和task的completed

135 浏览量