当前位置:首页 > 工业控制 > 电路设计项目集锦
[导读]该项目将计算机视觉与机器人技术集成于一块电路板上。摄像头捕捉视频,轻量级的人脸检测模型(由Edge Impulse提供支持)定位人脸,比例控制器则将该位置转换为差分轮子指令,整个过程每秒约10至15帧。

该项目将计算机视觉与机器人技术集成于一块电路板上。摄像头捕捉视频,轻量级的人脸检测模型(由Edge Impulse提供支持)定位人脸,比例控制器则将该位置转换为差分轮子指令,整个过程每秒约10至15帧。

UNOQ的分体式结构使得这一点成为可能:

•MPU(高通,Linux)--> 用Python运行机器学习模型和控制逻辑

•MCU(STM32、Zephyr RTOS)用于以实时精度驱动舵机PWM

两个处理器通过桥接RPC通信,这是一种基于MessagePack的协议,通过内部串行链路传输。这种分离方式将复杂的推理任务从实时路径中移开,同时保持电机控制的确定性。

基于浏览器的Web界面可让您实时监控检测结果并调整转向参数,无需重新编译。

先决条件

硬件

软件

•Arduino App Lab v0.6 或更高版本(在浏览器中运行,无需本地安装)

•与UNO Q在同一网络中的计算机

•Edge Impulse Studio Studio Studio 账户

架构概览

该系统分为三层:

为什么要将MPU和MCU分开?机器学习推理计算量大且非确定性,应运行在Linux处理器上;而舵机PWM时序对安全性至关重要,必须无抖动,因此需部署在实时微控制器上。通过桥接RPC连接两者,往返延迟约为8毫秒。

硬件组装

底盘概览

机器人采用简单的差动驱动布局:

•两个安装在相对两侧的连续旋转伺服电机

•后轮转向或滑动点,用于提升稳定性

•用于UNO Q和相机的顶部安装平台

•USB移动电源放置在平台上方或下方作为镇流器使用。

连续旋转伺服电机简化了接线。1500微秒的脉冲表示停止,低于1500微秒时单向旋转,高于1500微秒时反向旋转。

布线

•在伺服电源和地线之间并联一个100微法的电容,以吸收电流尖峰。

•将网络摄像头连接到USB-C分线器上的USB-A接口。USB-C端为UNO Q供电。

注意:右侧伺服电机相对于左侧是镜像安装的。固件通过脉冲反转标志来处理此问题,无需交叉线。

App Lab 中的项目设置

文件结构

每个 App Lab 项目都遵循以下布局:

配置砖块

砖块是预构建的中间件包,运行在MPU上。它们无需编写样板代码即可提供高级功能。本项目使用了两个:

视频对象检测,捕获摄像头帧,运行人脸检测模型,并通过回调函数将结果传递给你的Python代码

web_ui 用于提供 HTML/JSJSJS 前端仪表盘,并配备 Socket.IO 服务器以实现实时通信。

模型:人脸检测线选择了一个内置的轻量级人脸检测模型,无需训练或 Edge Impulseulseulse 账户。

草图依赖项

在 sketch/sketch.yaml 中,主要的库是 Arduino_RouterBridge(桥接 RPC)和 Servo(PWM 输出):

MCU固件设计为极简,它通过Bridge RPC接收脉宽命令,并将这些命令写入PWM硬件。所有决策均由MPU完成。

Bridge RPC RPC RPC 端点

关键概念:

