无人车遥控

ROS2

Posted by LXG on July 17, 2026

单摇杆遥控器

坐标系定义

摇杆 控制
Y linear (线速度)
X angular (角速度)

控制坐标系

            +X
             ↑
             │
             │
 -Y ◄────────┼──────► +Y
             │
             │
             ▼

         +Z(朝天)

连续控制



       ↖       ↗

←                  →

       ↙       ↘

           ↓

摇杆 linear angular
+ 0
- 0
0 -
0 +
+ -
+ +
- -
- +

控制分辨率

控制量 单方向有效档位 全行程有效档位 最大值 平均控制粒度
linear_signed ≈50 ≈100 ±1.0 ≈0.02
vx ≈50 ≈100 ±1.3 m/s ≈0.026 m/s
angular_signed ≈55 ≈110 ±1.0 ≈0.018
ω ≈55 ≈110 ±4.8 rad/s ≈0.044 rad/s

RPM:4轮驱动电机转速和转向电机角度

控制方式 摇杆有效档位 最大 RPM 平均控制粒度
直行 ≈50 90 ≈1.8 RPM
原地旋转 ≈55 40 ≈0.73 RPM

Lora

LoRa(Long Range)是一种物理层无线调制技术,由 Semtech 提出。

特性 LoRa Wi-Fi 蓝牙
距离 1~10 km(空旷) 30~100 m 10~50 m
速率 0.3~50 kbps 数百 Mbps 1~2 Mbps
功耗 很低
抗干扰 很强 一般 一般
实时性 中等 较高

典型的遥控器结构


                 ┌───────────────┐
                 │    摇杆模块     │
                 │ X/Y ADC输入    │
                 └──────┬────────┘
                        │
                        │模拟量
                        ▼

┌──────────┐      ┌──────────────┐
│ 按键矩阵 │─────▶│              │
└──────────┘      │              │
                  │   STM32      │
┌──────────┐      │ Cortex-M4     │
│ 电源管理 │─────▶│              │
└──────────┘      │              │
                  │              │
┌──────────┐      │              │
│ OLED/LCD │◀────▶│ SPI/I2C      │
└──────────┘      │              │
                  │              │
┌──────────┐      │ UART/SPI     │
│ LoRa模块 │◀────▶│              │
└──────────┘      └──────┬───────┘
                         │
                         ▼
                    天线接口


┌──────────┐
│ 电池     │
│ Li-ion   │
└──────────┘

模块 作用
STM32L431/L433 主控
双轴霍尔摇杆 操作输入
E22 LoRa 无线通信
SMA天线座 射频
OLED 状态显示
Li-ion电池 供电
电源管理IC 稳压充电
急停按钮 安全
按键 模式切换
蜂鸣器 告警
LED 状态
SWD接口 调试

工作原理

正常控制时序


时间 →
 
遥控器 MCU              LoRa无线             车辆LoRa            底盘控制器
    │                      │                    │                    │
    │ 读取摇杆              │                    │                    │
    │ linear=0.5            │                    │                    │
    │ angular=0.1           │                    │                    │
    │                      │                    │                    │
    │ CONTROL_FRAME         │                    │                    │
    │--------------------->│------------------->│                    │
    │                      │                    │  校验CRC            │
    │                      │                    │  检查Remote_ID       │
    │                      │                    │                    │
    │                      │                    │ cmd_vel             │
    │                      │                    │------------------->│
    │                      │                    │                    │
    │                      │                    │                    │执行
    │                      │                    │                    │
    │                      │                    │                    │
    │ 等待100ms            │                    │                    │
    │                      │                    │                    │
    │ CONTROL_FRAME         │                    │                    │
    │--------------------->│------------------->│                    │
    │                      │                    │                    │

心跳机制时序

心跳(Heartbeat)的核心作用是证明“遥控器还活着、通信链路还正常”

  1. 遥控器掉电
  2. 无线距离超限
  3. 无线干扰
  4. 遥控器程序死机

即使摇杆不动,也发送:

时间 →

遥控器                  车辆
 │                       │
 │ HEARTBEAT(seq=100)    │
 │---------------------->│
 │                       │
 │                       │ last_rx_time更新
 │                       │
 │ 等待100ms             │
 │                       │
 │ HEARTBEAT(seq=101)    │
 │---------------------->│
 │                       │
 │                       │ last_rx_time更新
 │                       │
 │ 等待100ms             │
 │                       │
 │ HEARTBEAT(seq=102)    │
 │---------------------->│
 │                       │