Go to file
2026-02-02 13:19:41 +08:00
routes 0129 2026-01-29 17:06:08 +08:00
src 修正前进后退档位上报相反的问题 2026-02-02 13:19:41 +08:00
.clang-format 拆分节点逻辑与业务逻辑 2026-01-13 16:14:55 +08:00
.cmake-format.yaml 拆分节点逻辑与业务逻辑 2026-01-13 16:14:55 +08:00
.gitignore 更新gitignore 2026-01-21 13:29:42 +08:00
can.sh first commit 2025-10-30 11:10:23 +08:00
config.json 修改task_manager节点获取vid和话题的方式 2026-01-19 14:36:36 +08:00
gps_load_now.txt 0129 2026-01-29 17:06:08 +08:00
prepare.sh humble分支 修改rtk串口号 2025-11-06 14:13:35 +08:00
radio_ctrl.sh 修改启动脚本,增加vehicle_params_node 2026-01-20 10:22:20 +08:00
README.md docs: 完善 README 文档,补充项目架构、功能模块、配置说明等完整信息 2026-01-30 10:50:35 +08:00
remote_ctrl.sh 修改启动脚本,增加vehicle_params_node 2026-01-20 10:22:20 +08:00
start_all.sh 修改启动方式 2026-01-30 09:30:02 +08:00

ZXOS

项目概述

智行智驾低速自主驾驶体系 -- 车端 ROS2 固件ZXOS。该固件适配 ZX200/ZX800 自主智能清扫车,提供完整的自主驾驶、感知、控制和通信功能。

项目特点

  • 模块化架构:清晰的功能模块划分,易于维护和扩展
  • 多控制源支持:无线遥控器、远程控制、自主驾驶三种模式
  • 安全机制:超时自动刹车、故障检测和上报
  • 实时通信MQTT 协议实现车云通信
  • 感知融合:激光雷达 + RTK GPS 定位
  • 可扩展性:支持 ROS2 生态系统,易于添加新功能
  • 统一日志系统:所有节点使用统一的 Logger 系统

依赖环境

系统环境

  • ROS2 版本ROS2 Humble Hawksbill
  • Ubuntu 版本Ubuntu 22.04 LTS
  • 编译工具CMake 3.8+
  • 编程语言C++主要、Python辅助

项目结构

/home/ubuntu/project/zxwl/sweeper/sweeper_200/
├── README.md                 # 项目主文档
├── start_all.sh              # 启动所有节点的脚本
├── remote_ctrl.sh            # 启动远程控制模式的脚本
├── radio_ctrl.sh             # 启动无线遥控器模式的脚本
├── prepare.sh                # 系统准备脚本
├── can.sh                    # CAN 总线配置脚本
├── config.json               # 全局配置文件
├── gps_load_now.txt          # GPS 数据文件
├── .clang-format             # C++ 代码格式化配置
├── .cmake-format.yaml        # CMake 格式化配置
├── .gitignore                # Git 忽略文件
├── routes/                   # 路径数据目录
│   └── gps_load_*.txt        # GPS 路径文件17个
├── src/                      # 源代码目录
│   ├── autonomy/             # 自主驾驶模块
│   ├── base/                 # 基础模块
│   ├── common/               # 通用组件
│   ├── communication/        # 通信模块
│   ├── control/              # 控制模块
│   └── perception/           # 感知模块
└── .git/                     # Git 仓库

核心功能模块

1. 基础模块Base

位置/home/ubuntu/project/zxwl/sweeper/sweeper_200/src/base/

sweeper_interfaces自定义接口

  • 功能:定义项目所需的 ROS2 自定义消息和服务接口
  • 主要消息类型
    • CanFrame.msg - CAN 帧数据
    • DetectLine.msg - 检测线数据
    • Fu.msg - 浮动障碍物数据
    • McCtrl.msg - 电机控制指令
    • Pl.msg - 路径规划数据
    • Route.msg - 路径数据
    • Rtk.msg - RTK GPS 数据
    • Sub.msg - 订阅数据
    • Task.msg - 任务数据
    • VehicleIdentity.msg - 车辆身份信息

vehicle_params车辆参数

  • 功能:管理车辆的物理参数和配置信息
  • 参数类型:车辆尺寸、最大速度、加速度等

mc电机控制

  • 功能:直接控制车辆的电机系统
  • 通信方式CAN 总线通信
  • 核心功能:接收控制指令,驱动车辆运动

2. 控制模块Control

位置/home/ubuntu/project/zxwl/sweeper/sweeper_200/src/control/

ctrl_arbiter控制仲裁器

  • 功能:控制源仲裁和安全管理
  • 控制优先级:无线遥控器 > 远程控制 > 自主驾驶
  • 安全机制200ms 超时机制,超时后自动发布刹车指令
  • 核心逻辑:从三个控制源接收指令,根据优先级选择执行