Arduino Servoo 库通过 attach(pin 和 writeMicroseconds()() 处理 PWM 输出。这比依赖于设备树索引映射的底层 Zephyr PWM API(pwm_set_dt)更具可移植性,因为后者在不同板型版本之间可能存在差异。

Bridge.provide_safe() 会注册该函数,使其在 Arduino 的 loop() 上下文中运行,从而确保 PWM PWM 写入等硬件操作的安全性。切勿使用 Bridge.provide()()() 调用 GPIO、舵机或电机相关功能,因为这些调用会在后台的 RPC RPC RPC 线程中执行,硬件 API API 可能在此时失败。

脉冲反转用于处理镜像的右舵机:反转时,脉冲值为3000减去脉冲数。这会将脉冲在1500微秒的停止点周围进行镜像,因此Python发出的相同“前进”指令会使两个轮子朝同一物理方向移动。

空的 loop() 是正确的,BridgeBridge 库会内部钩入 loop,以分发排队的 provide_safe_safe 回调。

连续旋转伺服基础

离1500越近,轮子转动越慢。本项目使用最大±125微秒的偏移量,实现响应灵敏且安全可靠的运动。

MPU应用:从检测到转向

MPU上的Python应用程序承担着三项职责:接收来自视觉模块的检测信息、计算转向指令,并与MCU和Web用户界面进行通信。

砖块初始化

VideoObjectDetectionDetectionDetection 块每次处理一帧时都会触发回调。on_detect_all_all 变体会为每一帧触发,包括没有检测到对象的帧,有助于保持看门狗时间戳的新鲜度:

检测格式

砖块以字典形式返回检测结果,每个标签对应一个检测实例列表:

每个实例包含一个置信度分数以及一个边界框坐标元组(x_min, y_min, x_max, y_max),单位为像素。TARGET_CLASS_CLASS_CLASS 常量必须与模型的标签完全匹配,内置人脸检测模型的标签为 "face"。

重要提示:每个标签的值始终是一个列表,即使只检测到一个对象。如果代码期望每个标签对应一个普通的字典(不包含列表包装),则会静默忽略所有检测结果。

比例转向控制器

控制器将面部的水平位置转换为差分轮子指令:

1. 找到人脸的边界框中心

2. 归一化到 0.0(左边缘)— 1.0(右边缘)

3. 计算偏移误差:(中心 - 0.5) × 2.0 → → → 范围为 -1.00 到 +1.0

4. 应用死区(忽略微小误差以抑制抖动)

5. 使用幂曲线进行形状响应(压缩大误差)

6. 按 STEER_GAIN → → → 转向速度调整

7. 转换为差分脉冲:左 = 1500 + + + 转数,右 = 1500 - - - 转数

功率曲线(STEER_CURVE = 0.4)使小误差时响应更激进,靠近车架边缘时响应更平缓,是一种适用于此场景的简单PID替代方案。

漂移与丢失目标

当面部短暂消失(遮挡、眨眼或短暂移开视线)时,控制器会在最后一个已知位置上保持一段时间(默认为0.5秒),即TRACKING_TIMEOUT秒后,宣布目标丢失。这可避免出现抖动的启停行为。

当目标真正丢失时,机器人会停止。可选的搜索模式(默认关闭)会缓慢旋转以扫描面部。

桥接通信与速率限制

UNO Q Q Q 桥接器没有内部队列,命令发送过快会导致串行链路崩溃。应用程序将桥接器调用限制在每 20 Hz(5000 毫秒间隔)以内:

Bridge.notify() 是“即发即忘”(无需等待响应),可避免阻塞推理循环。而 Bridge.call()() 则会等待返回值,从而减慢控制循环的运行速度。

安全提示:紧急停止功能完全绕过速率限制,以确保MCU能立即接收到停止指令。

看门狗

后台线程会检查检测回调是否已停止发送。如果在1.5秒内没有触发任何回调(表明相机或管道出现故障),看门狗将强制发出停止命令:

网页用户界面

仪表板可在同一网络中的任何浏览器上运行,提供实时监控和参数调优功能。

功能

所有滑块调整通过 Socket.IO.IO.IO 立即生效,无需重启。这使得调参变得快速:调整一个滑块,观察机器人的响应,重复操作即可。

部署并运行

App Lab 用户界面

1. 在浏览器中打开 Arduino App Lab

2. 创建一个新应用或导入项目文件

3. 点击运行,App Lab Lab 将代码编译后,闪存 MCU MCU 并启动 Python Python 应用程序

首次启动检查清单

1. 检查日志中的 sample_detectionsetections 行,它会在第一帧上打印原始检测数据。请验证:

标签为“face”(与TARGET_CLASS匹配)

边界框坐标与您的相机分辨率相匹配

2. 打开 Web UI,你应该能在“最近检测”中看到视频流和检测事件。

3. 验证舵机,请在用户界面中按下电机测试按钮。两个轮子应先向左转动,暂停,然后向右转动。如果不符合,请检查接线和舵机电源,然后再进行面向跟踪。

校指南

转向方向

如果机器人转向远离你的脸而不是朝向它,请在 main.py 中翻转转向标志:

画幅宽度校准

检查 sample_detections 日志输出。如果 bounding_box_xyxy 中的最大 x x x 坐标与 FRAME_WIDTH_FALLBACK(默认为 640)有显著差异,请更新该常量使其匹配。错误的数值会导致转向不均匀或变弱。

增益调谐

从这些默认值开始,使用网页界面的滑块进行调整:

工作流程:将机器人放在桌面上,先设置初始参数。逐渐增大STEER_GAIN,直到机器人能平稳地对准你的面部。如果出现左右摆动(过冲),则需降低增益值。调校完成后,更新main.py中的默认参数,使机器人启动时使用合适的初始值。

本文编译自hackster.io

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
换一批
延伸阅读

上海2026年6月15日 /美通社/ -- 近日,全球领先的人工智能(AI)+机器人药物与新材料研发平台晶泰科技(2228.HK)宣布,其与中石化(上海)石油化工研究院有限公...

关键字: AI 智能化 泰科 机器人

如果一个人无法说话,却能仅通过眨眼来表达基本需求,会怎样?在这个项目中,我们探索人机交互(HCI)和脑机接口(BCI)的世界,开发出一种将眨眼动作转化为语音的系统。

关键字: 人机交互 脑机接口 机器学习

上海2026年6月12日 /美通社/ -- 近日,工信部、国资委启动2026年度人形机器人与具身智能实景实训专项行动正式开启,聚焦工业、服务、特种等领域的多个重点场景,部署打造实景实训空间、组建创新应用联合体、攻关实用化...

关键字: 机器人 模型 高精度 麒麟

【2026年6月12日,德国慕尼黑讯】全球功率系统和物联网领域的半导体领导者英飞凌科技股份公司(FSE代码:IFX / OTCQX代码:IFNNY)在其成熟的XENSIV™磁传感器产品组合基础上,推出了隧道磁阻(TMR)...

关键字: 磁传感器 人机交互 机器人

香港2026年6月12日 /美通社/ -- "2026彭博香港投资大会"开幕后,易方达香港首席投资官(国际权益)李剑锋(Jeff Li)先生发表了主题演讲...

关键字: 机器人 电动汽车 AI NEC

我们为我的工程预备二年级老师陈老师创建了这个项目。我们的想法不仅仅是制作一个枯燥的监控摄像头,而是希望利用自己的技能和资源,打造出一个看似有生命且能主动反应的眼睛。除了陈老师课堂上的成绩外,最激励我们的是证明自己是优秀的...

关键字: LCD屏幕 机器人 超声波测距仪

让我们先冷静一下。在终端中点击“Y”或“N”来批准AI工具的执行,这种操作实在无聊。作为开发者,我们整天盯着文本编辑器和命令行提示符。当你使用Anthropic的Claude Code CLI时,感觉这应该拥有更具体、更...

关键字: 机器人 机械臂 AI M5Stack

现已提供样品,为AI数据中心、机器人及能源基础设施应用带来更高功率密度与能效

关键字: 氮化镓 AI数据中心 机器人

特点:Arduino Uno R3 带有引脚布局,1MB Flash / 384KB RAM,支持 48MHz 和 96MHz 涡轮频率,24 个 GPIO 引脚(均可中断),21 个 PWM 渠道,内置 BLE 无线通...

关键字: 自动驾驶 机器学习 PID控制器

该项目最初旨在通过构建一款便携式陪伴机器人,将定制硬件、嵌入式软件、娱乐功能和交互式应用整合到一个平台上,从而在现实生活中重现这一概念。

关键字: 机器人 ESP32-S3 FreeRTOS
关闭