Files
FaRui_Campus_ADS/README.md
T
2026-06-05 14:20:30 +08:00

248 lines
7.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 法睿园区自动驾驶系统
`法睿园区自动驾驶系统`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` 中的硬编码路径。