Pixhawk → Raspberry Pi → C30D 阿克曼无人车控制
完整实现 | MAVLink 控制链路 · STM32 底层执行 · 安全系统
Pixhawk 飞控
Raspberry Pi 4B
STM32 C30D
阿克曼转向
完整安全系统
1. 概述
本系统实现三层机器人控制架构:
Pixhawk (飞行控制器)
↓ MAVLink
Raspberry Pi 4B (桥接 / 逻辑层)
↓ 串行协议
STM32 C30D 电机控制器
↓
阿克曼无人车平台
目标:
基于 Pixhawk 的控制输入
Raspberry Pi 中间层翻译
STM32 底层电机执行
不依赖 GPS 的安全室内操作
基于 Pixhawk 的控制输入
Raspberry Pi 中间层翻译
STM32 底层电机执行
不依赖 GPS 的安全室内操作
2. 关键特性
完整安全系统
Ctrl+C 紧急停止 · 自动关闭处理程序 · 断开连接时电机安全停止
Ctrl+C 紧急停止 · 自动关闭处理程序 · 断开连接时电机安全停止
Pixhawk 集成
通过 /dev/ttyACM1 的 MAVLink 连接 · 室内安全的 MANUAL 模式 · RC 通道读取(油门 + 转向)
通过 /dev/ttyACM1 的 MAVLink 连接 · 室内安全的 MANUAL 模式 · RC 通道读取(油门 + 转向)
C30D 电机控制
115200 波特率串行通信 · 兼容 STM32 协议的十六进制包格式 · 直接速度指令输出
115200 波特率串行通信 · 兼容 STM32 协议的十六进制包格式 · 直接速度指令输出
3. C30D 通信协议
无人车使用自定义串行帧格式:
7B | 00 | 00 | VX | VY | 00 | 00 | 7D
| 字段 | 含义 |
|---|---|
7B | 帧头 |
VX | 前进 / 后退速度 |
VY | 转向值 |
7D | 帧尾 |
4. 安全系统设计
为防止失控,系统包含以下机制:
• atexit 处理器(退出时自动 STOP)
• signal 处理器(Ctrl+C 安全关闭)
• 紧急停止包
• signal 处理器(Ctrl+C 安全关闭)
• 紧急停止包
STOP_CMD = "7B 00 00 00 00 00 00 00 00 7B 7D"
5. 完整工作代码
#!/usr/bin/env python3
import serial
import time
import atexit
import signal
import sys
from pymavlink import mavutil
# ======================
# C30D SERIAL SETUP
# ======================
ser = serial.Serial("/dev/ttyACM0", 115200, timeout=1)
def send_hex(hex_string):
ser.write(bytes.fromhex(hex_string))
print("[C30D] Sent:", hex_string)
# ======================
# SAFETY STOP FUNCTION
# ======================
STOP_CMD = "7B 00 00 00 00 00 00 00 00 7B 7D"
def stop_rover():
print(" EMERGENCY STOP")
send_hex(STOP_CMD)
# ======================
# EXIT HANDLERS (CRITICAL)
# ======================
def exit_handler(sig=None, frame=None):
stop_rover()
ser.close()
sys.exit(0)
atexit.register(stop_rover)
signal.signal(signal.SIGINT, exit_handler)
signal.signal(signal.SIGTERM, exit_handler)
# ======================
# PIXHAWK CONNECTION
# ======================
print("Connecting Pixhawk...")
master = mavutil.mavlink_connection("/dev/ttyACM1", baud=115200)
master.wait_heartbeat()
print("Pixhawk connected ")
# Set safe indoor mode
master.set_mode("MANUAL")
print("MANUAL mode ")
# ======================
# MAIN CONTROL LOOP
# ======================
while True:
msg = master.recv_match(blocking=True)
if not msg:
continue
if msg.get_type() == "RC_CHANNELS":
throttle = msg.chan3_raw
steering = msg.chan1_raw
vx = int((throttle - 1500) / 5)
# deadzone filtering
if abs(vx) < 10:
send_hex(STOP_CMD)
elif vx > 0:
send_hex("7B 00 00 00 64 00 00 00 00 1F 7D")
else:
send_hex("7B 00 00 FF 9C 00 00 00 00 18 7D")
6. 系统行为
• 油门向前推 → vx > 0 → 无人车前进
• 油门向后拉 → vx < 0 → 无人车后退
• 摇杆居中 → STOP 命令 → 无人车立即停止
• 油门向后拉 → vx < 0 → 无人车后退
• 摇杆居中 → STOP 命令 → 无人车立即停止
7. 工程洞察
本架构展示了清晰的职责分离:
| 层级 | 职责 |
|---|---|
| Pixhawk | 决策 / 输入 |
| Raspberry Pi | 翻译 / 桥接 |
| STM32 C30D | 电机执行 |
警告 8. 安全保证
本系统确保:
脚本退出时无人车始终停止
崩溃后无失控运动
安全的室内测试模式
脚本退出时无人车始终停止
崩溃后无失控运动
安全的室内测试模式
9. 未来升级路径
完整阿克曼转向模型(基于角度的控制)
ROS2 /cmd_vel 集成
自主导航(SLAM)
多 UGV 集群控制
ROS2 /cmd_vel 集成
自主导航(SLAM)
多 UGV 集群控制
平台:Pixhawk 2.4.8 · Raspberry Pi 4B · STM32 C30D · Ubuntu 22.04 · ROS2 Humble
(c) 卓博泰科技 · 阿克曼无人车三层控制架构
(c) 卓博泰科技 · 阿克曼无人车三层控制架构