248 lines
7.5 KiB
Markdown
248 lines
7.5 KiB
Markdown
# 法睿园区自动驾驶系统
|
||
|
||
`法睿园区自动驾驶系统`(FaRui Campus Autonomous Driving System)是一个面向园区实车部署的 ROS 2 工作空间。当前代码按双 Orin 主从域控架构组织:主控板负责上层算法和任务工具,从控板负责车辆接口、CAN、控制和安全反馈。
|
||
|
||
## 项目标识
|
||
|
||
| 项 | 值 |
|
||
| --- | --- |
|
||
| 正式名称 | 法睿园区自动驾驶系统 |
|
||
| 英文名称 | FaRui Campus Autonomous Driving System |
|
||
| 简称 | FaRui Campus ADS |
|
||
| 工作空间 ID | `farui_campus_ads` |
|
||
| 代码版本 | `v3.2` |
|
||
|
||
|
||
## 架构概览
|
||
|
||
系统分为 `master/` 和 `slave/` 两个可独立编译、独立启动的 ROS 2 工作空间。
|
||
两端通过 ROS 2 DDS 通信,主从板通常使用 CycloneDDS 和固定 `ROS_DOMAIN_ID`
|
||
进行发现。
|
||
|
||
| 模块 | Master Orin | Slave Orin |
|
||
| --- | --- | --- |
|
||
| 地图、感知、定位、规划 | 是 | 否 |
|
||
| 传感器驱动、点云容器 | 是 | 否 |
|
||
| API、RViz、任务路线工具 | 是 | 否 |
|
||
| Control 控制模块 | 否 | 是 |
|
||
| SocketCAN、ECAR CAN 驱动 | 否 | 是 |
|
||
| 车辆状态、速度转换、system 反馈 | 否 | 是 |
|
||
| 心跳监控、MRM 相关安全反馈 | 否 | 是 |
|
||
|
||
主要跨板话题包括:
|
||
|
||
| 话题 | 方向 | 用途 |
|
||
| --- | --- | --- |
|
||
| `/planning/scenario_planning/trajectory` | Master -> Slave | 规划轨迹输入控制 |
|
||
| `/localization/kinematic_state` | Master -> Slave | 定位状态同步 |
|
||
| `/sensing/vehicle_velocity_converter/twist_with_covariance` | Slave -> Master | 车速反馈给定位链路 |
|
||
| `/system/operation_mode/state` | Slave -> Master | 运行模式状态反馈 |
|
||
| `/vehicle/status/*` | Slave -> Master | 车辆底盘状态反馈 |
|
||
| `/control/command/control_cmd` | Slave 内部 | 控制模块到车辆接口 |
|
||
|
||
## 目录结构
|
||
|
||
```text
|
||
.
|
||
├── master/ # 主控板工作空间
|
||
│ ├── src/ # 上层算法、驱动、UI、地图、规划等 ROS 包
|
||
│ ├── debug/ # 主控板调试脚本
|
||
│ ├── build.sh # 主控板编译入口
|
||
│ ├── run_ecar_master_debug.sh
|
||
│ └── run_preset_route_real_vehicle.sh
|
||
├── slave/ # 从控板工作空间
|
||
│ ├── src/ # 控制、车辆接口、CAN、system 等 ROS 包
|
||
│ ├── debug/ # 从控板诊断脚本
|
||
│ ├── build.sh # 从控板编译入口
|
||
│ └── run_slave_real_vehicle.sh
|
||
└── README.md
|
||
```
|
||
|
||
核心 launch 包位于:
|
||
|
||
- `master/src/Launcher/farui_launch`
|
||
- `slave/src/Launcher/farui_launch`
|
||
|
||
主从实车启动文件为:
|
||
|
||
- `master/src/Launcher/farui_launch/launch/ecar_master.launch.xml`
|
||
- `slave/src/Launcher/farui_launch/launch/ecar_slave.launch.xml`
|
||
|
||
## 编译
|
||
|
||
分别在主控板和从控板进入对应工作空间执行编译脚本。脚本内部使用
|
||
`colcon build --symlink-install --cmake-args -DCMAKE_BUILD_TYPE=Release`,并开启
|
||
CUDA 编译相关配置。
|
||
|
||
主控板:
|
||
|
||
```bash
|
||
cd /home/nvidia/FaRui/v3.2/master
|
||
./build.sh
|
||
```
|
||
|
||
从控板:
|
||
|
||
```bash
|
||
cd /home/nvidia/FaRui/v3.2/slave
|
||
./build.sh
|
||
```
|
||
|
||
如果只想编译部分包,可以按脚本内注释打开 `--packages-select`。
|
||
|
||
## 实车启动
|
||
|
||
建议先启动从控板,再启动主控板。这样车辆接口、CAN、控制和 system 状态先就绪,
|
||
主控板启动规划和任务工具后可以直接收到车辆反馈。
|
||
|
||
### 1. 启动从控板
|
||
|
||
```bash
|
||
cd /home/nvidia/FaRui/v3.2/slave
|
||
./run_slave_real_vehicle.sh
|
||
```
|
||
|
||
可选位置参数:
|
||
|
||
```bash
|
||
./run_slave_real_vehicle.sh [车型] [CAN接口] [CAN波特率]
|
||
```
|
||
|
||
常用环境变量:
|
||
|
||
| 变量 | 默认值 | 说明 |
|
||
| --- | --- | --- |
|
||
| `SLAVE_VEHICLE_MODEL` | `ecar_vehicle` | 车型 |
|
||
| `SLAVE_CAN_INTERFACE` | `can1` | CAN 接口 |
|
||
| `SLAVE_CAN_BITRATE` | `500000` | CAN 波特率 |
|
||
| `SLAVE_CONFIGURE_CAN` | `false` | 是否由脚本执行 `sudo ip link` 配置 CAN |
|
||
| `SLAVE_LAUNCH_HEARTBEAT` | `true` | 是否启动主控板心跳监控 |
|
||
| `SLAVE_LAUNCH_SYSTEM` | `true` | 是否启动 system 反馈栈 |
|
||
|
||
### 2. 启动主控板调试栈
|
||
|
||
只启动主控板核心运行栈,不启动预设路线 UI:
|
||
|
||
```bash
|
||
cd /home/nvidia/FaRui/v3.2/master
|
||
./run_ecar_master_debug.sh
|
||
```
|
||
|
||
可选位置参数:
|
||
|
||
```bash
|
||
./run_ecar_master_debug.sh [地图目录] [是否启动RViz] [车型]
|
||
```
|
||
|
||
默认地图目录为 `/home/nvidia/FaRui-test/map/School06`,默认 RViz 为 `true`。
|
||
|
||
### 3. 启动主控板和预设路线工具
|
||
|
||
```bash
|
||
cd /home/nvidia/FaRui/v3.2/master
|
||
./run_preset_route_real_vehicle.sh
|
||
```
|
||
|
||
默认模式是 `ui-only`,只打开预设路线 UI,不启动主板核心运行栈。完整参数为:
|
||
|
||
```bash
|
||
./run_preset_route_real_vehicle.sh [模式] [站点文件] [是否启动RViz] [地图目录] [车型]
|
||
```
|
||
|
||
支持模式:
|
||
|
||
| 模式 | 说明 |
|
||
| --- | --- |
|
||
| `ui-only` | 只启动预设路线 UI |
|
||
| `none` | 启动主板核心运行栈,不启动额外路线工具 |
|
||
| `record` | 启动站点记录工具 |
|
||
| `replay` | 启动预设路线发送工具 |
|
||
| `mission` | 启动站点任务管理器 |
|
||
|
||
示例:
|
||
|
||
```bash
|
||
# 只启动主板核心运行栈,不启动路线工具
|
||
./run_preset_route_real_vehicle.sh none
|
||
|
||
# 启动主板核心运行栈 + 站点任务管理器
|
||
./run_preset_route_real_vehicle.sh mission
|
||
|
||
# 指定地图并关闭 RViz
|
||
./run_preset_route_real_vehicle.sh mission "" false /home/nvidia/FaRui-test/map/School06
|
||
```
|
||
|
||
## 双 Orin 网络与 DDS
|
||
|
||
双 Orin 配置文件在两端都有副本:
|
||
|
||
- `master/env_config/dual_orin`
|
||
- `slave/env_config/dual_orin`
|
||
|
||
主要内容:
|
||
|
||
| 路径 | 作用 |
|
||
| --- | --- |
|
||
| `dds/cyclonedds_dual_orin.xml` | CycloneDDS 配置 |
|
||
| `netplan/master-netplan.yaml` | 主控板静态 IP 示例 |
|
||
| `netplan/slave-netplan.yaml` | 从控板静态 IP 示例 |
|
||
| `netplan/hosts` | `/etc/hosts` 示例 |
|
||
| `scripts/setup_master.sh` | 主控板一键配置脚本 |
|
||
| `scripts/setup_slave.sh` | 从控板一键配置脚本 |
|
||
| `scripts/setup_dds.sh` | DDS 配置辅助脚本 |
|
||
| `scripts/test_connection.sh` | 网络连通性测试 |
|
||
| `scripts/heartbeat_monitor.sh` | 从控板心跳监控 |
|
||
|
||
典型环境变量:
|
||
|
||
```bash
|
||
export ROS_DOMAIN_ID=42
|
||
export RMW_IMPLEMENTATION=rmw_cyclonedds_cpp
|
||
export CYCLONEDDS_URI=file:///opt/cyclonedds.xml
|
||
export VEHICLE_ID=ecar_001
|
||
```
|
||
|
||
## 开机配置
|
||
|
||
`master/env_config` 和 `slave/env_config` 提供 systemd 开机配置模板,主要用于:
|
||
|
||
- 配置 CAN 接口
|
||
- 配置串口权限
|
||
- 按顺序执行 `startup.d/` 下的启动脚本
|
||
- 记录 `startup.log`
|
||
|
||
安装服务前先检查 `env_config/config.sh` 中的路径是否指向当前工作空间。
|
||
|
||
## 调试与检查
|
||
|
||
常用诊断入口:
|
||
|
||
```bash
|
||
# 主控板规划链路检查
|
||
cd /home/nvidia/FaRui/v3.2/master
|
||
./debug/check_planning_pipeline.sh
|
||
|
||
# 从控板 control、system、CAN 链路检查
|
||
cd /home/nvidia/FaRui/v3.2/slave
|
||
./debug/check_system_driver_pipeline.sh
|
||
```
|
||
|
||
常用 ROS 检查命令:
|
||
|
||
```bash
|
||
ros2 node list
|
||
ros2 topic list
|
||
ros2 topic echo /planning/scenario_planning/trajectory
|
||
ros2 topic echo /system/operation_mode/state
|
||
ros2 topic echo /vehicle/status/velocity_status
|
||
```
|
||
|
||
## 注意事项
|
||
|
||
- `master/` 和 `slave/` 是两个独立 ROS 2 工作空间,编译和启动时应分别进入对应目录。
|
||
- 主从板必须使用一致的 `ROS_DOMAIN_ID`、RMW 实现和 DDS 配置。
|
||
- 实车启动前确认地图目录、车型配置、CAN 接口、车辆标定文件均存在。
|
||
- 从控板默认不自动配置 CAN。需要脚本配置 CAN 时设置 `SLAVE_CONFIGURE_CAN=true`。
|
||
- 当前工作空间路径为 `/home/nvidia/FaRui/v3.2`;如果复制到其他路径,需要同步检查脚本和
|
||
`env_config/config.sh` 中的硬编码路径。
|