RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

人工智能套裝myCobot 320版視覺算法深度解析

大象機器人科技 ? 來源:大象機器人科技 ? 作者:大象機器人科技 ? 2023-08-14 11:53 ? 次閱讀

引言

今天我們將深入了解myCobot320AIKit的機器識別算法是如何實現(xiàn)。

當(dāng)今社會,隨著人工智能技術(shù)的不斷發(fā)展,機械臂的應(yīng)用越來越廣泛。作為一種能夠模擬人類手臂動作的機器人,機械臂具有高效、精準(zhǔn)、靈活、安全等一系列優(yōu)點。在工業(yè)、物流、醫(yī)療、農(nóng)業(yè)等領(lǐng)域,機械臂已經(jīng)成為了許多自動化生產(chǎn)線和系統(tǒng)中不可或缺的一部分。例如,在工廠生產(chǎn)線上的自動化裝配、倉庫物流中的貨物搬運、醫(yī)療手術(shù)中的輔助操作、農(nóng)業(yè)生產(chǎn)中的種植和收獲等場景中,機械臂都能夠發(fā)揮出其獨特的作用。本文將重點介紹機械臂結(jié)合視覺識別技術(shù)在myCobot320AIKit場景中的應(yīng)用,并探討機械臂視覺控制技術(shù)的優(yōu)勢和未來發(fā)展趨勢。

產(chǎn)品介紹

myCobot320M5Stack

myCobot320是一款面向用戶自主編程開發(fā)的六軸協(xié)作機器人,350MM的運動半徑,最高可達1000g的末端負載,0.5MM的重復(fù)定位精度;全面開放軟件控制接口,多種主流編程語言可以快速上手控制機械臂。

wKgZomTKMKOAcPA5AAeS9lZq5bM089.png

myCobotAdaptivegripper

wKgaomTZobSAN_sIAAZkeHz0X1s093.pngwKgaomTZobSAWgu1AAWOVGn39eI618.png

mycobot自適應(yīng)夾爪,自適應(yīng)夾爪是一種機器人末端執(zhí)行器,用于抓取和搬運各種形狀和尺寸的物體。自適應(yīng)夾爪具有很高的靈活性和適應(yīng)性,可以根據(jù)不同的物體形狀和尺寸自動調(diào)整其夾緊力度和夾取位置。它可以結(jié)合機器視覺,根據(jù)視覺算法獲取到的信息調(diào)夾爪整夾緊力度和夾取位置。該夾爪能夠負載抓取1kg的物體,最大的夾距90mm,使用電力驅(qū)動的一款夾爪,使用起來相當(dāng)?shù)姆奖恪?/span>

以上就是我們使用到的設(shè),以及后續(xù)用到的myCobot320AIKit。

視覺算法

視覺算法是一種利用計算機圖像處理技術(shù)來實現(xiàn)對圖像和視頻進行分析和理解的方法。它主要包括圖像預(yù)處理、特征提取、目標(biāo)檢測、姿態(tài)估計等幾個方面。

圖像預(yù)處理:

圖像預(yù)處理是對原始圖像進行處理,使其更適合后續(xù)的分析和處理,常用的算法有圖像去噪算法、圖像增強算法、圖像分割算法。

特征點提?。?/span>

特征提取是從圖像中提取出關(guān)鍵特征,以便進行進一步的分析和處理,SIFT算法、SURF算法、ORB算法、HOG算法、LBP算法等.

目標(biāo)檢測:

目標(biāo)檢測是在圖像中尋找某個特定的物體或目標(biāo),常用的算法,有Haar特征分類器、HOG特征+SVM分類器、FasterR-CNN、YOLO

姿態(tài)估計:

姿態(tài)估計是通過識別物體的位置、角度等信息,來估計物體的姿態(tài),常用的算法有PnP算法、EPnP算法、迭代最近點算法(ICP)等。

舉例說明

顏色識別

這樣說的太抽象,我們實踐操作來演示這個步驟,如何從下面這張圖片中檢測到白色的高爾夫球。我們使用到的是OpenCV的機器視覺庫。

