0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

大象机器人六轴协作机械臂myCobot 320 进行手势识别!

大象机器人科技 来源:大象机器人科技 作者:大象机器人科技 2024-01-31 16:17 次阅读

引言
我是一名专注于机器学习机器人技术自由者。我的热情始于大学期间的人工智能课程,这促使我探索人机交互的新方法。尤其对于机械臂的操作,我一直想要简化其复杂性,使之更加直观和易于使用。

这个项目的灵感源自于我对创新技术的热爱以及对改善人机互动方式的追求。我的目标是开发一个基于手势的机械臂控制系统,使非专业人士也能轻松操作。为此,我选择了Google的MediaPipe库进行手势识别,并以myCobot 320 m5作为实验平台。

技术概述
Google MediaPipe
MediaPipe是由Google开发的一个开源跨平台框架,专门用于构建各种感知管道。这个框架提供了丰富的工具和预先构建的模块,使得开发者能够轻松地构建和部署复杂的机器学习模型和算法,尤其在图像和视频分析方面。

wKgaomW57DCAXSqEAAaq4Rw2I2Y692.png

MediaPipe的一个显著特点是它对实时手势和面部识别的支持。它能够高效地处理视频流,并实时识别和追踪人的手势、面部特征等。这种能力使其在交互式应用程序、增强现实(AR)、虚拟现实(VR)以及机器人技术中变得极其有用。

你可以尝试试用一下手势识别在线功能,无需安装。

https://mediapipe-studio.webapps.google.com/home

它的简单易用的API和丰富的文档使得更容易集成这个框架,非常适合使用在机器学习和计算机视觉领域当中。

pymycobot
pymycobot 是一个用于与 mycobot 机械臂进行串行通信和控制的 Python API。这个库是为了方便开发者使用 Python 语言控制 mycobot 机械臂而设计的。它提供了一系列的函数和命令,让用户可以通过编程方式控制机械臂的动作和行为。例如,用户可以使用该库获取机械臂的角度、发送角度指令来控制机械臂的移动,或者获取和发送机械臂的坐标信息

使用这个库唯一的标准是,得使用mycobot 系列的机械臂,这是专门为mycobot进行适配的一款机械臂。

产品介绍
myCobot 320M5 stack
myCobot 320 M5 是大象机器人开发的一款面向用户的六轴协作机械臂。它具有350mm的工作半径和最大1000g的负载能力。该机械臂适用于开放的ROS仿真开发环境,并包含运动学正逆解算法。它支持多种编程语言,包括Python、C++ArduinoC#JavaScript,且兼容Android、Windows、Mac OSX和Linux平台。myCobot 320 M5的多功能性使其适用于多种开发和集成应用。

wKgZomW57LKANfFiABDaLxmv7OY091.png

2D 相机
一个能够安装在mycobot320末端的2D相机,用USB数据线进行通信。能够呈现机械臂末端所看到的视野。

wKgZomW57ROACkenAALThT4_X1A554.png

开发过程
项目架构
我将该项目主要分为三个木块功能:

Gesture Recognition: 主要用来处理手势的识别,能够返回信息当欠手势是什么,比如说竖大拇指等等。

Robotic Arm Control:主要功能用于设置机械臂的运动控制,例如坐标控制,角度控制等等。

Program logic:用来处理程序运行的逻辑,设置确认手势时间,重置识别时间等,后续将一一详细介绍。

wKgZomW57SuAIDswAAA_RhHMNkI728.png

编译环境
操作系统:windows 11

编程语言:Python3.9+

使用的库:opencv,mediapipe,pymycobot,time

手势的识别
做识别首先得获得到相机的一个画面,这里我们就用到了opencv库来获取相机的画面

import cv2 # 获取相机流,默认的摄像头-0 外接的摄像头按照顺序往上- 1,2,3 cap = cv2.VideoCapture(1) # 持续获取相机画面 while cap.isOpened(): #获取当前图像画面 ret, frame = cap.read() # 将BGR图像转换为RGB rgb_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) # 在电脑中显示画面 cv2.imshow('gesture control',frame) # 按下 'q' 键退出,避免死循环 if cv2.waitKey(1) & 0xFF == ord('q'): break

wKgZomW57qeARcKYAA40aSs54V0103.png


到这里图像画面就获取成功了,接下来我们用mediapipe手势进行识别。

