使用myCobot和OAK-D OpenCV DepthAI摄像头制作一个可以在眼前始终享受视频的手机支架!

引言

由于YouTube和Netflix的出现,我们开始躺着看手机。然而,长时间用手拿着手机会让人感到疲劳。这次我们制作了一个可以在你眼前保持适当距离并调整位置的自动移动手机支架,让你无需用手拿着手机。请务必试试!

准备工作

这次我们使用了Elephant Robotics公司的机械臂。与其他产品相比,它价格便宜,作为初学者也相对容易上手。

myCobot 280 Pi- 6 DOF Collaborative Robot (Raspberry Pi version)

为了让摄像头跟踪面部,我们采用了OAK-D OpenCV DepthAI摄像头。它不仅仅是进行视频捕捉,还能辅助进行面部识别所需的神经网络运算,因此即使微控制器没有GPU,也能高速进行面部识别。

这是一个可以始终将显示屏调整到眼前适当距离的手机支架。主要由OAK-D摄像头和机械臂“myCobot”构成。OAK-D摄像头不仅可以获取视频,还可以获取深度信息,从而计算出摄像头到脸部的距离。myCobot是一款具有6个旋转轴的机械臂,能够实现多种动作。通过OAK-D摄像头获取的图像来计算脸部的三维位置,myCobot可以将手机显示屏移动到眼前。这样一来,即使不用手拿着手机也能享受视频。

将OAK-D摄像头和手机安装到myCobot上

myCobot的末端有四个M2.6的螺丝孔。我们3D打印了一个手机壳,并利用这些螺丝孔将壳子固定到myCobot上,从而固定手机。

另一方面,OAK-D摄像头有一个1/4英寸的螺丝孔。我们在3D打印的壳子上也开了一个用于1/4英寸螺丝的孔,以便固定摄像头。

作为参考,这里放置了此次使用的STL数据。

Smartphone holders with a camera for myCobot by techlife_hacking - Thingiverse

机械臂的动作

X方向的移动:J1轴的旋转

Y方向的移动:J4轴的旋转

Z方向的移动:J2和J3轴的旋转(J2和J3反向旋转)

使用J2和J3轴来进行深度方向的移动。仅移动J2会影响Y方向,因此让J3以与J2轴相反的方向旋转相同的量,以减小影响。

3D Face Tracking

在XY平面上跟踪面部

通过对OAK-D摄像头获取的图像进行面部检测,可以获取相机画面中面部的坐标(x, y)。

将OAK-D摄像头画面的中心坐标设为目标值,将面部识别获得的面部坐标(x, y)作为反馈值进行PID控制。

深度方向(Z方向)上的面部跟踪

由于OAK-D摄像头配备了立体摄像头,因此不仅可以获取平面上的面部坐标,还可以获取深度方向的面部坐标z。将面部与显示屏之间既不过近也不过远的距离设为目标值,利用立体摄像头测量的面部坐标(z)作为反馈值进行PID控制。

myCobot和OAK摄像头

将OAK摄像头和myCobot附带的Raspberry Pi通过USB连接。OAK摄像头计算出面部的目标坐标,myCobot附带的Raspberry Pi根据这些坐标进行PID控制,以调整摄像头的方向。

环境

为myCobot附带的Raspberry Pi进行环境构建。

myCobot

在myCobot的Raspberry Pi版本中,只要接通电源,就可以立即使用。机械臂可以通过Python进行操作,并且官方也提供支持。

# test
from pymycobot.mycobot import MyCobot
 
mycobot = MyCobot('/dev/ttyUSB0')
# 使其直立
# go zero
mycobot.send_angles([0,0,0,0,0,0], 80)

OAK-D OpenCV DepthAI摄像头

安装用于操作OAK-D摄像头的depthai库。

# install dependency
sudo curl -fL http://docs.luxonis.com/_static/install_dependencies.sh | bash
 
# get sources
git clone https://github.com/luxonis/depthai.git
 
# install depthai
python3 install_requirements.py

演示

环境搭建完成后,请运行演示程序。若摄像头能够在保持一定距离的同时追踪面部,则说明系统运行正常。

# get demo sources
git clone https://github.com/tech-life-hacking/depthai.git
 
# execute demo
python3 depthai_demo.py

PID的调整

如果myCobot的动作不稳定,请调整PID值。

