# drive **Repository Path**: rippleos/drive ## Basic Information - **Project Name**: drive - **Description**: MOSS 自动驾驶示例项目 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-05-10 - **Last Updated**: 2026-05-14 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # MOSS-Drive 自动驾驶中间件示例 基于 MOSS 中间件的自动驾驶系统演示,包含感知、定位、规划、控制、安全监控、可视化和指标监控 7 个节点。 ## 项目结构 ``` moss-drive/ ├── src/ # 节点源码 │ ├── perception_node/ # 感知节点 │ ├── localization_node/ # 定位节点 │ ├── planning_node/ # 规划节点 │ ├── control_node/ # 控制节点 │ ├── safety_monitor_node/ # 安全监控节点 │ ├── visualization_node/ # 可视化节点 │ └── metrics_node/ # 指标监控节点 (Prometheus) ├── proto/ # Protobuf 消息定义 ├── include/ # 公共头文件 ├── config/ # 配置文件 │ ├── moss_drive.json # 节点启动配置 │ └── metrics.json # 指标配置 ├── launch/ # 启动文件 ├── build/ # 构建目录 └── doc/ # 架构文档 ``` ## 构建模式 ### 模式 1: 仿真模式 (Simulation Mode) 仿真模式使用共享内存模拟节点间通信,**无需 MOSS 中间件依赖**。 ```bash # 创建构建目录 cd moss-drive mkdir -p build && cd build # 配置 (仿真模式) cmake .. -DSIMULATION_MODE=ON # 编译 cmake --build . -j4 # 运行 cd .. ./run_nodes.sh ``` ### 模式 2: MOSS 模式 (MOSS Mode) MOSS 模式使用真实的 MOSS 中间件进行 pub/sub 通信。 **前提条件**: 需要 MOSS 中间件库 (mshm, mdds, mruntime, mlog, mcom) ```bash # 创建构建目录 cd moss-drive mkdir -p build && cd build # 配置 (MOSS 模式) cmake .. -DSIMULATION_MODE=OFF -DMOSS_ROOT=/path/to/moss # 编译 cmake --build . -j4 # 运行 (需要设置 LD_LIBRARY_PATH) export LD_LIBRARY_PATH=/path/to/moss/mshm/build/src:/path/to/moss/mdds/build/src:... ./run_nodes.sh ``` ## MOSS 中间件依赖 MOSS 模式需要以下 MOSS 中间件组件: | 组件 | 路径 | 说明 | |------|------|------| | mshm | `${MOSS_ROOT}/mshm` | 共享内存公共模块 | | mdds | `${MOSS_ROOT}/mdds` | 数据分发服务 (DDS) | | mruntime | `${MOSS_ROOT}/mruntime` | 运行时基础库 | | mlog | `${MOSS_ROOT}/mlog` | 日志模块 | | mcom | `${MOSS_ROOT}/mcom` | 通信 API | 各模块编译方式: ```bash # 编译 mshm cd mshm && mkdir -p build && cd build cmake .. && make -j4 # 编译 mdds cd mdds && mkdir -p build && cd build cmake .. && make -j4 # 编译 mlog cd mlog && mkdir -p build && cd build cmake .. && make -j4 # 编译 mruntime cd mruntime && mkdir -p build && cd build cmake .. && make -j4 # 编译 mcom (依赖 proto) cd proto && mkdir -p build && cd build cmake .. && make -j4 cd ../mcom && mkdir -p build && cd build cmake .. && make -j4 ``` ## 节点说明 | 节点 | 发布 Topic | 订阅 Topic | 频率 | |------|-----------|-----------|------| | perception_node | `/perception/objects`, `/perception/lanes` | - | 20Hz | | localization_node | `/localization/pose` | - | 100Hz | | planning_node | `/planning/trajectory` | `/perception/*`, `/localization/*` | 10Hz | | control_node | `/control/cmd` | `/planning/trajectory` | 50Hz | | safety_monitor_node | `/safety/status` | 所有关键 Topic | 50Hz | | visualization_node | - | 所有 Topic | - | ## Topic 通信矩阵 ``` perception_node → planning_node, safety_monitor_node, visualization_node localization_node → planning_node, visualization_node planning_node → control_node, safety_monitor_node, visualization_node control_node → safety_monitor_node, visualization_node safety_monitor_node→ visualization_node ``` ## Proto 消息类型 | Topic | 消息类型 | 说明 | |-------|---------|------| | `/perception/objects` | `moss_drive::DetectedObjects` | 障碍物列表 | | `/perception/lanes` | `moss_drive::LaneMarkings` | 车道线 | | `/localization/pose` | `moss_drive::VehiclePose` | 车辆位姿 | | `/planning/trajectory` | `moss_drive::Trajectory` | 规划轨迹 | | `/control/cmd` | `moss_drive::ControlCommand` | 控制指令 | | `/safety/status` | `moss_drive::SafetyStatus` | 安全状态 | ## 常见问题 ### Q: 仿真模式编译失败 确保已安装依赖: ```bash sudo apt-get install cmake build-essential protobuf-compiler libprotobuf-dev ``` ### Q: MOSS 模式找不到库 设置 LD_LIBRARY_PATH: ```bash export LD_LIBRARY_PATH="/path/to/moss/build/*/lib:${LD_LIBRARY_PATH}" ``` ### Q: 运行节点时显示 "Killed" 可能是共享内存段不足,清理旧共享内存: ```bash ipcs -m # 查看共享内存 ipcrm -a # 清理所有共享内存 (需root) ``` ## 开发指南 ### 添加新节点 1. 在 `src/` 下创建节点目录 2. 编写 `CMakeLists.txt` (参考现有节点) 3. 在主 `CMakeLists.txt` 中添加 `add_subdirectory(src/新节点)` 4. 在 `run_nodes.sh` 中添加启动命令 ### 添加新 Topic 1. 在 `proto/moss_drive.proto` 中定义消息 2. 重新编译 proto 库 3. 在节点中使用 `node->create_publisher()` 或 `node->create_subscriber()` ## 性能监控 (mperf) MOSS-Drive 集成了 mperf 性能监控模块,提供 Prometheus 格式的指标导出。 ### 启动指标监控 ```bash # 启动 metrics_node ./build/src/metrics_node/metrics_node & # 访问 Prometheus 指标 curl http://localhost:9090/metrics ``` ### 可用指标 | 指标名 | 类型 | 说明 | |--------|------|------| | `moss_topic_published_bytes_total` | Counter | 发布的总字节数 | | `moss_topic_subscribed_bytes_total` | Counter | 订阅的总字节数 | | `moss_topic_latency_seconds` | Histogram | Topic 延迟分布 | | `moss_node_state` | Gauge | 节点状态 | | `moss_node_health_status` | Gauge | 节点健康状态 | | `moss_process_cpu_percent` | Gauge | 进程 CPU 使用率 | | `moss_process_memory_bytes` | Gauge | 进程内存使用 | ### Prometheus 配置 ```yaml # prometheus.yml scrape_configs: - job_name: 'moss_drive' static_configs: - targets: ['localhost:9090'] ``` ## 架构文档 详见 [doc/Architecture.md](doc/Architecture.md)