import mediapipe as mp # 初始化MediaPipe Hands模块 mp_hands = mp.solutions.hands hands = mp_hands.Hands() mp_draw = mp.solutions.drawing_utils # 处理图像并检测手部 result = hands.process(rgb_frame) if result.multi_hand_landmarks: for hand_landmarks in result.multi_hand_landmarks: mp_draw.draw_landmarks(frame, hand_landmarks, mp_hands.HAND_CONNECTIONS)

wKgaomW5-eiAB5_QAAsYkML_m8E026.png

这是识别手势之后的输出的结果,它能够精准的识别出手上的每个关节,并且将每个关节的点都命名。MediaPipe Hands 提供了21个手部关键点(landmarks),这些关键点共同描绘了手的结构,包括手腕、各个手指的各个关节。以大拇指举例子,一共有四个关节,从下往上分别是CMC,MCP,IP,TIP.

cmc: Carpometacarpal Joint mcp:Metacarpophalangeal Joint ip:Interphalangeal Joint tip:tip

有了这些还不够,我们要让他识别特定的手势,要需要去设定一个方法,来确定这个手势,比如说我想要一个手势是竖大拇指,那么我们分析在竖大拇指的时候,拇指的指尖的位置是在整个手掌的最上方,这样就容易多了。只要确定在画面中大拇指的指尖是高于其他所有手指头的都指尖,那么这个手势就是竖大拇指。(也可以通过别的进行分析)

一般情况下,我们可以获取到某个关节的X,Y,Z的三个属性,表示改关节在图像中的位置。

#获取大拇指指尖的属性 thump_tip = hand_landmarks.landmark[mp.hands.HandLandmark.THUMB_TIP] #获取大拇指指尖的高度 thump_tip.y #判断竖大拇指手势 def is_thump_up(hand_landmarks): thumb_tip = hand_landmarks.landmark[mp_hands.HandLandmark.THUMB_TIP] index_tip = hand_landmarks.landmark[mp_hands.HandLandmark.INDEX_FINGER_TIP] # 判断那个关节比较高。 if thumb_tip.y < index_tip.y: return True return False


如果想要别的手势的话,也可以根据手型的特点来设定一个专门的辨别方法。到这里手势的识别就完成了。

机械臂运动控制
我一开始的想法是,当相机识别到手势的时候就会给机械臂发送一条控制命令,这里我们先简单的设置一个让机械臂点头的动作。

pymycobot 这个功能库,开放了很多功能在控制机械臂的时候非常的方便。

from pymycobot.mycobot import Mycobot import time #链接机械臂 mc = Mycobot(port,baud) #以关节角度控制机械臂运动 mc.send_angles([angles_list],speed) #以坐标控制机械臂进行运动 mc.send_coords([coords_list],speed,mode) #点头动作 def ThumpUpAction(self): self.mc.send_angles([0.96, 86.22, -98.26, 10.54, 86.92, -2.37], 60) time.sleep(1.5) for count in range(3): self.mc.send_angles([0.79, 2.46, (-8.17), 4.3, 88.94, 0.26], 70) time.sleep(1) self.mc.send_angles([(-3.6), 30.32, (-45.79), (-46.84), 97.38, 0.35], 70) time.sleep(1) self.mc.send_angles([0.79, 2.46, (-8.17), 4.3, 88.94, 0.26], 70) time.sleep(1) self.mc.send_angles([0.96, 86.22, -98.26, 10.54, 86.92, -2.37], 60)


为了让整体代码看起来可读性高,可修改性高,创建机械臂类方便进行调用和修改

class RobotArmController: def __init__(self,port): #初始化链接 self.mc = MyCobot(port, 115200) self.init_pose = [0.96, 86.22, -98.26, 10.54, 86.92, -2.37] self.coords = [-40, -92.5, 392.7, -92.19, -1.91, -94.14] self.speed = 60 self.mode = 0 def ThumpUpAction(self): ... def OtherAction(self): ...

程序逻辑的处理
在调试的过程中,出现了一些问题,在识别收拾的时候,它是一直识别,这就意味着如果在1s中内识别了10次的话,会给机械臂发送10个命令,这样肯定不是我一开始所设想的。

所以在逻辑上就要有所处理,下面是我处理的方式。

