教育場景中的自動化分揀系統!基于大象機器人UltraArm P340機械臂和傳送帶的實現

引言

今天我們將展示一個高度自動化的模擬場景,展示多個機械臂與傳送帶協同工作的高效分揀系統。在這個場景中,機械臂通過視覺識別技術對物體進行分類,并通過精確的機械操作將它們放置在指定的位置。這一系統不僅提高了分揀的速度和準確性,還展示了現代自動化技術在工業領域的巨大潛力。無論是處理大量的日常物品,還是在復雜的工業流程中應用,這種自動化分揀解決方案都體現出了極高的靈活性和效率。

場景描述

在這個高度自動化的分揀場景中,主要設備包括兩個機械臂和一條800mm的傳送帶。右側的上料機器人負責識別和抓取標記物,并將它們放置到傳送帶上。傳送帶將標記物運輸到左側的下料機器人工作范圍內。下料機器人則根據分類要求識別標記物,并將它們有序地放置在指定區域。

放個視頻gif

接下來我們簡要介紹產品的相關參數

產品

NAME

QUANTITY

UltraArm P340

2

USB Camera 2D

2

Conveyor belt

1

Conveyor Controller

1

Vertical suction pump

2

Quick-change servos

2

Kit base Plate

1

列表中是幾個主要的產品。

UltraArm P340

ultraArm 是4自由度的機械臂,全身采用經典金屬設計結構,本體占用體積只有A4紙張的一半,搭載高性能的步進電機,能夠實現±0.1mm重復定位精度和高穩定性。

高性能的步進電機能夠進行7*24的工作時長,且保持性能良好,也是比較適合高度自動化這一場景的選擇。

Conveyor belt

這個也是步進電機來進行驅動的傳送帶,需要用到Arduino mega 2560開發板來作為控制器,給物體提供運輸的一個設備。

USB Camera 2D

攝像頭作為機器視覺必不可少的一部分,是獲取標記物的重要設備,usb 攝像頭,能夠提供畫面,通過各種機器視覺的算法來確定標記物的具體位置,坐標來反饋給機械臂去執行抓取。

工作原理

整個項目的被分為以下幾個功能模塊,以實現整個自動化分揀場景。

我們具體看看各個功能模塊的功能是如何在代碼當中實現的。

Visual recognition module

本次項目用的標記物是Aruco碼,是一種廣泛使用的二進制方形標記,主要用于增強現實和機器人導航等場景中,Aruco碼的設計使得它們在圖像中易于檢測和識別,有以下幾個特點。

1易于檢測和識別:Aruco碼的設計使得它們在圖像中易于檢測和識別

2 唯一性和抗誤識別:每個Aruco碼都有一個唯一的ID,具有一定的糾錯能力

3姿態估計:Aruco碼不僅可以用于識別和定位,還可以用于估計相機相對于標記的姿態(位置和方向)。

4開源和易于使用:OpenCV庫提供了對Aruco碼的完整支持,包括生成、檢測和解碼。

5靈活性和多樣性:Aruco碼可以生成各種尺寸和復雜度的碼,以適應不同的應用需求。

6低成本:生成和使用Aruco碼的成本非常低。它們可以簡單地打印在紙上,或者制作在物體表面,不需要昂貴的硬件設備。

#導入庫
import cv2.aruco as aruco#加載字典
aruco_dict = aruco.Dictionary_get(aruco.DICT_6X6_250)
parameters = aruco.DetectorParameters_create()#灰度處理并且識別
gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)   corners, ids, rejectImaPoint = cv.aruco.detectMarkers(gray, self.aruco_dict, parameters=self.aruco_params)#檢測Aruco碼
if len(corners) > 0:if ids is not None:id = int(ids[0][0])

姿態估計,確定Aruco碼的姿態位置,對于抓取是非常重要的,為控制算法提供反饋,調整機器人的動作。姿態估計后再進行數據的轉換和補償,計算和調整角度最終反饋位置和姿態角度。

