说明:这是一个用于履带式割草机的简单运动控制器原型。控制器使用 RTK/IMU 提供的位置信息和航向来生成运动指令(前进/转向),映射到 ±100 的输出范围。
主要文件:
- mower_controller.py:实现 MowerController,纯追踪+角度 P 控制,接口见文件头注释。
- example_path.json:示例弓字形路径点列表。
- test.py:仿真桩,模拟 IMU(100Hz)、GPS(10Hz)、控制(74Hz),并将输出记录到 sim_log.csv。
合约摘要:
- 输入:GPS 每 10Hz 提供 (x,y)、航向(弧度)、速度;IMU 每 100Hz 提供加速度与角速度。
- 输出:每 74Hz 计算并输出两个整数信号:
- forward: -100..100 对应 [-max_forward_mps, +max_forward_mps](默认 ±1 m/s)
- turn: -100..100 对应 [-pi/2, +pi/2] rad/s(默认±90°/s),正为左转
如何运行:
1. 在同一目录下运行 python test.py(需要 Python 3.x)。
2. 运行结束后查看 sim_log.csv,其中包含时间序列的控制信号与位姿。
注意和下一步:
- 当前控制器为质量较轻的原型;工程化使用时需增加状态滤波、延时补偿、碰撞/障碍物处理、车辆动态限制与安全约束。
- 下步建议:添加单元测试、参数标定接口、以及将控制输出封装成发布接口 (ROS/UDP/CAN)。
pip install -r requirements.txt
需要安装的库:
- pyserial: 串口通信
- crcmod: CRC16校验
编辑 gps_imu_receiver.py 第 316 行附近,根据你的系统修改串口设备名:
Windows:python PORT = "COM3" # 根据设备管理器中的实际端口修改
Linux/Mac:python PORT = "/dev/ttyUSB0" # 或 /dev/ttyACM0, /dev/cu.usbserial-xxx 等
python gps_imu_receiver.py
[INFO] 串口已连接: COM3 @ 921600 bps
[INFO] 开始接收数据... (按 Ctrl+C 停止)
[GPS] 纬度: 31.12345678°, 经度: 121.23456789°, 航向: 45.23°, 速度(E/N/U): 0.12/0.34/0.01 m/s, 卫星: 12, 质量: 4
[IMU] 加速度(X/Y/Z): 0.001/0.007/-1.032 g, 角速度(X/Y/Z): -0.03/0.05/-0.02 °/s, 温度: 26.0℃
...
详细协议文档请参见 ../PROTOCOL.md
数据格式概览:
- 帧头: AA 55
- 数据类型: 0x01=GPS(10Hz), 0x02=IMU(100Hz)
- CRC16: MODBUS标准
- 帧尾: 0D 0A
GPS数据包 (56字节): 纬度/经度、航向角、东北天速度、高程、UTC时间、定位质量、卫星数
IMU数据包 (32字节): X/Y/Z轴加速度、X/Y/Z轴角速度、温度、UTC时间
串口无法打开:
- Windows: 检查设备管理器中的 COM 端口号
- Linux: 添加用户到 dialout 组: sudo usermod -a -G dialout $USER
CRC校验失败:
- 检查波特率是否匹配 (921600)
- 检查串口线缆质量
没有数据输出:
- 确认 GPS 模块已正确连接
- 检查 STM32 调试输出
修改 main() 函数中的数据处理逻辑保存到文件或发送到其他程序。
将接收到的 GPS/IMU 数据传递给 MowerController:
from mower_controller import MowerController
from gps_imu_receiver import GPSIMUReceiver
controller = MowerController(...)
receiver = GPSIMUReceiver(PORT, BAUDRATE)
while True:
gps_data, imu_data = receiver.receive_packet()
if gps_data:
controller.update_gps(gps_data.latitude, gps_data.longitude, ...)
if imu_data:
controller.update_imu(imu_data.accel_x, ...)
mower_controller.py: 运动控制器example_path.json: 示例路径test.py: 仿真测试gps_imu_receiver.py: GPS/IMU数据接收器requirements.txt: Python依赖