# settings
PID_control.PID(P值, I值, D值)
pidX.setTargetPosition(帧中的点的位置(X方向): 范围0-1, 0.5是中心)
pidY.setTargetPosition(帧中的点的位置(Y方向): 范围0-1, 0.5是中心)
pidZ.setTargetPosition(摄像头和面部的距离(米), 0.5米 = 50厘米)

#en
 PID_control.PID(P value, I value, D value)
pidX.setTargetPosition(Position of the point in the frame (X direction): Range 0-1, 0.5 is the center)
pidY.setTargetPosition(Position of the point in the frame (Y direction): Range 0-1, 0.5 is the center)
pidZ.setTargetPosition(Distance between the camera and the face (meters), 0.5m = 50cm)

# default
pidX = PID_control.PID(10, 10, 3.75)
pidY = PID_control.PID(6.5, 5, 2.5)
pidZ = PID_control.PID(50, 30, 20)
pidX.setTargetPosition(0.5)
pidY.setTargetPosition(0.5)
pidZ.setTargetPosition(0.5)

确定目标值

确定myCobot摄像头指向目标值的代码如下。nnData[0]表示OAK-D摄像头检测到的面部包围框的四个角的坐标。将这四个角的坐标和除以2,可以得出包围框的中心点。spatialCoordinates.z是一个方法,用于返回摄像头和面部之间的距离测量结果。

x = (self._nnData[0].xmin + self._nnData[0].xmax) / 2
y = (self._nnData[0].ymin + self._nnData[0].ymax) / 2
z = int(self._nnData[0].spatialCoordinates.z) / 1000

结语

这次我们使用OAK-D摄像头进行面部识别,并利用能够做出复杂动作的机械臂进行面部跟踪。通过计算机视觉捕捉人类的动作,并据此操控机械臂,可以发现它能够进行非常多样的动作。希望这能为大家的开发提供参考。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/764915.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

荣耀大横评,睿蓝7-450荣耀版卷出来的性价比之王

手握11万左右预算,如何在市场内选出一辆合适自己的车?荣耀版车型无疑是当下的最佳答案。在众多荣耀版车型中,比亚迪宋PLUS荣耀版EV520km领先型(后统称宋PLUS荣耀版)、比亚迪元PLUS荣耀版430km领先型(后统称元PLUS荣耀版)、比亚迪海豚PLUS荣耀版420km时尚版(后统称海豚荣耀版)、…

78.Vue 3 重用性模态框组件

模态框是大多数 Web 应用程序中的基本构建块。虽然最初实现起来可能看起来有点棘手,但实际上,使用 Vue 和一些 Flexbox 技巧,这不仅可行,而且非常简单。 让我们一起实现一个基础的模态框组件。 架构如下: AppModal.vue…

【Spring Boot】Spring AOP中的环绕通知

目录 一、什么是AOP?二、AOP 的环绕通知2.1 切点以及切点表达式2.2 连接点2.3 通知(Advice)2.4 切面(Aspect)2.5 不同通知类型的区别2.5.1 正常情况下2.5.2异常情况下 2.6 统一管理切点PointCut 一、什么是AOP? Aspect Oriented Programming&#xff…

【C语言内存函数】

目录 1.memcpy 使用 模拟实现 2.memmove 使用 模拟实现 3.memset 使用 4.memcmp 使用 1.memcpy 使用 void * memcpy ( void * destination, const void * source, size_t num );目的地址 源地址 字节数 destination:指向要复制内…

文件操作详解(C语言)

1.为什么要用到文件?怎样数据才能持久化? 保存在内存中的数不安全(一次断电,忘记保存,不用了还给系统) 持久化:保存在硬盘上(放在文件中) 什么是文件?文件…

pgrouting使用

pgRouting是一个为PostgreSQL和PostGIS提供路由功能的开源库,它支持复杂的图论算法,用于在地理网络中进行最短路径搜索。以下是pgRouting的一些应用实例。 注意事项: 1、路网表中的id、source、target必须是int类型,否则创建拓扑…

傅雷家书思维导图的制作方法,分享制作技巧和软件!

在浩如烟海的书海中,《傅雷家书》以其独特的视角和深厚的情感,成为了无数读者心中的经典。那么,如何将这部饱含父爱的书信集转化为清晰易懂的思维导图呢?本文将为您详细解读傅雷家书思维导图的制作技巧,并推荐几款实用…

java面试-SpringAOP

1.SpringAOP的使用 你了解Spring AOP 吗? 通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。 2.SpringAOP的原理 我们可以将ASM生成的类进行缓存,这样能解决生成的类比较低效的问题。 ASM是可以操作字节码的框架。 真实实现类和…

