本仓库为实验室 ZzumtCar 小车的 ROS2 Humble 版本控制代码,核心实现「CAN总线通信、Livox激光雷达数据采集、车辆底盘控制、自定义消息交互」四大功能,适配实验室小车硬件平台,支持二次开发(如路径规划、避障算法集成)。
✅ 核心模块:CAN通信模块、Livox雷达驱动、车辆控制接口、自定义消息类型
✅ 适配系统:Ubuntu 22.04 LTS(ROS2 Humble 兼容系统)
✅ 硬件支持:Livox MID360/HAP 激光雷达、CAN总线底盘、电机控制器等
| 硬件名称 | 型号规格 | 用途 |
|---|---|---|
| 主控板 | NVIDIA Jetson Xavier NX/TX2 | 运行ROS2节点、处理雷达数据、下发控制指令 |
| 激光雷达 | Livox MID360 / HAP | 采集环境点云数据,用于定位与避障 |
| CAN总线模块 | USB-CAN 适配器(支持CAN 2.0) | 实现主控与底盘电机控制器的通信 |
| 车辆底盘 | 差分驱动底盘(带电机控制器) | 接收CAN指令,执行前进、转向、停止动作 |
| 电源模块 | 24V锂电池(带BMS保护) | 为主控、雷达、底盘供电 |
-
USB-CAN 适配器一端插入 NVIDIA 主控板的 USB 3.0 接口,另一端通过 CAN 总线线缆接入底盘电机控制器的 CAN 接口;
-
CAN 总线线缆需区分「CAN_H」和「CAN_L」:适配器的 CAN_H 接控制器的 CAN_H,CAN_L 接控制器的 CAN_L(接反会导致通信失败);
-
接入终端电阻(若总线长度超过 1m,需在总线两端接入 120Ω 终端电阻,确保通信稳定)。
-
Livox 雷达通过 Ethernet 网线接入 NVIDIA 主控板的网口(建议使用千兆网线);
-
雷达默认 IP 为
192.168.1.3,需将主控板网口 IP 手动设置为同一网段(如192.168.1.100,子网掩码255.255.255.0); -
雷达供电接入 12V 电源,开机后雷达指示灯为绿色(红色为异常)。
所有连接完成后,依次开启电源:锂电池 → 底盘控制器 → 主控板 → 雷达,检查各硬件指示灯是否正常(无报错)。
若未安装 ROS2 Humble,参考官方教程安装:ROS2 Humble 官方安装指南
安装完成后,配置 ROS2 环境变量(建议添加到 ~/.bashrc 中,避免每次手动配置):
echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc
source ~/.bashrc# CAN总线工具(用于调试CAN通信)
sudo apt update && sudo apt install -y can-utils
# 串口通信依赖(若用到串口调试)
sudo apt install -y python3-serial
# 编译工具
sudo apt install -y python3-colcon-common-extensions# 进入项目目录
cd ~/ros2_ws
# 安装Python依赖(若项目用到额外库,如pandas、numpy)
pip3 install pyserial pandas numpy --user本仓库已集成 Livox ROS2 核心驱动,无需额外安装,编译时会自动构建。
# 进入ROS2工作空间的src目录
cd ~/ros2_ws/src
# 克隆仓库(SSH方式,需配置GitHub SSH密钥)
git clone git@github.com:hvcrown/ZzumtCar.git
# 回到工作空间根目录
cd ..# 编译整个工作空间(--symlink-install 支持Python脚本热更新)
colcon build --symlink-install
# 编译完成后,加载工作空间环境变量
source install/setup.bash若编译报错:「缺少某模块依赖」,需先安装对应依赖(如 sudo apt install ros-humble-xxx),再重新编译。
# 先配置CAN接口(USB-CAN适配器默认接口为can0)
sudo ip link set can0 up type can bitrate 500000
# 启动CAN监听节点
ros2 run can_sim_demo can_listener运行成功后,终端会输出底盘状态数据(如速度、转向角度、电池电压)。
# 启动MID360雷达(根据雷达型号选择启动文件)
ros2 launch livox_ros_driver2 launch_ROS2/rviz_MID360_launch.py
# 若为HAP雷达,启动以下命令
# ros2 launch livox_ros_driver2 launch_ROS2/rviz_HAP_launch.py运行成功后,会自动打开 RViz 界面,显示雷达点云数据。
# 启动键盘控制节点
ros2 run vehicle_can_interface keyboard_control按照终端提示操作键盘:W(前进)、S(后退)、A(左转)、D(右转)、空格(停止)。
若需同时启动所有节点,可在src/vehicle_can_interface/launch/ 目录下创建 all_nodes_launch.py,整合所有节点启动逻辑,示例:
from launch import LaunchDescription
from launch_ros.actions import Node
def generate_launch_description():
return LaunchDescription([
# CAN监听节点
Node(
package='can_sim_demo',
executable='can_listener',
name='can_listener_node'
),
# Livox雷达节点
Node(
package='livox_ros_driver2',
executable='livox_ros_driver2_node',
name='livox_lidar_node',
parameters=[{'device_type': 'MID360'}]
),
# 键盘控制节点
Node(
package='vehicle_can_interface',
executable='keyboard_control',
name='keyboard_control_node'
)
])启动一键启动文件:
ros2 launch vehicle_can_interface all_nodes_launch.py
ZzumtCar/
├── src/
│ ├── can_sim_demo/ # CAN总线通信模块
│ │ ├── can_sim_demo/ # Python节点(CAN监听、发送)
│ │ ├── test/ # 测试脚本(版权、代码规范检查)
│ │ ├── tools/ # 辅助工具(CAN接口封装)
│ │ ├── CMakeLists.txt # 编译配置文件
│ │ └── package.xml # 包信息与依赖配置
│ │
│ ├── livox_ros_driver2/ # Livox激光雷达ROS2驱动
│ │ ├── 3rdparty/ # 第三方依赖(rapidjson)
│ │ ├── config/ # 雷达配置文件(MID360/HAP)
│ │ ├── launch_ROS2/ # 雷达启动文件
│ │ ├── msg/ # 雷达自定义消息
│ │ ├── src/ # 驱动核心代码(C++)
│ │ └── package_ROS2.xml # 驱动包配置
│ │
│ ├── vehicle_can_interface/ # 车辆控制接口模块
│ │ ├── launch/ # 启动文件
│ │ ├── demos/ # 控制示例(自动行驶、转向)
│ │ ├── vehicle_can_interface/ # 控制核心代码
│ │ └── package.xml # 包配置
│ │
│ └── vehicle_can_msg/ # 自定义ROS2消息类型
│ ├── msg/ # 消息定义(车辆指令、状态)
│ └── package.xml # 消息包配置
│
├── .gitignore # Git忽略文件配置(过滤编译产物、大文件)
├── .gitattributes # Git LFS配置(已失效,仅留备份)
└── README.md # 项目说明文档(本文档)
-
检查 CAN 接口是否正常识别:
ls /dev/can0(无输出则说明适配器未识别,重新插拔USB); -
检查 CAN 接口是否启动:
ip link show can0(显示「UP」则正常,否则重新执行sudo ip link set can0 up type can bitrate 500000); -
检查 CAN 总线接线:确认 CAN_H 与 CAN_L 未接反,终端电阻是否接入。
-
检查雷达供电:指示灯是否为绿色(红色需重启雷达);
-
检查网络配置:主控板网口 IP 是否与雷达在同一网段(如 192.168.1.x);
-
测试网络连通性:
ping 192.168.1.50(雷达默认IP),能ping通则网络正常。
-
检查依赖是否安装完整:根据报错信息安装对应依赖(如 ros-humble-xxx);
-
清理编译缓存:
rm -rf build/ install/ log/,重新编译; -
检查 Python 版本:确保使用 Python 3.10+(ROS2 Humble 兼容版本)。
-
主分支(master):仅存放稳定可运行的代码,禁止直接在主分支修改;
-
开发分支(dev):用于团队协作开发,所有新功能先提交到 dev 分支;
-
个人分支(如 feature/xxx):每人创建自己的功能分支,开发完成后合并到 dev 分支,再由负责人合并到 master。
提交代码时,commit 信息需清晰描述修改内容,格式:类型:修改说明
类型可选:feat(新增功能)、fix(修复bug)、docs(修改文档)、refactor(重构代码)、test(添加测试)
示例:feat:新增CAN总线转向控制指令、fix:修复雷达点云数据丢失问题
-
Python 代码:遵循 PEP8 规范,使用
flake8工具检查(仓库已集成 test_flake8.py 测试脚本); -
C++ 代码:遵循 ROS 代码规范,变量名、函数名清晰易懂;
-
新增模块时,需在 README 中补充模块说明和使用方法。
若遇到问题,可联系仓库维护者:
GitHub:hvcrown(https://github.com/hvcrown) 以及其余开发工程师 实验室:郑州大学工业智能与工业软件联合实验室