上一篇《给28BYJ-48三自由度机械臂加一个网页控制台》分享了28BYJ-48三自由度机械臂,本篇给机械臂加上视觉,借助电脑的摄像头,实现人脸跟随。
1、系统结构
视觉计算放在笔记本电脑上,ESP32只负责执行动作。笔记本的摄像头在电脑屏幕中心对着人,机械臂立在屏幕前:
| 角色 | 设备 | 职责 |
| 眼睛 | 摄像头 | 拍摄画面 |
| 大脑 | 笔记本电脑 | 人脸检测、解算角度、下发指令 |
| 小脑 | ESP32-P4 | 接收角度,驱动步进电机 |
| 神经 | WiFi+HTTP | 传输指令 |

2、跟随原理
参考https://forum.eepw.com.cn/thread/398324/1
人脸检测用的还是OpenCV,模型换成更小的YuNet(232KB),笔记本CPU单帧几十毫秒。整个跟随逻辑就五条:
①人脸检测:画面里有多张脸时取框面积最大的,也就是离镜头最近的那位。
②角度解算:每帧取人脸框中心的水平偏移,乘上灵敏度系数就是底座J1的目标角。脸在画面正中对应0°,偏得越多转得越多,全程只有J1会动。
③防抖闸门:人脸框每一帧都在抖,不能按帧下发——偏移小于死区不动,变化不够不下发,运动中不改目标。
④回正与追随:脸回到画面中心附近,目标角直接归0°,机械臂每次都精确回正;连续转头时目标一变远就直接改道,平滑跟上而不是走一步停一步。
⑤绝对指令:目标是绝对角度,不是在当前角度上累加,否则同一个偏移会被反复叠加,机械臂会匀速爬走停不下来。
3、软件介绍
| 文件 | 位置 | 作用 |
| stepper3.py/server.py/index.html | ESP32 | 上一篇的三轴驱动、服务器、控制页,原样复用 |
| arm_client.py | 电脑 | HTTP客户端,把角度翻译成/api/move请求 |
| face_follow.py | 电脑 | 主程序:检测人脸、解算角度、下发指令 |
代码放在附件。
4、使用方法
笔记本电脑安装好Python和OpenCV(pip install opencv-python numpy requests),ESP32按上一篇跑起服务器。上电前把底座朝向摆正——0°就是上电中间位,脸在画面正中时机械臂指的就是这个方向。运行face_follow.py后按A摆位,让J3转到90°、末端有指向感,再按B开始或停止跟踪,h回中,z急停,q退出。
灵敏度和方向符号都在face_follow.py顶部,转角小了调大,方向反了改符号。
需要注意的是,YuNet只认正脸,转头太狠或移出画面会跟丢,这时候机械臂就停在原地等你回来。
我要赚赏金
