威拉德的首次飞行(以及意外拆解)

发布: (2026年1月18日 GMT+8 10:43)
6 min read
原文: Dev.to

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 能够通过自定义音调和警报 “说话”。

Back to Blog

相关文章

阅读更多 »

Rapg:基于 TUI 的密钥管理器

我们都有这种经历。你加入一个新项目,首先听到的就是:“在 Slack 的置顶消息里查找 .env 文件”。或者你有多个 .env …

技术是赋能者,而非救世主

为什么思考的清晰度比你使用的工具更重要。Technology 常被视为一种魔法开关——只要打开,它就能让一切改善。新的 software,...

踏入 agentic coding

使用 Copilot Agent 的经验 我主要使用 GitHub Copilot 进行 inline edits 和 PR reviews,让我的大脑完成大部分思考。最近我决定 t...