Skip to content

Repository files navigation

ClimbingBot-FreeRTOS

概述

攀爬机器人的控制固件,起初用裸机写,后来由于常常死机且难以排查问题,于是用FreeRTOS重写了一遍,提高稳定性,保证运行时行为可控


系统架构

硬件:

  • 主控:STM32F407VET6

  • 遥控接收:ELRS 链路(UART4,420000 波特率,DMA + 空闲中断)

  • 舵机总线:SMSCL 协议(UART5,115200 波特率,DMA 发送)

  • 上位机通信:USART2,115200 波特率,自定义协议

  • 调试串口:USART1

  • 夹爪控制:GPIO 输出

  • 安全恢复:独立看门狗 IWDG

软件采用 FreeRTOS 多任务架构,任务之间用消息队列解耦。整体数据流向:

ELRS / 上位机输入 -> 控制状态仲裁 -> 动作决策 -> 舵机总线 / GPIO 输出 / debug输出

任务

任务 职责
taskRcDecode 等待 ELRS 帧就绪事件,解析 CRSF 通道数据
taskCtrlMode 控制模式仲裁,判断是否遥控器接管,检测失联
taskUplink 上位机协议处理,识别 ping/命令帧,返回 ACK
taskMotion 根据当前控制状态决定执行分支,驱动舵机和夹爪
taskServoBus 从队列解析舵机命令,统一向舵机总线输出
taskWatchdog 检查关键任务心跳,全部正常再喂狗
defaultTask 调试引脚,接LED,系统正常运行时闪烁

中断遵循“快进快出”原则,


通信协议

ELRS 遥控

CRSF 帧,CRC-8(多项式 0xD5),16 路 11-bit 通道解包。解析后映射到一个全局结构体中,方便调用。

映射做了死区和分段映射,消除了摇杆零点漂移的影响,并且优化了在摇杆零点附近的操作精准度

上位机串口协议

固定 11 字节帧:

0xFF 0xFF|指令类型|夹爪ID|夹爪动作|舵机ID|舵机方向|舵机速度|0xAB 0xAB|CRC8

逐字节状态机解析,只接受通过校验的完整数据包,支持PING、COMMAND、ACK三种类型


安全机制

遥控失联保护:处于遥控模式时,如果超时没有新帧,立即停止所有舵机,夹爪 GPIO 全部拉低

任务心跳监控:taskWatchdog 周期检查关键任务,只有全部健康才刷新 IWDG

优先级关系:失联保护 > 遥控器 > 上位机命令


构建

工程用 STM32CubeMX 生成,使用Keil自带的Arm Compiler编译,也可以用Clion+Cmake+arm-none-eabi-gcc编译,OpenOCD下载。

Clion是稚晖君的方案,有更智能的代码提示:优雅の嵌入式开发

About

巡检机器人下位机FreeRTOS固件

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages