大象机械臂mechArm pi人脸识别项目

本文介绍了通过OpenCV进行人脸识别,并结合六轴机械臂mechArm270-Pi进行动态追踪的项目。作者计划利用Python库pymycobot控制机械臂,并探讨了手眼标定的eyetohand和eyeinhand两种方法,但遇到eyeinhand坐标转换的问题,项目暂时停滞,待进一步研究解决。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

看过钢铁侠的人都知道里面的贾维斯在帮助托尼斯塔克制作装备的时候,有许多械臂提供帮助制作装备,让装备的制作提高了效率。贾维斯是一个超级强大的人工智能系统,有了它的帮助如鱼的水。我脑海中浮现出来一个想法,让机械臂末端实现人脸识别和跟踪的功能,也有看到有人实现了机械臂末端物体的动态跟踪,看着这个项目好像很容易实现,让我来试一试吧!



项目设备

本次项目需要的设备在下表格里。

1268628dc7fef6ee0a54466b4d92f124.jpeg


mechArm 270-Pi


这是一款大象机器人生产的小六轴机械臂,以树莓派4B为微处理器,ESP32为辅助控制,结构是中心对称结构(仿工业结构)。mechArm 270-Pi本体重量1kg, 负载250g,工作半径270mm,设计紧凑便携,小巧但功能强大,操作简单,能与人协同、安全工作。


e1a1739a6fa5ad70f272f683c4465955.jpeg

4ea57b9ef563a0cc4f13e4b0881cd984.jpeg


mechArm 的资料丰富,提供了许多python的api接口可以方便提供给我来进行使用。它的末端的接口规格都可以从官网获取到资料,可以使用3d打印技术设计一款合适的设备。


计算机视觉


USB无畸变镜头

这里是摄像头的参数,主要是用于人脸识别。


67d93367313cb94045ca6a8673538950.jpeg


项目流程介绍


整体项目的流程图


这个项目的流程如下图所示,最主要的是解决OpenCV的人脸识别功能和机械臂手眼标定是选择eye in hand 还是eye to hand。

ceabde3e4fecfb73ee0d9f591ede42c4.jpeg


接下来我将简单介绍一下这两个功能有什么作用在项目当中。

OpenCV-人脸识别

302e38f5cde19a6476f4feb6c8704ea2.jpeg

OpenCV的全名是Open Source Computer Vision Library,是一个跨平台的电脑视觉库。它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。


人脸识别即程序对输入的图像进行判别是否有人脸,并识别出有人脸的图像所对应的人。我们常说的人脸识别一般包含了人脸检测人脸识别两部分。


人脸检测中,其主要任务是构造能够区分包含人脸实例和不包含人脸实例的分类器。

opencv中提供了三种训练好的级联分类器。级联分类器顾名思义即通过不同的特征进行一步步筛选,最终得出所属的分类,它将一个复杂的分类问题拆解为一个个简单的分类问题,随着级联条件的判断,能够一步步筛出大量的负样本,极大的提升了后面分类的速度。


opencv人脸识别库是开源的,还能够支持python的接口,可以直接进行调用。


这里是分类器的下载地址:http://face-rec.org/databases/



手眼标定


手眼标定实际上就是为了让机械臂知道相机拍出来的物体相对于机械臂在什么位置,换一种说法就是建立相机坐标系与机械臂坐标系的映射关系。

有两种方式

一种是eye to hand,眼在手外面,就是将相机固定在机械臂外面。

2b1c7df7a6ba60caa5d65c06e66ad208.jpeg


由于眼在手外标定时,Base坐标系和Cam坐标系的位置是固定的,因此眼在手外主要是求这两个坐标系的关系。


另一种是eye in hand,眼在手上,就是将相机固定在机械臂末端。

68fc6753c746670a508fee222b523d5f.jpeg

相机坐标系和工具坐标系的位置是相对不变的。因此,标定的就是cam坐标系和tool坐标系的关系。


项目开始

python对mechArm的控制

pymycobot 是用python控制mechArm的库,可以直接调用里面的方法。

介绍几个主要的方法:

release_all_servos()

release all robot arms

get_angles()

get the degree of all joints.

send_angle(id, degree, speed)

Send one degree of joint to robot arm.

send_angles(degrees, speed)

Send the degrees of all joints to robot arm.

degrees: a list of degree value(List[float]), length 6 or 4.

speed: (int) 0 ~ 100


