2. AMR系统架构
AMR(Autonomous Mobile Robot,自主移动机器人)之所以能“看见环境、知道自己在哪里、规划出路径并稳稳走到目标点”,并不是靠某一个算法或某一个传感器完成的,而是多层软硬件协同的结果。理解 AMR 系统架构,是后续地图构建与自主导航部署的基础。本节把 AMR 拆解为感知层、定位层、建图层、规划层、控制层、执行层和通信层七个层次,并说明常见硬件与软件框架的对应关系。
一、七层架构的核心原理
AMR 的分层架构本质上是一条“从环境到动作”的信息处理链:传感器采集原始数据,感知层完成特征提取与障碍识别;定位层结合地图与观测估计机器人位姿;建图层维护环境地图;规划层在已知地图与位姿上生成全局路径和局部轨迹;控制层把轨迹转化为速度指令;执行层驱动电机、舵轮、升降机构等物理部件;通信层则贯穿所有层,负责数据总线、网络与调度。每一层都有明确的输入输出,层与层之间通过标准接口解耦,便于替换算法或硬件。
二、各层职责与关键接口
感知层是系统的“眼睛和耳朵”,负责把物理世界的信号转换为可计算的数据。定位层解决“我在哪”,建图层解决“环境长什么样”,两者常通过 SLAM 联合估计。规划层解决“怎么去”,分为全局规划与局部规划两级。控制层解决“如何平稳地走”,执行层解决“谁去执行”,通信层解决“信息如何流动”。
| 层次 | 核心职责 | 典型输入 | 典型输出 |
|---|---|---|---|
| 感知层 | 环境感知与障碍检测 | 激光、图像、IMU 原始数据 | 点云、障碍物列表、特征 |
| 定位层 | 估计机器人位姿 | 观测数据、地图、里程计 | 位姿 (x, y, θ) |
| 建图层 | 构建与维护地图 | 点云、位姿 | 栅格地图、代价地图 |
| 规划层 | 生成路径与轨迹 | 目标点、地图、位姿 | 全局路径、局部速度指令 |
| 控制层 | 轨迹跟踪与速度控制 | 期望轨迹、当前状态 | 线速度、角速度 |
| 执行层 | 驱动机械与执行机构 | 速度指令、控制信号 | 电机转动、机构动作 |
| 通信层 | 数据交换与系统调度 | 各层消息 | 话题、服务、总线报文 |
三、典型场景:从任务下达到机器人移动
假设调度系统下发一个“从 A 点搬运货物到 B 点”的任务。通信层把任务传给规划层;规划层读取建图层的代价地图,结合定位层给出的当前位姿,用 A* 生成全局路径;局部规划器根据实时障碍物生成速度指令;控制层把速度指令转换为左右轮转速;执行层驱动电机;感知层持续检测障碍,定位层持续更新位姿,形成闭环。整个过程在几十毫秒内循环一次,保证机器人安全、平滑地到达目标。
关键闭环:感知 → 定位 → 建图 → 规划 → 控制 → 执行 → 反馈回感知。任何一层延迟或错误,都会导致机器人“迷路、撞墙或抖动”。
四、常见误区与复盘
- 误区一:只关注算法,忽略通信层。很多现场问题不是算法不行,而是 Wi-Fi 丢包、CAN 总线负载过高导致指令延迟。
- 误区二:定位与建图割裂。定位不准会导致地图重影,地图不准又会反过来影响定位,必须联合调试。
- 误区三:控制层参数照搬。不同底盘质量、轮径、摩擦系数不同,PID 参数必须现场整定。
- 误区四:忽视执行层反馈。编码器、限位开关、电流反馈是判断执行层是否正常的重要依据。
调试建议:先确认通信层稳定,再验证感知与定位,最后调规划与控制。顺序颠倒会浪费大量时间。
五、配置示例:ROS 2 中查看各层话题
# 查看当前所有话题(通信层与各层接口)
ros2 topic list
# 查看激光雷达数据(感知层)
ros2 topic echo /scan --once
# 查看定位位姿(定位层)
ros2 topic echo /amcl_pose --once
# 查看代价地图(建图层)
ros2 topic echo /global_costmap/costmap --once
# 查看规划路径(规划层)
ros2 topic echo /plan --once
# 查看速度指令(控制层)
ros2 topic echo /cmd_vel --once
注意:如果 /cmd_vel 有输出但机器人不动,优先检查执行层使能与通信层总线状态,而不是继续调规划参数。
掌握七层架构后,后续的地图构建、定位配置、路径规划与部署调试都会变得有章可循。每一层都可以独立验证、独立替换,这也是 AMR 系统能够快速迭代和规模化部署的根本原因。