MR - 蘑菇追踪机器人小车控制系统
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.py 中Config类包含核心可配置参数,可根据硬件实际情况调整:
| 参数类别 | 关键参数 | 说明 |
|----------------|-------------------------|--------------------------|
| 视频参数 | CAMERA_WIDTH/HEIGHT | 摄像头分辨率 |
| 颜色识别 | HUE/SAT/VAL 上下限 | 蘑菇识别的颜色阈值 |
| TCP参数 | TCP_PORT_* | 各服务监听端口 |
| 舵机参数 | BASE/TOP_SERVO_ID | 舵机编号与角度限位 |
| 控制参数 | KP/KI/KD | 追踪PID控制参数 |
注意事项
- 运行前确保树莓派GPIO口未被其他程序占用,避免权限问题(建议使用sudo运行)
- 舵机角度调整时需缓慢测试,确认限位参数符合硬件实际范围
- TCP服务默认监听所有网络接口(0.0.0.0),建议在局域网内使用,避免安全风险
- 若摄像头无法打开,检查
cv2.VideoCapture的设备编号(0/1)或驱动是否正常
扩展方向
- 完善蘑菇识别算法,增加目标检测模型(如YOLO)提升识别精度
- 增加WiFi/蓝牙控制方式,适配移动端APP
- 加入避障功能,结合超声波/红外传感器
- 优化多线程并发控制,支持多客户端同时控制
- 增加日志系统,便于问题排查
常见问题
- 摄像头无法打开:检查设备权限、摄像头驱动,尝试更换
cv2.VideoCapture的设备编号 - 小车无响应:确认LOBOROBOT库初始化成功,GPIO接线正确,指令格式无误
- 视频流卡顿:降低摄像头分辨率、减小JPEG压缩质量,或优化网络环境
- 舵机抖动:调整角度平滑参数、增加延时,或检查供电稳定性