跳到主内容

FLL 机器人设计和软件编程

FLL 比赛时候的机器人设计并没有一个标准答案, 这个和比赛策略/软件设计强力相关, 而且也是需要迭代进行的.

https://mermaid.ink/img/pako:eNqrVkrOT0lVslJKy8kvT85ILCpR8AmyjslTAIJn66e82Dr7-dppz6cuVdDVtVN4NmfX05krnuza9WLdvhfrFoLFXuxd_2T3tud7pj1f0Q0SqHmxf-2T3YtrUHQr6SjlphblJmamAG2qBpkeo1SSkZqbGqNkBWSmpKYlluaUxCjF5NUClSaWluQHV-YlK1mVFJWm6iiVFqQklqS6ZCamFyXmKlmlJeYUA0VTUzJL8ot8Ia4He6IWAIEIWTc?type=png

所以不要浪费时间去寻找完美的机器人, 能完成任务的就是好机器人.

L.I.T. (52517) 在 2022 年 superpower 这个赛季取得不错成绩, 有不少经验可以分享.

比赛策略和风格

  1. 这个赛季的机器人风格是"小快灵", 非常小, 非常快, 移动非常灵活. 下面是一个完成录像:

  1. 每轮只完成一到两个, 最多三个任务即返回出发点.任务之间误差累计会比较小, 而从出发点重新出发可以进行位置校准. 另外一个好处是, attachment 也可以做得很小, 配合 pinless design (下文详述), 在众多优秀队伍中也是颇有特色. 而且有任务失败, 需要把机器人拿回去, 后面一般没有太多剩余未完成的任务, 不太吃亏.

  2. 在 SD 附近参加了3轮比赛, 基本上比赛之间(2-4 个星期)会把整个比赛完成路线都变掉, 大刀阔斧重新设计. 这个也是因为上面的设计思想, 任务之间更容易合并和修改.

  3. 缺点是 technician 需要大量的练习才能 顺利完成比赛.

Pin-less design

  • pinless desgin 的意思是, attachment 按在 base robot 上就能跑, 随手就能拿下来, 无须额外使用乐高部件来固定.

  • 这个是2021年 All Systems Go (获得 2020 年 Replay 南加冠军) 对 L.I.T. 倾囊相传, 很多成熟的队伍都会使用此类设计.

  • 下面是 L.I.T. 在 2022 年设计的机器人图纸截图, 可以看到 1/2 处两个马达驱动的齿轮位置已经固定, 只要在attachment 的旁边位置放一个竖着的齿轮, 即可把能量传递到 attachment 其他地方. 3/4/5/6 的蓝色pin 可以帮助固定 attachment.

    https://imageclipped.s3-us-west-1.amazonaws.com/7a649af2cc2378b8cf6f54001894069a.png
  • 正如上面所说, 整个比赛被分成了很多小任务, 每个任务都有一到两个 attachment, 所以这次有很多小 attachment. (体积依然很小, 加起来还可以拿到奖励分)

    https://imageclipped.s3-us-west-1.amazonaws.com/f6aec1e686fb8ae80a48f9d8a25f26a6.jpg

mindstorm ev3 vs spike prime

mindstorm ev3 是上一代的乐高机器人, 使用了 ARM9 300MHz 32位处理器, 64M 内存. 可以运行特制的 linux 系统, 功能还是蛮强大的. 缺点是陀螺仪传感器是外接的, 时间久了经常不稳定, 还有 drift 的问题. 默认编程是 wordblock (scratch), 如果运行 Linux 则可以使用 python 等高级编程语言.

Spike prime 是乐高最新一代机器人, 使用的是 ARM Cortex-M4 100MHz 32位处理器, 32M 内存. ARM9 更适用于需要高性能和多任务的系统。Cortex-M4 更适用于低功耗、实时响应的嵌入式应用。 所以 Spike prime 的算力可能比 ev3 略弱一点.

spike prime 的官方编程语言是wordblock / python, wordblock 实际上还是编译成 python 再运行. 所以本质的编程语言并没有太多区别. 使用 (micro) python 这种高级语言当然可以更快实现各种功能, 但这个的前提是学生能够理解 python 的语法, 而且能够用其描述复杂的编程逻辑.

wordblock 和 micro python 基本上可以做到 1:1 对应, 凡是 python 能完成的, wordblock 也一定能完成. 只是遇到复杂的逻辑, python 可能几行就搞定, 但是 wordblock 看上去就一大堆.

L.I.T. 实际碰到的 micro python 问题是, wordblock 有个 broadcast 功能, 可以让几个马达同时工作. 但 micro python 对多线程运行的直接支持还不是很好, 或者需要大量的 hack 才能完成. 对于普通中小学生(包括家长)来说, 没有必要去浪费时间折腾.

软件设计

软件设计是非常精妙的部分. 机器人在场上表现如何, 大家都能看到, 机器人是怎么设计的, 用了什么传感器, 也都不会有什么秘密. 但是大家看不到的是软件部分.

L.I.T. 在 2022 赛季使用的是 spike prime + python + vs code (以及 spike prime 插件).

  • 大部分学生都是8年级, python 语法对他们来说并非难事.

  • 可以使用 git 来记录历史, 方便回溯. (git 也是一个可以终身使用的技能)

  • 使用蓝牙进行下载.

在 Akansas 大学比赛的时候, CCC (来自芝加哥的一只队伍) 给我们现场展示了她们的代码, 非常复杂, 但是异乎寻常的稳定. 她们的机器人只出错过一/两次, 其余所有比赛都是完美完成, 我从来没有在南加州见到如此稳定发挥的机器人. L.I.T. 有幸和 CCC 搭档拿到了联盟赛的冠军, 联盟赛的比赛规则就是淘汰赛, 每次两组 (各两支)队伍, 每组两个机器人同时在场上, 90秒完成所有任务. 几乎所有比赛都是满分, 对手完全没有机会. 我后来采访了她们队, 原来队伍已经有10年历史, 姐姐传妹妹这样带动下来的, 我相信这里面有很多的经验那都是无价之宝.

对于新手队伍, 该如何积累进步呢?

wordblock / python 确实上提供了详尽的接口, 例如往前走50cm. 一些新手队伍直接呼叫这些功能, 当然也能完成任务, 就是完美完成的机会会小一点. 因为这个机器人用了两个轮子, 它们的表现可能是不一样的, 也许左边的偶尔快一点, 最终的结果有时候会偏右一点.

有经验的队伍, 可能会用陀螺仪传感器来校准两个轮子的速度, 这样让机器人尽量保持在一个方向. 再举一个例子, 机器人在场上完成一两个任务之后, 误差的累计就变大了, 这个时候, 假如在前进的时候使用颜色感应器来检测一下黑线, 或者使用旁边的墙来进行一次陀螺仪校准, 都会很有帮助.

所以大家可以创建一些通用的辅助函数, 这样可以代替系统提供的功能, 例如:

GyroStraight

使用陀螺仪来帮助机器人走直线, 用来代替 spike prime 内部的 run_for_degree 函数. 进阶版本可以添加 加速 / 减速 功能.

GyroTurn

使用陀螺仪来辅助转弯, 这样转得更精确. 进阶版本可以考虑超过360转圈引起的硬件计数误差.

在FLL 里面经验很重要, 队伍几年下来积累的这些辅助函数都是将来的宝贵财富. 目前很多队伍还在使用 ev3 并取得很好的成绩, 但是他们成功的真正原因是之前的积累, 而不是刚好选择了某个平台和某个编程语言. 所以新手队伍切勿盲目跟风, 选择适合自己的平台, 苦练内功, 才是长远之道.