这是一个基于树莓派的智能小车控制系统,包含服务端和客户端两个部分。
如果你想先快速了解这个项目的设计取舍、踩坑记录和后续规划,可以先看这篇完整复盘:
复盘里重点解释了:
- 为什么主控选择树莓派(而不是只用 MCU)
- 为什么电源拆成三路(主控 / 底盘 / 机械臂)
- 从“移动平台”到“移动操作平台”的机械臂扩展思路
| 模块 | 规格/说明 | 数量 | 参考单价(¥) | 小计(¥) |
|---|---|---|---|---|
| 树莓派主控 | 3B(4/5 也可) | 1 | 300 | 300 |
| 电机驱动 | L298N | 1 | 11 | 11 |
| 小车底盘套件 | 铝合金双层底盘 + 4 直流电机 + 麦轮 | 1 套 | 55 | 55 |
| 云台舵机(可选) | SG90 | 2 | 5 | 10 |
| 云台打印件(可选) | SG90 云台支架 | 1 套 | 10 | 10 |
| USB 摄像头(可选) | 常规 UVC 摄像头 | 1 | 30 | 30 |
| 树莓派电源模块 | UPS | 1 | 120 | 120 |
| 动力电源 | 18650 * 3 + 电池盒 | 1 套 | 25 | 25 |
小车基础平台预算(含云台和摄像头):约 551 元
| 模块 | 规格/说明 | 数量 | 参考单价(¥) | 小计(¥) |
|---|---|---|---|---|
| SO101 打印件 | 机械从臂结构件 | 1 套 | 200 | 200 |
| 总线舵机 | STS3215 7.4V | 6 | 83(约) | 500(约) |
| 机械臂控制板 | 微雪 SO-ARM100/101 控制板 | 1 | 30 | 30 |
| 机械臂供电 | 18650 * 2 + 电池盒 | 1 套 | 18 | 18 |
机械臂扩展预算:约 748 元
| 方案 | 预算(¥) |
|---|---|
| 仅小车平台(含云台+摄像头) | 约 551 |
| 小车 + SO101 机械臂 | 约 1299 |
说明:以上均为淘宝参考价,受活动、地区和品牌影响会有波动,建议按你的购物车实时更新。
- IN1: GPIO 9
- IN2: GPIO 25
- IN3: GPIO 11
- IN4: GPIO 8
- ENA: GPIO 6 (左电机PWM)
- ENB: GPIO 12 (右电机PWM)
- 水平舵机: GPIO 15
- 垂直舵机: GPIO 18
-
基础运动控制
- 前进/后退
- 左转/右转(单轮驱动转向)
- 速度调节(0-100%)
-
云台控制(可选)
- 水平舵机控制(0-180度)
- 垂直舵机控制(0-180度)
-
视频传输(可选)
- 实时视频流
- 可调节分辨率
- 自动重连机制
-
远程控制
- TCP/IP通信
- 实时状态反馈
- 多客户端支持
- 安装依赖
pip install -r requirements.txt- 配置GPIO
# 确保GPIO权限
sudo usermod -a -G gpio $USER- 运行服务端
python car_server.py- 运行客户端
python car_client.py <服务器IP>本项目提供了一个简单的机械臂控制模块 arm.py,以及测试脚本 test_arm.py,用于通过树莓派控制 SO101 机械臂。
- 将 SO101 机械臂接入微雪 SO-ARM100/101 控制板
- 使用 USB 线将控制板连接到树莓派
- 为控制板和舵机提供稳定电源(参考官方说明)
在树莓派上执行:
ls /dev/ttyACM*
sudo chmod 666 /dev/ttyACM*记住实际的串口号(如 /dev/ttyACM0 或 /dev/ttyACM1),后续会用到。
arm.py 当前是基于 LeRobot 的薄封装,请先安装:
pip install "lerobot[feetech]"在项目根目录下运行:
python3 test_arm.py脚本步骤:
- 启动后,会提示你输入串口设备路径:
- 直接回车使用默认值
/dev/ttyACM0 - 或手动输入实际串口,例如
/dev/ttyACM1
- 直接回车使用默认值
- 输入标定时使用的
robot_id(例如my_follower_arm) - 连接成功后会显示菜单:
1:回到初始姿态(调用ArmController.go_home)2:让关节 2 上下摆动一次3:打开夹爪4:闭合夹爪5:自定义单关节角度(输入关节 ID、目标角度、运动时间)0:退出程序
如果机械臂无动作,请检查:
- 控制板电源是否正常
- 是否已完成
lerobot-setup-motors和lerobot-calibrate test_arm.py输入的robot_id是否与标定时一致- 串口号与控制板连接是否一致(
/dev/ttyACM0//dev/ttyACM1)
当测试脚本工作正常后,你可以在树莓派服务端中集成机械臂,例如在 car_server.py 中:
- 导入并初始化:
from arm import ArmController
# 在 CarServer.__init__ 中
self.arm = ArmController(port="/dev/ttyACM0", robot_id="my_follower_arm")- 在网络命令处理中增加机械臂相关命令(例如
arm_home、arm_open、arm_close等),并调用:
self.arm.go_home()
self.arm.open_gripper()
self.arm.close_gripper()根据你的实际协议和动作需求,可以扩展更多姿态和轨迹控制。
- W: 前进
- S: 后退
- A: 左转
- D: 右转
- Q: 停止
- 1-9: 设置速度(1最慢,9最快)
- ESC: 退出程序
- 方向按钮:控制小车移动
- 速度滑块:调节速度(0-100%)
- 舵机控制:调节云台角度(0-180度)
- 摄像头控制:开启/关闭视频流
-
电机控制
- 使用单轮驱动转向,内侧轮子完全停止
- 转向时外侧轮子保持原速,内侧轮子停止转动
- 确保电机接线正确,左右轮定义准确
-
视频传输
- 默认分辨率:640x480
- 帧率:15fps
- 图像质量:30%
- 自动重连和错误恢复
-
安全提示
- 首次测试时使用较低速度
- 确保有足够的测试空间
- 注意电池电量
-
电机不转动
- 检查GPIO连接
- 确认电源供应
- 验证PWM设置
-
转向异常
- 检查左右轮定义
- 确认内侧轮子是否完全停止
- 验证电机接线和PWM控制
-
视频流问题
- 检查网络连接
- 确认摄像头权限
- 查看错误日志
- 基础运动控制
- 单轮驱动转向实现
- 视频流传输
- GUI界面优化
欢迎提交Issue和Pull Request来帮助改进项目。
MIT License
