這篇文章轉(zhuǎn)載來(lái)自SWITCH SCIENCE的SuzukiSumiya,本篇文章轉(zhuǎn)載已獲作者授權(quán)。
原文鏈接來(lái)自:https://www.switch-science.com/blogs/magazine/jetson-maker-faire-tokyo-2023
1.引言
這篇文章來(lái)自SWITCH SCIENCE的SuzukiSumiya 在Maker Faire Tokyo 2023上演示了通過(guò)模擬人手臂的姿態(tài)來(lái)控制機(jī)械臂。演示的內(nèi)容是使用USB攝像頭通過(guò)圖像識(shí)別估計(jì)手臂,并將mycobot制作成類(lèi)似的手臂形狀。

視頻鏈接:https://youtu.be/h1H6pSvhQxQ
該項(xiàng)目主要使用Ultralytics YOLOv8來(lái)進(jìn)行姿態(tài)的估計(jì),結(jié)合機(jī)器視覺(jué)和機(jī)械臂的控制等功能。本篇文章我們將復(fù)寫(xiě)這個(gè)項(xiàng)目,一步一步的開(kāi)始如何建立起這個(gè)項(xiàng)目。
2.技術(shù)介紹
YOLOv8介紹
Ultralytics YOLOv8 是一種尖端、最先進(jìn) (SOTA) 模型,它建立在先前 YOLO 版本成功的基礎(chǔ)上,并引入了新功能和改進(jìn),以進(jìn)一步提高性能和靈活性。 YOLOv8 的設(shè)計(jì)目標(biāo)是快速、準(zhǔn)確且易于使用,使其成為各種對(duì)象檢測(cè)和跟蹤、實(shí)例分割、圖像分類(lèi)和姿態(tài)估計(jì)任務(wù)的絕佳選擇。https://docs.ultralytics.com/
Ultralytics YOLOv8 is a cutting-edge, state-of-the-art (SOTA) model that builds upon the success of previous YOLO versions and introduces new features and improvements to further boost performance and flexibility. YOLOv8 is designed to be fast, accurate, and easy to use, making it an excellent choice for a wide range of object detection and tracking, instance segmentation, image classification and pose estimation tasks.

YOLOv8,作為這一系列的最新版本,包含以下特點(diǎn)和改進(jìn):
更快的檢測(cè)速度:YOLO 系列以其快速的檢測(cè)速度而聞名,每個(gè)后續(xù)版本都在這方面進(jìn)行了優(yōu)化。
更高的準(zhǔn)確性:通過(guò)使用更先進(jìn)的神經(jīng)網(wǎng)絡(luò)架構(gòu)和學(xué)習(xí)算法,YOLOv8 可能會(huì)提高物體檢測(cè)的準(zhǔn)確性。
更好的泛化能力:改進(jìn)的算法可能更有效地處理不同類(lèi)型的圖像數(shù)據(jù),包括在復(fù)雜背景和不同光照條件下的檢測(cè)。
適應(yīng)性和可擴(kuò)展性的增強(qiáng):新版本可能會(huì)提供更多的定制選項(xiàng)和設(shè)置,使其能夠更好地適應(yīng)不同的應(yīng)用場(chǎng)景和需求。
優(yōu)化的資源使用:對(duì)計(jì)算效率的改進(jìn)可能會(huì)使 YOLOv8 在資源有限的設(shè)備上運(yùn)行得更好,如在移動(dòng)設(shè)備或嵌入式系統(tǒng)中。
簡(jiǎn)單點(diǎn)說(shuō),給它一張圖片識(shí)別,YOLOv8能夠快速的識(shí)別出圖片中的物體,并且將它標(biāo)記出來(lái)。

myCobot 280 M5
myCobot 280 M5 是 Elephant Robotics 和 M5Stack 合作開(kāi)發(fā)的最小、最輕的 6 軸協(xié)作機(jī)器人。 它采用一體化模塊化設(shè)計(jì),重量?jī)H為850克,格外輕巧。 配備6個(gè)高性能伺服電機(jī),具有響應(yīng)快、慣量低、轉(zhuǎn)動(dòng)平穩(wěn)等特點(diǎn)。
The myCobot 280 M5 is the smallest and lightest 6-axis collaborative robot developed in collaboration by Elephant Robotics and M5Stack. It adopts an integrated modular design, weighing only 850 grams, making it exceptionally lightweight. Equipped with 6 high-performance servo motors, it features rapid responsiveness, low inertia, and smooth rotation.

mycobot 280 支持多平臺(tái)開(kāi)發(fā)Linux,Windows,MacOS,并且控制接口全部開(kāi)源支持目前市面上主流的編程語(yǔ)言python,c++/c#等。
python-pymycobot mycobot系列的控制庫(kù)https://github.com/elephantrobotics/pymycobot

