- C 91.8%
- Assembly 4.8%
- C++ 2.6%
- Python 0.7%
- HTML 0.1%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
- Params.h:GIMBAL_UNIT 挪到电机选择之前,缺省改为 3;UNIT 3 时 pitch 缺省为 GM6020,UNIT 1/2 仍为 DM-J4310 - gimbal_3:电流模式,yaw 拨码 ID 2、pitch ID 1,都在 CAN1(0x1FE); C 板装在 pitch 上,ROTATION_NONE;零点 yaw 1.3906 / pitch -2.0709 rad (pitch 按 IMU 水平修正);限位 yaw ±90°,pitch -0.757..+0.407(机械止挡); 输出 ±16384(3 A);yaw 1000/43000 ff 120,pitch 700/30000 ff 200 (kp 1400 极限环至失控);omega_max 不变,供赛题二后续测试用 - host_test:motors/gimbal_3,make UNIT=1/2/3 - pid_live.py:pitch 是 GM6020 时不再找 DM 任务 - 文档 TUNING.md、PARAMS.md 和整定 skill 同步 Co-Authored-By: Claude Opus 5.5 <[email protected]> |
||
| .claude/skills/gimbal-pid-tuning | ||
| .vscode | ||
| Core | ||
| docs | ||
| Drivers | ||
| host_test | ||
| Libraries | ||
| MDK-ARM | ||
| Modules | ||
| protocol@66ebfa945f | ||
| tools/gimbal_debug | ||
| Vehicle/GimbalEdu | ||
| .clang-format | ||
| .gitattributes | ||
| .gitignore | ||
| .gitmodules | ||
| README.md | ||
gimbal-edu-firmware
国庆培训用的云台固件(GimbalEdu)。基于剑系步兵框架(SwordInfantry)裁出来的仅云台程序:yaw 和 pitch 各一个电机,型号在编译时选(GM6020,DM-J4310 或 DM-J4340,改 Vehicle/GimbalEdu/Robot/Params.h 开头的 GIMBAL_YAW_MOTOR 和 GIMBAL_PITCH_MOTOR,默认 yaw GM6020,pitch DM-J4310),控制板是 RoboMaster C 板,没有遥控器。PC 通过 USART1(921600 8N1)发 0x30 角速度指令,收 0x01 IMU 帧。
只交付源码,编译和烧录自己来。
怎么用
- 用 Keil 打开 MDK-ARM/robo_template.uvprojx。目标名 SwordInfantry 是原工程的名字,没有改。
- 云台专用代码在 Vehicle/GimbalEdu/ 下:机器人,任务和安全状态机。
- Libraries/,Modules/ 是框架的库和模块,已经展开成普通目录(原来的子模块不再是子模块)。
- host_test/ 是主机测试,不在 Keil 工程里,Linux 或 WSL 下 cd host_test && make 即可,不需要 Keil。make configs 把 9 种电机组合各跑一遍。
克隆时要带 --recursive:protocol/ 是 submodule(gimbal-edu-protocol),主机测试要读里面的 golden_frames.txt。漏了就补一句 git submodule update --init。
文档
- docs/BUILD_FLASH.md:编译,下载,首次上电(含方向验证,看门狗,重新上膛)。
- docs/TUNING.md:常改参数速查,电机型号,CAN ID,速度环 PID,DM 量程,点动量,安装方向,极性,零点和限位各在哪改。
- docs/PARAMS.md:全部参数,校核式,编码器零点标定,硬件清单,已知限制。
- docs/CHANGES.md:开发变更日志,含每个阶段的编译结果。
- docs/verification/:Keil 编译和主机测试的原始日志(final2,post_delete,host_test,w2d)。
- protocol/PROTOCOL.md:通信协议和安全语义,第 13 节是实机首次上电流程。
验证情况
Keil 编译 0 Error,0 Warning,9 种电机组合都编过(docs/verification/motor_select_keil_default.log,motor_select.log)。主机测试默认组合 3036 项检查全过,make configs 下 9 种组合各自全过,host_test_pcview 177 项全过(docs/verification/motor_select.log;电机选型之前的记录在 host_test.log)。
固件所有默认参数都是初值,没有实机依据;control_board_rotation,编码器零点,motor_sign 必须在首次上电时核对和标定,见 docs/BUILD_FLASH.md。主机测试没有覆盖 main.cpp 的中断回调,Robot::init()/run(),UARTDriver 和 HAL 本身的行为,详见 docs/PARAMS.md。
源码编码(GBK)
Keil(AC6)对 UTF-8 中文注释支持不好,所以带中文注释的源文件按 GBK 保存,换行 CRLF,无 BOM。框架里原有的源码(Modules 等)本来就是 GBK,Vehicle/GimbalEdu/Gimbal/GimbalControlParam.h 和 Vehicle/GimbalEdu/Robot/Params.cpp 也是。
- 用编辑器打开时请手动选 GBK(VS Code:右下角编码 → Reopen with Encoding → Simplified Chinese (GBK)),用 UTF-8 打开会乱码。
- 保存时保持 GBK,不要转成 UTF-8,也不要加 BOM。
- 仓库的 .gitattributes 是
* -text:Git 不做任何换行或编码转换,文件原样存取。 - 新增带中文注释的源文件也请存成 GBK;Markdown 文档仍是 UTF-8。
编译提示
MDK-ARM/prebuild.bat 在 pre_config.h 不存在时会用 pre_config_template.txt 生成,命令行编译要把 MDK-ARM 目录加进 PATH,见 docs/BUILD_FLASH.md。.uvoptx 是 Keil 的界面状态,被 .gitignore 忽略,克隆下来没有它不影响编译。