01-移动机器人与自主导航总览

作者:姚博文 · 2026-09-15

移动机器人与自主导航总览

定位:一篇讲清楚智能小车"从传感器到车轮"完整数据流的总纲文档,全知识库的索引地图 | 适用:智能小车/移动机器人开发

1\. 概述

1.1 这篇文档解决什么问题

"自主导航"四个字拆开,是一串环环相扣的工程模块:**传感器**负责感知世界,**里程计**(odometry)推算"我走了多远",**定位**(localization)回答"我在地图的哪里",**规划**(planning)决定"该往哪走",**控制**(control)计算"车轮该怎么转",**电机驱动**(motor driver)把速度指令变成电流。任何一个环节出错,整条链路都会表现为"车不动、车乱跑、车撞墙"——所以先有全局图,再谈细节。

这篇文档是知识库的**总纲**:它不深入任何单个算法,而是把每个模块的职责、输入/输出接口、典型算法、运行频率串成一张图,并给出软硬件选型基线与开发路径。后续 02~10 目录的所有文档都挂在这张图上的某个节点里,遇到问题先回来定位"是哪个环节",再进对应目录查细节。

1.2 自主导航全链路(数据流)

与 [00-路线图/学习路线图](../00-%E8%B7%AF%E7%BA%BF%E5%9B%BE/%E5%AD%A6%E4%B9%A0%E8%B7%AF%E7%BA%BF%E5%9B%BE.md) 中的链路图一致,软件主链路:

硬件链路(两颗芯片、两个时间尺度):

· **主计算平台**(树莓派/Jetson):跑 ROS2 + Nav2,处理激光、定位、规划,频率典型 5~20Hz;

· **MCU**(STM32/ESP32):读编码器、跑速度内环、执行电机 PWM/CAN 指令,频率典型 100Hz~1kHz。

💡 全链路只有两类"状态":**位姿**(pose,我在哪)和**速度**(twist,我该多快)。
定位模块产方位姿,规划模块消费位姿产出速度指令,控制模块消费速度指令。
调试时问自己"现在错的是位姿还是速度",就能把问题切给对应的模块。

1.3 各模块职责 / 输入输出接口 / 典型算法一览

| 模块 | 职责(一句话) | 输入 | 输出 | 典型算法/实现 |

| --- | --- | --- | --- | --- |

| 传感器 | 感知自身运动与外部世界 | 物理信号 | 编码器计数、IMU 角速度/加速度、激光扫描、图像 | 硬件,无算法 |

| 里程计 | 推算"我走了多远"(航位推算 dead reckoning) | 左右轮速/编码器、IMU | 位姿估计 /odom(x, y, θ + 协方差) | 运动学积分、互补滤波、EKF |

| 定位 | 回答"我在已知地图的哪里" | /odom、/scan、/map | TF map→odom、全局位姿 | AMCL(粒子滤波)、EKF/UKF 融合 |

| 建图 SLAM | 未知环境同步建图与定位 | /odom、/scan | 占据栅格地图 /map + 位姿 | GMapping、Cartographer、(3D) FAST-LIO |

| 全局规划 | 静态地图上的最优/可行路径 | /map、起始点、目标点 | 全局路径 | A*、Dijkstra、D* Lite + 膨胀层 |

| 局部规划 | 考虑动态障碍的实时速度序列 | 全局路径、costmap、当前位姿 | 速度指令 (v, ω) | DWA、TEB、动态窗口法 |

| 控制 | 让车轮速度跟踪指令 | 目标速度、当前速度、(状态) | 轮速指令 | PID、LQR、MPC |

| 电机驱动 | 把轮速指令变成电机电流 | PWM/CAN 指令 | 电机转矩(转速) | 驱动器内置电流环/速度环 |

这张表就是后面所有章节的"目录":04 讲传感器与里程计,06 讲定位与建图