radio_ctrl无线遥控器控制

  • 功能:处理无线遥控器的控制指令
  • 通信方式:串口通信
  • 操作方式:支持前进、后退、转向、速度调节等

remote_ctrl远程控制

  • 功能:处理远程服务器的控制指令
  • 通信方式MQTT 协议
  • 操作方式:支持远程指令和任务控制

3. 自主驾驶模块Autonomy

位置/home/ubuntu/project/zxwl/sweeper/sweeper_200/src/autonomy/

fu浮动障碍物检测

  • 功能:检测和识别浮动障碍物
  • 感知技术:激光雷达 + 路径规划
  • 处理逻辑:根据障碍物位置调整路径

pl路径规划

  • 功能:规划车辆的行驶路径
  • 技术特点:基于 GPS 路径的动态规划
  • 路径优化:考虑障碍物和车辆动力学

route路径管理

  • 功能:管理和加载 GPS 路径数据
  • 路径存储routes/ 目录下的文本文件
  • 数据格式GPS 坐标序列

4. 感知模块Perception

位置/home/ubuntu/project/zxwl/sweeper/sweeper_200/src/perception/

airy激光雷达驱动

  • 功能:激光雷达数据采集和处理
  • 支持型号RSLIDAR 系列激光雷达
  • SDKRSLIDAR SDK
  • 数据类型:点云数据

rslidar_pointcloud_merger点云合并

  • 功能:合并多个激光雷达的点云数据
  • 技术特点:空间坐标转换和数据融合
  • 输出:统一坐标系的点云数据

rtkRTK GPS 定位)

  • 功能:提供高精度 GPS 定位
  • 定位精度:厘米级定位
  • 通信方式:串口通信

5. 通信模块Communication

位置/home/ubuntu/project/zxwl/sweeper/sweeper_200/src/communication/

mqtt_reportMQTT 报告系统)

  • 功能:向云端服务器上报车辆状态
  • 上报内容:位置、速度、姿态、传感器数据等
  • 通信协议MQTT

subMQTT 订阅系统)

  • 功能:接收云端服务器的指令
  • 支持指令:控制指令、任务指令、参数更新等
  • 通信协议MQTT

task_manager任务管理

  • 功能:管理和执行清扫任务
  • 任务类型:路径清扫、区域清扫、定时任务等
  • 调度机制:任务队列管理

6. 通用组件Common

位置/home/ubuntu/project/zxwl/sweeper/sweeper_200/src/common/

launch_system启动系统

  • 功能:统一管理 ROS2 节点的启动
  • 启动文件start_all.launch.py - 启动所有节点
  • 特性支持节点自动重启respawn=True

logger日志系统

  • 功能:统一的日志管理和输出
  • 日志级别DEBUG、INFO、WARN、ERROR、FATAL
  • 输出方式:控制台输出 + 文件记录

启动方式

1. 系统准备

在启动前,需要确保系统环境已正确配置:

./prepare.sh

功能

  • 配置 CAN 总线
  • 设置串口权限
  • 配置网络路由
  • 检查系统依赖

2. 无线遥控器模式

启动无线遥控器控制模式:

./radio_ctrl.sh

启动节点

  • vehicle_params → radio_ctrl → mc → ctrl_arbiter → mqtt_report

适用场景:近距离直接操作车辆

3. 远程控制模式

启动远程控制模式:

./remote_ctrl.sh

启动节点

  • vehicle_params → remote_ctrl → mc → ctrl_arbiter → mqtt_report

适用场景:远程监控和操作车辆

4. 全部节点启动

启动所有节点,包括完整的自主驾驶功能:

./start_all.sh

启动节点:所有 13+ 个 ROS2 节点

功能

  • 完整的感知系统(激光雷达 + RTK GPS
  • 自主驾驶功能(路径规划 + 障碍物检测)
  • 通信系统MQTT 上报 + 远程控制)
  • 控制系统(控制仲裁 + 电机控制)

适用场景:完全自主作业

配置文件

config.json全局配置

位置:项目根目录

主要配置项

{
  "mqtt": {
    "external_net_address": "36.153.162.171",
    "external_net_port": 19683,
    "username": "zxwl",
    "password": "zxwl1234@"
  },
  "detect_line_tolerance": 0.2,
  "detect_head_tolerance": 0.1,
  "lidar_detect_locate": {
    "front": 5.0,
    "rear": 2.0,
    "left": 1.5,
    "right": 1.5
  }
}

配置说明

  • mqttMQTT 服务器配置
  • detect_line_tolerance:路径检测的横向容忍度(米)
  • detect_head_tolerance:路径检测的航向容忍度(弧度)
  • lidar_detect_locate:激光雷达检测范围(米)

routes/(路径数据)

位置:项目根目录

文件格式