wKgaomTZpgeAVkPJAACUHiT3RXI957.png

圖像處理:

首先我們得對圖片進行預(yù)處理,方便計算機能夠快速的找到目標(biāo)物體,這一步的操作是將圖片轉(zhuǎn)化成灰度圖。

灰度圖:灰度圖是一種將彩色圖像轉(zhuǎn)換為黑白圖像的方法,它描述了圖像中每個像素的亮度或灰度級別。在灰度圖中,每個像素的值表示它的亮度,通常在0到255的范圍內(nèi),其中0表示黑色,255表示白色。中間的值表示不同程度的灰度。

import cv2
import numpy as np

image = cv2.imread('ball.jpg')
# turn to gray pic
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

cv2.imshow('gray', gray)

wKgZomTZpiSAGQm4AAB_-fbqZXY498.png

灰度處理后的圖片

二值化處理:

我們可以看到圖片中的高爾夫球跟背景是有很大的顏色差別的,可以通過顏色檢測出目標(biāo)物體。高爾夫球是白色,但是在光線的作用下,還有一些灰色的陰影部分。所以我們在設(shè)置灰度圖的像素的時候得考慮進去灰色的部分。

lower_white = np.array([180, 180, 180])  # Lower limit
upper_white = np.array([255, 255, 255])  # Upper limit

# find target object
mask = cv2.inRange(image, lower_white, upper_white)
contours, _ = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

這一個步驟就叫做二值化處理,將目標(biāo)物體從背景中分離出來.

過濾輪廓:

到二值化處理完后,我們需要設(shè)置一個過濾的輪廓面積的大小。如果不設(shè)置的話會出現(xiàn)下面圖片中的結(jié)果,會發(fā)現(xiàn)有很多地方都被選中,我們只想要最大的那一個就將小面積的區(qū)域給過濾

wKgaomTZpkqAGZJZAAKWKUHRhcw961.png

#filter
min_area = 100
filtered_contours = [cnt for cnt in contours if cv2.contourArea(cnt) > min_area]

#draw border
for cnt in filtered_contours:
    x, y, w, h = cv2.boundingRect(cnt)
    cv2.rectangle(image, (x, y), (x+w, y+h), (0, 0, 255), 2)

wKgaomTZpnKAYgBqAAEMuESQcwQ979.png

完整代碼:

import cv2
import numpy as np

image = cv2.imread('ball.jpg')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

lower_white = np.array([170, 170, 170])   
upper_white = np.array([255, 255, 255])  

mask = cv2.inRange(image, lower_white, upper_white)
contours, _ = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
min_area = 500
filtered_contours = [cnt for cnt in contours if cv2.contourArea(cnt) > min_area]

for cnt in filtered_contours:
    x, y, w, h = cv2.boundingRect(cnt)
    cv2.rectangle(image, (x, y), (x+w, y+h), (0, 0, 255), 2)


cv2.imshow('Object Detection', image)
cv2.waitKey(0)
cv2.destroyAllWindows()

與之不同的是,我們是想用機械臂來抓取物體,找到檢測的目標(biāo)物體還不夠,我們需要獲取到目標(biāo)物體得坐標(biāo)信息。

為了獲取被測目標(biāo)物體的坐標(biāo)信息,使用到了OpenCV的Arcuo碼,是一種常見的二維碼,用于相機標(biāo)定,姿態(tài)估計和相機跟蹤等計算機視覺任務(wù)。Arcuo碼每個都是由唯一的標(biāo)識符,通過在途中檢測和識別這些碼,可以推斷相機的位置,相機與碼之間的關(guān)系。

wKgaomTZobSAXXQhAAAw1FsFR4o190.png

wKgZomTZobSABereAAWsYGmFeuo946.png

圖片中兩個唯一的二維碼,來固定裁剪圖片的大小,固定arcuo碼的位置,就能通過計算獲取到目標(biāo)物體。

wKgZomTZobSADr7wAAG_Tve89Oc497.png

