天天看點

《機器人程式設計實戰》一一1.2 給機器人指令

1.2 給機器人指令

如果我們希望一個機器人在某個場景中扮演某個角色,我們如何告訴它該做什麼?我們如何給它指令?機器人程式設計會回答這些問題,其過程充滿了冒險、挑戰、奇迹、擔憂和可能的遺憾。人類使用自然語言、手勢、肢體語言和面部表情溝通;而機器人是機器,隻能了解微控制器的機器語言。難點就在于此:我們說話和交流是一種方式,而機器人溝通是另一種方式,我們目前還不知如何創造能夠了解人類語言和行為并與人類直接交流的機器人。是以,即使我們擁有一個機器人,它具有傳感器、末端作用器以及按照我們要求做事的能力,但我們該如何與它進行任務交流呢?我們如何給它一組正确的指令集呢?

1.2.1 每個機器人都有一種語言

那麼,機器人到底了解什麼語言呢?機器人的母語是微控制器語言。不論一個人如何同機器人交流,最終這種交流必須轉換為微控制器的語言。微控制器是一個計算機,而大多數計算機使用機器語言。

機器語言

機器語言由0和1組成。是以,從技術上講,一個機器人真正了解的唯一的語言是字元串和一系列0和1。例如,0000001、1010101、00010010、10101010、11111111

如果你想(或被逼無奈)用機器人的母語對其編寫一組指令集,它将由一排排地0和1組成。例如,代碼清單1-1是一個簡單的arm機器語言(有時被稱為二進制語言)程式。

代碼清單1-1 arm機器語言程式

《機器人程式設計實戰》一一1.2 給機器人指令

該程式從處理器的兩個記憶體位置取出數字,加在一起并将結果存儲在第三個記憶體位置。大多數機器人控制器講這種類似機器語言的語言,如代碼清單1-1所示。

0和1的安排和數量根據控制器的不同可能會有所改變,但是所見即所得。純機器語言很難讀懂,很容易把0和1的位置按錯,或者在計數時出現錯誤。

彙編語言

彙編語言是一種更可讀的機器語言,通過使用十六進制或八進制,用簡短的符号說明和表示二進制。代碼清單1-2是代碼清單1-1所示操作類型的一個彙編語言示例。

代碼清單1-2 代碼清單1-1的彙程式設計式版本

《機器人程式設計實戰》一一1.2 給機器人指令

代碼清單1-2比代碼清單1-1可讀性更好,雖然彙編語言程式比機器語言程式更不易出錯,微控制器彙編語言仍然有點神秘。從代碼清單1-2并不能直覺地看出,我們取兩個數字x和y,然後把它們相加并将結果存儲于z。

注釋

機器語言有時稱為第一代語言,彙編語言有時稱為第二代語言。

一般來說,一種計算機語言越接近自然語言,其代數就越高。是以,第三代語言比第二代語言更接近英語,第四代語言又比第三代語言更加接近,以此類推。是以,理想情況下,我們希望使用一種盡可能接近人類語言的語言來指導我們的機器人。不幸的是,一種更進階的語言通常要求更多的硬體資源(比如電路、存儲器、處理器能力)并且要求控制器更複雜而缺乏效率。是以,微控制器往往隻用第二代指令集。

我們需要一個通用的轉換器,可以允許我們以人類語言(比如英語或日語)去書寫指令,并且自動轉換為機器語言或彙編語言。計算機領域還沒有産生這種通用的轉換器,但我們已經成功了一半。

1.2.2 遷就機器人的語言

編譯器和解釋器是将一種語言轉換為另一種語言的軟體程式。它們允許程式員用進階語言書寫一組指令,然後将其轉換為下一代的語言。例如,來自代碼清單1-2的彙編語言:

可以轉為如下指令:

《機器人程式設計實戰》一一1.2 給機器人指令

注意在圖1-10中,編譯器或解釋器将進階指令轉換成為彙編語言,但是彙編器是将彙編語言轉換為機器語言的程式。圖1-10也展示了一個工具鍊概念的簡單版本。

在機器人程式設計中會用到工具鍊。雖然我們還不能使用自然語言,但是将彙編語言作為程式設計機器人的唯一選擇,我們已經走了很長的路。事實上,如今有很多程式設計機器人的進階語言,包括圖形語言,例如labview;圖形環境,例如choreograph、傀儡模式(puppet mode),以及第三、第四和第五代程式設計語言。

圖1-11展示了常用的幾代機器人程式設計語言分類。

圖形語言有時被稱為第五代和第六代程式設計語言。一部分是因為圖形語言允許程式員更加自然地表達想法,而不是從機器的角度來表達你的想法。是以,指導或程式設計機器人中的挑戰之一,可歸結為個人表達指令集的方式與微控制器使用指令集的方式之間的差異。

圖形化的機器人程式設計環境和圖形語言試圖通過允許程式員使用圖形和圖檔程式設計機器人來解決這個差異。bioloid motion editor和robosapien rs media body con editor是這類環境的兩個示例,如圖1-11所示。

