朱曦霖
联系Available for work
← 全部作品

实验室项目 · KIT 工业移动机器人实验室(IFL)

VDA5050 多机器人调度系统

KIT IFL 工业移动机器人实验,从仿真到两台真实移动机器人

2026.04 — 2026.06源码

基于 VDA 5050 与 MQTT 实现车队管理和运动控制,从仿真迁移到两台不同车型的真实移动机器人,按车型约束规划路径、锁定工站,在最终现场评估中稳定运行。

协调的真实移动机器人(台)
2
测试区拓扑(节点 / 边)
16 / 23
工站
6

概览

  • 时间与性质:2026.04 – 2026.06,KIT 输送技术与物流系统研究所(IFL)的 Industrial Mobile Robotics Lab;先在仿真中完成个人任务,再以小组形式上真机
  • 我的角色:个人任务全部由我完成(车队管理 10 项、运动控制 3 项);小组中负责车队管理核心,并参与真机联调与最终现场演示
  • 要解决的问题:让两台车型不同的真实移动机器人按给定顺序并行完成搬运任务——订单怎么下发、状态怎么同步、路径冲突与死锁怎么避免
  • 结果:从仿真迁移到真实工业移动机器人(GEBHARDT),在最终现场评估中验证稳定运行

我做了什么

  • VDA 5050 订单与状态:按规范构建途经取货、加工、卸货工站的多节点、多边订单,经 MQTT 下发;解析机器人回传的 state,只有剩余节点和边都清空、所有动作均为 FINISHED 时,才把车辆置为空闲
  • 拓扑地图与 A* 路径规划:把 LIF 布局文件解析成节点与边的图;用 heapq 优先队列和欧氏距离启发函数实现 A* 算法,朝终点有方向地搜索,而不是像 Dijkstra 那样盲目扩散
  • 多站订单流水线:把「当前位置 → 取货 → 加工 → 卸货 → 驻留点」拆成多段 A* 再拼接,剔除衔接处的重复节点,并在进站前一个节点注入 init_fine_positioning 精定位动作
  • 后台自动派单:派单循环跑在守护线程里,持续把任务分配给就近的空闲车辆,不阻塞仿真界面和 MQTT 通信;新增车辆只需在初始化配置里加一条
  • 运动控制:从订单中提取已放行(released)的节点作为航点,用比例控制逐点跟踪,到点后上报 lastNodeId 解锁后续订单;针对执行噪声和加减速约束,加入位姿滑动平均 / 低通滤波和速度斜坡
  • 两台真机的车队管理(小组):协调 cat001(纵向输送)和 mouse001(横向输送)两台机器人;A* 按车型过滤进站边,保证以正确朝向对接工站;同一时刻一个工站只允许一台车,避免碰撞与死锁
  • 真机联调与现场演示(小组):切换到真机模式并连接实验室 MQTT broker,按真车表现调整速度、装卸与精定位时间参数;最终现场的任务当天才给出,车辆可从测试区任意位置出发

技术细节

布局与车型约束

  • 测试区布局固定:16 个节点、23 条边、6 个工站(3 个转运站、3 个加工站)和 2 个充电驻留点
  • 两种车型:cat001 是纵向输送车,mouse001 是横向输送车。每种车型进入每个转运站只有一条合法进站边,边上带切向朝向约束,车到站时已经朝向正确,不允许在站点原地转向
  • 精定位参数(init_fine_pos_*fine_pos_control_*)从布局文件读出后原样转发给运动控制,由车端完成最后几厘米的对接

系统分层

内容
协议 VDA 5050 order / state 消息,JSON Schema 校验,MQTT 发布与订阅
调度 任务管理、就近派单、车辆状态的数字孪生
规划 LIF 图解析、按车型过滤边的 A* 规划、多段路径拼接、动作注入
控制 航点跟踪、状态上报、滤波与速度斜坡
验证 每个开发任务配 pytest 测试;图形化仿真;实验室真机

局限与复盘

  • 派单是就近贪心:按给定顺序把任务交给最近的空闲车,没有做全局最优分配
  • 仿真与真机的差距在不确定性:真车会被临时挡住,速度和装卸时间也和仿真不同;车队管理必须能消化这些延迟,不崩溃、不碰撞、不死锁