《仿人機器人原理與實戰》一2.3 行為鏈實驗入門
本節書摘來異步社區《仿人機器人原理與實戰》一書中的第2章 ,第2.3節,作者布萊恩·伯傑倫(Bryan Bergeron) 托馬斯B. 塔爾博特(Thomas B. Talbot) 王偉 魏洪興 劉斐 譯, 更多章節內容可以訪問雲棲社區“異步社區”公眾號查看。
2.3 行為鏈實驗入門
有了第1章描述的反射弧,再加上機械臂、溫度和壓力傳感器以及一點想象力,我們將探討一個關於圖2-1中所示的理論上的行為鏈框架的實際例子。作為一個四肢健全的仿人機器人的組成部分之一,機械臂是一個很好的實驗平台,因為它足夠複雜以至於能夠演示許多種肢體上的行為鏈。我們的另一個選擇是應用仿真。然而,電腦仿真或許能夠體現出應當發生的事情,然而在現實中移動具體的事物更具有魔力。
如圖2-3所示,我們通過按鈕S1來啟動夾持器夾緊的動作。如果夾持器上的傳感器測量出被夾物體的溫度過高,則夾持器會鬆開並把物體扔掉。經過了短暫的不應期,溫度傳感器會冷卻下來到達抓取允許範圍內,係統會再次對夾緊做出反應。我們分別用兩個電位器P1和P2模擬腎上腺素對反射的刺激作用和大腦對反射的抑製效應。
相反,如果夾持器與物體接觸後,溫度沒有超過限定值,那麼夾持器將會夾緊物體,夾緊力可以由夾持器上的壓力傳感器測量得到。在這段時間內,物體可以被機械臂夾持著在空間內移動或者隻是保持不動。按下按鈕S2,夾持器將會打開,使得係統能夠對按下按鈕S1進行反應。
2.3.1 器材清單
我們用來探究行為鏈的實驗平台是一個五自由度(DOF)的機械臂,它由廉價的模擬量舵機搭建而成。用傳統的舵機搭建的機械臂的主要優點是使用方便、設置便捷以及有許多可兼容的軟硬件。例如,有了適用於Sony PS/2控製器和諸如BotBoarduino的兼容Arduino控製卡的Arduino函數庫,當我們要控製多個舵機時就會很容易。隻要用到模擬量舵機,你就會用到這裏包含的程序範例以及標準的Arduino函數庫。
另一種方案是利用由AX-12A Dynamixel舵機搭建的機械臂。盡管數字量舵機由於特別的硬件裝配以及不兼容Arduino串口而很難使用,然而它們有內置的溫度、位置、負載電壓、輸入電壓以及輸出軸柔順的傳感器。如果你願意在串行控製線中增加一個芯片,那麼Savage Electronics公司針對Arduino 的Dynamixel舵機庫是很值得嚐試的。在這章中可以很容易地改造出Dynamixel 舵機或其他數字舵機環境,但是對於舵機的控製不可避免地將會與本章描述的有所不同。
如果你沒有很多錢花費在機械臂上,那麼你也可以考慮買一個或者自己做一個單一舵機的夾持器(沒有機械臂)。或者你也可以參照第1章中用來做簡單的反射弧仿真的兩舵機實驗平台。你可以在舵機擺臂上安裝指示器用來觀察關節的彎曲和夾持器的關閉。
除了現有的機械臂實驗平台、Arduino微處理器、Sony PS/2控製器,或者其他交互地控製機械臂位置的方式,還需要以下器材:
- 功率電阻或其他熱源
- 熱源的供電電源(可選,由熱源而定)
- TMP36 模擬量溫度傳感器
- 10kΩ熱敏電阻
- CdS光傳感器
- 力傳感電阻器
- 瞬時接觸開關按鈕(2個)
- 10kΩ電位計(2個)
- 給Arduino和舵機供電的 5V直流電源
- 跳線帽和導線
- 自選擴展板(可選)
本組實驗的所有元器件如圖2-4所示,包括一套標準的Arduino Uno、Grove擴展板、Grove按鈕和電位計、力和溫度傳感器以及Lynxmotion機械臂。注意:功率電阻當作熱源使用。
用一隻已經標定過的溫度探頭和數字萬用表(DMM)來確定熱源的溫度,如果有的話就更好了,實在沒有也沒關係。盡管你的手指不是一杯咖啡或者一個大型功率電阻,但是也可以作為熱源的選項之一。在圖2-4中沒有顯示的器件是為功率電阻、Arduino和機械臂供電的電源,還有連接機械臂舵機、傳感器、按鈕和電位器到Grove擴展板上的無數根導線。
熱源由你選定。你的選擇將會取決於機器夾持器的尺寸和負載能力。幸運的是,即使價值35美元的玩具機械臂也能夠拿得動5W的功率電阻的和一些短的電源線。
2.3.2 電路
圖2-5展示了第一個實驗的完整電路。為了簡化起見,肘關節、肩關節、基座舵機的詳細的機械和電子結構沒有表示在圖的右側。在電子方麵,每個舵機配有5V直流電源和GND,以及連接自Arduino的脈寬調節(PWM)信號。內置溫度和力傳感器的夾持器的機械部分在圖中左下角表示出來。
力傳感電阻器FSR1不是強製性的。如果你很擅長操作夾持器,則可以不考慮這一部分。但是如果你不能熟練地在恰當的時候停止夾持器,便會麵臨破壞舵機中的齒輪的風險。就這一點而言,FSR1是相對便宜的保險,而且在機械臂的其他實驗中也會更為方便。
10kΩ 熱敏電阻T1與10kΩ的電阻器R2一起使用,形成一個分壓器對5V直流供電電壓進行分壓。熱敏電阻與溫度負相關,隨著溫度的升高熱敏電阻阻抗降低。在使用Sparkfun公司的熱敏電阻的電路中,從Arduino中讀到的環境溫度是450(2.19Vdc)。抓緊手指時溫度讀數增加到475(2.32Vdc),響應速度也很快,小於一秒鍾。
由於分壓器的配置形式,溫度讀數隨溫度增加而升高(increase)。T1的阻值越低,電壓在R2兩端下降得越多,在Arduino模擬量輸入端輸入的電壓就越高。
由於T1的阻抗變化與溫度的關係不是線性的,因此需要用一個校準的溫度計或溫度傳感器作為查詢表或轉化公式以收集數據,這樣我們可以將熱敏電阻處的壓降值轉化成準確的溫度讀數。當電阻自加熱時,你也可以調整查詢表或轉化公式以保證測量準確。由於10kΩ的熱敏電阻的阻值和1MΩ或更大的固態傳感器的阻值相比是很小的,因此電流和散熱效果都很明顯。幸運的是,不必在這方麵花費心思,因為相對於散熱導致的溫度變化,實驗時的溫度變化是十分顯著的。而且熱敏電阻價格不高且響應很快,對溫度變化的響應時間隻需要幾百毫秒。
2.3.3 構造
除了在夾持器的兩片相對的顎上安裝溫度和壓力傳感器以外,在構建過程中並沒有更多的任務。用雙麵膠將Grove接線端子粘在兩顎外側,如圖2-6所示,一個接線端子上裝有熱敏電阻和10kΩ電阻器。不論你是否在電路板上使用接線端子,都要在顎內側粘上絕緣泡沫材料將熱敏電阻和接線端子間裸露的電線隔離絕緣。
第二個接線端子上安裝力傳感電阻器FSR1,如圖2-7所示,它安裝在與熱敏電阻相對的夾持器的顎上。注意,在力傳感電阻器上粘接了墊套,墊套可以保護電阻器不被尖銳、硬質物體所破壞,也可以把力均勻地施加在電阻器表麵。裝在Grove接線端子上的10kΩ電阻器被力傳感電阻器上的扁平引線蓋住。
把開關按鈕連接到合適的數字信號輸入端,把兩個電位計直接或經過擴展板接入模擬量輸入端。Grove係統的一個不足之處是默認按下按鈕的動作會使電位變為高電位。如果你想用Arduino內置的電阻器把電位提高,而用外部的按鈕降低電位,這將是一個問題。一個簡單的解決方案時將Grove電纜中的地線和Vcc交換。
如果你一定要與圖2-5中不同,使用Arduino 的其他引腳,那麼記住編碼時要改變引腳分配。例如,你正好使用BotBoarduino以及PS/2接口,則應當更改管腳分配,為PS/2控製器的四個連接引腳騰出空間。
2.3.4 編程
由於你可能沒有和我們例子中Lynxmotion機械臂有類似電路結構的機械臂,因此我們把重點放在夾持器舵機和溫度傳感器上。另外,為了方便起見,我們將用標準的Arduino舵機庫函數和Arduino Uno。應當不需要任何麻煩就能將下述代碼整合到你的機械臂上。
清單2-1 行為鏈實驗中的Arduino代碼
現在我們仔細地將清單2-1從上到下解釋一遍,最初我們加載舵機庫,之後定義Arduino Uno的輸出引腳,初始化程序中的變量。啟動時我們會測量周圍環境的室溫,並把表示溫度的值存儲在TMPValueStartup變量中。
在主循環中,我們讀取扔物體反射的P1(抑製器)以及P2(激勵器)的值並把其反映到變量P1Value和P2Value上。P1映射為0~100,同時P2映射為0~TMPDifference,將熱敏電阻的當前讀數與最初周圍環境的溫度差設置為觸發值。在這個例子中,因為我們要處理的溫度差較小,所以這個值僅為10。
當按鈕S1被按下,軟件會率先檢測當前熱敏電阻讀數與設定的TMPDifference變量的差。如果溫度差足夠低(換言之,熱敏電阻已冷卻充分)且力傳感電阻沒有收到超出閾值的壓力,當且僅當這種情況下夾持器閉合。S2按鈕是手動控製按鈕,按下後夾持器會迅速打開。
下麵一段看起來簡單的代碼表達的就是由“皮質”抑製(P1Value)和“腎上腺素”激勵(P2Value)控製的半自動行為:
隨著P1順時針旋轉,P1Value增加,控製扔掉物體的溫度和周圍環境的有效溫度差增加。相反,如果P2順時針旋轉,P2Value增加,控製扔掉物體的溫度和周圍環境的有效溫度差減小。在這個例子中,P1Value的取值範圍是0~100,P2Value的取值範圍是0~TMPDifference。這樣,夾持器受相對溫度差的限製,不會不斷地扔掉夾持物體。
2.3.5 操作
在實際操作中,使用Sony PS/2控製器、操縱杆或是一係列瞬時開關按鈕,抑或其他控製方式把機器人的基座、肩、肘關節移動到腕關節可以撿起物體的地方。按下瞬時開關按鈕S1直到夾持器與物體接觸,之後通過電路控製係統夾起並移動物體。當然,如果你要移動連有供電線的電阻器,小心不要弄斷電源連接。在電阻器和電源電纜的末端可以用彈簧夾或者用一個3.5mm的插塞接頭把電傳遞給電阻器。
另外一個方案是用拇指當“熱物體”,如圖2-8所示。要保證手指肚與熱敏電阻相接觸。與手指上的軟組織相比,指甲相對而言是好的絕緣體,能夠與力傳感器充分接觸。
如圖2-3所示,如果物體的溫度低於軟件中設定的允許溫度值,那麼夾持器和機械臂會依照你的指令而運動,即你可以把電阻器和其他物體移動到想要的位置。按下按鈕S2則會釋放物體,夾持器會完全張開,腕關節會回到等待位置。用其他控製器把基座和其他關節移動到初始位置,為下一次測試運行做準備。
但是,如果物體溫度等於或高於定義的允許溫度,且P1和P2都逆時針轉到頭,那麼夾持器將張開並扔掉物體。幾秒之後當熱敏電阻冷卻完全時,夾持器將繼續對按鈕S1做出反應。
如前所述,如果順時針旋轉P1,增加P1提供的阻抗,則自動扔掉物體的行為將會被抑製,在P1的順時針極限位置將不會有根據被夾物體溫度自動扔掉物體的行為。設想機器人拿著一杯熱咖啡懸在你頭上,你一定不希望服務機器人扔掉咖啡,甚至不惜為此而傷害機器人。理想情況下,仿人機器人應當具備一些高優先級的模式識別設備來識別即將發生的危險,並且有效地將P1表示的值最大化。
順時針旋轉P2將會削弱P1的作用,但是由於兩電位計設定值範圍的原因,最多隻能到達一定程度。然而當P1在逆時針的極限位置時,P2的激勵作用足以使熱敏電阻中的噪聲信號觸發扔物體的反射。所有這些交互作用都是由TMPDifference的設定值以及P1和P2的權重決定的。
這中間簡單的三條連接反射弧是很有實際應用價值的。設想服務仿人機器人的手上覆蓋了昂貴的仿生乳膠,當仿人機器人從爐子上拿起一口極熱的鍋時,如果你已經提供了行為鏈功能,那麼將不必為修複燒焦的乳膠而發愁。
對溫度進行感知的夾持器會對皮膚和肌肉做出反應,這一點可應用於安全方麵。設想機器人助理廚師在準備沙拉時抓取了一個西紅柿,而此時你不小心也抓著這個西紅柿。如果機器人具備溫度感知和瞬間釋放功能,你便可以逃脫手指被切的危險。
這種簡單行為鏈的另一種替代方案是針對仿人機器人在廚房中的每一個動作,在中央處理器中寫出特定工作條件下的大量規則。但是,你很有可能忘記了一些發生幾率很小的情況,諸如當檢查餡餅時不要把頭伸進烤箱。一些情況下,提供簡單、低級的行為鏈處理潛在事故,而在需要時提供皮質抑製或是腎上腺素激勵。我們可以回憶老鼠參加迷宮比賽的情況。
最後更新:2017-06-21 10:32:11
上一篇:
良品鋪子天貓618爆賣300萬個手撕麵包,還用數據改造線下
下一篇:
雷蛇在天貓618大爆發,雷軍第二天就找其創始人取經
magento -- 推薦插件 -- Mass Product Relater
[轉貼]提升進程權限為debug權限,無法禁止進程
sudo 入門指南
SATA 3.2標準發布:借PCI-E大提速2GB/s
回歸安防本質,防盜搶煙霧器完善“防大於控”的安防體係
徐玉玉案宣判了,反思大數據能夠做些什麼!
java 把64位long,轉成2個32位的Int,再回轉成long
Windows上使用Cygwin和Gitolite搭建Git服務器
2017雲棲大會·杭州峰會:《在線用戶行為分析:基於流式計算的數據處理及應用》之《數據可視化:構建實時動態運營數據分析大屏》篇
java語言學習002_麵向對象編程思想