Autoware
它提供了一整套自动驾驶软件栈(Perception → Planning → Control),很多高校、研究机构、Robotaxi 公司、无人配送、自动驾驶巴士项目都会基于它二次开发
Autoware 最早由日本名古屋大学教授 Shinpei Kato 于 2015 年发起,后来成立了 Autoware Foundation 统一维护。
它是:
- 开源
- 基于 ROS / ROS2
- 面向 L4 自动驾驶
- 支持真实车辆部署
- 支持仿真
Autoware 的整体架构
传感器
↓
感知(Perception)
↓
定位(Localization)
↓
预测(Prediction)
↓
路径规划(Planning)
↓
车辆控制(Control)
↓
CAN / 底盘接口
| 模块 | 作用 |
|---|---|
| Sensing | 接收 LiDAR、Camera、Radar、IMU 等数据 |
| Localization | 高精地图 + GNSS + IMU 定位 |
| Perception | 检测车辆、行人、交通灯 |
| Planning | 计算行驶路径 |
| Control | 输出方向盘、刹车、油门控制 |
| Vehicle Interface | 对接不同车型 CAN 总线 |
| HD Map | 高精地图支持 |
运行 Autoware 需要什么硬件?
| 硬件 | 建议 |
|---|---|
| CPU | x86 高性能 |
| GPU | NVIDIA RTX |
| 系统 | Ubuntu |
| 中间件 | ROS2 |
| 传感器 | 激光雷达 + IMU + Camera |
为什么大家还是大量使用高精地图?
因为自动驾驶最难的是:定位, 不是检测。
有高精地图时,系统知道:
- 哪儿有车道
- 哪儿能转弯
- 红绿灯在哪
- 路沿在哪
- 停车线在哪
所以 AI 压力会小很多。
没有高精地图时, 系统必须实时理解整个世界,难度暴涨。
封闭园区的高精地图需要自己建立吗
在封闭园区场景里,高精地图通常都需要:自己制作 + 自己维护
因为公开地图(比如高德、Google Maps)根本不包含:
- 厂区道路
- 园区内部车道
- 仓库路线
- 停车点
- 禁行区
- 装卸区域
更不可能提供:自动驾驶可用的厘米级语义地图
封闭园区常见地图方案
| 层级 | 内容 | 是否必须 |
|---|---|---|
| 几何地图 | 道路/车道 | 必须 |
| 语义地图 | 停车点/路口/限速 | 推荐 |
| 点云地图 | LiDAR定位 | 可选 |
什么叫轻地图?
地图只保留:
- 车道拓扑
- 路线
- 停靠点
而不是:全世界厘米级三维重建
然后定位依赖:
- RTK
- VIO
- Camera
- LiDAR
- IMU
融合。
RTK + Lanelet2 + 简单避障
| 功能 | Autoware 是否包含 |
|---|---|
| Lanelet2 地图支持 | ✅ 官方核心 |
| 路径规划 | ✅ |
| 控制器 | ✅ |
| 障碍物避障 | ✅ |
| ROS2 通信 | ✅ |
| RTK 驱动 | ❌ 通常需自己接 |
| GNSS融合 | ⚠️ 部分有 |
| 车辆CAN适配 | ❌ 通常自己做 |
| 具体传感器驱动 | ⚠️ 部分有 |
技术栈
| 模块 | 推荐 |
|---|---|
| 主系统 | Ubuntu + ROS2 |
| 自动驾驶 | Autoware Universe |
| 定位 | RTK + IMU |
| 地图 | Lanelet2 |
| 避障 | 2D/3D LiDAR |
| 控制 | CAN |
| 算力 | Orin Nano / x86 |
| 调度 | MQTT/Web |
Lanelet2
Lanelet2 = 自动驾驶用的“道路语义地图”
一个 lanelet 由什么组成?
| 元素 | 含义 |
|---|---|
| Left Bound | 左边界 |
| Right Bound | 右边界 |
| Centerline | 中心线 |
| Attributes | 限速/规则 |
问题
Lanelet2的问题不是技术落后,而是它设计目标不同:
❌ 它是“静态交通规则模型”
车道结构固定
语义明确
适合高速/园区结构道路
👉 本质:
“先验世界模型(offline world model)”
❌ 它不擅长:
临时施工
动态障碍
路面变化
未知区域
封闭园区 Autoware 完整技术方案
┌──────────────────────┐
│ 云端/调度中心 │
│ Fleet / 任务分配 / OTA │
└─────────┬────────────┘
│ MQTT/HTTP
↓
┌────────────────────────────────────────────────────────┐
│ 车端计算平台(Autoware) │
│ │
│ ┌──────────────┐ ┌────────────────────┐ │
│ │ 传感器层 │ │ 通信层(ROS2) │ │
│ │ │ │ │ │
│ │ LiDAR │──────▶│ │ │
│ │ Camera │──────▶│ │ │
│ │ IMU │──────▶│ │ │
│ │ RTK GNSS │──────▶│ │ │
│ └──────────────┘ └─────────┬──────────┘ │
│ │ │
│ ↓ │
│ ┌──────────────────────────────────────────────────┐ │
│ │ 感知层 Perception │ │
│ │ - LiDAR 检测(障碍物) │ │
│ │ - Camera 识别(行人/车辆) │ │
│ │ - Fusion(融合) │ │
│ └──────────────────────┬──────────────────────────┘ │
│ │ │
│ ↓ │
│ ┌──────────────────────────────────────────────────┐ │
│ │ 定位层 Localization │ │
│ │ - RTK GNSS │ │
│ │ - IMU │ │
│ │ - EKF 融合 │ │
│ │ - (可选)LiDAR map matching │ │
│ └──────────────────────┬──────────────────────────┘ │
│ │ │
│ ↓ │
│ ┌──────────────────────────────────────────────────┐ │
│ │ 地图层 Map (Lanelet2) │ │
│ │ - 车道拓扑 │ │
│ │ - 停车点 │ │
│ │ - 限速 │ │
│ │ - 路口关系 │ │
│ └──────────────────────┬──────────────────────────┘ │
│ │ │
│ ↓ │
│ ┌──────────────────────────────────────────────────┐ │
│ │ 行为规划 Behavior Planning │ │
│ │ - 路径选择 │ │
│ │ - 交通规则 │ │
│ │ - 停车 / 避让 / 等待 │ │
│ └──────────────────────┬──────────────────────────┘ │
│ │ │
│ ↓ │
│ ┌──────────────────────────────────────────────────┐ │
│ │ 轨迹规划 Planning │ │
│ │ - 全局路径(Lanelet2) │ │
│ │ - 局部轨迹生成 │ │
│ │ - 避障路径重规划 │ │
│ └──────────────────────┬──────────────────────────┘ │
│ │ │
│ ↓ │
│ ┌──────────────────────────────────────────────────┐ │
│ │ 控制 Control │ │
│ │ - MPC / PID │ │
│ │ - 速度控制 │ │
│ │ - 转向控制 │ │
│ └──────────────────────┬──────────────────────────┘ │
│ │ │
│ ↓ │
│ ┌──────────────────────────────────────────────────┐ │
│ │ 车辆执行层 Vehicle Interface │ │
│ │ - CAN 总线 │ │
│ │ - EPS / Brake / Throttle │ │
│ └──────────────────────────────────────────────────┘ │
└────────────────────────────────────────────────────────┘
硬件架构图
┌────────────────────────────────────────────────────────────┐
│ 云端/调度中心 │
│ - 任务分配 / 路线规划 / 车队管理 / OTA / 远程监控 │
└───────────────┬────────────────────────────────────────────┘
│ MQTT / HTTP / WebSocket
↓
┌────────────────────────────────────────────────────────────┐
│ 车端主计算盒(AMD x86) │
│ 推荐:Ryzen Embedded / Ryzen 7 / Ryzen 9 / EPYC D 系列 │
│ │
│ OS: Ubuntu 22.04 / ROS2 Humble / Autoware Universe │
│ │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ Autoware 主系统 │ │
│ │ │ │
│ │ ┌──────────────┐ ┌──────────────┐ │ │
│ │ │ 感知 Perception│ │ 定位 Localization│ │ │
│ │ │ LiDAR / Camera │ │ RTK + IMU + EKF│ │ │
│ │ └──────┬────────┘ └──────┬────────┘ │ │
│ │ │ │ │ │
│ │ └──────┬────────────┘ │ │
│ │ ↓ │ │
│ │ ┌──────────────────────────────┐ │ │
│ │ │ 规划 Planning │ │ │
│ │ │ Lanelet2 + Behavior + Traj │ │ │
│ │ └──────────────┬──────────────┘ │ │
│ │ ↓ │ │
│ │ ┌──────────────────────────────┐ │ │
│ │ │ 控制 Control │ │ │
│ │ │ PID / MPC / Speed control │ │ │
│ │ └──────────────┬──────────────┘ │ │
│ └─────────────────┼──────────────────────────────────┘ │
└─────────────────────┼────────────────────────────────────┘
│ ROS2 Topics
↓
┌────────────────────────────────────────────────────────────┐
│ 中间件 & 通信层(ROS2 DDS) │
│ - sensor topics │
│ - planning topics │
│ - control topics │
└─────────────────────┬────────────────────────────────────┘
│
┌─────────────────────▼────────────────────────────────────┐
│ 边缘I/O与实时控制层 │
│ │
│ ┌──────────────┐ ┌──────────────────────────┐ │
│ │ CAN Interface │─────▶│ 车辆控制 ECU │ │
│ │ SocketCAN │ │ EPS / Brake / Throttle │ │
│ └──────────────┘ └──────────────────────────┘ │
│ │
│ ┌──────────────┐ │
│ │ RTK GNSS │─────── NMEA / ROS2 │
│ └──────────────┘ │
│ │
│ ┌──────────────┐ │
│ │ IMU │─────── ROS2 sensor fusion │
│ └──────────────┘ │
│ │
│ ┌──────────────┐ │
│ │ LiDAR │─────── point cloud │
│ └──────────────┘ │
│ │
│ ┌──────────────┐ │
│ │ Camera │─────── perception AI │
│ └──────────────┘ │
└────────────────────────────────────────────────────────────┘
ROS2 节点级拆解图
┌──────────────────────────────────────────────────────────────┐
│ 🧠 1. 传感器节点层 │
└──────────────────────────────────────────────────────────────┘
[rtk_driver_node] → RTK GNSS数据
[imu_driver_node] → IMU角速度/加速度
[lidar_driver_node] → 点云数据
[camera_driver_node] → 图像(可选)
↓ ROS2 Topics
───────────────────────────────────────────────────────────────
┌──────────────────────────────────────────────────────────────┐
│ 📍 2. 定位与状态估计层 │
└──────────────────────────────────────────────────────────────┘
[ekf_localization_node]
输入:
/rtk/fix
/imu/data
/wheel/odometry
输出:
/localization/pose (车辆位姿)
↓
───────────────────────────────────────────────────────────────
┌──────────────────────────────────────────────────────────────┐
│ 🗺️ 3. 地图与全局规划层 │
└──────────────────────────────────────────────────────────────┘
[lanelet2_map_loader]
→ 加载园区地图
[route_planner_node]
输入:
start_pose
goal_pose
输出:
/planning/route (车道级路径)
↓
───────────────────────────────────────────────────────────────
┌──────────────────────────────────────────────────────────────┐
│ 🤖 4. 感知层(最小版) │
└──────────────────────────────────────────────────────────────┘
[lidar_obstacle_detection_node]
输入:
/lidar/points
输出:
/perception/obstacles
👉 只做一件事:
➜ 检测“哪里有障碍物”
(园区MVP不需要复杂AI)
↓
───────────────────────────────────────────────────────────────
┌──────────────────────────────────────────────────────────────┐
│ 🧭 5. 行为决策层(FSM) │
└──────────────────────────────────────────────────────────────┘
[behavior_fsm_node]
输入:
/planning/route
/perception/obstacles
/localization/pose
状态机:
DRIVE
STOP
WAIT
RESUME
PARK
输出:
/planning/behavior_state
↓
───────────────────────────────────────────────────────────────
┌──────────────────────────────────────────────────────────────┐
│ 📐 6. 局部规划层 │
└──────────────────────────────────────────────────────────────┘
[motion_planner_node]
输入:
route
obstacles
vehicle_state
输出:
/planning/trajectory
👉 作用:
生成“未来5~10秒走哪条轨迹”
↓
───────────────────────────────────────────────────────────────
┌──────────────────────────────────────────────────────────────┐
│ 🎯 7. 控制层(核心执行) │
└──────────────────────────────────────────────────────────────┘
[pid_controller_node] 或 [mpc_controller_node]
输入:
/planning/trajectory
输出:
/control/command
内容:
steering_angle
throttle
brake
↓
───────────────────────────────────────────────────────────────
┌──────────────────────────────────────────────────────────────┐
│ 🚗 8. 车辆接口层(你最熟) │
└──────────────────────────────────────────────────────────────┘
[vehicle_interface_node]
ROS2 → CAN
输出:
CAN Frame
控制:
EPS(方向)
Brake(刹车)
Throttle(油门)
↓
───────────────────────────────────────────────────────────────
┌──────────────────────────────────────────────────────────────┐
│ ☁️ 9. 车队/云端(非Autoware) │
└──────────────────────────────────────────────────────────────┘
[fleet_manager_node]
[teleop_node]
[logging_node]
功能:
- 任务下发
- 远程接管
- 数据回传
- OTA升级
深圳市幻尔科技
JetAuto 是一款基于 Jetson Nano 的教育机器人,能够识别道路标线、交通标志和障碍物,并自主导航。您可以亲身体验其 YOLOv5 深度学习模型,并使用其高性能编码器电机、激光雷达、3D 深度摄像头和 LCD 显示屏来探索世界。体验地图构建、路径规划、避障、人体识别与交互、语音交互等诸多功能。
| 层级 | JetAuto | Autoware |
|---|---|---|
| 定位 | 教育机器人项目 | 自动驾驶操作系统 |
| ROS层 | 有(简化版) | 有(完整系统) |
| 感知 | YOLO + LiDAR demo | 多传感器融合 |
| 规划 | 简单路径规划 | 行为+轨迹+优化 |
| 地图 | 栅格/SLAM | Lanelet2语义地图 |
| 车辆控制 | 电机控制 | CAN + 车规控制 |
主流“实时建图方案”有 4 类
SLAM + 局部栅格地图(最常见)
📦 代表系统
Nav2 Costmap(ROS2)
Autoware Occupancy Grid
Voxel Grid Mapping
🧠 核心思想
实时生成“局部可通行地图”
✔ 特点
实时更新(10–50Hz)
反映动态障碍
不需要先验地图
❌ 缺点
没有语义
没有道路结构
只能做避障
HD Map + 动态障碍层(Autoware主流)
📦 结构
Lanelet2(静态)
+ Costmap(动态)
🧠 核心思想
静态道路 + 实时障碍叠加
✔ 优点
工业标准(Autoware / Apollo)
稳定
可预测性强
❌ 缺点
仍然依赖 Lanelet2
不是真正“动态地图”
Semantic SLAM(语义SLAM)
📦 代表技术
Kimera
Voxel-based Semantic Mapping
ORB-SLAM3 + semantics
🧠 核心思想
SLAM + 物体分类(车/人/路/墙)
✔ 特点
有“语义”
可动态更新
可扩展自动驾驶
❌ 缺点
工程复杂
实时性差
不稳定
Neural / 3D Gaussian / Occupancy Network(前沿)
📦 代表
Occupancy Networks
Neural SLAM
3D Gaussian Splatting mapping
🧠 核心思想
用神经网络表示“可行驶空间”
✔ 优点
真正动态
可泛化
不依赖手工地图
❌ 缺点
还没工业落地
计算量大
Autoware不支持
当前市场比例
| 方案 | 占比 |
|---|---|
| HD Map(简化版) | ~40% |
| HD + 感知融合 | ~50% ⭐主流 |
| 无HD Map | ~10%(快速增长) |
新石器真实做法
🧭 Step 1:RTK采集车道
- 低速车跑园区
- RTK记录轨迹
- 多圈采样
GPS轨迹 = 车道中心线基础
🗺️ Step 2:自动生成“轻HD Map”
系统自动生成:
- 车道中心线
- 车道宽度
- 拓扑关系(路口)
✍️ Step 3:人工标注补充
补充:
- 停车点
- 路口优先级
- 限速
- 禁行区域
🔄 Step 4:持续更新(关键)
园区运行后:
- 车队回传轨迹
- 自动修正地图
地图 = 初始建图 + 车队数据迭代
如何去掉人工标注环节
| 方案 | 人工标注量 |
|---|---|
| 传统 Lanelet2 | 🔴 100%人工 |
| 新石器式轻HD Map | 🟡 10%人工 + 自动生成 |
| Mapless(BEV) | 🟢 0~5%人工(但换算法复杂度) |
RTAB-Map(Real-Time Appearance-Based Mapping)
一个“实时SLAM建图 + 定位 + 回环优化”的开源系统,让机器人在不知道地图的情况下边走边建图。
LiDAR / Camera / RTK
↓
RTAB-Map(SLAM)
↓
Occupancy Grid / BEV
↓
Costmap(融合)
↓
Planner(TEB / MPC)
↓
Control
详细架构
┌──────────────────────────────────────────────┐
│ 🚗 车端传感器层 │
│ LiDAR(激光雷达) / Camera(摄像头) / RTK / IMU │
└──────────────────────────────────────────────┘
↓
┌──────────────────────────────────────────────┐
│ 📍 SLAM与定位层 │
│ RTAB-Map / LIO-SAM / EKF融合 │
│ │
│ 功能: │
│ - 实时定位(我在哪) │
│ - 建立环境地图(空间结构) │
│ - 生成 map → odom 变换 │
└──────────────────────────────────────────────┘
↓
┌──────────────────────────────────────────────┐
│ 👁️ 感知与BEV语义理解层 │
│ Camera + LiDAR → BEV融合网络 │
│ │
│ 输出: │
│ - 可行驶区域(drivable area) │
│ - 动态障碍物(人/车/物体) │
│ - 隐式车道结构 │
└──────────────────────────────────────────────┘
↓
┌──────────────────────────────────────────────┐
│ 🗺️ Nav2 Costmap层(核心) │
│ │
│ 🔹 全局代价地图 global_costmap │
│ - 静态地图(SLAM或简化HD Map) │
│ │
│ 🔹 局部代价地图 local_costmap │
│ - BEV输出融合 │
│ - 实时障碍物 │
│ - 安全膨胀层(inflation layer) │
│ │
│ 本质: │
│ 👉 把世界变成“可走/不可走的风险地图” │
└──────────────────────────────────────────────┘
↓
┌──────────────────────────────────────────────┐
│ 🧭 Nav2 全局规划器(Planner Server) │
│ │
│ 常用算法: │
│ - Smac Planner(推荐) │
│ - A* / Hybrid A* │
│ │
│ 功能: │
│ 👉 从起点到目标点找一条“全局路径” │
└──────────────────────────────────────────────┘
↓
┌──────────────────────────────────────────────┐
│ 🎯 Nav2 局部控制器(Controller) │
│ │
│ 常用控制算法: │
│ - Regulated Pure Pursuit │
│ - DWB(动态窗口法) │
│ - MPPI(高级优化控制) │
│ │
│ 功能: │
│ 👉 把路径变成实时转向+速度控制 │
└──────────────────────────────────────────────┘
↓
┌──────────────────────────────────────────────┐
│ 🚗 底盘执行层 │
│ CAN控制 / 方向盘 / 电机 / 刹车 │
└──────────────────────────────────────────────┘
数据流动
传感器数据
↓
SLAM(RTAB-Map)
↓
定位(map → odom)
↓
BEV语义理解(看懂世界)
↓
Costmap(统一风险表达)
↓
Planner(找路)
↓
Controller(走路)
↓
车辆执行
Nav2内部结构
Nav2导航系统(Navigation2)
├── 📍 定位模块(Localization)
│ └── AMCL / EKF / SLAM融合
│
├── 🗺️ 代价地图模块(Costmap 2D)
│ ├── 全局地图(global_costmap)
│ ├── 局部地图(local_costmap)
│ └── 障碍物/膨胀层
│
├── 🧭 全局规划器(Planner Server)
│ ├── A* / Hybrid A*
│ └── Smac Planner
│
├── 🎯 局部控制器(Controller Server)
│ ├── Pure Pursuit
│ ├── DWB
│ └── MPPI
│
└── 🔁 行为树(Behavior Tree)
├── 路径失败重规划
├── 避障恢复
└── 到达目标管理
和AutoWare的区别
🚗 Nav2 是“机器人导航系统”,Autoware 是“自动驾驶软件栈(车规级)”。
| 系统 | 本质 |
|---|---|
| Navigation2 | 机器人“从A走到B” |
| Autoware | 车辆“像人一样开车” |
最大区别:有没有“语义驾驶层”
🟢 Nav2
只有 costmap
没有交通规则
没有车道语义
👉 本质:
❌ “我怎么避障走过去”
🔵 Autoware
有 Lanelet2地图
有交通规则
有车道拓扑
有优先级
👉 本质:
✔ “我应该像人一样合法开车”
地图体系差异(关键)
Nav2
Occupancy Grid(占据栅格)
+ SLAM map
+ BEV融合
👉 特点:
动态
不稳定
不语义化
Autoware
Lanelet2 / HD Map
👉 特点:
车道级
拓扑结构
交通规则
规划系统差异(核心差别)
🟢 Nav2
Planner:
A*
Hybrid A*
Smac
👉 输出:
一条“路径线”
🔵 Autoware
Planner分三层:
行为规划(Behavior)
↓
轨迹规划(Trajectory)
↓
控制(Lateral/Longitudinal)
👉 输出:
一条“带时间和速度的可执行轨迹”
适用场景完全不同
🟢 Nav2适合:
室内机器人
AGV
园区低速车
服务机器人
🔵 Autoware适合:
自动驾驶汽车
Robotaxi
城市场景
高速/复杂交通
行业真实最优解
Sensors
↓
SLAM(RTAB-Map / LIO-SAM)
↓
BEV感知(语义+动态障碍)
↓
轻语义地图(园区规则)
↓
行为决策层(FSM / rule engine) ← ⭐核心
↓
Nav2(只做局部规划)
↓
Controller(MPC / PID)
为什么没有“标准开源中间方案”?
❌ 1️⃣ 自动驾驶没有统一问题定义
园区 vs 城市 vs 仓库差异太大
❌ 2️⃣ 行为层太依赖业务
学校
工厂
小区
👉 规则完全不同
❌ 3️⃣ 公司都在“锁核心竞争力”
真正差异在:
🧠 behavior layer(没人开源)
行为决策层(FSM / rule engine)
🧠 FSM(有限状态机)就是园区低速无人车里“替代红绿灯 + 交通规则 + 人类常识”的那一层逻辑系统。
状态机(最小可用版本)
CRUISE → 正常行驶
SLOW_DOWN → 减速
STOP → 停车
WAIT → 路口等待
REPLAN → 重新规划
🧭 状态转换逻辑
CRUISE
├─> 行人靠近 → SLOW_DOWN
├─> 路口 → WAIT
├─> 路径阻塞 → REPLAN
SLOW_DOWN
├─> 安全 → CRUISE
├─> 风险增加 → STOP
STOP
├─> 行人离开 → CRUISE
WAIT
├─> 无冲突 → CRUISE
REPLAN
├─> 新路径生成 → CRUISE