楊廣峰
通過之前的操作,樹莓派六足機(jī)器人相繼實(shí)現(xiàn)了正對(duì)目標(biāo)物體的識(shí)別搬運(yùn)、任意位置目標(biāo)物體的識(shí)別搬運(yùn)、多任務(wù)目標(biāo)物體的識(shí)別搬運(yùn)。今天要實(shí)現(xiàn)用手機(jī)微信控制機(jī)器人,同時(shí)可以實(shí)現(xiàn)自動(dòng)與手動(dòng)任意切換。
器材清單:樹莓派六足機(jī)器人一套(六足機(jī)器人、樹莓派4B 板、古德微擴(kuò)展板、電機(jī)驅(qū)動(dòng)板、USB 攝像頭), 目標(biāo)物體兩個(gè)(如圖1)。
1. 添加“自動(dòng)控制”與“手動(dòng)控制”控件
在古德微積木編程界面點(diǎn)擊“更多功能→控件控制”進(jìn)入應(yīng)用界面。
填寫應(yīng)用名稱為“手機(jī)控制機(jī)器人”,點(diǎn)擊 “測試連接”,右側(cè)會(huì)出現(xiàn)“連接成功”字樣,這時(shí)單擊“添加控件”按鈕,進(jìn)入添加控件頁面(如圖2)。
2. 添加“自動(dòng)控制”與“手動(dòng)控制”控件信息
在添加控件信息頁面,完成控件類型、設(shè)備編號(hào)、功能描述和自定義主題的填寫。其中,控制類型填寫“按鈕”,設(shè)備編號(hào)填寫你的古德微平臺(tái)登錄賬號(hào),功能描述填寫“自動(dòng)控制與手動(dòng)控制”。注意,這里的功能描述將來會(huì)顯示在控制頁面中。自定義主題填寫“六足機(jī)器人”,在后續(xù)的編程中需要填寫這個(gè)主題名稱。
然后,點(diǎn)擊“啟用更多按鈕配置”按鈕,依次填寫兩個(gè)按鈕標(biāo)題和按下兩個(gè)按鈕發(fā)送的消息。按鈕標(biāo)題填寫“自動(dòng)控制”“手動(dòng)控制”,按下按鈕發(fā)送的消息填寫“自動(dòng)”“手動(dòng)”,后續(xù)程序中要根據(jù)發(fā)送的消息進(jìn)行相應(yīng)的判斷(如圖3)。
最后點(diǎn)擊“確定”按鈕。“自動(dòng)控制”與“手動(dòng)控制”按鈕添加完畢(如圖4)。
3. 創(chuàng)建“自動(dòng)控制”與“手動(dòng)控制”控件
點(diǎn)擊圖4 中的“添加控件”,在添加控件信息頁面,首先完成控件類型、設(shè)備編號(hào)、功能描述和自定義主題的填寫。其中,控制類型填寫“按鈕”,設(shè)備編號(hào)填寫你的古德微平臺(tái)登錄賬號(hào),功能描述填寫“前進(jìn)控制與后退控制”。注意,這里的功能描述將來會(huì)顯示在控制頁面中。自定義主題填寫“六足機(jī)器人”,后續(xù)的編程中還需要填寫這個(gè)主題名稱。
然后,點(diǎn)擊“啟用更多按鈕配置”按鈕。按鈕標(biāo)題填寫“前進(jìn)控制”“后退控制”。按鈕發(fā)送的消息填寫“前進(jìn)”“后退”。
4. 生成微信控制二維碼
點(diǎn)擊確定后,頁面如圖5。
保存當(dāng)前的應(yīng)用,點(diǎn)擊“生成新網(wǎng)頁”按鈕,打開一個(gè)新網(wǎng)網(wǎng)頁,點(diǎn)擊分享可生成一個(gè)二維碼,使用手機(jī)掃描即可在手機(jī)獲得一個(gè)如網(wǎng)頁一樣的控制頁面。點(diǎn)擊更多應(yīng)用按鈕,即可返回圖形化編程界面。
1. 物聯(lián)網(wǎng)監(jiān)聽線程
從“積木→線程”中拖出“添加子線程”積木,線程函數(shù)名填“物聯(lián)網(wǎng)監(jiān)聽”。
2. 物聯(lián)網(wǎng)監(jiān)聽函數(shù)
為“物聯(lián)網(wǎng)監(jiān)聽”線程創(chuàng)建“物聯(lián)網(wǎng)監(jiān)聽”函數(shù)。
判斷是否收到主題“六足機(jī)器人”的新數(shù)據(jù)。如果收到,則將新數(shù)據(jù)賦值給變量“命令文本”。
使用判斷語句根據(jù)命令文本的值進(jìn)行操作,如在手機(jī)頁面中點(diǎn)擊了按鈕“自動(dòng)控制”,則將變量“自動(dòng)控制”的值設(shè)為1,啟動(dòng)自動(dòng)控制;如手機(jī)頁面中點(diǎn)擊了按鈕“手動(dòng)控制”,則將變量“自動(dòng)控制”的值設(shè)為0,關(guān)閉自動(dòng)控制。
如在手機(jī)頁面中點(diǎn)擊了按鈕“前進(jìn)控制”,則控制六足機(jī)器人前進(jìn)3步;如在手機(jī)頁面中點(diǎn)擊了按鈕“后退控制”,則控制六足機(jī)器人后退3 步(如圖6)。
1. 自動(dòng)控制機(jī)器人線程
從“積木→線程”中拖出“添加子線程”積木,線程函數(shù)名填“自動(dòng)控制機(jī)器人”。
2. 自動(dòng)控制機(jī)器人函數(shù)
為“自動(dòng)控制機(jī)器人”線程創(chuàng)建“自動(dòng)控制機(jī)器人”函數(shù)。然后,創(chuàng)建一個(gè)名為“自動(dòng)控制”的變量,為該函數(shù)運(yùn)行添加一個(gè)開關(guān)條件,當(dāng)變量“自動(dòng)控制”為1 時(shí),該函數(shù)才能正常運(yùn)行。
最后,將多任務(wù)控制機(jī)器人的主程序拖入“自動(dòng)控制機(jī)器人”函數(shù)中。注意這里我們?nèi)サ袅恕爸貜?fù)當(dāng)真”的部分,因?yàn)樵诠诺挛⒌膱D形化編程中,當(dāng)線程啟用時(shí),線程函數(shù)本身就是重復(fù)循環(huán)執(zhí)行的(如圖7)。
首先,控制攝像頭兩個(gè)舵機(jī),調(diào)整其最佳拍攝角度,設(shè)置機(jī)器人的最初姿態(tài)。然后設(shè)置互聯(lián)網(wǎng)服務(wù)器為默認(rèn)值,監(jiān)聽“六足機(jī)器人”,并設(shè)置初始值為0。最后將機(jī)器人任務(wù)的開關(guān)變量“步驟”設(shè)為1,將機(jī)器人“自動(dòng)控制”變量設(shè)為0,將來通過手機(jī)控制修改為1。
創(chuàng)建“目標(biāo)列表”,記錄需要完成的目標(biāo)物體名稱,完成對(duì)機(jī)器人的初始化。這里設(shè)計(jì)了兩個(gè)任務(wù),其目標(biāo)物體的名稱為“紅色”和“藍(lán)色”,如需要更多的夾取任務(wù),在列表追加項(xiàng)目即可(如圖8)。
首先,調(diào)用程序初始化函數(shù),對(duì)機(jī)器人和手機(jī)微信控制進(jìn)行初始化。然后,調(diào)用子線程“自動(dòng)控制機(jī)器人”,等待接收到自動(dòng)控制時(shí),機(jī)器人自動(dòng)開啟多任務(wù)搬運(yùn)工作。最后開啟子線程“物聯(lián)網(wǎng)監(jiān)聽”,監(jiān)聽手機(jī)微信的相關(guān)按鈕指令,控制機(jī)器人的相應(yīng)操作(如圖9)。
經(jīng)過多次測試,機(jī)器人能在手機(jī)上手動(dòng)控制前進(jìn)后退,能在點(diǎn)擊“自動(dòng)控制”按鈕時(shí),自動(dòng)開啟搬運(yùn)任務(wù),當(dāng)點(diǎn)擊“手動(dòng)控制”按鈕時(shí),自動(dòng)停止搬運(yùn)任務(wù)。在這個(gè)例子的基礎(chǔ)上,我們還可繼續(xù)思考為六足機(jī)器人添加更多的功能,如利用語音檢測實(shí)現(xiàn)語音控制機(jī)器人。