串口协议:一个字符前缀驱动的命令系统
串口是 Petoi Bittle X 最直接的控制通道:在串口监视器输入一行命令,机器人立即执行,不需要额外硬件。官方为机器人定义了一整套串口通信协议,本页讲清 token 规则,给出可以直接发送的第一组命令,并说明技能命名规则,让你能从技能清单自己推出新命令。
token 的三条规则
- 所有 token 以单个 ASCII 字符开头,这个字符决定后面内容的解析格式,例如
ksit的 k 表示这是一条技能调用。 - 命令大小写敏感,且通常为小写;大小写不同的写法是不同的命令,输入时不能随手大写。
-
c和m这类命令可以组合连写:连续的m8 40、m8 -35、m 0 50三条,可以写成一条m8 40 8 -35 0 50。合并长度可以在代码里改,但串口缓冲区本身存在系统级的长度约束,连写过长可能被截断。
先把串口监视器参数配对
参数不对,命令发进去没有任何反应。打开串口监视器后按官方要求设置:
| 参数 | 官方值 |
|---|---|
| 行结束符 | No line ending |
| 波特率 | 115200 |
| Arduino IDE 版本 | 官方该页推荐 1.8.19 |
找不到端口时,把 USB 数据线从电脑侧拔下再插回,对比 Tools 菜单里端口列表的前后差异,即可定位正确的端口。
第一组可运行命令
在串口监视器里逐条发送下面的命令,观察机器人的实际反应:
| 命令 | 作用 |
|---|---|
ksit |
调用 sit 技能,机器人坐下 |
m0 30 |
把 0 号关节转到 30° |
m0 -30 |
把 0 号关节转到 -30° |
kbalance |
调用 balance 技能,切换到平衡姿态 |
kwkF |
行走步态,向前走 |
ktrL |
trot 步态,向左走 |
d |
让机器人趴下(rest 姿态) |
两个细节:官方示例里加的引号只是标示「这是个字符串」,在串口监视器里不要输入引号;m 命令后面依次跟关节索引和角度,多组索引角度可以连续写在一行里,m0 30 和 m0 -30 正负各发一次,正好验证同一个关节两个方向的行程。
技能命名规则:从清单推出新命令
技能调用的套路固定:在技能名前加 k、删掉类型后缀。例如清单里有 sitI,发送 ksit 就是调用坐下姿势。按这条规则,清单里的任何技能都能推出对应的串口命令,不需要死记硬背命令表。
判断一个技能是不是步态,看它的倒数第二个字符:是 F 或 L 的就是步态,分别表示向前走或向左走;向右走是向左走的镜像,所以 kwkF、kwkL、kwkR 分别让机器人前进、左行、右行。除行走外还有别的步态前缀:trot(tr)、crawl(cr)、stepping(vt)。
官方页给出的技能名带类型后缀的完整清单(skillNameWithType)如下,可以对照着推命令:
const char* skillNameWithType[]={"bdFI","bkI","bkLI","crFI","crLI","hlwI","mhFI","mhLI","pcFI","phFI","phLI","trFI","trLI","vtFI","vtLI","wkFI","wkLI","balanceI","buttUpI","calibI","droppedI","liftedI","restI","sitI","strI","zeroN","bfI","ckI","climbCeilI","fdI","ffI","hiI","jyI","pdI","peeI","puI","pu1I","rcI","rlLI","rtI","stpI","tsI",};
宏定义在哪、两个仓库怎么分工
这里有一个官方文档自己留下的坑:串口协议页说最新 token 宏定义看 OpenCat.h、完整技能集看 InstinctBittle.h 或 InstinctNybble.h,但这几个文件在页面里的链接都指向 legacy 仓库,而不是给 Bittle X 烧录用的 ESP32 仓库。正确的分工是:
| 要做的事 | 该用的仓库或位置 |
|---|---|
| 给 Bittle X V2(BiBoard V1)或老款 Bittle X(BiBoard V0)烧录固件 | ESP32 仓库 PetoiCamp/OpenCatEsp32-Quadruped-Robot
|
| 运行 Python API 示例脚本 | legacy 仓库的 OpenCatPythonAPI 目录 |
| 查 token 宏定义与技能定义 | 官方页链接指向 legacy 仓库源码;串口协议本身在两代硬件上通用 |
这个坑更迷惑的地方在于两个仓库的热度是倒挂的:legacy 仓库的星标数比 ESP32 仓库多,但 legacy 仓库的 README 开头就提示 current-gen 硬件用户去 ESP32 仓库。
一句话固定结论:烧录用 ESP32 仓库,Python API 脚本在 legacy 仓库的 OpenCatPythonAPI 目录,串口协议在两代硬件上通用。不能把官方文档理解成只有一个仓库,也不要因为链接指向 legacy 就用错烧录源。