這樣就能檢測出來目標(biāo)物體所在的位置了,返回x,y坐標(biāo)給到機械臂的坐標(biāo)系中,機械臂就可以進行抓取。

wKgaomTZobeAfHAxAFBKbxrYRac700.png

具體的代碼

    # get points of two aruco
 def get_calculate_params(self, img):
        """
        Get the center coordinates of two ArUco codes in the image
        :param img: Image, in color image format.
        :return: If two ArUco codes are detected, returns the coordinates of the centers of the two codes; otherwise returns None.
        """
        # Convert the image to a gray image 
        gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
        # Detect ArUco marker.
        corners, ids, rejectImaPoint = cv2.aruco.detectMarkers(
            gray, self.aruco_dict, parameters=self.aruco_params
        )

        """
        Two Arucos must be present in the picture and in the same order.
        There are two Arucos in the Corners, and each aruco contains the pixels of its four corners.
        Determine the center of the aruco by the four corners of the aruco.
        """
        if len(corners) > 0:
            if ids is not None:
                if len(corners) <= 1 or ids[0] == 1:
                    return None
                x1 = x2 = y1 = y2 = 0
                point_11, point_21, point_31, point_41 = corners[0][0]
                x1, y1 = int((point_11[0] + point_21[0] + point_31[0] + point_41[0]) / 4.0), int(
                    (point_11[1] + point_21[1] + point_31[1] + point_41[1]) / 4.0)
                point_1, point_2, point_3, point_4 = corners[1][0]
                x2, y2 = int((point_1[0] + point_2[0] + point_3[0] + point_4[0]) / 4.0), int(
                    (point_1[1] + point_2[1] + point_3[1] + point_4[1]) / 4.0)

                return x1, x2, y1, y2
        return None

    # set camera clipping parameters  
    def set_cut_params(self, x1, y1, x2, y2):
        self.x1 = int(x1)
        self.y1 = int(y1)
        self.x2 = int(x2)
        self.y2 = int(y2)

    # set parameters to calculate the coords between cube and mycobot320
    def set_params(self, c_x, c_y, ratio):
        self.c_x = c_x
        self.c_y = c_y
        self.ratio = 320.0 / ratio

    # calculate the coords between cube and mycobot320
    def get_position(self, x, y):
        return ((y - self.c_y) * self.ratio + self.camera_x), ((x - self.c_x) * self.ratio + self.camera_y)

YOLOv5識別

YOLO算法區(qū)別與OpenCV算法不同的點在于,YOLOv5算法是一種基于深度學(xué)習(xí)的目標(biāo)檢測算法,與OpenCV的傳統(tǒng)計算機視覺方法有所不同。雖然OpenCV也提供了目標(biāo)檢測功能,但它主要基于傳統(tǒng)的圖像處理和計算機視覺技術(shù)。Yolov5則是一種基于神經(jīng)網(wǎng)絡(luò)的深度學(xué)習(xí)模型,通過訓(xùn)練神經(jīng)網(wǎng)絡(luò)來實現(xiàn)目標(biāo)檢測。

神經(jīng)網(wǎng)絡(luò)就像是一個人的大腦一樣,外界不停的給他傳輸知識,讓他去學(xué)習(xí),告訴他這個是蘋果,這個是草莓。通過不斷地訓(xùn)練學(xué)習(xí),給不同地蘋果地圖片,草莓地圖片給它認識。之后他就在能一張圖片里面精準(zhǔn)地找到蘋果,草莓。

wKgaomTZppSAZx7bAAKFSgU70tY154.png

