步驟1:零件和材料
MATLAB 2018a
-MATLAB是2018年的首選版本,主要是因?yàn)樗c連接到移動(dòng)設(shè)備的代碼配合使用效果最佳。但是,我們的大多數(shù)代碼都可以在大多數(shù)MATLAB版本中進(jìn)行解釋。
iRobot創(chuàng)建設(shè)備
-該設(shè)備是專用的特殊設(shè)備目的是用于編程和編碼。 (這不是實(shí)際的真空)
Raspberry Pi(帶相機(jī))
-作為iRobot的大腦的主板。它可能很小,但是可以處理許多事情。相機(jī)是附加附件。它還使用樹莓派獲取其所有功能和命令。上圖所示的攝像機(jī)安裝在田納西大學(xué)工程基礎(chǔ)系創(chuàng)建的3D打印支架上。
步驟2:Roomba數(shù)據(jù)庫文件
您需要一個(gè)主文件,以便為Roomba使用適當(dāng)?shù)墓δ芎兔?。您可以在此文件中編寫代碼來借鑒功能,以使Roomba的操作更易于管理。
您可以從此鏈接下載文件,也可以從下面的可下載文件下載
https://ef.engr.utk.edu/ef230-2017-08/projects/roomba-s/setup-roomba-instructable.php
步驟3:連接到Roomba
首先,您必須確保將機(jī)器人連接到樹莓派通過使用微型USB插頭安裝主板。然后,您需要將計(jì)算機(jī)和機(jī)器人正確連接到同一WiFi。完成此操作后,您可以打開機(jī)器人電源并使用機(jī)器人數(shù)據(jù)庫文件中的給定命令連接到它。 (在使用機(jī)器人前后,請務(wù)必對其進(jìn)行硬重置)。例如,我們使用命令“ r.roomba(19)”連接到我們的機(jī)器人,將變量r分配給我們的設(shè)備。這是指數(shù)據(jù)庫文件,該文件將我們的變量設(shè)置為可以在任何給定時(shí)刻引用的結(jié)構(gòu)。
第4步:代碼
我們在下面附加了完整的代碼,但這是一個(gè)簡要概述,突出顯示了腳本中的重要元素。我們利用了所有傳感器以及攝像頭,以充分發(fā)揮機(jī)器人的潛力。我們還包含了允許我們將移動(dòng)設(shè)備連接到機(jī)器人并使用其Gryoscope手動(dòng)控制它的代碼。
我們從簡單的命令“ r.setDriveVelocity(.06)”開始,該命令將機(jī)器人的前進(jìn)速度設(shè)置為.06 m/s。這只是為了讓機(jī)器人事先移動(dòng)。
然后,我們的主腳本從一個(gè)while循環(huán)開始,該循環(huán)通過創(chuàng)建可以在下面的條件語句中引用和使用的結(jié)構(gòu)來檢索給定機(jī)器人的數(shù)據(jù)。我們告訴機(jī)器人根據(jù)機(jī)器人用其傳感器讀取的結(jié)構(gòu)數(shù)據(jù)執(zhí)行某個(gè)命令。我們對其進(jìn)行設(shè)置,以便機(jī)器人讀取其懸崖傳感器并遵循一條黑色路徑。
while true%while循環(huán)會(huì)一直進(jìn)行到出現(xiàn)“ false”(在這種情況下,它會(huì)無限進(jìn)行)。
data = r.getCliffSensors; data2 = r.getBumpers;%連續(xù)獲取有關(guān)懸崖傳感器值的數(shù)據(jù),并將其分配給變量%img = r.getImage; %從已安裝的相機(jī)拍攝照片%image(img); %顯示拍攝的圖像。%red_mean = mean(mean(img(:,:,1)));%如果data.rightFront 《2000 r.turnAngle(-2);則獲取綠色的平均值。一旦右前懸崖傳感器的值降至2000 r.set%以下,Room將Roomba旋轉(zhuǎn)約.2度C.setDriveVelocity(.05); elseif data.leftFront 《2000 r.turnAngle(2);一旦左前側(cè)懸崖傳感器的值降至2000 r。%以下,Room將Roomba逆時(shí)針旋轉(zhuǎn)約0.2度。setDriveVelocity(.05); elseif 2000》 data.leftFront && 2000》 data.rightFront r.moveDistance(.1); %指示Roomba如果來自右前傳感器和左前傳感器的兩個(gè)值都低于2000%r.turnAngle(0),則繼續(xù)以大約.2 m/s的速度前進(jìn)。 %告訴Roomba如果上述條件為真,則不要打開
elseif data2.right == 1 r.moveDistance(-。12); r.turnAngle(160); r.setDriveVelocity(0.05); elseif data2.left == 1 r.moveDistance(-。2); r.turnAngle(5); r.setDriveVelocity(0.05); elseif data2.front == 1 r.moveDistance(-。12); r.turnAngle(160); r.setDriveVelocity(.05);
此while循環(huán)之后,我們進(jìn)入另一個(gè)while循環(huán),該循環(huán)觸發(fā)通過攝像機(jī)獲取的數(shù)據(jù)。而且,我們在while循環(huán)中使用了if語句,該語句使用特定程序(alexnet)識別圖像,并且一旦識別出圖像,就會(huì)立即觸發(fā)移動(dòng)設(shè)備的遠(yuǎn)程控制。
anet = alexnet; %將alexnet深度學(xué)習(xí)分配給變量
while true%無限while循環(huán)img = r.getImage; img = imresize(img,[227,227]);標(biāo)簽= classify(anet,img);如果label ==“紙巾” || label ==“ refrigerator” label =“ water”;結(jié)束圖片(img);標(biāo)題(炭(標(biāo)簽)); Drawnow;
while循環(huán)使我們可以用手機(jī)控制設(shè)備,從手機(jī)的陀螺儀中檢索該數(shù)據(jù),然后將其插入矩陣,該矩陣將數(shù)據(jù)連續(xù)地流回計(jì)算機(jī)上的MATLAB中。我們使用一條if語句,該語句讀取矩陣的數(shù)據(jù),并根據(jù)電話陀螺儀的某些值提供輸出以移動(dòng)設(shè)備。重要的是要知道我們使用了移動(dòng)設(shè)備的方向傳感器。上面提到的一乘三矩陣按電話方向傳感器的每個(gè)元素分類,即方位角,間距和側(cè)面。 if語句創(chuàng)建的條件表明當(dāng)邊超過50或低于-50時(shí),機(jī)器人將向前(正50)或向后(負(fù)50)移動(dòng)一定距離。音調(diào)值也一樣。如果螺距值超過落在-25以下的25個(gè)值,則機(jī)器人將以1度(正25度)或負(fù)1度(負(fù)25度)的角度旋轉(zhuǎn)。
,而true
pause(.1)%暫停0.5秒,然后取每個(gè)值Controller = iphone.Orientation; %將iPhone方向值的矩陣分配給變量Azimuthal = Controller(1); %將矩陣的第一個(gè)值分配給變量Pitch = Controller(2); %將矩陣的第二個(gè)值分配給一個(gè)變量(將iPhone側(cè)放時(shí)向前和向后傾斜)Side = Controller(3); %將矩陣的第三個(gè)值分配給變量(當(dāng)iPhone側(cè)向傾斜時(shí),向左和向右傾斜)%如果Side》 130 ||,則基于電話的方向進(jìn)行輸出側(cè)面《-130%如果手機(jī)正面朝下翻轉(zhuǎn),它將停止Roomba并退出循環(huán)r.stop break elseif側(cè)面》 25 r.moveDistance(-。1)%如果iPhone是iPhone,則將Roomba向后移動(dòng)約.1米向后傾斜至少25度,否則Side 《-25 r.moveDistance(.1)%如果iPhone向前傾斜至少25度,則將Roomba向前移動(dòng)約0.1米,否則如果俯仰》 25 r.turnAngle(-1)%旋轉(zhuǎn)如果iPhone向左傾斜至少25度,則將Roomba逆時(shí)針旋轉(zhuǎn)1度左右;如果Pitch 《-25 r.turnAngle(1)%如果將iPhone傾斜至少25度,則將Roomba逆時(shí)針旋轉(zhuǎn)1度。
這些只是我們代碼主要部分的重點(diǎn)內(nèi)容,如果您需要快速復(fù)制并粘貼一段內(nèi)容以利于您,我們將其中包含這些內(nèi)容。但是,如果需要,我們的整個(gè)代碼附在下面。
步驟5:結(jié)論
我們編寫的這段代碼是專門為機(jī)器人以及項(xiàng)目的總體愿景而設(shè)計(jì)的。我們的目標(biāo)是利用我們所有的MATLAB編碼技能,以設(shè)計(jì)出能夠充分利用機(jī)器人大部分功能的精心設(shè)計(jì)的腳本。使用電話控制器并不像您想像的那么困難,我們希望我們的代碼可以幫助您更好地理解對iRobot進(jìn)行編碼的概念。
-
matlab
+關(guān)注
關(guān)注
189文章
3001瀏覽量
234160 -
機(jī)器人
+關(guān)注
關(guān)注
213文章
29748瀏覽量
212932 -
可編程
+關(guān)注
關(guān)注
2文章
1058瀏覽量
40645 -
iRobot
+關(guān)注
關(guān)注
0文章
33瀏覽量
14654
發(fā)布評論請先 登錄
明遠(yuǎn)智睿SSD2351開發(fā)板:語音機(jī)器人領(lǐng)域的變革力量
盤點(diǎn)#機(jī)器人開發(fā)平臺
【「# ROS 2智能機(jī)器人開發(fā)實(shí)踐」閱讀體驗(yàn)】機(jī)器人入門的引路書
什么是機(jī)器人?追蹤機(jī)器人技術(shù)的發(fā)展和未來
KUKA機(jī)器人編程說明(英文)
使用 Thonny 對 XRP 機(jī)器人進(jìn)行編程

【「具身智能機(jī)器人系統(tǒng)」閱讀體驗(yàn)】2.具身智能機(jī)器人的基礎(chǔ)模塊
【「具身智能機(jī)器人系統(tǒng)」閱讀體驗(yàn)】2.具身智能機(jī)器人大模型
歐姆龍協(xié)作機(jī)器人TM25S可使用多種方法進(jìn)行編程

掃地機(jī)器人廠商iRobot將裁員16%
愛普生SG-8101CA可編程晶振應(yīng)用在工業(yè)自動(dòng)化機(jī)器人

可編程晶振的優(yōu)點(diǎn)和缺點(diǎn)

國產(chǎn)可編程硅振在機(jī)器人伺服系統(tǒng)中的應(yīng)用,替換SiTime

評論