引言
在之前我們已經(jīng)介紹了水果采摘和分揀機(jī)器人的應(yīng)用場(chǎng)景,今天我們來(lái)介紹復(fù)合機(jī)器人水果采摘運(yùn)輸?shù)膱?chǎng)景。
作為最熱門的技術(shù)領(lǐng)域,機(jī)器人技術(shù)正在徹底改變各行各業(yè),推動(dòng)全球創(chuàng)新。為了滿足這一快速發(fā)展領(lǐng)域?qū)I(yè)技術(shù)人才日益增長(zhǎng)的需求,Elephant Robotics公司為高等院校開發(fā)了一個(gè)開創(chuàng)性的機(jī)器人教育解決方案。該創(chuàng)新解決方案將模擬自動(dòng)水果采摘機(jī)與水果分揀和配送自動(dòng)化的復(fù)合機(jī)器人結(jié)合起來(lái),為學(xué)生提供了在最熱門和最有發(fā)展趨勢(shì)的技術(shù)領(lǐng)域的全面學(xué)習(xí)體驗(yàn)。
讓讓我們帶著探索的心情,一起來(lái)看看!帶著幾個(gè)問題:
● 復(fù)合機(jī)器人應(yīng)用場(chǎng)景是什么?
● 這個(gè)場(chǎng)景有什么用,能夠讓我們學(xué)到什么?
● 這個(gè)場(chǎng)景有什么特別的地方?
Compound Robot: Automation of Fruit Sorting and Delivery
圖中所展示的是復(fù)合機(jī)器人套裝應(yīng)用的場(chǎng)景,由以下幾個(gè)部分組成。
mechArm 270 Pi | *2 |
---|---|
myAGV | *1 |
3D Camera/Depth Camera | *1 |
Simulated Fruit Tree | *1 |
3D Structural Parts | some |
Screen | *2 |
Keyboard&mouse | *2 |
Router | *1 |
你可能會(huì)想知道這個(gè)套裝是如何怎么運(yùn)行起來(lái)的,有那么多個(gè)模塊組成,它們分別充當(dāng)什么成分,它的工作原理又是什么呢。接下來(lái)跟隨著我們的腳步來(lái)探索這未知的事物。
這是一張場(chǎng)景的結(jié)構(gòu)圖,介紹圖中的組成:
● myAGV+R1 Arm :復(fù)合機(jī)器人,由myAGV搭載mechArm 270-Pi機(jī)械臂
● Obstacle:障礙物,阻擋myAGV前行的物體。
● Tree:仿真模擬果樹,樹上有果實(shí)
● R2 Arm: mechArm 270 Pi,六軸機(jī)械臂
● Loading Area: 復(fù)合機(jī)器人到達(dá)該位置,等待ARM將果實(shí)的裝載
● Unloading Area:復(fù)合機(jī)器人到達(dá)該位置,進(jìn)行卸載果實(shí)
● Collection Area:收集區(qū),將負(fù)載的果實(shí)卸載到收集區(qū)與內(nèi)
復(fù)合機(jī)器人從初始位置開始運(yùn)轉(zhuǎn),它進(jìn)行自主導(dǎo)航,規(guī)避障礙前往“Loading Area”,抵達(dá)位置后,R2 Arm抓取果樹上的果實(shí)放置在復(fù)合機(jī)器人上,復(fù)合機(jī)器人前往下一個(gè)目標(biāo)“Unloading Area”抵達(dá)位置后,R1Arm將裝載的果實(shí)放置到“Collection Area”。
產(chǎn)品介紹
Robotic Arm - mechArm 270 Pi
這是一款小六軸機(jī)械臂,以Raspberry-Pi為核心控制,ESP32為輔助控制,結(jié)構(gòu)是中心對(duì)稱結(jié)構(gòu)(仿工業(yè)結(jié)構(gòu))。mechArm 270-Pi本體重量1kg, 負(fù)載250g,工作半徑270mm,設(shè)計(jì)緊湊便攜,小巧但功能強(qiáng)大,操作簡(jiǎn)單,能與人協(xié)同、安全工作。
myAGV- Raspberry Pi 4B
myAGV是一個(gè)以樹莓派4B為控制主板的移動(dòng)底盤機(jī)器人,它采用了競(jìng)賽級(jí)別的麥克納姆車輪和帶有金屬框架的全包裹設(shè)計(jì),內(nèi)置了SLAM算法來(lái)實(shí)現(xiàn)雷達(dá)建圖和自動(dòng)導(dǎo)航,動(dòng)態(tài)避障等功能。Raspberry Pi 4 Model B采用了更快的處理器、更多的內(nèi)存和更快的網(wǎng)絡(luò)連接,并且可以通過(guò)多個(gè)USB 3.0和USB 2.0端口、千兆以太網(wǎng)和雙頻802.11ac無(wú)線網(wǎng)絡(luò)連接,實(shí)現(xiàn)更好的外部設(shè)備連接和網(wǎng)絡(luò)性能。樹莓派社區(qū)也是目前全球名列前茅的硬件開發(fā)社區(qū),里面有許多有趣的案例,常見的解決方法供開發(fā)者交流。
深度攝像頭
隨著使用場(chǎng)景的多樣性,普通的2D攝像頭無(wú)法滿足我們使用的需求。在場(chǎng)景中我們使用到的是深度攝像頭。深度攝像頭是一種能夠獲取場(chǎng)景深度信息的相機(jī)。它不僅能夠捕捉場(chǎng)景的顏色和亮度信息,還能夠感知物體之間的距離和深度信息。深度攝像頭通常使用紅外線或其他光源來(lái)進(jìn)行測(cè)量,以獲取物體和場(chǎng)景的深度信息。
它可以獲取很多信息,例如深度的畫面,彩色的畫面,紅外線的畫面,點(diǎn)云畫面。
有了深度相機(jī),我們就可以精準(zhǔn)的獲取到果樹上果實(shí)的位置,以及顏色信息。
自適應(yīng)夾爪-機(jī)械臂末端執(zhí)行器
自適應(yīng)夾爪是一種用來(lái)抓取、握取或夾持物體的末端執(zhí)行器,它由兩個(gè)可移動(dòng)的爪子組成,可以通過(guò)機(jī)械臂的控制系統(tǒng)來(lái)控制其開合程度和開合速度。
功能的實(shí)現(xiàn)
開始前的準(zhǔn)備
編譯環(huán)境:
# for myAGV to realize some functions
ROS1 Melodic(Gmapping,AMCL,DWA)
# for robotic arm(mechArm 270) to realize some functions
numpy==1.24.3
opencv-contrib-python==4.6.0.66
openni==2.3.0
pymycobot==3.1.2
PyQt5==5.15.9
PyQt5-Qt5==5.15.2
PyQt5-sip==12.12.1
pyserial==3.5
我們主要分類兩個(gè)部分進(jìn)行功能分析,第一部分是整個(gè)項(xiàng)目的架構(gòu),邏輯分析,第二部分是myAGV的功能分析,第三部分是機(jī)械臂的控制,其中第二第三部分又分為以下幾個(gè)功能點(diǎn)。
myAGV:
● 建圖導(dǎo)航
● 靜態(tài)動(dòng)態(tài)避障
mechArm:
● 機(jī)器視覺識(shí)別算法
● 機(jī)械臂的控制和機(jī)械臂路勁規(guī)劃
我們先從項(xiàng)目的架構(gòu)開始分析。
項(xiàng)目的結(jié)構(gòu)
我們用一張圖來(lái)描述整個(gè)項(xiàng)目的流程,可以結(jié)合上面提到的結(jié)構(gòu)圖來(lái)進(jìn)行分析。
首先myAGV前往“l(fā)oading area” 等待機(jī)械臂從果樹上抓取果實(shí)放到myAGV上,myAGV再通過(guò)運(yùn)輸果實(shí)到“unloading area“將myAGV上負(fù)載得果實(shí)運(yùn)輸?shù)健眂ollection area“,通過(guò)在myAGV上得機(jī)械臂來(lái)實(shí)現(xiàn)。前面得描述為一個(gè)循環(huán),當(dāng)完成卸載水果后,myAGV會(huì)重新回到”loading area“進(jìn)行裝載果實(shí),裝載完成后再去卸載水果,進(jìn)行循環(huán)。
讓我們一起來(lái)分析一下,在整個(gè)過(guò)程中需要解決一些什么問題。最直觀的問題就是,當(dāng)myAGV到達(dá)一個(gè)目標(biāo)地點(diǎn)的時(shí)候,機(jī)械臂是如何知道什么時(shí)候進(jìn)行抓取工作呢?這就要涉及到myAGV和機(jī)械臂通信的一個(gè)問題了。
通信
我們得了解我們的產(chǎn)品是什么,mechArm是一個(gè)固定的六軸機(jī)械臂,以樹莓派為控制主板,myAGV是一個(gè)可移動(dòng)的機(jī)器人,也是以樹莓派為控制主板。所以目前最佳的通信就是用TCP/IP協(xié)議來(lái)實(shí)現(xiàn)。我們常用的一個(gè)方法庫(kù)叫socket,它運(yùn)作的原理很簡(jiǎn)單,建立一個(gè)服務(wù)器和一個(gè)客戶端,就好比我們現(xiàn)在用的ins,tw,whatsapp聊天功能一樣。可以收到信息,也可以發(fā)出信息。
下面是建立服務(wù)器的一些代碼。
Code:
classTcpServer(threading.Thread):
def__init__(self, server_address)- >None:
threading.Thread.__init__(self)
self.s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.s.bind(server_address)
print("server Binding succeeded!")
self.s.listen(1)
self.connected_obj =None
self.good_fruit_str ="apple"
self.bad_fruit_str ="orange"
self.invalid_fruit_str ="none"
self.target = self.invalid_fruit_str
self.target_copy = self.target
self.start_move =False
classTcpClient(threading.Thread):
def__init__(self, host, port, max_fruit =8, recv_interval =0.1, recv_timeout =30):
threading.Thread.__init__(self)
self.good_fruit_str ="apple"
self.bad_fruit_str ="orange"
self.invalid_fruit_str ="none"
self.host = host
self.port = port
# Initializing the TCP socket object
# specifying the usage of the IPv4 address family
# designating the use of the TCP stream transmission protocol
self.client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.client_socket.connect((self.host, self.port))
self.current_extracted =0
self.max_fruit = max_fruit
self.recv_interval = recv_interval
self.recv_timeout = recv_timeout
self.response_copy = self.invalid_fruit_str
self.action_ready =True
處理完通信就可以解決了myAGV和機(jī)械臂之間的問題。當(dāng)myAGV到達(dá)目的地的時(shí)候給機(jī)械臂發(fā)送一個(gè)信息“i am here”,機(jī)械臂收到這個(gè)信息之后執(zhí)行果實(shí)的采摘。
myAGV
建圖導(dǎo)航
現(xiàn)在的汽車有導(dǎo)航,自動(dòng)駕駛功能,能夠運(yùn)用在現(xiàn)實(shí)生活中實(shí)現(xiàn)無(wú)人駕駛,但是這門技術(shù)目前還不是很完善。那么復(fù)合機(jī)器人中所用的到自動(dòng)導(dǎo)航和避障功能是用什么來(lái)實(shí)現(xiàn)的呢?
ROS:是一個(gè)開源的機(jī)器人操作系統(tǒng),它提供了一系列的工具關(guān)于機(jī)器人的操作,也包含了待會(huì)我們會(huì)提及到的功能包,Gmapping,AMCL,DWA。ROS是一個(gè)功能強(qiáng)大的機(jī)器人操作系統(tǒng),它提供了豐富的庫(kù)和工具,以及靈活的模塊化架構(gòu),使得機(jī)器人應(yīng)用的開發(fā)變得更加高效、靈活和可靠。
在日常生活中,我們使用導(dǎo)航我們的操作一般是:打開地圖,輸入目的地,選擇路線前往目的地。
首先,我們要想實(shí)現(xiàn)一塊區(qū)域必須得有這塊區(qū)域的一個(gè)“地圖”,我們把這個(gè)稱之為“建圖”
GPS(全球衛(wèi)星定位系統(tǒng))是各個(gè)定位系統(tǒng)中所用到的,精準(zhǔn)的收集地面上的信息,構(gòu)建出一個(gè)準(zhǔn)確的地圖。
這里涉及到一個(gè)建圖的算法,Gmapping。
gmapping是一種用于在機(jī)器人上建立環(huán)境地圖的算法。它是一種基于激光雷達(dá)數(shù)據(jù)的SLAM(Simultaneous Localization and Mapping)算法,可以在機(jī)器人運(yùn)動(dòng)時(shí)實(shí)時(shí)地構(gòu)建環(huán)境地圖,并同時(shí)確定機(jī)器人的位置。
這里我們演示一下,如何進(jìn)行g(shù)mapping建圖。
實(shí)際中建圖的運(yùn)動(dòng)
ROS界面
可以看到地圖是myAGV通過(guò)雷達(dá)獲取當(dāng)前位置的數(shù)據(jù),排查周圍環(huán)境的情況,在圖中標(biāo)出障礙物。根據(jù)我們搭建的場(chǎng)景,在系統(tǒng)中形成一個(gè)閉環(huán),就完成了建圖。
接下來(lái)我們用到的是navigation功能,顧名思義就是“導(dǎo)航”。導(dǎo)航的前提條件,就是需要定位(myAGV所處的位置),用到的是ROS提供的ACML算法。
AMCL算法是一種概率機(jī)器人定位算法,它基于蒙特卡羅方法(Monte Carlo Method)和貝葉斯濾波(Bayesian Filtering)理論,通過(guò)對(duì)機(jī)器人搭載的傳感器數(shù)據(jù)進(jìn)行處理,實(shí)時(shí)估計(jì)機(jī)器人在環(huán)境中的位置,并不斷更新機(jī)器人位置的概率分布。
AMCL算法通過(guò)以下步驟實(shí)現(xiàn)機(jī)器人的自適應(yīng)定位:
1. 初始化粒子集合:首先,在機(jī)器人初始位置周圍生成一組粒子,代表機(jī)器人可能的位置。
2. 運(yùn)動(dòng)模型更新:根據(jù)機(jī)器人的運(yùn)動(dòng)狀態(tài)和控制信息,更新粒子集合中每個(gè)粒子的位置和狀態(tài)信息。
3. 測(cè)量模型更新:根據(jù)機(jī)器人搭載的傳感器數(shù)據(jù),計(jì)算每個(gè)粒子的權(quán)重(即代表機(jī)器人在該粒子位置時(shí)傳感器數(shù)據(jù)與實(shí)際數(shù)據(jù)的匹配程度),并通過(guò)歸一化處理,將權(quán)重轉(zhuǎn)化為概率分布。
4. 重采樣:根據(jù)粒子的權(quán)重,對(duì)粒子集合進(jìn)行重采樣,從而提高定位精度并減少計(jì)算復(fù)雜度。
5. 機(jī)器人定位:根據(jù)粒子集合的概率分布,確定機(jī)器人在環(huán)境中的位置,并更新機(jī)器人狀態(tài)估計(jì)信息。
在我們使用導(dǎo)航的時(shí)候選擇目的地,導(dǎo)航軟件會(huì)給我們提供多條路給我們選擇,然而這里也會(huì)提供多條路徑進(jìn)行選擇,只不過(guò)是系統(tǒng)幫忙做了最優(yōu)的選擇。涉及到了兩個(gè)概念,全局路徑規(guī)劃和局部路徑規(guī)劃。Navigation提供了一套框架,其中g(shù)lobal_planner是全局規(guī)劃器,而local_planner是局部路徑規(guī)劃器,它們之間的有些消息,例如:全局規(guī)劃的軌跡,就是在框架內(nèi)部傳遞,沒有topic可以跟蹤??偟恼f(shuō),ROS的導(dǎo)航模塊提供了一套機(jī)制,通過(guò)選擇不同的規(guī)劃器,可以實(shí)現(xiàn)機(jī)器人的自主導(dǎo)航。
Navigation框架中集成了靜態(tài)和動(dòng)態(tài)的避障。
導(dǎo)航避障功能
從上面的圖中可以看到除了規(guī)劃器,導(dǎo)航模塊還包括cost_map,也就是柵格地圖,并且也包括了靜態(tài)障礙物的信息,也就是說(shuō)哪些區(qū)域可以通過(guò)哪些不可以通過(guò)。同時(shí)動(dòng)態(tài)障礙物信息是通過(guò)sensor topics來(lái)發(fā)布,然后實(shí)時(shí)更新cost_map來(lái)實(shí)現(xiàn)動(dòng)態(tài)避障。除了地圖,導(dǎo)航模塊還需要定位信息,是由amcl模塊來(lái)提供定位信息,如果想采用其它的定位模塊替代,只需要發(fā)布相同的topic即可。同時(shí)還要提供tf信息,也就是說(shuō)不同傳感器之間的轉(zhuǎn)換關(guān)系,這在機(jī)器人中非常常見。機(jī)器人的位姿信息則由odometry來(lái)提供,包括機(jī)器人的速度、角度等,提供給局部規(guī)劃器來(lái)規(guī)劃路徑。
在避障功能中的主力軍是DWA算法,DWA算法旨在使機(jī)器人能夠在復(fù)雜和動(dòng)態(tài)的環(huán)境中快速、安全地規(guī)劃和跟蹤路徑。具體來(lái)說(shuō),DWA算法通過(guò)以下幾個(gè)步驟來(lái)實(shí)現(xiàn):
● 生成候選速度:在機(jī)器人當(dāng)前速度和方向的基礎(chǔ)上,根據(jù)機(jī)器人的動(dòng)力學(xué)限制和環(huán)境條件,生成一組速度和方向的候選值。
● 評(píng)估軌跡:對(duì)于每個(gè)候選速度,預(yù)測(cè)機(jī)器人在未來(lái)一段時(shí)間內(nèi)的軌跡,并評(píng)估軌跡的安全性和可達(dá)性。
● 選擇最佳速度:根據(jù)軌跡的評(píng)估結(jié)果,選擇滿足安全和可達(dá)性要求的最佳速度和方向,并將其應(yīng)用于機(jī)器人的控制系統(tǒng)中。
機(jī)器視覺算法
從前面已經(jīng)提到普通的2D攝像頭已經(jīng)沒辦法滿足我們的需求,于是我們使用3D深度攝像頭。使用深度攝像頭之前需要進(jìn)行相機(jī)標(biāo)定。相機(jī)標(biāo)定的教程()
相機(jī)標(biāo)定:
相機(jī)標(biāo)定是指通過(guò)對(duì)攝像機(jī)進(jìn)行一系列測(cè)量和計(jì)算,確定攝像機(jī)內(nèi)部參數(shù)和外部參數(shù)的過(guò)程。攝像機(jī)內(nèi)部參數(shù)包括焦距、主點(diǎn)位置、像素間距等,而攝像機(jī)外部參數(shù)則包括攝像機(jī)在世界坐標(biāo)系中的位置和方向等。相機(jī)標(biāo)定的目的是為了使攝像機(jī)能夠準(zhǔn)確地捕捉并記錄世界坐標(biāo)系中物體的位置、大小、形狀等信息。
目標(biāo)物體是果實(shí),它顏色不一,形狀也不一定,有紅的,橙的,黃的。想要準(zhǔn)確的抓取且不傷害到果實(shí),就需要獲取果實(shí)的各個(gè)信息,寬度,厚度等,智能的進(jìn)行抓取。
目標(biāo)果實(shí)目前較大的區(qū)別就是顏色的不一樣,所以設(shè)定紅色和橙色的目標(biāo)將被選中,關(guān)于機(jī)器顏色的識(shí)別,就要用到HSV色域來(lái)進(jìn)行目標(biāo)的檢測(cè)。下面的部分代碼是用來(lái)檢測(cè)目標(biāo)果實(shí)。
Code
classDetector:
classFetchType(Enum):
FETCH =False
FETCH_ALL =True
"""
Detection and identification class
"""
HSV_DIST ={
# "redA": (np.array([0, 120, 50]), np.array([3, 255, 255])),
# "redB": (np.array([176, 120, 50]), np.array([179, 255, 255])),
"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([10, 120, 120]), np.array([15, 255, 255])),
"orange":(np.array([8,150,150]), np.array([20,255,255])),
"yellow":(np.array([28,100,150]), np.array([35,255,255])),# old
# "yellow": (np.array([31, 246, 227]), np.array([35, 255, 255])), # new
}
我們的第一步就是要將目標(biāo)果實(shí)能夠正確的檢測(cè)出來(lái),以便后續(xù)獲取目標(biāo)物體的坐標(biāo),深度等其他信息。我們定義果實(shí)的屬性,坐標(biāo)等信息方便后續(xù)的存儲(chǔ)以及調(diào)用。
code:
class VideoCaptureThread(threading.Thread):
def __init__(self, detector, detect_type = Detector.FetchType.FETCH_ALL.value):
threading.Thread.__init__(self)
self.vp = VideoStreamPipe()
self.detector = detector
self.finished = True
self.camera_coord_list = []
self.old_real_coord_list = []
self.real_coord_list = []
self.new_color_frame = None
self.fruit_type = detector.detect_target
self.detect_type = detect_type
self.rgb_show = None
self.depth_show = None
最后我們要獲取的是果實(shí)的坐標(biāo),能夠發(fā)送給機(jī)械臂去執(zhí)行抓取的坐標(biāo),通過(guò)深度坐標(biāo)轉(zhuǎn)化為世界坐標(biāo),已經(jīng)是成功了一大半了,最后只需要將世界坐標(biāo)跟機(jī)械臂的坐標(biāo)系進(jìn)行轉(zhuǎn)換就可以獲得抓取目標(biāo)果實(shí)的坐標(biāo)了。
# get world coordinate
def convert_depth_to_world(self, x, y, z):
fx = 454.367
fy = 454.367
cx = 313.847
cy = 239.89
ratio = float(z / 1000)
world_x = float((x - cx) * ratio) / fx
world_x = world_x * 1000
world_y = float((y - cy) * ratio) / fy
world_y = world_y * 1000
world_z = float(z)
return world_x, world_y, world_z
該階段,我們實(shí)現(xiàn)了檢測(cè)目標(biāo)物體,并且返回可抓取的坐標(biāo),傳遞給機(jī)械臂。接下來(lái)我們來(lái)處理機(jī)械臂的控制以及軌跡的規(guī)劃。
機(jī)械臂的控制和軌跡規(guī)劃
說(shuō)到機(jī)械臂的控制,大家開始可能都會(huì)覺得困難,思考怎么讓機(jī)械臂按照自己的想法動(dòng)起來(lái)。不過(guò)不用擔(dān)心,mechArm270機(jī)械臂有一個(gè)比較完善的控制庫(kù),pymycobot只需要簡(jiǎn)單的幾行代碼就能夠讓機(jī)械臂運(yùn)動(dòng)起來(lái)。
PS:pymycobot 是pyhon的一個(gè)庫(kù),用于控制機(jī)械臂運(yùn)動(dòng)的一個(gè)庫(kù),我們使用的是最新版,pymycobot==3.1.2
#Introduce two commonly used control methods
'''
Send the degrees of all joints to robot arm.
angle_list_degrees: a list of degree value(List[float]), length 6
speed: (int) 0 ~ 100,robotic arm's speed
'''
send_angles([angle_list_degrees],speed)
send_angles([10,20,30,45,60,0],100)
'''
Send the coordinates to robot arm
coords:a list of coordiantes value(List[float]), length 6
speed: (int) 0 ~ 100,robotic arm's speed
'''
send_coords(coords, speed)
send_coords([125,45,78,-120,77,90],50)
場(chǎng)景中有兩個(gè)機(jī)械臂,它們分別執(zhí)行不同的職能。其中一個(gè)是執(zhí)行果實(shí)的采摘,另一個(gè)是執(zhí)行果實(shí)的裝卸。
在實(shí)現(xiàn)機(jī)械臂的控制,就需要設(shè)計(jì)機(jī)械臂抓取果實(shí)的軌跡規(guī)劃了。在獲取了果實(shí)的坐標(biāo)之后,對(duì)機(jī)械臂的路徑有所要求,在機(jī)械臂運(yùn)動(dòng)的過(guò)程中不能撞到其他結(jié)構(gòu),打落水果等。
下面是規(guī)劃路徑的Code:
#處理果實(shí)世界坐標(biāo)的方法
deftarget_coords(self):
coord = self.ma.get_coords()
whilelen(coord)==0:
coord = self.ma.get_coords()
target = self.model_track()
coord[:3]= target.copy()
self.end_coords = coord[:3]
if DEBUG ==True:
print("coord: ", coord)
print("self.end_coords: ", self.end_coords)
self.end_coords = coord
return coord
裝卸機(jī)械臂的路徑規(guī)劃也是同樣的原則來(lái)實(shí)現(xiàn)裝卸這個(gè)過(guò)程。
技術(shù)亮點(diǎn)
從整個(gè)項(xiàng)目來(lái)看,不論是myAGV的建圖導(dǎo)航,自動(dòng)避障功能,還是3D攝像頭機(jī)器識(shí)別的算法,機(jī)械臂的路勁規(guī)劃,亦或者是myAGV跟機(jī)械臂之間的通信,邏輯上的處理。每一個(gè)功能點(diǎn)都有值得學(xué)習(xí)的地方。
我們?cè)陧?xiàng)目中使用到的一些算法并不是最優(yōu)的方法,舉一個(gè)例子說(shuō)明,建圖中用到的gmapping算法。除了gmapping算法還有,F(xiàn)astSLAM算法:FastSLAM算法是一種基于粒子濾波的建圖算法;Topological Mapping算法是一種基于拓?fù)浣Y(jié)構(gòu)的建圖算法,它通過(guò)對(duì)環(huán)境進(jìn)行拓?fù)浞治觯瑢h(huán)境表示為一個(gè)圖的結(jié)構(gòu)等等。
俗話說(shuō)的好“機(jī)器是死的,人是活的”,我們可以根據(jù)各種外界因素來(lái)選擇方法,來(lái)達(dá)到效果最優(yōu)。這個(gè)過(guò)程當(dāng)中是需要不斷地去學(xué)習(xí),不斷地去探討。
總結(jié)
隨著科技的不斷發(fā)展,在未來(lái)世界里。機(jī)器將會(huì)是我們?nèi)祟愖畲蟮膸褪?,在未?lái)的發(fā)展趨勢(shì)也是朝著智能化、靈活化、高效化、安全化的方向發(fā)展。移動(dòng)小車的發(fā)展趨勢(shì)主要包括自主導(dǎo)航、智能路徑規(guī)劃、多模態(tài)感知等方面;機(jī)械臂的發(fā)展趨勢(shì)則主要包括自主學(xué)習(xí)、自適應(yīng)控制、視覺識(shí)別等方面。同時(shí),復(fù)合機(jī)器人的發(fā)展也需要解決移動(dòng)與操作的協(xié)同問題,提高機(jī)器人系統(tǒng)的整體性能和效益。
我們建立該應(yīng)用場(chǎng)景也是提供給熱愛機(jī)器人的創(chuàng)客,學(xué)生一個(gè)具有實(shí)際意義的機(jī)會(huì)。讓學(xué)生通過(guò)實(shí)際操作來(lái)加深對(duì)機(jī)械臂的理解和認(rèn)識(shí)。此外,該場(chǎng)景還可以讓學(xué)生學(xué)習(xí)和掌握機(jī)械臂運(yùn)動(dòng)控制、視覺識(shí)別和物品抓取等技術(shù),幫助他們更好地掌握機(jī)械臂的相關(guān)知識(shí)和技能。還可以幫助學(xué)生鍛煉團(tuán)隊(duì)合作、創(chuàng)新思維和競(jìng)賽思維等能力,為他們未來(lái)的職業(yè)發(fā)展打下堅(jiān)實(shí)的基礎(chǔ)。
審核編輯 黃宇
-
機(jī)器人
+關(guān)注
關(guān)注
210文章
28103瀏覽量
205852 -
AI
+關(guān)注
關(guān)注
87文章
29806瀏覽量
268106 -
人工智能
+關(guān)注
關(guān)注
1789文章
46652瀏覽量
237083
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論