# 法睿园区自动驾驶系统 `法睿园区自动驾驶系统`(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` 中的硬编码路径。