Skip to content

Zhang-zu-hao/ZzumtCar

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 

Repository files navigation

一、项目概述

本仓库为实验室 ZzumtCar 小车的 ROS2 Humble 版本控制代码,核心实现「CAN总线通信、Livox激光雷达数据采集、车辆底盘控制、自定义消息交互」四大功能,适配实验室小车硬件平台,支持二次开发(如路径规划、避障算法集成)。

✅ 核心模块:CAN通信模块、Livox雷达驱动、车辆控制接口、自定义消息类型
✅ 适配系统:Ubuntu 22.04 LTS(ROS2 Humble 兼容系统)
✅ 硬件支持:Livox MID360/HAP 激光雷达、CAN总线底盘、电机控制器等

二、硬件清单与连接说明

2.1 硬件清单

硬件名称 型号规格 用途
主控板 NVIDIA Jetson Xavier NX/TX2 运行ROS2节点、处理雷达数据、下发控制指令
激光雷达 Livox MID360 / HAP 采集环境点云数据,用于定位与避障
CAN总线模块 USB-CAN 适配器(支持CAN 2.0) 实现主控与底盘电机控制器的通信
车辆底盘 差分驱动底盘(带电机控制器) 接收CAN指令,执行前进、转向、停止动作
电源模块 24V锂电池(带BMS保护) 为主控、雷达、底盘供电

2.2 硬件连接步骤(关键!)

2.2CAN总线连接

  1. USB-CAN 适配器一端插入 NVIDIA 主控板的 USB 3.0 接口,另一端通过 CAN 总线线缆接入底盘电机控制器的 CAN 接口;

  2. CAN 总线线缆需区分「CAN_H」和「CAN_L」:适配器的 CAN_H 接控制器的 CAN_H,CAN_L 接控制器的 CAN_L(接反会导致通信失败);

  3. 接入终端电阻(若总线长度超过 1m,需在总线两端接入 120Ω 终端电阻,确保通信稳定)。

2.3 激光雷达连接

  1. Livox 雷达通过 Ethernet 网线接入 NVIDIA 主控板的网口(建议使用千兆网线);

  2. 雷达默认 IP 为 192.168.1.3,需将主控板网口 IP 手动设置为同一网段(如 192.168.1.100,子网掩码 255.255.255.0);

  3. 雷达供电接入 12V 电源,开机后雷达指示灯为绿色(红色为异常)。

2..4 连接检查

所有连接完成后,依次开启电源:锂电池 → 底盘控制器 → 主控板 → 雷达,检查各硬件指示灯是否正常(无报错)。

三、软件环境搭建

3.1 基础环境(Ubuntu 22.04 + ROS2 Humble)

若未安装 ROS2 Humble,参考官方教程安装:ROS2 Humble 官方安装指南

安装完成后,配置 ROS2 环境变量(建议添加到 ~/.bashrc 中,避免每次手动配置):

echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc
source ~/.bashrc

3.2 依赖安装

3.2.1 系统依赖

# 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

3.2.2 Python 依赖

# 进入项目目录
cd ~/ros2_ws
# 安装Python依赖(若项目用到额外库,如pandas、numpy)
pip3 install pyserial pandas numpy --user

3.2.3 Livox 雷达驱动依赖

本仓库已集成 Livox ROS2 核心驱动,无需额外安装,编译时会自动构建。

四、项目编译与运行

4.1 克隆仓库到本地

# 进入ROS2工作空间的src目录
cd ~/ros2_ws/src
# 克隆仓库(SSH方式,需配置GitHub SSH密钥)
git clone git@github.com:hvcrown/ZzumtCar.git
# 回到工作空间根目录
cd ..

4.2 编译项目

# 编译整个工作空间(--symlink-install 支持Python脚本热更新)
colcon build --symlink-install
# 编译完成后,加载工作空间环境变量
source install/setup.bash

若编译报错:「缺少某模块依赖」,需先安装对应依赖(如 sudo apt install ros-humble-xxx),再重新编译。

4.3 核心节点运行示例

4.3.1 启动 CAN 通信节点(监听底盘状态)

# 先配置CAN接口(USB-CAN适配器默认接口为can0)
sudo ip link set can0 up type can bitrate 500000
# 启动CAN监听节点
ros2 run can_sim_demo can_listener

运行成功后,终端会输出底盘状态数据(如速度、转向角度、电池电压)。

4.3.2 启动 Livox 雷达节点(采集点云数据)

# 启动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 界面,显示雷达点云数据。

4.3.3 启动车辆控制节点(键盘控制小车)

# 启动键盘控制节点
ros2 run vehicle_can_interface keyboard_control

按照终端提示操作键盘:W(前进)、S(后退)、A(左转)、D(右转)、空格(停止)。

4.3.4 启动所有节点(一键启动,需编写launch文件)

若需同时启动所有节点,可在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                  # 项目说明文档(本文档)

六、常见问题排查

6.1 CAN 通信失败

  1. 检查 CAN 接口是否正常识别:ls /dev/can0(无输出则说明适配器未识别,重新插拔USB);

  2. 检查 CAN 接口是否启动:ip link show can0(显示「UP」则正常,否则重新执行 sudo ip link set can0 up type can bitrate 500000);

  3. 检查 CAN 总线接线:确认 CAN_H 与 CAN_L 未接反,终端电阻是否接入。

6.2 雷达点云无数据

  1. 检查雷达供电:指示灯是否为绿色(红色需重启雷达);

  2. 检查网络配置:主控板网口 IP 是否与雷达在同一网段(如 192.168.1.x);

  3. 测试网络连通性:ping 192.168.1.50(雷达默认IP),能ping通则网络正常。

6.3 编译失败

  1. 检查依赖是否安装完整:根据报错信息安装对应依赖(如 ros-humble-xxx);

  2. 清理编译缓存:rm -rf build/ install/ log/,重新编译;

  3. 检查 Python 版本:确保使用 Python 3.10+(ROS2 Humble 兼容版本)。

七、协作规范(实验室内部)

7.1 分支管理

  • 主分支(master):仅存放稳定可运行的代码,禁止直接在主分支修改;

  • 开发分支(dev):用于团队协作开发,所有新功能先提交到 dev 分支;

  • 个人分支(如 feature/xxx):每人创建自己的功能分支,开发完成后合并到 dev 分支,再由负责人合并到 master。

7.2 提交信息规范

提交代码时,commit 信息需清晰描述修改内容,格式:类型:修改说明

类型可选:feat(新增功能)、fix(修复bug)、docs(修改文档)、refactor(重构代码)、test(添加测试)

示例:feat:新增CAN总线转向控制指令fix:修复雷达点云数据丢失问题

7.3 代码规范

  • Python 代码:遵循 PEP8 规范,使用 flake8 工具检查(仓库已集成 test_flake8.py 测试脚本);

  • C++ 代码:遵循 ROS 代码规范,变量名、函数名清晰易懂;

  • 新增模块时,需在 README 中补充模块说明和使用方法。

八、联系方式

若遇到问题,可联系仓库维护者:
GitHub:hvcrown(https://github.com/hvcrown) 以及其余开发工程师 实验室:郑州大学工业智能与工业软件联合实验室

About

实验室小车控制代码仓库,用于版本管理、问题追溯及代码分发,目前主要包含接口模块

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors