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

視頻鏈接:https://youtu.be/h1H6pSvhQxQ
該項目主要使用Ultralytics YOLOv8來進行姿態(tài)的估計,結(jié)合機器視覺和機械臂的控制等功能。本篇文章我們將復(fù)寫這個項目,一步一步的開始如何建立起這個項目。
2.技術(shù)介紹
YOLOv8介紹
Ultralytics YOLOv8 是一種尖端、最先進 (SOTA) 模型,它建立在先前 YOLO 版本成功的基礎(chǔ)上,并引入了新功能和改進,以進一步提高性能和靈活性。 YOLOv8 的設(shè)計目標是快速、準確且易于使用,使其成為各種對象檢測和跟蹤、實例分割、圖像分類和姿態(tài)估計任務(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,作為這一系列的最新版本,包含以下特點和改進:
更快的檢測速度:YOLO 系列以其快速的檢測速度而聞名,每個后續(xù)版本都在這方面進行了優(yōu)化。
更高的準確性:通過使用更先進的神經(jīng)網(wǎng)絡(luò)架構(gòu)和學(xué)習(xí)算法,YOLOv8 可能會提高物體檢測的準確性。
更好的泛化能力:改進的算法可能更有效地處理不同類型的圖像數(shù)據(jù),包括在復(fù)雜背景和不同光照條件下的檢測。
適應(yīng)性和可擴展性的增強:新版本可能會提供更多的定制選項和設(shè)置,使其能夠更好地適應(yīng)不同的應(yīng)用場景和需求。
優(yōu)化的資源使用:對計算效率的改進可能會使 YOLOv8 在資源有限的設(shè)備上運行得更好,如在移動設(shè)備或嵌入式系統(tǒng)中。
簡單點說,給它一張圖片識別,YOLOv8能夠快速的識別出圖片中的物體,并且將它標記出來。

myCobot 280 M5
myCobot 280 M5 是 Elephant Robotics 和 M5Stack 合作開發(fā)的最小、最輕的 6 軸協(xié)作機器人。 它采用一體化模塊化設(shè)計,重量僅為850克,格外輕巧。 配備6個高性能伺服電機,具有響應(yīng)快、慣量低、轉(zhuǎn)動平穩(wě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 支持多平臺開發(fā)Linux,Windows,MacOS,并且控制接口全部開源支持目前市面上主流的編程語言python,c++/c#等。
python-pymycobot mycobot系列的控制庫https://github.com/elephantrobotics/pymycobot

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

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

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

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

YOLOv8版本升級支持小目標檢測與高分辨率圖像輸入

AI愛克斯開發(fā)板上使用OpenVINO加速YOLOv8目標檢測模型

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

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

如何修改YOLOv8的源碼

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

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

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

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

評論