#姿態估計
ret = cv.aruco.estimatePoseSingleMarkers(corners, 0.022, self.camera_matrix, self.dist_coeffs
)
(rvec, tvec) = (ret[0], ret[1])#位置計算
xyz = tvec[0, 0, :]
xyz = [round(xyz[0]*1000 + self.pump_x, 2), round(xyz[1]*1000 + self.pump_y, 2), round(xyz[2]*1000, 2)]#旋轉向量處理
try:rvec = np.reshape(rvec, (3, 1))
except ValueError as e:print("reshape錯誤:", e)print("rvec1=", rvec)rvec = np.array([[[-2.86279729, -0.00687534, -0.05316529]]])print("rvec2=", rvec)#計算旋轉矩陣和歐拉角
rotation_matrix, _ = cv.Rodrigues(rvec)
euler_angles = cv.RQDecomp3x3(rotation_matrix)[0]
yaw_angle = int(euler_angles[2])#返回結果
for i in range(rvec.shape[0]):cv.aruco.drawDetectedMarkers(img, corners, ids)if num < 100:num += 1elif num == 100:cv.destroyAllWindows()print("final_x:", xyz[0])print("final_y:", xyz[1])print("final_yaw_angle=", -yaw_angle)return xyz[0], xyz[1], -yaw_angle, id

在此之前需要進行手眼標定,標定的目前是確定相機與機器人末端執行器的相對位置和姿態關系。

Robotic arm control module

ultraArm有一個python的控制庫pymycobot,安裝好環境之后即可使用,一下是簡單控制的使用

from pymycobot.ultraArm import ultraArm#創建實例,com為機械臂的串口號
ua = ultraArm(COM)# 角度控制
ua.send_angles([angle_list],speed)
# 坐標控制mode,控制走直線還是非直線
ua.send_coords([coords_list),speed,mode)#吸泵的使用1-open ;0-close
def pub_pump(self, flag):if flag:self.ua.set_gpio_state(0)else:self.ua.set_gpio_state(1)
ua.pub_pump(state)

機械臂的運動控制很簡單,只需要簡單的調用就好了,但是需要注意的是,在機械臂運動的過程中需要設計運動軌跡,不能撞到一些物體,以及根據獲取到標記嗎的坐標后的點位,比如說起始點位,待抓取點位等等。

Conveyor control module

傳送帶配備的步進電機通常需要通過微控制器(Arduino Mega 2560)來進行輸出控制,mega為此提供了足夠的I/O引腳和處理能力,能夠精確控制步進電機的步進和方向,從而實現傳送帶的啟動、停止、速度調節和方向控制。

#初始化設置
self.serial = serial.Serial(port, baudrate, timeout=1)#寫入命令
def write_command(self, command):self.serial.write(command.encode())#設置傳送帶的方向
def set_direction(self, direction):command = f'DIR {direction}\n'self.write_command(command)#設置速度
def set_speed(self, speed):command = f'SPD {speed}\n'self.write_command(command)#啟動和停止
def start(self):self.write_command('START\n')def stop(self):self.write_command('STOP\n')

Data processing and communication module

在這個自動化分揀系統項目中,數據處理和通信是關鍵部分,為了讓他們互相知道彼此在干什么,將整體連貫起來,只要有一個地方出錯就會停止程序。

第一步-上料機器人的視覺檢測,如果發現檢測的物體不復合要求(擺滿),將不會執行后續的程序。

第二步-上下料機器人協作好,上料機器人先進行拆碼垛工作,搬運到傳送帶上。

第三步-傳送帶將物體運輸到下料機器人的攝像頭識別范圍和機械臂工作半徑內。

第四步-下料機器人將物體的姿態進行識別,下料機器人得到反饋的姿態進行調整后抓去物體放置在指定區域。第五步-每當完成六次物體的抓取后,會重新再進行一次上料機器人的視覺檢測,如果在此期間上料機器人的物體有所變化會導致抓取失敗。(這是邏輯上的設定,可自行更改)

  while robot2.count<18:data=obj.detect()while len(data)<6:print("二維碼檢測數目不對,請確保二維碼在相機范圍內并且能正確識別")time.sleep(1)data=obj.detect()          for i in range(len(data)):robot.move(data[i][2],data[i][1]) conveyer.open_conveyor(100)time.sleep(5.2)conveyer.close_conveyor()for i in range(3):try:print("i=",i)                                pose=cam.detect()if pose is not None: breakexcept Exception as e:if i==2:message()                temp=obj.exception_handling()robot.Special_handling(temp[0][2],temp[0][1],temp[0][3])conveyer.open_conveyor(100)time.sleep(5.2)conveyer.close_conveyor()id=robot2.move(pose[0],pose[1],pose[2],pose[3])                   robot2.judge(id)  