Jetson Orin Nano
Jetson Orin Nano 是 NVIDIA 的一種嵌入式人工智能計(jì)算模塊,具有高性能和低功耗。它基于 NVIDIA 的 Orin 芯片,該芯片具有 12 個(gè) Arm 核心和一個(gè) NVIDIA Ampere GPU。這使 Jetson Orin Nano 能夠運(yùn)行復(fù)雜的人工智能應(yīng)用程序,例如機(jī)器視覺(jué)、自然語(yǔ)言處理和增強(qiáng)現(xiàn)實(shí)。
https://developer.nvidia.com/buy-jetson?product=all&location=JP

開(kāi)發(fā)過(guò)程
開(kāi)發(fā)環(huán)境:
軟件:
操作系統(tǒng):Linux
編譯語(yǔ)言:Python
python 庫(kù):
import cv2
import math
import time
from ultralytics import YOLO
from pymycobot.mycobot import MyCobot
yolov8模型:yolov8n-pose.pt
https://docs.ultralytics.com/tasks/pose/
硬件:
USB 攝像頭*1
myCobot 280 M5Stack *1
Jetson Orin Nano*1
顯示器,鍵盤(pán)鼠標(biāo)*1
代碼實(shí)現(xiàn)
yolov8姿態(tài)估計(jì)模型-yolov8n-pose
yolov8有訓(xùn)練好的姿態(tài)估計(jì)模型,可以直接使用。姿態(tài)估計(jì)是一項(xiàng)任務(wù),其涉及識(shí)別圖像中特定點(diǎn)的位置,通常被稱(chēng)為關(guān)鍵點(diǎn)。這些關(guān)鍵點(diǎn)可以代表物體的各種部位,如關(guān)節(jié)、地標(biāo)或其他顯著特征。關(guān)鍵點(diǎn)的位置通常表示為一組2D [x, y] 或3D [x, y, visible] 坐標(biāo)。
簡(jiǎn)單使用的方法:
import torch
from ultralytics.yolov8 import YOLO
import cv2
#引入模型
model = YOLO('yolov8n-pose.pt')
#打開(kāi)圖片
img = cv2.imread('image.jpg')
# 將圖片引入模型
results = model(img)
# 展示結(jié)果
for r in results:
im_array = r.plot() # 繪制包含預(yù)測(cè)結(jié)果的BGR numpy數(shù)組
im = Image.fromarray(im_array[..., ::-1]) # RGB PIL圖像
im.show() # 顯示圖像
im.save('results.jpg') # 保存圖像

在項(xiàng)目中需要獲取人手比的手腕,肘部和肩部的x,y坐標(biāo)來(lái)進(jìn)行計(jì)算角度,然后將相同的角度發(fā)送到mycobot的第二第三關(guān)節(jié)。