這些類型的環境通過允許圖形化操作或設定機器人的動作、傳感器的初始值、執行器的初始速度和力量來工作。通過設定數值、移動圖形操作杆和圖形控件來程式設計機器人。有時候,在需要傳遞給機器人資訊和資料的軟體裡,填寫窗體是一件簡單的事情。圖形環境将程式員從機器人程式設計的實際工作中隔離出來。

《機器人程式設計實戰》一一1.2 給機器人指令

圖1-11 常用的一些機器人程式設計語言和圖形程式設計環境的分類

務必記住的是,機器人的微控制器最終讀取的是彙編/機器語言。必須要有某人或某個東西來提供本地指令。是以,這些圖形環境由内部編譯器和解釋器負責将圖形化的想法轉換為低級語言,并最終轉換為控制器的機器語言。昂貴的機器人系統具有這些圖形環境已經有很長一段時間了,但是這些圖形環境現在可以用于低成本機器人了。針對低成本機器人系統,表1-3列出了一些常用的圖形環境(語言)。

《機器人程式設計實戰》一一1.2 給機器人指令

傀儡模式

與可視化程式設計機器人概念緊密相關的是直接操縱或傀儡模式的概念。傀儡模式允許程式員利用鍵盤、滑鼠、觸摸闆、觸摸屏或其他定位裝置操縱機器人圖形,同樣也允許通過程式設計在現實世界中操縱機器人的部件到所需位置。

傀儡模式扮演一個動作記錄器的角色。如果想要機器人的頭向左轉,你可以移動機器人的頭部圖形到左邊,傀儡模式就會記住。如果想要機器人向前移動,你将機器人的部件移動到前方位置,不論該部件是腿、輪子、牽引機構等,傀儡模式都會記住。一旦記錄了想要機器人執行的所有動作,然後将該資訊發送給機器人(通常使用某種有線或無線連接配接),機器人在現實世界中會執行記錄在傀儡模式中的動作。同樣,如果程式員将機器人置于傀儡模式(假定機器人有傀儡模式),則會記錄程式員執行的機器人實體操作。一旦程式員取消機器人的傀儡模式,機器人會執行傀儡模式期間記錄的動作序列。傀儡模式是一種模仿的程式設計。機器人記錄它是如何被操縱的,記住那些操作,然後重複動作序列。使用傀儡模式可以使程式員無需輸入一個指令序列,也使得程式員無須弄明白如何以一種機器人語言表示一個動作序列。機器人系統可視化語言、可視化環境和傀儡模式的實用性将隻會增加,它們的複雜性也将随之增加。然而,大多數可視化程式設計環境有兩個緻命缺陷。

1.2.3 在可視化程式設計環境中表示機器人場景

現在回顧一下,有效程式設計一個自主機器人有一半的工作需要指導該機器人如何在一個場景或态勢中扮演其角色。典型地,如表1-3所示,可視化機器人程式設計環境沒有表示機器人态勢或場景簡單的方法。在一個有潛在、簡單對象的泛化空間裡,可視化程式設計環境隻包含一個機器人的模拟。例如,在一般的可視化機器人環境中,沒有一種簡單的方法能用來表示我們的生日聚會場景。在程式設計一個不必與任何東西互動的動作序列上,可視化/圖形化環境和傀儡模式方法是有效的。但是,自主機器人若想有用,就需要影響環境,就需要接受關于環境的指令,圖形化環境在這方面存在不足。本書中,我們所進行的機器人程式設計需要一個更為有效的方法。

1.2.4 midamba的困境

機器人有機器人語言。機器人可以接受指令去自主執行任務。機器人在态勢和環境中接受指令。機器人可以在态勢和場景内扮演角色,并在其中産生改變。這是本書的中心主題:指揮機器人在一個特定态勢、場景或事件的背景中執行任務。現在來看看我們擱淺的水上摩托騎手——midamba的不幸困境。

機器人場景1

當我們在引言中的機器人新兵訓練營最後看到midamba時候,他的電動水上摩托電池電量已經比較低了。midamba有一個備用電池,但這個備件在末端上有酸性腐蝕。他的電量僅能到達附近的一個小島,在那裡他可能會找到幫助。不幸的是,島上唯一的東西是一個自主機器人完全控制的化學實驗設施。這也不是太糟,midamba設想如果該設施中有一個化學品可以中和電池酸,他就可以清潔他的備用電池,然後上路。設施前面的辦公室由幾個機器人占據,室内有一些裝化學品的容器、燒杯和試管,但他沒有辦法确定是否有用。辦公室與一個存儲其他化學品的倉庫區隔離,沒有明顯進入該區域的途徑。從機器人運動的倉庫區的兩個螢幕裡,midamba可以看到機器人在運輸容器、标記容器、舉起物體等。

前面的辦公室裡也有一台電腦、一個麥克風和一本cameron hughes和tracey hughes編著的名為《機器人程式設計實戰》的手冊。幸運的話,他會在手冊裡找到一些内容,指導他如何程式設計一個機器人去尋找和取回他需要的化學品。圖1-12和圖1-13所示的是midamba困境的開始。

現在,我們跟随midamba的例子,他也将貫穿該手冊。他翻開的第1章是“機器人詞彙”。

《機器人程式設計實戰》一一1.2 給機器人指令
《機器人程式設計實戰》一一1.2 給機器人指令

繼續閱讀