總結

本項目展示了一個基于UltraArm P340機械臂和傳送帶的自動化分揀系統,主要應用于教育場景,旨在教學和演示自動化分揀技術。系統結合計算機視覺、步進電機控制、手眼標定和機械臂運動控制,實現了高效的自動化分揀流程。

如果你覺得該項目有什么可以改進的地方歡迎在下方留下評論,你的留言和支持是對我們更新最大的鼓勵。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/39826.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/39826.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/39826.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

PTrade怎么獲取KDJ隨機指標?想做量化策略怎么申請PTrade量化軟件?

get_KDJ - 隨機指標 get_KDJ(high, low, close, n9, m13, m23) 使用場景 該函數僅在回測、交易模塊可用 接口說明 獲取隨機指標KDJ指標的計算結果 PTrade是恒生公司開發的一款專業量化軟件&#xff0c;部分合作券商可提供&#xff0c;↑↑↑&#xff01; 參數 high&…

什么是分庫分表?它有哪些實現類型?

假如你正在使用關系型數據庫開發一款健康類系統。業務發展很好&#xff0c;系統有很多活躍的新老用戶&#xff0c;這些用戶會和平臺的醫生團隊進行交互&#xff0c;每天可能會生成數萬甚至數十萬級別的業務數據。這樣的話&#xff0c;隨著數據量越來越大&#xff0c;系統中的某…

如何在返利App中進行高效的異常處理與監控

如何在返利App中進行高效的異常處理與監控 大家好&#xff0c;我是微賺淘客系統3.0的小編&#xff0c;也是冬天不穿秋褲&#xff0c;天冷也要風度的程序猿&#xff01; 在開發返利App過程中&#xff0c;高效的異常處理與監控是確保系統穩定性和用戶體驗的關鍵。本文將深入探討…

被?絡罪犯利?的5?ChatGPT越獄提?

?ChatGPT發布的近18個月以來&#xff0c;?絡罪犯們已經能夠利??成式AI進?攻擊。OpenAI在其內容政策中制定了限制措施&#xff0c;以阻??成惡意內容。作為回應&#xff0c;攻擊者們創建了??的?成式AI平臺&#xff0c;如 WormGPT和FraudGPT&#xff0c;并且他們還分享了…

IP地址定位中多源數據融合的應用

IP地址定位如今在諸如網絡安全、地理信息服務、智能交通等領域發揮著關鍵作用。然而&#xff0c;傳統的基于單一數據源&#xff08;如IP數據庫&#xff09;的定位方法往往存在精度有限、可靠性不足等問題。多源數據融合技術的出現為解決這些問題提供了新的思路和方法。今天我們…

石墨烯分散液制備方法眾多 應用領域廣泛

石墨烯分散液制備方法眾多 應用領域廣泛 石墨烯分散液指將石墨烯納米片均勻分散在特定溶劑中制成的溶液。石墨烯分散液具有化學穩定性好、生物相容性好、熱穩定性好等優勢&#xff0c;未來有望在涂料、纖維制品、電池制造、油墨等領域獲得廣泛應用。 石墨烯分散液以石墨…

深入解析某音item_search_video接口:技術原理與應用探索

item_search_video接口是某音提供的一個用于根據關鍵詞搜索相關視頻內容的API。通過該接口&#xff0c;用戶可以獲取到與搜索關鍵詞相關的視頻列表&#xff0c;包括視頻的基本信息&#xff08;如標題、描述、封面圖URL&#xff09;、發布者信息以及視頻的播放和互動數據等。這為…

絕區零卡頓嚴重、延遲高的解決方法提前看

絕區零這款游戲背后是一個錯綜復雜的架空世界&#xff0c;仿佛一幅波瀾壯闊的史詩畫卷緩緩展開。在這個世界中&#xff0c;神秘莫測的“空洞”災害如影隨形&#xff0c;給大地帶來了無盡的破壞和混沌。經過米哈游團隊的精心雕琢&#xff0c;無論是畫面UI的細膩呈現&#xff0c;…

C++ 左值右值

文章目錄 概述左值右值右值引用左值和右值的互換 小結 概述 左值和右值屬于2中不同的表達式類型&#xff1b;它們在表達式中扮演不同的角色&#xff0c;特別是在賦值操作和函數參數傳遞中。 左值 定義&#xff1a;左值是指那些在內存中有確定位置的表達式&#xff0c;可以出…

