这个项目一开始并不“宏大”:我只是想做一台能远程控制、能看视频、后续还能接机械臂的小车。
真正做起来后,发现它不是一个“写几段控制代码”的问题,而是一个典型的系统工程:主控怎么选、供电怎么拆、控制协议怎么留扩展位、机械结构和软件接口怎么对齐。
这篇文章更像一次完整的工程学习记录:为什么这样设计、踩了哪些坑、以及这些取舍背后的逻辑。
项目代码已经开源在 GitHub:
https://github.com/yuange250/SmartCar

一、最早的目标:先让系统“完整”起来
我给自己的第一版目标是四件事:
- 小车底盘可稳定前后左右运动;
- 有远程控制能力(客户端-服务端);
- 能实时视频回传;
- 后续可扩展机械臂(SO101)。
这里有一个关键判断:我需要的是“系统能力”而不是“单片机级控制”。
这个判断直接决定了后面的大部分技术路线。
二、为什么主控选树莓派,而不是 Arduino
这是这个项目里最核心的架构选择之一。
2.1 如果只看“电机控制”,Arduino 很好
Arduino 的优点我完全认可:简单、稳定、实时性强、上手快。
如果目标只是“让车动起来”,它甚至更优雅。
2.2 但这个项目不只是“让车动”
我最终选择树莓派,是因为项目从一开始就要求:
- 同时跑网络服务(TCP/IP);
- 同时处理视频流(摄像头采集、压缩、回传);
- 后续接入机械臂控制库(LeRobot/串口总线);
- 后续可能再加轻量视觉模型(YOLO 推理等)。
这些任务叠在一起,树莓派作为 Linux 主机的优势非常明显:
开发效率高、软件生态完整、模块集成成本低。
我可以用一套 Python 代码把服务端、控制逻辑、视频传输、机械臂接口统一起来,而不是拆成多 MCU + 上位机桥接的复杂形态。
换句话说:
我不是在做“一个最小控制器”,我是在做“一个可持续扩展的机器人节点”。
三、为什么电源必须拆成三路
这是另一个关键工程决策。很多初学项目会用“一路电池全供”,看起来省事,但在真实运行中很容易出问题。
我把电源拆成:
- 树莓派电源(UPS)
- 小车动力电源(电机/L298N)
- 机械臂电源(SO101 控制板+舵机)
3.1 树莓派电源:核心是“稳”
树莓派怕的是瞬时跌压。
一旦电压抖动,轻则网络卡顿、摄像头掉帧,重则重启、文件系统风险。
所以我给树莓派单独 UPS,优先保证主控和服务端稳定在线。
3.2 小车动力电源:核心是“脏电隔离”
电机启动和转向时会带来明显电流冲击与电磁噪声。
如果和主控共电,最常见症状就是控制正常但系统随机异常。
把动力和主控隔离后,这类玄学问题会少很多,调试效率差异非常明显。
3.3 机械臂电源:核心是“峰值电流独立”
机械臂舵机在起停、夹爪动作、姿态突变时会出现高峰值电流。
如果它和底盘动力或者树莓派绑在一条电源上,系统耦合会变得很重:机械臂一动作,其他模块可能同步抖动。
独立电源后,机械臂调参和小车行走可以基本互不干扰。
总结成一句话:
三路供电不是“堆料”,而是用硬件边界换系统稳定性与可调试性。
四、硬件搭建与控制链路
在硬件上,我用了 L298N 作为底盘电机驱动,树莓派通过 GPIO + PWM 进行控制,云台舵机也直接由树莓派输出控制信号。

控制层面是典型的客户端-服务端结构:
- 树莓派侧跑服务端,负责执行电机/舵机/机械臂动作;
- 上位机侧可以用键盘或 GUI 发控制命令;
- 视频模块独立传输并带重连机制,避免控制面被视频流阻塞。
五、加上机械臂后,项目才真正“像机器人”
SO101 机械臂不是简单外挂。它逼着系统从“移动平台”升级成“移动操作平台”:
- 控制对象从两路轮子扩展到多关节总线舵机;
- 供电从“能转就行”升级到“峰值动作可持续”;
- 命令协议要预留机械臂动作语义(如
arm_home/arm_open/arm_close)。
机械臂调通后,系统的可玩性和研究价值都上了一个台阶:
它不再只是遥控车,而是可以做“移动 + 操作”联动实验的底座。


六、成本与取舍:我学到的不是“最便宜”,而是“最划算”
按当前版本,预算大致是:
- 仅小车平台(含云台+摄像头):约 551 元
- 小车 + SO101 机械臂:约 1299 元
如果只看“能动”,这个成本不低;
但如果看“可扩展、可调试、可继续迭代”的学习价值,我认为是划算的。
因为真正贵的不是硬件,而是你在混乱系统里排查不稳定问题的时间。
七、项目结果与下一步
目前我比较满意的结果是:
- 小车运动控制、远程控制和视频传输可以稳定协作;
- 机械臂链路可独立验证并集成到服务端;
- 电源与模块边界清晰,便于后续功能叠加。
下一步我会继续做两件事:
- 把“移动决策 + 机械臂动作”做成可编排任务流(不是单条指令触发);
- 增加更稳定的状态机与日志归档,让故障定位更工程化。
同时,我也会开启两个更长期的方向:
升级树莓派控制系统至 ROS
目标是把底盘控制、视觉感知、机械臂控制统一到标准化消息与节点框架中,降低模块耦合,提升系统可复用性与调试效率。探索 VLA 大模型在小车上的潜力,并发掘待解决问题
我希望把“感知-决策-动作”链路做成更智能的闭环,同时系统性记录当前瓶颈(时延、稳定性、数据闭环、真实场景泛化等),明确哪些问题值得优先攻克。
项目开源地址(欢迎 star / issue / PR):
https://github.com/yuange250/SmartCar
如果你也在做类似项目,我最想分享的一条经验是:
先把系统边界设计清楚,再追求功能堆叠。
当主控、供电、协议都留好扩展位,后面的每一步都会轻松很多。