Skip to content

yuange250/SmartCar

Repository files navigation

智能小车控制系统

这是一个基于树莓派的智能小车控制系统,包含服务端和客户端两个部分。

项目介绍与设计复盘

如果你想先快速了解这个项目的设计取舍、踩坑记录和后续规划,可以先看这篇完整复盘:

复盘里重点解释了:

  • 为什么主控选择树莓派(而不是只用 MCU)
  • 为什么电源拆成三路(主控 / 底盘 / 机械臂)
  • 从“移动平台”到“移动操作平台”的机械臂扩展思路

成品效果

成品图1

硬件清单与成本

1) 小车基础平台(不含机械臂)

模块 规格/说明 数量 参考单价(¥) 小计(¥)
树莓派主控 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 元

2) 机械臂扩展(SO101,可选)

模块 规格/说明 数量 参考单价(¥) 小计(¥)
SO101 打印件 机械从臂结构件 1 套 200 200
总线舵机 STS3215 7.4V 6 83(约) 500(约)
机械臂控制板 微雪 SO-ARM100/101 控制板 1 30 30
机械臂供电 18650 * 2 + 电池盒 1 套 18 18

机械臂扩展预算:约 748 元

3) 总预算参考

方案 预算(¥)
仅小车平台(含云台+摄像头) 约 551
小车 + SO101 机械臂 约 1299

说明:以上均为淘宝参考价,受活动、地区和品牌影响会有波动,建议按你的购物车实时更新。

引脚定义

电机控制引脚 (L298N向树莓派连接)

  • IN1: GPIO 9
  • IN2: GPIO 25
  • IN3: GPIO 11
  • IN4: GPIO 8
  • ENA: GPIO 6 (左电机PWM)
  • ENB: GPIO 12 (右电机PWM)

云台舵机控制引脚(云台舵机向树莓派连接)

  • 水平舵机: GPIO 15
  • 垂直舵机: GPIO 18

功能特点

  1. 基础运动控制

    • 前进/后退
    • 左转/右转(单轮驱动转向)
    • 速度调节(0-100%)
  2. 云台控制(可选)

    • 水平舵机控制(0-180度)
    • 垂直舵机控制(0-180度)
  3. 视频传输(可选)

    • 实时视频流
    • 可调节分辨率
    • 自动重连机制
  4. 远程控制

    • TCP/IP通信
    • 实时状态反馈
    • 多客户端支持

安装说明

  1. 安装依赖
pip install -r requirements.txt
  1. 配置GPIO
# 确保GPIO权限
sudo usermod -a -G gpio $USER
  1. 运行服务端
python car_server.py
  1. 运行客户端
python car_client.py <服务器IP>

SO101 机械臂使用说明(微雪控制板 + USB)

本项目提供了一个简单的机械臂控制模块 arm.py,以及测试脚本 test_arm.py,用于通过树莓派控制 SO101 机械臂。

1. 硬件连接

  • 将 SO101 机械臂接入微雪 SO-ARM100/101 控制板
  • 使用 USB 线将控制板连接到树莓派
  • 为控制板和舵机提供稳定电源(参考官方说明)

2. 串口确认与权限

在树莓派上执行:

ls /dev/ttyACM*
sudo chmod 666 /dev/ttyACM*

记住实际的串口号(如 /dev/ttyACM0/dev/ttyACM1),后续会用到。

3. 安装机械臂依赖(LeRobot)

arm.py 当前是基于 LeRobot 的薄封装,请先安装:

pip install "lerobot[feetech]"

4. 使用测试脚本验证机械臂

在项目根目录下运行:

python3 test_arm.py

脚本步骤:

  1. 启动后,会提示你输入串口设备路径:
    • 直接回车使用默认值 /dev/ttyACM0
    • 或手动输入实际串口,例如 /dev/ttyACM1
  2. 输入标定时使用的 robot_id(例如 my_follower_arm
  3. 连接成功后会显示菜单:
    • 1:回到初始姿态(调用 ArmController.go_home
    • 2:让关节 2 上下摆动一次
    • 3:打开夹爪
    • 4:闭合夹爪
    • 5:自定义单关节角度(输入关节 ID、目标角度、运动时间)
    • 0:退出程序

如果机械臂无动作,请检查:

  • 控制板电源是否正常
  • 是否已完成 lerobot-setup-motorslerobot-calibrate
  • test_arm.py 输入的 robot_id 是否与标定时一致
  • 串口号与控制板连接是否一致(/dev/ttyACM0 / /dev/ttyACM1

5. 在代码中集成机械臂控制(示意)

当测试脚本工作正常后,你可以在树莓派服务端中集成机械臂,例如在 car_server.py 中:

  • 导入并初始化:
from arm import ArmController

# 在 CarServer.__init__ 中
self.arm = ArmController(port="/dev/ttyACM0", robot_id="my_follower_arm")
  • 在网络命令处理中增加机械臂相关命令(例如 arm_homearm_openarm_close 等),并调用:
self.arm.go_home()
self.arm.open_gripper()
self.arm.close_gripper()

根据你的实际协议和动作需求,可以扩展更多姿态和轨迹控制。

控制说明

键盘控制

  • W: 前进
  • S: 后退
  • A: 左转
  • D: 右转
  • Q: 停止
  • 1-9: 设置速度(1最慢,9最快)
  • ESC: 退出程序

鼠标控制(GUI)

  • 方向按钮:控制小车移动
  • 速度滑块:调节速度(0-100%)
  • 舵机控制:调节云台角度(0-180度)
  • 摄像头控制:开启/关闭视频流

注意事项

  1. 电机控制

    • 使用单轮驱动转向,内侧轮子完全停止
    • 转向时外侧轮子保持原速,内侧轮子停止转动
    • 确保电机接线正确,左右轮定义准确
  2. 视频传输

    • 默认分辨率:640x480
    • 帧率:15fps
    • 图像质量:30%
    • 自动重连和错误恢复
  3. 安全提示

    • 首次测试时使用较低速度
    • 确保有足够的测试空间
    • 注意电池电量

故障排除

  1. 电机不转动

    • 检查GPIO连接
    • 确认电源供应
    • 验证PWM设置
  2. 转向异常

    • 检查左右轮定义
    • 确认内侧轮子是否完全停止
    • 验证电机接线和PWM控制
  3. 视频流问题

    • 检查网络连接
    • 确认摄像头权限
    • 查看错误日志

更新日志

v1.0.0

  • 基础运动控制
  • 单轮驱动转向实现
  • 视频流传输
  • GUI界面优化

贡献指南

欢迎提交Issue和Pull Request来帮助改进项目。

许可证

MIT License

About

smart car drived by Raspberry Pi

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages