威拉德的首次飞行(以及意外拆解)
Source: Dev.to
在我上一篇文章中,我正在教我的机器人项目在 Raspberry Pi 5 上“看”和“思考”。在等待我的 Build Hat 时,我发现了这些车套件——一种即刻探索物理运动的现成方案。
于是出现了 Elegoo Smart Robot Car Kit v4.0,或者我儿子亲切地称呼它为 Willard。
The Physical Build
组装过程出乎意料地顺畅。Elegoo 提供了你所需的三把螺丝刀,包装袋也标记得很整齐。感觉就像“宜家说明书遇上电子产品”。
然而,我很快就遇到了一个实际的“硬件税”。有些部件小得几乎看不见,放进去简直是个挑战。机器人一动起来,默认的卡顿程序导致整个底盘振动。几分钟之内,螺栓和螺丝就从机器人上飞了出来——一次意外的拆解!我不确定是否有推荐的固定方式,所以目前我把 Willard 的轮子拆下来,在桌面上安全地调试逻辑。
“隐藏”的软件守门人
虽然这是一个套件,但定制机器人车并不完全是“即插即用”。在印刷手册中没有突出显示的两个守门人(但在可下载的 zip 文件中有文档说明)。
- 上传切换开关: 扩展帽上有一个小型切换开关。如果它被设置为 App 模式,你将无法上传代码;将其切换到 Upload 即可与 Arduino 通信。标签非常小,容易被忽视。
- 缺失的驱动程序: 由于芯片短缺,可能会装上不同的串口芯片。我的电脑在我安装了教程 zip 文件中隐藏的 CH340 驱动程序之前,根本识别不到该板子。
专业提示: 我改用 Arduino CLI 以获得更快的反馈:
arduino-cli compile --fqbn arduino:avr:uno --libraries . smart-robot-car-firmware.ino
一个常见的挫败感是“重启循环”。与会在出错时崩溃的 PC 应用不同,Arduino 往往只是重启,这会让人觉得它在忽略你的代码,实际上它每隔几秒就在重新启动。
每个字节都重要
切换到 CLI 后出现了在 IDE 中没有出现的 “Sketch too big” 错误。原始固件已经接近 Arduino Uno 的 32 KB 限制;再加入 Servo 库后就超出了。
当前构建大小:
Sketch uses 21166 bytes (65%) of program storage space. Maximum is 32256 bytes.
Global variables use 1208 bytes (58%) of dynamic memory, leaving 840 bytes for local variables. Maximum is 2048 bytes.
我编写了一个小的 Python 脚本来按大小列出符号:
import subprocess
# Runs avr-nm to sort symbols by size
nm_output = subprocess.check_output(['avr-nm', '-S', '--size-sort', '-C', elf_file])
将逻辑重构为非阻塞状态机后,JsonDocument 的大小从 200 字节降至 128 字节;将 sprintf 替换为 Serial.write 则避免了引入庞大的字符串格式化库。
独立的视角
此套件中的摄像头根本没有连接到 Arduino;它使用自己的 IP 地址独立工作。因此,Arduino 的“反射”层对摄像头看到的内容完全不可见。不过,将所有传感器和摄像头放在同一个套件中,能够直观地展示出消费级机器人能够容纳的内容。
它也让我对重量限制有了现实的认识。观察 Willard 的导航过程提供了一个基准,了解电机在性能下降之前能够承受的质量。我的最终目标是弥合反射与认知之间的鸿沟——让树莓派分析视觉数据,并向 Arduino 的“肌肉”发送高级指令。
接下来
Willard 目前在手术台上。我正在深入调试为什么他的 Guard Duty 行为会返回 “Ghost States”(幽灵状态)。
Serial output example:
Current Distance: 13
Current Distance: 12
Alarm triggered!
Guard Duty State: 3 <-- Ghost State Detected
状态 3 并不存在,这是一种典型的缓冲区溢出特征——内存泄漏并实时覆盖状态变量。下次我会进行手术找出泄漏点。
如果你已经组装了这辆车、做了改装,或有任何想法,欢迎留言。目前我已经实现了 “Guard” 模式(通过距离变化检测运动)和 “Dance” 模式(多彩灯光和预设舞步)。
我还在考虑添加一个使用 I²C(Qwiic)的 Arduino Modulino 蜂鸣器模块,以保持布线整洁,并最终让 Willard 能够通过自定义音调和警报 “说话”。