# 设置一个2S的时间来确定这个手势,当竖大拇指出现2s的时候才进行下发机械臂控制的命令,用控制变量的方式来进行。 #初始化变量 #检测手势是否存在的变量 gesture_detected = False #确定手势出现后计时的变量 gesture_start_time = None # 设定手势出现2s后的变量 gesture_confirmation_time = 2 后续的处理逻辑: 当特定手势出现的时候,gesture_start_time就开始计时,这个时候在不停的做判断如果时间到达了2S之后,确定手势接下来执行相对应手势的机械臂运动。 current_time = time.time() if current_gesture: if not gesture_detected: gesture_detected = True gesture_start_time = current_time elif current_time - gesture_start_time > gesture_confirmation_time and not action_triggered: # 根据手势执行相应动作 if current_gesture == "thumb_up": robotic arm action()


但是这样还不够,因为手如果出现超过2s后也会持续发送机械臂的指令,这里我们需要在设置一个冷却的时间,有充足的时间让机械臂完成运动。

#冷却时间的变量 #机械臂是否完成动作的变量 action_triggered = False #冷却时间计时的变量 cooldown_start_time = None #固定2s冷却时间 cooldown_period = 2


这样就能够满足需求了。完整的逻辑代码处理如下

# 处理手势 current_time = time.time() if current_gesture: if not gesture_detected: gesture_detected = True gesture_start_time = current_time elif current_time - gesture_start_time > gesture_confirmation_time and not action_triggered: # 根据手势执行相应动作 if current_gesture == "thumb_up": print('good good') mc.thum_up() elif current_gesture == "palm_open": print('forward') mc.increment_x_and_send() # 可以添加更多手势和对应动作的判断 action_triggered = True cooldown_start_time = current_time else: gesture_detected = False gesture_start_time = None if action_triggered and current_time - cooldown_start_time > cooldown_period: print('can continue') action_triggered = False cooldown_start_time = None

演示
https://youtu.be/9vOPKO_IG9M

总结
这个项目展示了使用手势识别控制myCobot 320的方法,开创了人机互动的新形式。尽管目前仅实现了有限的几个手势与机械臂动作的对应,但它为未来更广泛的机械臂应用奠定了基础。结合手势与机械臂的创新尝试不仅提升了我的编程技能,还锻炼了我的问题解决能力,为未来的相关项目提供了宝贵经验。

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 手势识别
    +关注

    关注

    8

    文章

    219

    浏览量

    47581
  • 人工智能
    +关注

    关注

    1776

    文章

    43899

    浏览量

    230645
  • 开源
    +关注

    关注

    3

    文章

    2991

    浏览量

    41723
  • python
    +关注

    关注

    51

    文章

    4678

    浏览量

    83476
  • 机械臂
    +关注

    关注

    9

    文章

    475

    浏览量

    23827