灌區量測水管理系統是如何實現灌區節水?

隨著全球水資源日益緊張&#xff0c;節水已成為農業生產中不可忽視的一環。在灌區管理中&#xff0c;量測水管理系統以其精準的數據監測和科學的灌溉管理&#xff0c;為實現灌區節水提供了強有力的技術支持。 灌區量測水管理系統是一套集成了自動化監測、數據傳輸、數據分析和…

Springboot交流論壇網站00304

Springboot交流論壇網站 摘要 隨著信息技術在管理上越來越深入而廣泛的應用&#xff0c;管理信息系統的實施在技術上已逐步成熟。本文介紹了交流論壇網站的開發全過程。通過分析交流論壇網站管理的不足&#xff0c;創建了一個計算機管理交流論壇網站的方案。文章介紹了交流論壇…

x-ray投影圖文件.raw轉換成.tif文件【python代碼】

如下&#xff1a; path 輸入文件所在的文件夾路徑import os import numpy as np import tifffile as tiffdef read_raw_data(path, dimensions, dtype):"""讀取 .raw 文件并返回圖像數據:param path: .raw 文件路徑:param dimensions: 圖像的行數和列數 (hei…

elementui中table組件合并行(看就懂)

做一個動態合并的table表格, 如下圖 1.首先定義需要合并的字段及合并后的對象 data(){return {mergeFields: [name, amount3],mergeObj: {}} }2.分配合并項函數, data為數據源 //獲取合并序號getSpanArr(data []) {this.mergeFields.forEach(key > {// 用來記錄合并行的起…

數據類型的分類和查看

數據類型是指定程序在運行過程中&#xff0c;將各種數據根據表示形式和組織形式劃分為不同的分類。 例如&#xff0c;一個人的姓名可以用字符類型存儲&#xff0c;年齡可以用數值類型存儲&#xff0c;而婚否可以用布爾類型存儲&#xff0c;這些都是 Python 中的 標準數據類型…

為什么我感覺 C 語言在 Linux 下執行效率比 Windows 快得多?

在開始前剛好我有一些資料&#xff0c;是我根據網友給的問題精心整理了一份「Linux的資料從專業入門到高級教程」&#xff0c; 點個關注在評論區回復“888”之后私信回復“888”&#xff0c;全部無償共享給大家&#xff01;&#xff01;&#xff01;Windows的終端或者叫控制臺…

c++初級-2-引用

文章目錄 引用一、引用的定義二、引用做函數參數三、引用作為返回對象四、引用的本質五、常量引用 引用 即給一個變量起別名。 一、引用的定義 int a 10;//引用int& b a;cout << "a " << a << endl;cout << "b " <&l…

時間12小時和24時轉換方法

24小時時間轉為12小時制 function convertTo12Hour(time24h){let [hours, minutes] time24h.split(:);let modifier 上午;if (parseInt(hours, 10) > 12) {modifier 下午;hours (parseInt(hours, 10) - 12).toString();}if (parseInt(hours, 10) 12) {modifier 下午;}…

新手入門:無服務器函數和FaaS簡介

無服務器&#xff08;Serverless&#xff09;架構的價值在于其成本效益、彈性和擴展性、簡化的開發和部署流程、高可用性和可靠性以及使開發者能夠專注于業務邏輯。通過自動化資源調配和按需計費&#xff0c;無服務器架構能夠降低成本并適應流量變化&#xff0c;同時簡化開發流…

《昇思25天學習打卡營第01天|sun65535》

開始 昇思25天打卡訓練營&#xff0c;讓我第一次了解了華為昇思的平臺&#xff0c;之前也有自己本地使用4060訓練了一些“小模型”&#xff0c;但是都是比較皮毛的知識&#xff0c;只是根據教程去搭建。很少了解到具體的過程。昇思25天打卡訓練營給了一個比較全面的訓練課程。…

大數據基礎知識【大數據導論】

各位大佬好 &#xff0c;這里是阿川的博客&#xff0c;祝您變得更強 個人主頁&#xff1a;在線OJ的阿川 大佬的支持和鼓勵&#xff0c;將是我成長路上最大的動力 阿川水平有限&#xff0c;如有錯誤&#xff0c;歡迎大佬指正 大數據基礎知識前 必看 【大數據導論】—大數據序言…