电子说
在过去的几年里,机械臂技术经历了前所未有的发展,其应用领域从传统的制造业扩展到了医疗、服务、物流等多个新兴行业。这种跨界扩展得益于科技的飞速进步,尤其是在传感器、控制系统和人工智能领域的突破。特别是去年,人工智能技术的热潮为机械臂的智能化升级提供了更多的可能性,从而极大地拓宽了其应用场景和提高了作业效率与智能水平。
随着这些技术的融合与创新,我们见证了许多令人印象深刻的应用案例,它们不仅展示了机械臂技术的先进性,还反映了未来发展的趋势。本文将分享去年我们平台上发布的五个精选案例,这些案例涉及到了机械臂与深度相机、人脸跟踪等技术的结合应用。
自2022年ChatGPT发布以来,它一直备受全世界人的关注,一个强大的人工智能聊天机器人。随着各界的研发人员不断的对ChatGPT进一步的研究和探索,衍生出来了很多富有创意的功能。其中就包括Microsft-Autonomous Systems and Robotics Group将ChatGPT的能力扩展到机器人领域,用语言直观的控制机械臂,无人机,家庭机器人等等。
https://youtu.be/NYd0QcZcS6Q
你可能会觉得我现在也可以做到跟一个机器人说让他去做一些操作指令,他也会完成那个指令,这能有什么区别。其实不然,这里头有这你无法想象的一个强大的功能。以前那些功能个的实现都是依赖于写代码来控制机器人。
例如:我想要机械臂听到命令之后往前走,就必须得提前编程接收到命令 往前走的代码,之后触发这个功能。
这个团队探索改变这个现状,用OpenAI的AI语言模型ChatGPT使自然的人机交互成为可能。不再需要大量的代码提前编写好一些固定的程序,只需要简单的跟ChatGPT进行对话,就可以实现某种功能,希望能够帮助人们更加轻松的与机器人进行交互,不需要学习复杂的编程语言或者有关机器人的详细信息。
例如:预想的是,我们提前编程好相对应的 APIs功能,告诉ChatGPT这个功能是做什么的,然后通过跟 ChatGPT进行对话,ChatGPT根据对话的需求以及对应的API的 功能,自行的调用API控制机械臂。
技术实现
文中举了一个例子,用myCobot 280M5用木块构建Microsoft的logo。
Step 1:
首先定义一组控制机械臂的API或函数库,这里用到的是pymycobot,专门控制myCobot的一个功能库。直接使用就可以了,需要稍加注释一下API的功能。
pymycobot:https://github.com/elephantrobotics/pymycobot
里面有详细的介绍API
Step 2:
紧接着我们得给ChatGPT编写一个文本提示,描述任务目标,明确pymycobot库里面的功能哪些可以用 ,以及怎么使用。
User:
Imagine we are working with a manipulator robot. This is a robotic arm with 6 degrees of freedom that has a suction pump attached to its end effector. I would like you to assist me in sending commands to this robot given a scene and a task.
At any point, you have access to the following functions:
grab(): Turn on the suction pump to grab an object
release(): Turns off the suction pump to release an object
get_position(object): Given a string of an object name, returns the coordinates and orientation of the vacuum pump to touch the top of the object [X, Y, Z, Yaw, Pitch, Roll]
move_to(position): It moves the suction pump to a given position [X, Y, Z, Yaw, Pitch, Roll].
You are allowed to create new functions using these, but you are not allowed to use any other hypothetical functions.
Keep the solutions simple and clear. The positions are given in mm and the angles in degrees. You can also ask clarification questions using the tag "Question - ". Here is an example scenario that illustrates how you can ask clarification questions.
Let's assume a scene contains two spheres.pick up the sphere.
Step 3:
通过不断的沟通Chat,最终实现我们想要的效果,让ChatGPT生成相对应的变成代码
User:
Awesome! I want now to use the blocks to build the logo from Microsoft on top of the white pad. It consists of four colors forming a square, blue on the bottom left, yellow on the bottom right, red on the top left and green on the top right.
ChatGPT:
Sure! Here's the Python code to build the Microsoft logo on top of the white pad using the blocks:
# get the positions of the blocks and the white pad
white_pad_pos = get_position("white pad")
blue_pos = get_position("blue block")
yellow_pos = get_position("yellow block")
red_pos = get_position("red block")
green_pos = get_position("green block")
# pick up the blue block
pick_up_object("blue block")
# calculate the position to place the blue block
place_pos = [white_pad_pos[0]-20, white_pad_pos[1]-20, white_pad_pos[2]+40, 0, 0, 0]
# place the blue block on the white pad
place_object(place_pos)
# pick up the yellow block
pick_up_object("yellow block")
# calculate the position to place the yellow block
place_pos = [white_pad_pos[0]+20, white_pad_pos[1]-20, white_pad_pos[2]+40, 0, 0, 0]
# place the yellow block on the white pad
place_object(place_pos)
# pick up the red block
pick_up_object("red block")
# calculate the position to place the red block
place_pos = [white_pad_pos[0]-20, white_pad_pos[1]+20, white_pad_pos[2]+40, 0, 0, 0]
# place the red block on the white pad
place_object(place_pos)
# pick up the green block
pick_up_object("green block")
# calculate the position to place the green block
place_pos = [white_pad_pos[0]+20, white_pad_pos[1]+20, white_pad_pos[2]+40, 0, 0, 0]
# place the green block on the white pad
place_object(place_pos)
这个案例 备受大家喜欢,因为作者本身也是一名刚开始接触机械臂的爱好者,想要做机械臂的人脸识别跟踪 ,一共分为了上下两篇,上篇讲的是使用OpenCV算法提供的人脸识别以及讲述了项目的框架,需要什么来实现。下篇介绍的是机械臂运动控制的算法。
技术实现:全程使用的是以树莓派为主板的mechArm 270 ,6自由度的机械臂 。
想要实现人脸识别功能以及机械臂跟踪,那么机器视觉是少不了的,目前市面上最热门的识别算法是OpenCV的算法,里面的技术相对比较成熟,可以直接使用。
人脸识别一般由两个部分组成,人脸检测和人脸识别,在人脸检测中,主要任务是构造能够区分包含人脸的实例和不包含人脸的实例的分类器。OpenCV 中提供了三个经过训练的级联分类器。顾名思义,级联分类器逐步筛选不同的特征,以得出其所属的分类。分类器的link:http ://face-rec.org/databases/
调用分类器和opencv算法就可以获取到视频流对人脸进行检测
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()
设定机械臂末端来获取视频信息,就需要固定好位置,因为在这里涉及到一个机械臂的知识-手眼标定。手眼标定可以让机械臂知道相机拍摄的物体相对于机械臂的位置,或者说,建立相机坐标系和机械臂坐标系之间的映射。
换句话也就是说 ,获得相机的画面下的 人脸的参数,相对于机械臂的位置是怎样的,这个是相当重要的为了能够准确并且实时的扑捉到人脸相对应的坐标。
经过实践之后,发现raspberry pi 4b的算力有所欠缺,如果用手眼标定来做的话看起来效果并不好,而且会有许多未知参数。所以作者决定使用相对位移来进行运动控制。这样的话就需要设计一种采样运动机制,保证在一个周期内完全获取人脸的偏移量并且实现跟踪,我们一起来看看效果如何。
https://youtu.be/dNdqrkggr9c
如果你感兴趣可以了解更多 :Facial Recognition and Tracking Project with mechArm - Hackster.io
为了满足更多的场景需求,现在深度相机被使用的十分的广泛,就例如下面这个用户做的案例。使用到的是realsense D455,这是一款微软的深度相机,能够获取某个物体的多个参数。该项目是用深度相机结合机械臂做一个空间上的物体跟踪。
技术实现:
可以看到场景里面,在左上角有一个摄像头,获取红色物体的坐标,然后返回给机械臂,机械臂再去进行移动。
这个案例跟上一个案例有点相似,也不大一样,相似的点在于都是机械臂视觉的应用,不太相似的点在于这个案例用的是深度相机,通过相机内置的算法能够获取到木块的参数,可以比较方便的进行手眼标定。里面也介绍了realsense的运动模块的信息,里面的设置可以为0.01m,甚至设置到0.001m左右,可以获取到十分精细的参数。
最后整个项目是在ROS当中完成的,将Realsense d455和 myCobot链接到一起。
Automating Fruit Harvesting and Sorting
背景介绍:这一篇技术案例就比较偏向一个模拟场景的建设了,它里面有多台mechArm 270协同合作,一台传送带,多个摄像模组。主要是模拟一个果实的采摘然后进行分类。
技术亮点:
可以看到整个场景的流程,这个案例主要关注几个技术点:
1.机器视觉的识别,目标果实坐标的获取。
2.机械臂之间协同关系,和传送带逻辑的关系。
从案例1到案例4只要是要做一些场景应用的话都会要用到机器视觉,就少不了摄像头,要想做一个好项目机器视觉的知识是必不可少的。让我们来一起看看如何处理这里的视觉。
案例当中是用到的是深度摄像头,相比2D摄像头就少去了一些标志物,我们可以依赖深度相机的参数来直接做手眼标定,这里我们的“眼”是固定的,称为眼在手外,目标找到一个变换矩阵,该矩阵被描述了摄像头坐标系相对于机器人基座坐标系的位置和方向。
识别物体做的是OpenCV的颜色识别,通过颜色来区别果实的情况。
Detection and identification class
"""
HSV_DIST = {
"redA": (np.array([0, 120, 50]), np.array([3, 255, 255])),
"redB": (np.array([118, 120, 50]), np.array([179, 255, 255])),
"orange": (np.array([8, 150, 150]), np.array([20, 255, 255])),
"yellow": (np.array([28, 100, 150]), np.array([35, 255, 255])),
}
先定义好可能会出现的结果,就可以精准的识别,得到目标果实的坐标了。
机械臂抓取果实的路径主要考虑几个方面:
初始姿势
抓握的姿势
避障的姿势
基本上考虑这几个方面,达到不会影响抓取目标,碰到场景中其他的物件。
接下来较为关键的是处理,两台机械臂和传送带之间的逻辑关系,分配好角色哪个机械臂先动,哪个机械臂动,保证整个流程下来是顺畅的,不会导致程序的死锁。
这个场景应用,涉及到了多方面的功能,可以帮助初学者怎么将机械臂运用起来,怎么搭建一个场景。也能帮助掌握机械臂运动控制,视觉识别,物体抓取技术等等相关知识,如果你有兴趣了解的话点击查看。
在2023年,机械臂技术的飞速发展引起了广泛关注,几个备受瞩目的案例展示了其在创新与应用方面的巨大可能性。我们欢迎所有有兴趣探索这一领域、愿意分享新奇想法的朋友与我们交流。让我们共同见证并体验科技如何塑造未来世界的奇迹!
审核编辑:汤梓红
全部0条评论
快来发表一下你的评论吧 !