天天看點

《機器人程式設計實戰》一一2.1 為什麼需要更多努力

本節書摘來自華章計算機《機器人程式設計實戰》一書中的第2 章,第2.1節,作者:[美]卡梅倫·休斯(cameron hughes) 特雷西·休斯(tracey hughes) ,更多章節内容可以通路雲栖社群“華章計算機”公衆号檢視。

通常需要通過幾條機器人指令來實作一條進階或人類語言指令。例如,下面這條簡單且單一的人類語言指令:

機器人,握着這罐油

該指令涉及機器人的幾條指令。圖2-2顯示了基本通用機器人轉換器(basic universal robot translator,burt)的一個部分轉換,分别将這條指令轉換為可以傳遞給機器人的arduino sketch代碼(c語言)和rs media(來自wow wee公司的兩足機器人,使用嵌入式linux的arm9微控制器)代碼(java語言)。

《機器人程式設計實戰》一一2.1 為什麼需要更多努力

圖2-2 自然語言轉換為rs media代碼(java語言)和arduinosketch代碼(c語言)的部分burt轉換

注意,burt轉換需要多行代碼。在兩種情形下,編譯器将一個進階語言轉換為機器人的arm彙編語言。與arduino語言相比,java代碼更加遠離arm。java編譯器将java編譯成與機器無關的位元組碼,這需要另外一個将其轉換為機器特定代碼的層。圖2-3給出了将c和java程式轉換為arm彙編的一些層。

《機器人程式設計實戰》一一2.1 為什麼需要更多努力

圖2-3 涉及将c和java程式轉換為arm彙編的一些層

許多用于控制低成本機器人的微控制器都是基于arm的微控制器。如果你對使用彙編語言來程式設計低成本的機器人感興趣,arm控制器是一個很好的開始。

注意在圖2-3中,軟體層要求從c或java到arm彙編順序進行。但是,對于“機器人握着這罐油”與c或java代碼之間的轉換,必要的工作是什麼呢?burt轉換器展示給我們的是,我們開始一條英語指令,并将它轉換為c和java。

這是如何做到的?為什麼這樣做?注意,burt轉換中的指令沒有提到罐、油和“握着”的概念。這些概念不是微控制器語言的直接部分,也不是進階c或java語言的内置指令。

它們代表了我們想要使用和我們希望機器人了解的機器人部分詞彙(但還不存在)。

然而,在我們可以決定機器人詞彙看起來像什麼之前,我們需要熟悉機器人的輪廓和能力。思考下面這些問題:

它是什麼樣的機器人?

機器人有什麼類型的傳感器以及有多少?

機器人有什麼類型的末端作用器以及有多少?

它是如何移動的,等等?

注釋

對于一個特定的态勢或場景,機器人詞彙是用于給機器人指派任務的語言。程式設計一個有用的自主機器人的主要功能就是建立機器人的詞彙。

重要術語,傳感器是機器人的眼睛和耳朵,它們是機器人接收其直接環境輸入、信号、資料或資訊的元件,也是機器人進入這個世界的接口。

末端作用器是允許機器人在其環境中處理、操縱、改變或控制對象的硬體,也是促使機器人的運動對其環境産生影響的硬體。

機器人詞彙與機器人的能力密切相關。例如,如果機器人沒有設計用于舉起的硬體,我們就不能給機器人一個舉起某物的指令。如果機器人不是移動型的,我們就不能給機器人一個移動至特定位置的指令。

我們可以用兩種方式來實作機器人及其詞彙:

建立一個詞彙,然後獲得一個具有相應能力的機器人。

基于将要使用的機器人能力建立一個詞彙。

無論哪種情況,必須明确機器人的能力。機器人的能力矩陣可用于此目的。表2-1給出了稱為unit2的機器人的一個樣本能力矩陣,unit2是本書中我們用來舉例的rs media機器人。

《機器人程式設計實戰》一一2.1 為什麼需要更多努力

對于機器人的潛在技能設定,能力矩陣給我們提供了一個易于使用的參考。最初的機器人詞彙必須依賴于機器人的基本能力集。

沒有一個合适的機器人詞彙。的确,機器人使用的是一些常見動作,但是在任何給定态勢中為機器人選擇什麼樣的詞彙完全取決于設計者或程式員。

基于特定的機器人能力和其所處的場景,你可以自由設計自己的機器人詞彙。注意在

表2-1中,機器人unit2有一個錄影機和顔色傳感器。是以unit2可以看見對象,這就意味着我們可以使用像注視、看、照相或掃描這樣的詞。

成為一個兩足動物意味着unit2是可移動的。是以,詞彙可以包括像移動、漫步、步行或行進這樣的詞。unit2有一個usb接口,表明我們可以使用像打開、連接配接、斷開、發送和接收這樣的詞。最初的機器人詞彙形成了程式員發給機器人指令的基礎,它會執行所要求的任務。

如果我們再看表2-1中的能力矩陣,允許我們給unit2指令的可能詞彙包括:

向前運動

掃描一罐藍色的油

舉起一罐藍色的油

給這罐油拍照

本書将向你介紹的最重要概念之一是如何提出一個機器人詞彙,如何利用機器人所具有的能力實施一個詞彙,以及如何确定機器人微控制器可以處理的詞彙。在前面的例子中,unit2的arm 9微控制器不能識别下面的指令:

向前運動或掃描一罐藍色的油

這是我們想要使用的機器人詞彙。在這種情況下,我們想要機器人執行的任務涉及向前運動,尋找一罐藍色的油,舉起它,然後給它拍照。我們希望能盡可能簡單地傳達這一系列任務。

我們具有某個想要自主機器人在其中扮演角色的态勢或場景,然後開發一系列捕獲或描述我們所希望機器人扮演角色的指令,并且希望這一系列指令代表了機器人的任務。在特定态勢或場景中成功程式設計一個扮演有用角色的自主機器人,建立機器人詞彙是這整個過程中的一環。