from pymycobot.mycobot import MyCobot
import time


mc = MyCobot('/dev/ttyAMA0',1000000)
time.sleep(4)
for count in range(2):
mc.send_angles([0,0,0,0,0,0],70)
time.sleep(2)
mc.send_angles([0,38.32,(-6.76),10.01,99.22,(-19.77)],70)
time.sleep(2)
mc.send_angles([(-13.18),(-22.14),17.66,147.12,99.22,(-19.77)],70)
time.sleep(2)
mc.send_angles([98.43,(-2.98),(-95.88),161.01,(-1.23),(-19.77)],70)
time.sleep(2)
print(mc.get_angles())
print(mc.get_coords())
mc.send_angles([0,0,0,0,0,0],70)


视频演示

https://www.bilibili.com/video/BV1VW4y1M7Gv/?vd_source=dd6f4a47482e4e14e33125a26c155808


mechArm Pi还是可以很轻易上手的一款机械臂操控性很强。


接下来我们来研究一下如何实现人脸识别功能。


openCV 人脸识别的代码

在前面我介绍到了分类器,让我来演示一下大概的流程是怎么样的。

45df817900af8710dbfb636e3f3019ff.jpeg

执行一下代码来看一下效果


import cv2
import matplotlib.pyplot as plt
import time

def video_info():
# Loading classifiers
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')

# Input video stream
cap = cv2.VideoCapture(0)
# To use a video file as input
#cap = cv2.VideoCapture('demo.mp4')

while True:
_, img = cap.read()
# Conversion to greyscale
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# Detecting faces
faces = face_cascade.detectMultiScale(gray, 1.1, 4)
# Drawing the outline
for (x, y, w, h) in faces:
cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2)
center_x = (x+w-x)//2+x
center_y = (y+h-y)//2+y
cv2.circle(img,(center_x,center_y),10,(0,255,255),2)

# Display effects
cv2.imshow('img', img)
k = cv2.waitKey(30) & 0xff
if k==27:
break
cap.release()


9ea25e4aef46366a3fc5b9e216fb7eba.jpeg

不得不说,opencv锻炼的分类器是十分强大的!很快速的就识别出来了人脸。

就这样我完成了前两项技术的问题:机械臂的基础操作人脸识别功能的复现。手眼标定在查询资料的时候遇到了困难,在eye in hand 当中换算坐标的时候出现了一些问题,短时间没有办法能够解决,决定去查询更多的资料再来跟大家分享。

总结

这次记录的项目到这里就结束了,因为一些技术上的原因,手眼标定涉及的知识面比较广,需要查询许多资料和寻求多方面的帮助。待我归来之时,我的项目必将成功!如果你喜欢这篇文章的话,点赞留言支持我!

我们下次再见,很快就会回来的。



### MyCobot 280机械的手眼标定方法 对于MyCobot 280机械进行手眼标定时,主要目的是建立相机坐标系与机械末端执行器之间的转换关系。这一过程通常涉及几个关键步骤: #### 准备工作 确保安装并配置好ROS环境以及相应的驱动程序。启动RVIZ可视化工具和通信节点可以使用如下命令来完成[^1]: ```bash roslaunch mycobot_600 mycobot_600_slider.launch rosrun mycobot_600 slider_600.py ``` #### 获取必要的软件包和支持文件 为了简化操作流程,建议下载官方提供的支持库和示例代码。这些资源可以帮助快速设置实验平台,并提供了一些预定义的功能函数用于辅助开发。 #### 实施手眼标定的具体步骤 针对MyCobot 280 JN型号,在完成了基本的运动学计算之后,可以通过调用特定API实现对手眼系统的精确调整。这一步骤的关键在于理解如何通过编程方式指定末端执行器的位置数据,从而让其按照预定路径移动至多个已知位置处采集图像样本[^2]。 在此基础上,利用OpenCV或其他计算机视觉库处理获取到的画面信息,提取特征点作为参照物参与后续运算。最终求解出描述两者之间相对位姿变换矩阵参数集。 #### 使用OAK智能深度相机的例子 如果选用的是配备有OAK系列摄像头的产品,则可以根据实际情况参考专门面向此类设备编写的指南来进行更细致化的设定。例如,当采用OAK-D-Lite版本时,除了遵循上述通用原则外,还应注意该款产品特有的硬件特性及其配套SDK所提供的额外功能选项[^3]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值