Code

 # detect object
 def post_process(self, input_image):
        class_ids = []
        confidences = []
        boxes = []
        blob = cv2.dnn.blobFromImage(input_image, 1 / 255, (self.INPUT_HEIGHT, self.INPUT_WIDTH), [0, 0, 0], 1,
                                     crop=False)
        # Sets the input to the network.
        self.net.setInput(blob)
        # Run the forward pass to get output of the output layers.
        outputs = self.net.forward(self.net.getUnconnectedOutLayersNames())

        rows = outputs[0].shape[1]
        image_height, image_width = input_image.shape[:2]

        x_factor = image_width / self.INPUT_WIDTH
        y_factor = image_height / self.INPUT_HEIGHT
        
        cx = 0
        cy = 0
        
        try:
            for r in range(rows):
                row = outputs[0][0][r]
                confidence = row[4]
                if confidence > self.CONFIDENCE_THRESHOLD:
                    classes_scores = row[5:]
                    class_id = np.argmax(classes_scores)
                    if (classes_scores[class_id] > self.SCORE_THRESHOLD):
                        confidences.append(confidence)
                        class_ids.append(class_id)
                        cx, cy, w, h = row[0], row[1], row[2], row[3]
                        left = int((cx - w / 2) * x_factor)
                        top = int((cy - h / 2) * y_factor)
                        width = int(w * x_factor)
                        height = int(h * y_factor)
                        box = np.array([left, top, width, height])
                        boxes.append(box)

                        '''Non-maximum suppression to obtain a standard box'''
                        indices = cv2.dnn.NMSBoxes(boxes, confidences, self.CONFIDENCE_THRESHOLD, self.NMS_THRESHOLD)

                        for i in indices:
                            box = boxes[i]
                            left = box[0]
                            top = box[1]
                            width = box[2]
                            height = box[3]

                            
                            cv2.rectangle(input_image, (left, top), (left + width, top + height), self.BLUE,
                                          3 * self.THICKNESS)

                            
                            cx = left + (width) // 2
                            cy = top + (height) // 2

                            cv2.circle(input_image, (cx, cy), 5, self.BLUE, 10)

                                                
                            label = "{}:{:.2f}".format(self.classes[class_ids[i]], confidences[i])
                            # draw real_sx, real_sy, detect.color)

                            self.draw_label(input_image, label, left, top)

                # cv2.imshow("nput_frame",input_image)
        # return input_image
        except Exception as e:
            print(e)
            exit(0)

        if cx + cy > 0:
            return cx, cy, input_image
        else:
            return None

wKgaomTZpriAHUnvAAGWQ6pwA8U042.png

YOLO開發(fā)者提供了開源代碼在GitHub上,如果有特殊地需求,可以自行設(shè)置訓(xùn)練的方式,達到效果。

除此之外,還有形狀識別,特征點識別,二維碼識別,形狀識別等這些功能都集合在myCobot320AIKit當(dāng)中。

myCobot320AIKit

這是一個適配機械臂myCobot320的人工智能套裝,將上述視覺算法跟機械臂相結(jié)合的一個應(yīng)用場景。myCobot320機械臂末端搭配著自適應(yīng)夾爪和吸泵,對物體進行抓取/吸取。

wKgZomTZobWAaDMOABUHcI-YERw258.png

識別西瓜進行抓取

wKgZomTZobaAO7zsAEwhqVWsFF0408.png

顏色木塊的識別,用吸泵進行吸取

這是一套非常適合剛?cè)腴T學(xué)習(xí)人工智能,計算機視覺算法識別,機械臂原理的套裝。這個套裝是開源的,提供全部的代碼以供學(xué)習(xí)。

gif的python動圖

如果你想要了解更多關(guān)于myCobot320AIKit的介紹,操作的使用,這邊給你提供之前發(fā)布過的一篇AIKit320的介紹。

總結(jié)

如果你有更好的想法關(guān)于人工智能套裝,你完全可以自己打造一個屬于自己機械臂的應(yīng)用場景,以AIKit為基礎(chǔ)大膽的展示你的想法。