39.123456,116.123456
39.123457,116.123457
39.123458,116.123458

内容说明

  • 每行代表一个 GPS 坐标点
  • 格式:纬度,经度
  • 用于路径规划和导航

开发环境搭建

1. 安装 ROS2 Humble

# 按照 ROS2 Humble 官方文档安装
# https://docs.ros.org/en/humble/Installation/Ubuntu-Install-Debians.html

2. 克隆项目

git clone <项目地址>
cd sweeper_200

3. 编译项目

colcon build --symlink-install

4. 激活环境

source install/setup.bash

5. 运行项目

# 查看可用的启动文件
ros2 launch common_launch start_all.launch.py

通信协议

MQTT 通信

服务器配置config.json

  • 地址:36.153.162.171
  • 端口:19683
  • 用户名:zxwl
  • 密码:zxwl1234@

主要主题

  • vehicle/status:车辆状态上报
  • vehicle/control:远程控制指令
  • vehicle/task:任务指令

ROS2 消息接口

基础接口sweeper_interfaces

  • McCtrl.msg:电机控制指令
  • Rtk.msgRTK 定位数据
  • Pl.msg:路径规划数据
  • Fu.msg:障碍物数据
  • 其他自定义消息

安全机制

1. 控制超时保护

  • 超时时间200ms
  • 保护机制:如果超过超时时间未收到控制指令,自动发布刹车指令
  • 实现位置ctrl_arbiter 节点

2. 异常检测

  • 系统监控:实时监控各个传感器状态
  • 故障上报:异常情况通过 MQTT 上报到云端
  • 安全响应:根据故障类型采取相应的安全措施

3. 控制优先级

  • 第一优先级:无线遥控器(最高)
  • 第二优先级:远程控制
  • 第三优先级:自主驾驶(最低)

部署和运行

1. 部署到目标车辆

# 在开发环境编译
colcon build --symlink-install

# 将编译后的文件传输到目标车辆
rsync -av install/ <目标车辆IP>:~/sweeper_200/install/

2. 运行监控

# 查看 ROS2 节点状态
ros2 node list

# 查看主题列表
ros2 topic list

# 查看主题数据
ros2 topic echo /topic_name

# 查看节点信息
ros2 node info /node_name

3. 调试方法

# 查看日志输出
ros2 run logger logger_node --ros-args --log-level debug

# 使用 rqt 工具
rqt_graph  # 查看节点图
rqt_plot   # 数据可视化
rqt_console # 查看日志

常见问题

Q1无法启动节点

可能原因

  • 系统依赖未安装
  • ROS2 环境未激活
  • 权限问题(如串口权限)

解决方法

# 检查依赖
rosdep install --from-paths src --ignore-src -r -y

# 激活环境
source /opt/ros/humble/setup.bash
source install/setup.bash

# 设置权限
sudo chmod 666 /dev/ttyUSB*
sudo chmod 666 /dev/can*

Q2无法连接 MQTT 服务器

可能原因

  • 网络连接问题
  • MQTT 配置错误
  • 防火墙设置

解决方法

# 检查网络连接
ping 36.153.162.171

# 检查 MQTT 配置
cat config.json

# 检查防火墙
sudo ufw allow 19683/tcp

Q3激光雷达数据异常

可能原因

  • 激光雷达未连接
  • 驱动未正确安装
  • 通信故障

解决方法

# 检查激光雷达连接
lsusb  # 查看 USB 设备
dmesg | grep ttyUSB  # 查看串口

# 检查激光雷达状态
ros2 topic echo /rslidar_points

项目文档

1. 模块文档

  • src/common/logger/README.md - 日志系统文档
  • src/perception/airy/rslidar_sdk-main/src/rs_driver/README.md - 激光雷达 SDK 文档(含中文)

2. 代码规范

  • C++ 规范:使用 .clang-format 配置
  • CMake 规范:使用 .cmake-format.yaml 配置
  • Python 规范:遵循 PEP8 规范

贡献指南

1. 代码风格

  • 严格遵守项目的代码风格规范
  • 提交前进行代码格式化

2. 提交规范

<type>(<scope>): <subject>

<body>

<footer>

type 类型

  • feat新功能
  • fix修复
  • docs文档更新
  • style代码格式修改
  • refactor重构
  • test测试更新
  • chore构建过程或辅助工具的变动

3. 分支管理

  • master:主分支,稳定版本
  • develop:开发分支,包含最新功能
  • feature/xxx:功能开发分支
  • hotfix/xxx:紧急修复分支

联系方式

如有问题或建议,可通过以下方式联系:

  • 项目维护团队:[团队名称]
  • 邮箱:[邮箱地址]
  • 问题反馈:通过 GitHub Issues 提交

许可证

[项目许可证信息]


文档最后更新时间2024年1月

版本v1.0