Windows 组策略编辑器怎么打开,这两种方法你必须知道

组策略编辑器(Group Policy Editor, 简称 GPEdit.msc)是 Windows 操作系统中一个强大的工具,主要用于管理和配置系统设置、安全选项、用户权限等,尤其适用于企业环境中批量部署和管理策略。 尽管家庭版 Windows(如 Win…

数字集群手持终端是什么_鼎跃安全

在当今快速发展的科技时代,通信技术的进步为各行各业带来了巨大的变革。尤其是在公共安全、应急救援和交通运输等领域,通信的及时性和可靠性变得尤为重要。数字集群手持终端作为一种专用于数字集群通信系统的便携式设备,数字集群手持终端是一…

ubuntu安装miniconda、jupyer、ros2

miniconda: 类似于虚拟机 ,可以安装不同版本的python jupyer: python执行、调试命令工具 1.下载安装文件 wget https://repo.anaconda.com/miniconda/Miniconda3-py310_23.5.2-0-Linux-x86_64.sh 2.安装minconda bash https://repo.anaconda.com/miniconda/Miniconda3-py…

Linux 防火墙开放端口

启动防火墙服务:systemctl start firewalld 查看防火墙开放端口 :firewall-cmd --list-ports 开放3306端口:firewall-cmd --zonepublic --add-port2375/tcp --permanent 防火墙重启:firewall-cmd --reload

第十二届信息系统与计算技术国际会议(ISCTech 2024)

随着信息技术的迅猛发展,信息系统与计算技术已成为推动社会进步和经济发展的重要力量。为了加强国内外专家学者在信息系统与计算技术领域的交流与合作,第十二届信息系统与计算技术国际会议(ISCTech 2024)将于2024年11月8日至11日在…

BK145FRC10HSK、BK165FRC10HSK电液比例开环控制变量泵放大器

BK15FRC10HAK、BK35FRC10HAK、BK45FRC10HAK、BK55FRC10HAK、BK70FRC10HSK、BK80FRC10HSK、BK90FRC10HSK、BK100FRC10HSK、BK120FRC10HSK、BK145FRC10HSK、BK165FRC10HSK、BK180FRC10HSK电液比例开环控制柱塞泵主要是在传统的液压泵基础上,增加了电液比例控制先导阀。…

git基本使用(一):git的基本概念

Git 是一种分布式版本控制系统,最初由 Linus Torvalds 于 2005 年为 Linux 内核开发。它主要用于跟踪文件的更改,特别是在软件开发过程中,可以帮助团队成员协同工作。它在实际项目开发中,应用非常广泛,我们这一节来掌握…

【web3】分享一个web入门学习平台-HackQuest

前言 一直想进入web3行业,但是没有什么途径,偶然在电鸭平台看到HackQuest的共学营,发现真的不错,并且还接触到了黑客松这种形式。 链接地址:HackQuest 平台功能 学习路径:平台有完整的学习路径&#xff…

博途(TIA Portal)自动化工程软件下载安装,TIA Portal V18软件安装包获取

博途(TIA Portal)不仅仅是一款自动化工程软件,它更是西门子自动化领域的璀璨明珠。 它能够将西门子的所有自动化产品无缝集成在一起,无论是PLC、人机界面,还是伺服系统、马达、变频器、网络组件等,博途都能…

SMS群发信息API接口安全性有哪些保障方法?

SMS群发信息API接口支持哪些格式?如何使用API接口? SMS群发信息API接口被广泛应用于企业营销、客户服务、身份验证等多个领域。确保SMS群发信息API接口的安全性,已成为企业和开发者们必须重视的问题。AoKSend将探讨几种保障SMS群发信息API接…

容器技术-docker5

一、docker-compose 常用命令和指令 1. 概要 默认的模板文件是 docker-compose.yml,其中定义的每个服务可以通过 image 指令指定镜像或 build 指令(需要 Dockerfile)来自动构建。 注意如果使用 build 指令,在 Dockerfile 中设置…

前端技术(说明篇)

Introduction ##编写内容:1.前端概念梳理 2.前端技术种类 3.前端学习方式 ##编写人:贾雯爽 ##最后更新时间:2024/07/01 Overview 最近在广州粤嵌进行实习,项目名称是”基于Node实现多人聊天室“,主要内容是对前端界…
最新文章