Code:
if keypoints_tensor is not None and keypoints_tensor.size(1) > 0:
# 提取特定關(guān)鍵點(diǎn)的坐標(biāo)和置信度
x_mimi = keypoints_tensor[0][3][0]
y_mimi = keypoints_tensor[0][3][1]
conf_mimi = confidence_score[0][3]
x_kosi = keypoints_tensor[0][13][0]
y_kosi = keypoints_tensor[0][13][1]
conf_kosi = confidence_score[0][13]
x_kata = keypoints_tensor[0][5][0]
y_kata = keypoints_tensor[0][5][1]
conf_kata = confidence_score[0][5]
x_hizi = keypoints_tensor[0][7][0]
y_hizi = keypoints_tensor[0][7][1]
conf_hizi = confidence_score[0][7]
x_te = keypoints_tensor[0][9][0]
y_te = keypoints_tensor[0][9][1]
conf_te = confidence_score[0][9]
然后計(jì)算腰部到肩部之間的角度,這個(gè)角度主要關(guān)注的是上半身的一個(gè)簡(jiǎn)化模型,可能用于模擬肩部的運(yùn)動(dòng)或整個(gè)上半身的傾斜。
#計(jì)算AB之間的向量
vector_AB = (x_kata - x_hizi, y_kata - y_hizi)
#用函數(shù)計(jì)算這個(gè)向量的角度
angle_rad1 = math.atan2(vector_AB[1], vector_AB[0])
#將角度從弧度轉(zhuǎn)為度
angle_deg1 = math.degrees(angle_rad1)
#計(jì)算后調(diào)整的角度值用于控制機(jī)械臂
mycobot1 = int(angle_deg1)-90
接下來(lái)在計(jì)算手部,肘部,肩部三個(gè)關(guān)鍵點(diǎn)形成的角度,這個(gè)角度涉及更復(fù)雜的姿勢(shì)分析,因?yàn)樗藦氖植康较ゲ吭俚郊绮康恼麄€(gè)鏈條,結(jié)合這兩種角度的計(jì)算,可以讓機(jī)械臂模仿人體姿勢(shì)更加精準(zhǔn)和自然。
x1=x_te #手部的x,y
y1=y_te
x2=x_hizi #肘部的X,Y
y2=y_hizi
x3=x_kata # 肘部的x,y
y3=y_kata
#定義三個(gè)做標(biāo)點(diǎn)
point1 = (x1, y1)
point2 = (x2, y2)
point3 = (x3, y3)
# 計(jì)算向量
vector1 = (x2 - x1, y2 - y1)
vector2 = (x3 - x2, y3 - y2)
# 計(jì)算向量長(zhǎng)度
length1 = math.sqrt(vector1[0] ** 2 + vector1[1] ** 2)
length2 = math.sqrt(vector2[0] ** 2 + vector2[1] ** 2)
# 計(jì)算點(diǎn)積
dot_product = vector1[0] * vector2[0] + vector1[1] * vector2[1]
# 計(jì)算角度(弧度)
angle_rad = math.atan2(vector2[1], vector2[0]) - math.atan2(vector1[1], vector1[0])
# 如果角度向右彎曲則為 0 度
# 如果角度從右向左轉(zhuǎn)動(dòng)則為 180 度
# 如果在一條直線(xiàn)上,則為 -90 度(或 +90 度,以哪個(gè)為準(zhǔn))
if angle_rad > math.pi:
angle_rad -= 2 * math.pi
elif angle_rad < -math.pi:
angle_rad += 2 * math.pi
# 將角度轉(zhuǎn)換為度數(shù)
mycobot2 = int(math.degrees(angle_rad))
最后將獲取到的角度,通過(guò)條件判斷控制機(jī)械臂進(jìn)行手臂的模擬運(yùn)動(dòng)。
#機(jī)械臂在計(jì)算的mycobot1,mycobot2可接受的范圍內(nèi)分別是是 -180 至 180 度和 -155 至 155 度
if -180 <= mycobot1 and mycobot1 <= 180 and -155 <= mycobot2 and mycobot2 <= 155 and conf_hizi >= 0.75:
#符合條件led燈會(huì)變藍(lán)
mc.send_angles ([90,-mycobot1,mycobot2,0,-90,0],100)
mc.set_color(0, 0, 255)
print("A點(diǎn)的角度(度數(shù)法):", conf_hizi)
else:# 不符合條件LED等會(huì)變紅
print("A點(diǎn)的角度(度數(shù)法):", conf_hizi)
mc.set_color(255, 0, 255)
總結(jié)
SuzukiSumiya在maker faire tokyo 2023上展示了Jetson Orin Nano 和mycobot以及yolov8-pose相結(jié)合實(shí)現(xiàn)了一個(gè)非常有趣的demo。可以學(xué)到多個(gè)方面的知識(shí)和技能,包括計(jì)算機(jī)視覺(jué)、機(jī)器人編程、數(shù)學(xué)計(jì)算,以及如何將這些元素結(jié)合起來(lái)創(chuàng)建一個(gè)交互式的系統(tǒng)。
下面的視頻是對(duì)SuzukiSumiya做這個(gè)項(xiàng)目的一個(gè)訪(fǎng)談。
https://www.youtube.com/watch?v=DB5WiUQVhek
如果你有什么其他有趣的項(xiàng)目,也可以聯(lián)系我們,我們會(huì)分享你的項(xiàng)目在各個(gè)平臺(tái)讓大家都關(guān)注到。m0_71627844/article/details/135062016
審核編輯 黃宇
-
開(kāi)源
+關(guān)注
關(guān)注
3文章
3632瀏覽量
43578 -
python
+關(guān)注
關(guān)注
56文章
4825瀏覽量
86355 -
機(jī)械臂
+關(guān)注
關(guān)注
13文章
547瀏覽量
25272 -
大象機(jī)器人
+關(guān)注
關(guān)注
0文章
85瀏覽量
76
發(fā)布評(píng)論請(qǐng)先 登錄
使用YOLOv8做目標(biāo)檢測(cè)和實(shí)例分割的演示
YOLOv8自定義數(shù)據(jù)集訓(xùn)練到模型部署推理簡(jiǎn)析
在AI愛(ài)克斯開(kāi)發(fā)板上用OpenVINO?加速YOLOv8目標(biāo)檢測(cè)模型

YOLOv8版本升級(jí)支持小目標(biāo)檢測(cè)與高分辨率圖像輸入

AI愛(ài)克斯開(kāi)發(fā)板上使用OpenVINO加速YOLOv8目標(biāo)檢測(cè)模型

教你如何用兩行代碼搞定YOLOv8各種模型推理

目標(biāo)檢測(cè)算法再升級(jí)!YOLOv8保姆級(jí)教程一鍵體驗(yàn)

三種主流模型部署框架YOLOv8推理演示
解鎖YOLOv8修改+注意力模塊訓(xùn)練與部署流程

如何修改YOLOv8的源碼

YOLOv8實(shí)現(xiàn)任意目錄下命令行訓(xùn)練

基于YOLOv8的自定義醫(yī)學(xué)圖像分割

基于OpenCV DNN實(shí)現(xiàn)YOLOv8的模型部署與推理演示

RV1126 yolov8訓(xùn)練部署教程

評(píng)論