MR - 蘑菇追踪机器人小车控制系统

该项目是一套基于Python开发的机器人小车控制系统,核心实现对搭载云台的移动小车的远程控制、摄像头视频流传输以及蘑菇目标追踪功能,适用于树莓派(Raspberry Pi)硬件平台,通过TCP网络通信实现客户端对小车的灵活操控。

项目结构

| 文件名称 | 核心功能 | |----------------|--------------------------------------------------------------------------| | main.py | 项目主入口,整合视频流、小车运动控制、舵机控制等所有核心功能,启动多线程服务 | | cam.py | 摄像头视频流采集与TCP服务器实现,负责将摄像头画面推送给客户端 | | mr_track.py | 蘑菇追踪系统核心逻辑,结合视觉识别与舵机控制实现目标追踪 | | duoji.py | 云台舵机手动控制终端,支持输入舵机编号和角度实现精准控制 | | move.py | 小车运动功能测试脚本,验证前进、后退、转向等基础运动指令有效性 | | LOBOROBOT.py | 机器人小车底层控制库(依赖),封装小车运动、舵机角度调节等基础API |

核心功能

1. 多线程服务架构

项目采用多线程设计,同时运行以下核心服务,保证各功能独立且高效协同:

  • 视频处理线程:采集摄像头画面并缓存,为视频流传输提供数据支撑
  • TCP视频流服务:监听指定端口,将摄像头画面编码为JPEG格式并通过TCP推送给客户端
  • TCP小车控制服务:接收客户端运动指令,解析并执行小车前进、后退、转向等动作
  • TCP舵机控制服务:接收客户端指令,调节云台底座/顶部舵机角度(可选扩展)

2. 机器人小车控制

  • 支持的运动指令:前进、后退、左转、右转、左移、右移、斜向运动等
  • 指令格式:动作编号,速度,持续时间(例如:1,30,2 表示以30速度前进2秒)
  • 指令映射:通过COMMAND_MAPPING字典实现指令编号到具体动作的映射,易于扩展

3. 云台舵机控制

  • 支持底座舵机(ID:10)、顶部舵机(ID:9)的角度调节
  • 预设初始角度与角度限位,防止舵机超程损坏
  • 提供手动控制终端(duoji.py)和TCP远程控制两种方式

4. 视频流传输

  • 摄像头分辨率可配置(默认320x240)
  • JPEG格式压缩传输,可调节压缩质量平衡画质与传输效率
  • 支持多客户端连接(单客户端监听模式,可扩展)

5. 蘑菇追踪(待完善/核心能力)

mr_track.py 实现蘑菇目标的视觉追踪逻辑,结合舵机控制让云台自动跟随目标,可通过配置参数调整识别精度、追踪灵敏度等。

环境依赖

硬件

  • 树莓派(任意型号,推荐4B/5)
  • 带云台的移动机器人小车(兼容LOBOROBOT库)
  • USB摄像头/树莓派摄像头模块
  • 舵机(底座+顶部,共2路)

软件

  • Python 3.7+
  • 依赖库:
    pip install opencv-python numpy
    
  • 系统依赖:
    • RPi.GPIO(树莓派GPIO控制)
    • LOBOROBOT机器人控制库(硬件厂商提供)

快速开始

1. 硬件连接

  • 连接摄像头到树莓派USB/CSI接口
  • 连接舵机、电机驱动板到树莓派GPIO口
  • 确保小车供电正常,硬件接线符合LOBOROBOT库要求

2. 测试基础功能

# 测试小车运动功能
python move.py

# 测试舵机手动控制
python duoji.py

# 测试摄像头视频流
python cam.py

3. 启动完整控制系统

python main.py

启动后会自动初始化舵机、启动各TCP服务线程,控制台输出如下:

初始化舵机到初始位置...
视频处理线程启动:320x240
TCP服务线程启动,监听 0.0.0.0:8080
小车控制线程启动,监听 0.0.0.0:8081

4. 客户端连接

  • 视频流客户端:连接树莓派IP:8080,接收JPEG格式视频流
  • 控制客户端:连接树莓派IP:8081,发送运动/舵机指令,接收执行结果反馈

配置参数说明

main.pyConfig类包含核心可配置参数,可根据硬件实际情况调整: | 参数类别 | 关键参数 | 说明 | |----------------|-------------------------|--------------------------| | 视频参数 | CAMERA_WIDTH/HEIGHT | 摄像头分辨率 | | 颜色识别 | HUE/SAT/VAL 上下限 | 蘑菇识别的颜色阈值 | | TCP参数 | TCP_PORT_* | 各服务监听端口 | | 舵机参数 | BASE/TOP_SERVO_ID | 舵机编号与角度限位 | | 控制参数 | KP/KI/KD | 追踪PID控制参数 |

注意事项

  1. 运行前确保树莓派GPIO口未被其他程序占用,避免权限问题(建议使用sudo运行)
  2. 舵机角度调整时需缓慢测试,确认限位参数符合硬件实际范围
  3. TCP服务默认监听所有网络接口(0.0.0.0),建议在局域网内使用,避免安全风险
  4. 若摄像头无法打开,检查cv2.VideoCapture的设备编号(0/1)或驱动是否正常

扩展方向

  1. 完善蘑菇识别算法,增加目标检测模型(如YOLO)提升识别精度
  2. 增加WiFi/蓝牙控制方式,适配移动端APP
  3. 加入避障功能,结合超声波/红外传感器
  4. 优化多线程并发控制,支持多客户端同时控制
  5. 增加日志系统,便于问题排查

常见问题

  • 摄像头无法打开:检查设备权限、摄像头驱动,尝试更换cv2.VideoCapture的设备编号
  • 小车无响应:确认LOBOROBOT库初始化成功,GPIO接线正确,指令格式无误
  • 视频流卡顿:降低摄像头分辨率、减小JPEG压缩质量,或优化网络环境
  • 舵机抖动:调整角度平滑参数、增加延时,或检查供电稳定性