機械臂視覺控制技術(shù)是一種應(yīng)用廣泛、發(fā)展迅速的技術(shù)。相比傳統(tǒng)的機械臂控制技術(shù),機械臂視覺控制技術(shù)具有高效、精準(zhǔn)、靈活等優(yōu)勢,可以在工業(yè)生產(chǎn)、制造、物流等領(lǐng)域得到廣泛應(yīng)用。隨著人工智能、機器學(xué)習(xí)等技術(shù)的不斷發(fā)展,機械臂視覺控制技術(shù)將會有更廣泛的應(yīng)用場景。在未來的發(fā)展中,需要加強技術(shù)研發(fā)和創(chuàng)新,不斷提高技術(shù)水平和應(yīng)用能力。

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 機器人
    +關(guān)注

    關(guān)注

    211

    文章

    28379

    瀏覽量

    206914
  • AI
    AI
    +關(guān)注

    關(guān)注

    87

    文章

    30728

    瀏覽量

    268886
  • 人工智能
    +關(guān)注

    關(guān)注

    1791

    文章

    47183

    瀏覽量

    238247
  • 機械臂
    +關(guān)注

    關(guān)注

    12

    文章

    513

    瀏覽量

    24554
  • 視覺算法
    +關(guān)注

    關(guān)注

    0

    文章

    30

    瀏覽量

    5544