收藏 人收藏

    评论

    相关推荐

    大象机器人开源协作机械myCobot 630 全面升级!

    1. 开篇概述 在快速发展的机器人技术领域中,Elephant Robotics的myCobot 600已经证明了其在教育、科研和轻工业领域的显著适用性。作为一款具备六自由度的机械臂,myCo
    的头像 发表于 04-28 15:19 72次阅读
    <b class='flag-5'>大象</b><b class='flag-5'>机器人</b>开源<b class='flag-5'>协作</b><b class='flag-5'>机械</b>臂<b class='flag-5'>myCobot</b> 630 全面升级!

    myCobot Pro 630 焕新上市!全面助力六自由度协作机器人商用化进程推进!

    在快速变化的现代社会中,教育和商业领域面临着前所未有的挑战和机遇。随着技术的不断进步,寻求高效、灵活的自动化解决方案成为了推动创新和增强竞争力的关键。 自大象机器人myCobot Pro 600系列
    的头像 发表于 04-03 11:12 123次阅读
    <b class='flag-5'>myCobot</b> Pro 630 焕新上市!全面助力六自由度<b class='flag-5'>协作</b><b class='flag-5'>机器人</b>商用化进程推进!

    协作机器人(TB6-R5)各 ±90° 翻转运动测试 | 泰科机器人 #协作机器人

    测试机器人
    深圳市泰科智能机器人有限公司
    发布于 :2024年03月12日 08:48:56

    使用ChatGPT学习大象机器人六轴协作机械臂mechArm!

    。在调试的过程中,出现了一些问题,在识别收拾的时候,它是一直识别,这就意味着如果在1s中内识别了10次的话,会给机械臂发送10个命令,这样肯定不是我一开始所设想的。我一开始的想法是,当
    的头像 发表于 01-31 14:39 272次阅读
    使用ChatGPT学习<b class='flag-5'>大象</b><b class='flag-5'>机器人</b>六轴<b class='flag-5'>协作</b><b class='flag-5'>机械</b>臂mechArm!

    自动化革命:大象机器人的Mercury A1机械

    引言 大象机器人的Mercury系列,是面向工业自动化和智能制造的新型机械臂产品线。这些机械臂不仅在设计上创新,还在材料选择上使用了碳纤维、铝合金和工程塑料等轻质强韧材料,搭载高精度谐
    的头像 发表于 01-15 14:41 292次阅读
    自动化革命:<b class='flag-5'>大象</b><b class='flag-5'>机器人</b>的Mercury A1<b class='flag-5'>机械</b>臂

    13个精选创意应用案例!协作机器人与智慧生活的融合!

    2023年,大象机器人协作机器人产品年出货量超1万台,销往海内外50+国家,获国内外超500+所高校、企业的认可和应用。
    的头像 发表于 01-10 14:23 1356次阅读
    13个精选创意应用案例!<b class='flag-5'>协作</b><b class='flag-5'>机器人</b>与智慧生活的融合!

    宏集新品 | 宏集Franka系列FP3协作机器人,如人类手臂般灵活! #协作机器人 #机械

    机械协作机器人
    虹科工业物联网技术
    发布于 :2024年01月04日 15:32:40

    LabVIEW的工业机器人运动控制系统

    LabVIEW开发工业机器人运动控制系统 本项目开发了一个高效的工业机器人控制系统,重点关注于运动学算法和轨迹规划算法的实现和测试。LabVIEW作为一个关键技术,在项目中扮演了核
    发表于 12-21 20:03

    EPR6-S工业机器人通过EtherCAT转profinet网关接入西门子系统

    工业机器人专用伺服驱动器一台。 首先我们要在西门子PLC博图中进行组态,点击管理通用站描述文件,再点击右侧“...”从查找GSD所在文件,勾选当前GSD文件安装至成功。 从
    发表于 10-24 14:04

    使用Arduino和PAJ7620手势传感器制作手势控制机器人

    使用Arduino和PAJ7620手势传感器制作手势控制机器人,简单程序即可实现。小小的传感器可以识别各种手势。它采用内置的空间传感器,可以
    发表于 09-27 06:17

    myCobot Pro600六轴机械臂与3D深度视觉:物体精确识别抓取堆叠

    myCobot 600技术案例 Introduction 随着时代的进步,各种精密的机械臂,人形机器人不断的问世。我们即将迎来到处都是机器人的高科技时代。为了跟上时代的脚步,我最近入手
    的头像 发表于 09-12 10:51 618次阅读
    <b class='flag-5'>myCobot</b> Pro600六轴<b class='flag-5'>机械</b>臂与3D深度视觉:物体精确<b class='flag-5'>识别</b>抓取堆叠

    【IoT毕设】机智云平台+STM32+树莓派的草莓采摘机器人控制系统

    设备进行连接。 四、草莓采摘机器人实验与分析 通过对五次的采摘过程进行记录统计每个过程的耗时如表2所示,图像识别的过程的平均时长为0.23s,机械
    发表于 08-16 17:35

    myCobot 320 人工智能套装2023版震撼上市!突破工作半径和负载限制,全新夹爪抓取方式!

    大象机器人myCobot 320 人工智能套装2023版震撼上线,更大的工作半径、更高的负载、更强大的功能!
    的头像 发表于 06-15 18:10 464次阅读
    <b class='flag-5'>myCobot</b> <b class='flag-5'>320</b> 人工智能套装2023版震撼上市!突破工作半径和负载限制,全新夹爪抓取方式!

    使用myCobot 280 Jeston Nano进行物体精确识别追踪

    ,以便在实际应用中发挥作用,这个项目涉及到许多技术和算法,包括视觉识别、手眼协同和机械臂控制等方面。 机械臂的介绍 mycobot280-JetsonNano 操作使用的
    的头像 发表于 05-24 18:20 1104次阅读
    使用<b class='flag-5'>myCobot</b> 280 Jeston Nano<b class='flag-5'>进行</b>物体精确<b class='flag-5'>识别</b>追踪

    双臂协作机器人-泰科智能 #双臂协作机器人 #双臂7协作机器人 #双臂多机器人 #七协作机器人

    机器人
    深圳市泰科智能机器人有限公司
    发布于 :2023年05月19日 09:06:17