GWR500 阿克曼无人车 · 搭建记录
Raspberry Pi 4B + C30D 控制器 + ROS2 底层驱动验证
Ackermann 转向
C30D STM32
Python 串口驱动
17Hz 遥测
ROS2 就绪
硬件平台
Raspberry Pi 4B
↓
USB-C (UART3)
↓
C30D STM32 控制器
↓
电机驱动器
↓
后轮驱动电机
平台:WHEELTEC GWR500 阿克曼底盘 · C30D 控制器 · 树莓派 4B · 3S 电池 · USB-C 数据线
串口设备识别
ls /dev/tty*
/dev/ttyACM0
udevadm info -q all -n /dev/ttyACM0 | grep -E "Vendor|Model|Driver"
Vendor: 1a86
Model: USB_Single_Serial
Driver: cdc_acm
Model: USB_Single_Serial
Driver: cdc_acm
通过 Linux 成功识别 C30D 控制器,使用
cdc_acm 驱动。 Minicom 串口监控
sudo apt install minicom -y
sudo minicom -s
设置 Serial Device → /dev/ttyACM0
重新连接后持续输出二进制数据 → 确认控制器正在发送遥测。
重新连接后持续输出二进制数据 → 确认控制器正在发送遥测。
原始数据包验证
python3 -c "
import serial
ser = serial.Serial('/dev/ttyACM0',115200)
for i in range(10):
print(ser.read(32).hex())
"
7b000000000000000a3b01cce43ffff6000500002a7c067d
每帧以 7B 开头、7D 结尾 → 符合 WHEELTEC 官方串口协议。
⏱ 遥测频率测量
import serial, time
ser = serial.Serial('/dev/ttyACM0',115200)
start = time.time()
count = 0
while time.time()-start < 5:
ser.read(32)
count += 1
print(count/5)
≈ 17Hz
控制器以约 17Hz 频率持续发送姿态 / 里程 / 电压数据。
WHEELTEC 串口协议
接收包格式 (Rx)
7B | Flag | VX | VY | VZ | AccX | AccY | AccZ | GyroX | GyroY | GyroZ | Battery | BCC | 7D
命令包格式 (Tx)
7B | Reserved | Reserved | VX | VY | VZ | BCC | 7D
通信端口: UART3 | 波特率: 115200
运动命令测试
前进 100 mm/s
import serial
ser = serial.Serial('/dev/ttyACM0',115200)
cmd = bytes.fromhex("7B 00 00 00 64 00 00 00 00 1F 7D")
ser.write(cmd)
通过 车辆前进成功
停止
cmd_stop = bytes.fromhex("7B 00 00 00 00 00 00 00 00 7B 7D")
ser.write(cmd_stop)
通过 车辆停止
后退 100 mm/s
cmd_back = bytes.fromhex("7B 00 00 FF 9C 00 00 00 00 18 7D")
ser.write(cmd_back)
通过 车辆后退成功
完整测试脚本
#!/usr/bin/env python3
import serial, time
PORT = "/dev/ttyACM0"
BAUD = 115200
ser = serial.Serial(PORT, BAUD, timeout=1)
def send_hex(hex_string):
ser.write(bytes.fromhex(hex_string))
print("Sent:", hex_string)
forward = "7B 00 00 00 64 00 00 00 00 1F 7D"
backward = "7B 00 00 FF 9C 00 00 00 00 18 7D"
stop = "7B 00 00 00 00 00 00 00 00 7B 7D"
try:
print("Forward 2s"); send_hex(forward); time.sleep(2)
print("Stop"); send_hex(stop); time.sleep(1)
print("Backward 2s"); send_hex(backward); time.sleep(2)
print("Stop"); send_hex(stop)
except KeyboardInterrupt:
send_hex(stop)
finally:
ser.close()
通过 前进 2 秒 → 停止 → 后退 2 秒 → 停止 → 测试完成
通过 当前状态与下一步
阿克曼底盘已组装
C30D 控制器供电正常
树莓派通过 USB-C 连接 UART3
串口设备识别正确 (/dev/ttyACM0)
遥测数据接收 (17Hz)
前进 / 后退 / 停止 命令全部验证
WHEELTEC 协议已验证
C30D 控制器供电正常
树莓派通过 USB-C 连接 UART3
串口设备识别正确 (/dev/ttyACM0)
遥测数据接收 (17Hz)
前进 / 后退 / 停止 命令全部验证
WHEELTEC 协议已验证
下一步:ROS2 集成
ROS2 Node → /cmd_vel → Serial Driver → C30D → Ackermann Rover
ROS2 Node → /cmd_vel → Serial Driver → C30D → Ackermann Rover
长期目标:地面站 + 星型网络 + 10台阿克曼UGV + ROS2协同 + 领航跟随演示 + 无人机/无人车空地协同平台。
平台:WHEELTEC GWR500 · C30D · Raspberry Pi 4B · ROS2 Humble
(c) 卓博泰科技 · 阿克曼无人车底层驱动验证报告
(c) 卓博泰科技 · 阿克曼无人车底层驱动验证报告