收藏 人收藏

    評論

    相關(guān)推薦

    分享:人工智能算法將帶領(lǐng)機器人走向何方?

    速度和智能應(yīng)對;3、 控制通過算法和運算對實體進行控制; 人工智能和機器人的交集——人工智能機器人 所以,在人工智能的大環(huán)境下,勢必會引領(lǐng)機
    發(fā)表于 08-16 10:44

    百度深度學(xué)習(xí)研究院科學(xué)家深度講解人工智能

    過優(yōu)異成績。其主要的興趣是關(guān)注人工智能特別是計算機視覺技術(shù)如何從技術(shù)、產(chǎn)品和商業(yè)角度在真實世界中大規(guī)模落地。主題簡介及亮點:講者作為人工智能行業(yè)內(nèi)少有的兼顧算法研究和產(chǎn)品應(yīng)用的專家,希
    發(fā)表于 07-19 10:01

    人工智能技術(shù)及算法設(shè)計指南

    手把手教你設(shè)計人工智能芯片及系統(tǒng)(全階設(shè)計教程+AI芯片F(xiàn)PGA實現(xiàn)+開發(fā)板)詳情鏈接:http://url.elecfans.com/u/c422a4bd15人工智能各種技術(shù)與算法
    發(fā)表于 02-12 14:07

    人工智能:超越炒作

    ,而是使用人類推理作為提供更好服務(wù)或創(chuàng)造更好產(chǎn)品的指南。但是這有什么作用呢?我們來看看目前的方法。ML:解析,學(xué)習(xí),確定或預(yù)測的算法作為人工智能的一個子集,機器學(xué)習(xí)使用統(tǒng)計技術(shù)使計算機無需明確編程即可
    發(fā)表于 05-29 10:46

    史上最全AI人工智能入門+進階學(xué)習(xí)視頻全集(200G)【免費領(lǐng)取】

    語言使用,數(shù)學(xué)庫、數(shù)據(jù)結(jié)構(gòu)及相關(guān)算法,深入學(xué)習(xí)AI算法模型訓(xùn)練、分析,神經(jīng)網(wǎng)絡(luò)、機器學(xué)習(xí)、深度學(xué)習(xí)等因此,為了幫助大家更好的入門學(xué)習(xí)AI人工智能,包括:Python語法編程、數(shù)據(jù)結(jié)構(gòu)與
    發(fā)表于 11-27 12:10

    【HarmonyOS HiSpark IPC DIY Camera試用 】青少年人工智能教育套裝之一

    項目名稱:青少年人工智能教育套裝之一試用計劃:我本人從事青少年機器人教育20余年,參與了MakerBlock以及DF的很多套件的構(gòu)思、設(shè)計與推廣;計劃用此套件加上我已采購的HiSpark的機器人套件結(jié)合使用形成一套可以用于青少年的人工智
    發(fā)表于 10-29 15:19

    【HarmonyOS HiSpark IPC DIY Camera試用 】青少年人工智能教育套裝之一

    項目名稱:青少年人工智能教育套裝之一試用計劃:我本人從事青少年機器人教育20余年,參與了MakerBlock以及DF的很多套件的構(gòu)思、設(shè)計與推廣;計劃用此套件加上我已采購的HiSpark的機器人套件結(jié)合使用形成一套可以用于青少年的人工智
    發(fā)表于 10-29 15:20

    人工智能AI-深度學(xué)習(xí)C#&LabVIEW視覺控制演示效果

    不斷變化的,因此深度學(xué)習(xí)是人工智能AI的重要組成部分??梢哉f人腦視覺系統(tǒng)和神經(jīng)網(wǎng)絡(luò)。2、目標(biāo)檢測、目標(biāo)跟蹤、圖像增強、強化學(xué)習(xí)、模型壓縮、視頻理解、人臉技術(shù)、三維視覺、SLAM、GAN
    發(fā)表于 11-27 11:54

    人工智能芯片是人工智能發(fā)展的

    人工智能芯片是人工智能發(fā)展的 | 特倫斯謝諾夫斯基責(zé)編 | 屠敏本文內(nèi)容經(jīng)授權(quán)摘自《深度學(xué)習(xí) 智能時代的核心驅(qū)動力量》從AlphaGo的人機對戰(zhàn),到無人駕駛汽車的上路,再到AI合成主播
    發(fā)表于 07-27 07:02

    人工智能基本概念機器學(xué)習(xí)算法

    目錄人工智能基本概念機器學(xué)習(xí)算法1. 決策樹2. KNN3. KMEANS4. SVM5. 線性回歸深度學(xué)習(xí)算法1. BP2. GANs3. CNN4. LSTM應(yīng)用
    發(fā)表于 09-06 08:21

    人工智能對汽車芯片設(shè)計的影響是什么

    點擊上方“藍字”,關(guān)注我們,感謝!人工智能(AI)以及利用神經(jīng)網(wǎng)絡(luò)的深度學(xué)習(xí)是實現(xiàn)高級駕駛輔助系統(tǒng)(ADAS)和更高程度車輛自主性的強大技術(shù)。隨著人工智能研究的快速發(fā)展,設(shè)計人員正面臨激烈的競爭
    發(fā)表于 12-17 08:17

    什么是人工智能、機器學(xué)習(xí)、深度學(xué)習(xí)和自然語言處理?

    領(lǐng)域,包括機器學(xué)習(xí)、深度學(xué)習(xí)、數(shù)據(jù)挖掘、計算機視覺、自然語言處理和其他幾個學(xué)科。首先,人工智能涉及使計算機具有自我意識,利用計算機視覺、自然語言理解和模仿其他感官。其次,
    發(fā)表于 03-22 11:19

    《移動終端人工智能技術(shù)與應(yīng)用開發(fā)》人工智能的發(fā)展與AI技術(shù)的進步

    人工智能打發(fā)展是算法優(yōu)先于實際應(yīng)用。近幾年隨著人工智能的不斷普及,許多深度學(xué)習(xí)算法涌現(xiàn),從最初的卷積神經(jīng)網(wǎng)絡(luò)(CNN)到機器學(xué)習(xí)
    發(fā)表于 02-17 11:00

    深度解析行業(yè)場景中的人工智能應(yīng)用

    由中國人工智能學(xué)會主辦的2018全球人工智能技術(shù)大會(GAITC)在北京國家會議中心完美收官。七場開放式論壇涉及智能駕駛、深度學(xué)習(xí)、智慧金融、自然語言處理、青年科學(xué)家、
    的頭像 發(fā)表于 05-28 15:16 ?4503次閱讀

    myCobot 320 人工智能套裝2023版震撼上市!突破工作半徑和負載限制,全新夾爪抓取方式!

    大象機器人myCobot 320 人工智能套裝2023版震撼上線,更大的工作半徑、更高的負載、更強大的功能!
    的頭像 發(fā)表于 06-15 18:10 ?747次閱讀
    <b class='flag-5'>myCobot</b> <b class='flag-5'>320</b> <b class='flag-5'>人工智能</b><b class='flag-5'>套裝</b>2023版震撼上市!突破工作半徑和負載限制,全新夾爪抓取方式!
    RM新时代网站-首页