元器件 · 控制器
树莓派
树莓派是一台卡片大小的完整 Linux 计算机。当机器人需要视觉、ROS,或是 Arduino 应付不了的算力时,它就是机器人的大脑。
它是什么
树莓派是信用卡大小的完整计算机。Arduino Uno 是永远跑一个程序的单片机,而树莓派跑 Linux——可以同时驱动相机、联网、跑 ROS 2、执行你的机器人代码。当机器人需要“思考”而不只是“反应”时,就轮到它当大脑。
能力也是代价:Linux 多任务让树莓派做不好单片机轻松拿下的微秒级精确时序。两者是搭档,不是对手。
工作原理
树莓派从 microSD 卡启动操作系统(一般是 Raspberry Pi OS),之后就和普通 Linux 机器一样。对机器人重要的是 40 针 GPIO 排针:数字输入输出,外加 I²C、SPI、UART 总线,让树莓派能读传感器、指挥硬件。再往上是单片机没有的计算机部件——USB、以太网、Wi-Fi 和相机接口。
常见架构是双脑机器人:树莓派管感知和规划(视觉、SLAM、ROS 节点),把电机指令交给 Arduino 做实时控制。
什么时候用它
当机器人需要计算机的能力时请出树莓派:
- 计算机视觉——相机加 OpenCV,做标记检测、物体或线检测。
- ROS 2——跑节点、话题和导航栈。
- 建图 / SLAM——建图并在图中定位。
- 联网——网页控制台、远程控制或遥测。
纯实时控制任务坚持用 Arduino 或 ESP32——更便宜、更简单,时序更准。
接线与坑
- **3.3 V 逻辑,不耐 5 V。**给 GPIO 灌 5 V 会烧板子。5 V 器件过来的信号要电平转换(比如 HC-05 的 TX 线)。
- **还是不能直接带电机。**GPIO 只发信号,电机电流要走 L298N 这样的驱动。
- **供电很挑剔。**给足稳定的 5 V 和电流;欠压会损坏 SD 卡、造成随机重启。
- **要正常关机。**跑着的 Linux 直接拔电可能损坏存储卡——设计安全下电流程,或用只读文件系统。
40 针排针,哪些脚能用
排针 40 脚,能当 GPIO 的只有 26 个,其余是电源和地。
| 功能 | 引脚(BCM 编号) | 说明 |
|---|---|---|
| I²C-1 | GPIO 2(SDA)、GPIO 3(SCL) | 板上有固定 1.8 kΩ 上拉到 3.3 V |
| SPI0 | GPIO 10(MOSI)、9(MISO)、11(SCLK)、8/7(CE0/CE1) | |
| UART | GPIO 14(TX)、15(RX) | 默认被 Linux 控制台占用——必须释放 |
| 硬件 PWM | GPIO 12、13、18、19 | 只有这四个,其余都是软件 PWM |
| 电源 | 3.3 V、5 V | 5 V 直通输入——无稳压 |
| 通用 | 其余 |
其中两行经常坑掉人一个晚上。
**UART 是控制台。**开箱 GPIO 14/15 上就是 Linux 登录提示。接 GPS 或 Arduino 得到的是登录噪声而不是数据。用 sudo raspi-config → Interface Options → Serial Port → login shell 选 no,hardware serial 选 yes 释放。树莓派 3 及以后还有个坑:好的 UART 默认给了蓝牙,排针上的是“mini UART”,波特率随 CPU 主频漂移。在 /boot/config.txt 里加 dtoverlay=disable-bt 换回来。
**软件 PWM 会抖。**只有四个脚有硬件 PWM,其余靠内核生成,Linux 调度器会打断——反映在舵机上就是肉眼可见的抽搐。这是树莓派不擅长什么的最直观展示。
时序问题,直说
这是关于机器人上树莓派最重要的一件事,而且不是缺陷——操作系统本来就是这样。
跑 loop() 的单片机只执行你的代码,1 ms 间隔就是 1 ms。Linux 是分时的:内核随时可能抢占你的进程去收网络包、刷磁盘,或跑上百个后台任务中的一个。
| 任务 | 单片机 | 树莓派(标准 Linux) |
|---|---|---|
| 1 kHz 控制环 | 轻而易举,分毫不差 | 能跑,但偶发毫秒级的错过 |
| 舵机 PWM | 稳如磐石 | 软件 PWM 脚肉眼可见抖动 |
| 20 kHz 读编码器 | 中断常规操作 | 不可靠——边沿会丢 |
| 超声波回波计时 | 微秒级准确 | 随机几厘米误差 |
| 视觉、规划、联网 | 不可能 | 正是为它而生 |
结论就是双脑架构,这不是妥协,而是正经机器人的常规设计:
Raspberry Pi Microcontroller
- camera, vision - encoder counting
- SLAM, path planning <--> - PID motor control
- ROS 2 nodes - servo timing
- networking, dashboard - emergency stop
high-level goals hard real time
两者经 USB 串口、UART 或 I²C 对话,各干擅长的事。让树莓派数编码器边沿会丢;让 Arduino 跑 OpenCV 跑不动。
供电,以及 SD 卡问题
树莓派机器人死在供电上,而且死法格外昂贵:写数据时欠压会损坏 SD 卡,整个系统镜像都没了。
| 型号 | 推荐电源 | 负载 |
|---|---|---|
| Pi Zero 2 W | 5 V、2.5 A | 典型约 350 mA |
| Pi 3B+ | 5 V、2.5 A | 约 500 mA,峰值近 1.2 A |
| Pi 4B | 5 V、3 A(USB-C) | 约 600 mA,峰值近 1.5 A |
| Pi 5 | 5 V、5 A(USB-C PD) | 更高 |
由此得出的规矩:
- **电机和树莓派绝不共用一路电源。**电机启动电流正是会损坏存储卡的那种尖峰。
- 电池降压用开关稳压,别用线性稳压。11.1 V 线性降到 5 V、1 A 要烧 6 W。
- **看到闪电图标要当回事。**树莓派会显示欠压警告图标并记日志,
vcgencmd get_throttled也能查。非零就说明电源不行,早晚要损坏存储卡。 - **正常关机。**断电前
sudo shutdown -h now。拨动开关断电的机器人,要么给 GPIO 接关机按钮,要么用只读根文件系统。
部署的机器人值得认真考虑只读文件系统:打开 overlayfs 后运行期间永远不写卡,随时断电都没事。代价是不能在本地存数据,一般很划算。
机器人选哪个型号
| 型号 | 内存 | 选它的理由 |
|---|---|---|
| Pi Zero 2 W | 512 MB | 小而轻。跑相机和简单视觉够了 |
| Pi 3B+ | 1 GB | 便宜,跑不太重的 ROS 2 节点够用 |
| Pi 4B(4 GB) | 4 GB | ROS 2 加视觉的实用甜点 |
| Pi 5 | 4–16 GB | 明显更快;要更大电源和主动散热 |
ROS 2 加相机,4 GB 是不再难受的起点。RViz、视觉节点、导航栈加起来内存轻松超过 1 GB,而一旦树莓派开始把内存换页到 SD 卡上,它就会慢到无法使用——还会折损存储卡寿命。
实践中两个配件不是选配:散热片或风扇(满载的树莓派 4 在 80 °C 降频,降频就掉帧),以及好的 A2 级 microSD 卡,更好是 USB SSD 启动。瓶颈远多是卡速而不是 CPU。
故障排查
| 现象 | 可能原因 | 解决 |
|---|---|---|
| 随机重启 | 电源不够 | 查 vcgencmd get_throttled;换 3 A 电源 |
| SD 卡反复损坏 | 写数据时断电 | 正常关机,或用只读文件系统 |
| 闪电图标 | 欠压 | 更好的电源和更好的线——线很关键 |
| 串口收到登录噪声 | 控制台还占着 UART | 在 raspi-config 里关掉登录 shell |
| 串口波特率不对 | mini UART 跟 CPU 主频走 | dtoverlay=disable-bt 换回好的 UART |
| 舵机抽搐 | 软件 PWM 加调度器 | 用 PCA9685,或用单片机 |
| 编码器计数不对 | 负载下丢边沿 | 拿到单片机上数 |
| 跑几分钟变慢 | 过热降频 | 散热片或风扇 |
| GPIO 脚没反应了 | 5 V 灌进 3.3 V 脚 | 电平转换;那只脚大概率已损坏 |
| I²C 找不到设备 | 接口没开 | raspi-config 打开,再 i2cdetect -y 1 |
树莓派还是单片机?
| Arduino / ESP32 | 树莓派 | |
|---|---|---|
| 跑 | 你的代码,独占 | Linux,你的代码只是众多进程之一 |
| 时序 | 微秒级确定性 | 尽力而为,毫秒级抖动 |
| 启动 | 通电即跑 | 20–30 秒 |
| 断电 | 没事 | 可能损坏文件系统 |
| 视觉、ROS 2、联网 | 不行 | 行 |
| 功耗 | 毫安级 | 几百毫安到数安 |
| 价格 | $3–8 | $35–80 |
说句实在话:这两者不是竞争关系。树莓派数不好编码器,单片机跑不了 OpenCV。几乎所有像样的入门机器人最后两个都有,早点认清这一点,能省下大量让一方去干另一方活的力气。
如果机器人的全部行为就是一个控制环——循迹、避障、解迷宫——根本不需要树莓派,加上去只会启动更慢、更脆弱、更难调。
探索关联图谱
用到它的搭建
包含 树莓派 的项目、学习路线和模拟器。
对比
替代方案
问题
树莓派 常见问题
树莓派是什么?
树莓派是一种小巧、低成本的单板计算机,运行完整的 Linux 操作系统。Arduino 是在单片机上运行一个程序,而树莓派是一台真正的计算机——它可以同时运行相机、浏览器、ROS 和你的机器人代码。
树莓派和 Arduino,我需要哪一个?
电机和传感器的实时控制用 Arduino;机器人需要视觉、建图、ROS 或联网时用树莓派。许多机器人两者都用——树莓派当高层的大脑,Arduino 当实时执行的双手。树莓派的 Linux 多任务机制让它在微秒级精确时序上表现更差,而不是更好。
树莓派能控制电机吗?
它的 GPIO 引脚可以发出 PWM 和方向信号,但和 Arduino 一样,它不能直接从引脚给电机供电。你仍然要通过 L298N 这样的 H 桥来驱动电机。树莓派的引脚还是 3.3 V 的,所以接 5 V 器件时要注意逻辑电平。
做机器人一定需要树莓派吗?
不需要。大多数入门机器人(循迹车、避障车)用 Arduino 就能跑得很好,成本和复杂度都只有一小部分。只有当任务确实需要一台计算机时——计算机视觉、SLAM、运行 ROS 2 或网页界面——才用树莓派。
做机器人最好用哪些树莓派型号?
树莓派 4 和树莓派 5 是常见选择——CPU 和内存足以应付计算机视觉和 ROS。Pi Zero 2 W 是一款小巧、低功耗的选择,适合空间和电池续航比原始速度更重要的轻型机器人。凡是计算量大的任务,都别用最老的型号(Pi 1 和 Pi 2)。
延伸阅读