,,,
(哈爾濱工業(yè)大學機器人技術與系統(tǒng)國家重點實驗室,黑龍江 哈爾濱 150080)
隨著國內(nèi)外空間站項目的穩(wěn)步推進和機器人技術的發(fā)展,研發(fā)可以協(xié)助甚至代替宇航員進行危險艙外操作的機器人宇航員成為亟待研究的課題。加拿大航天局(CSA)的國際空間站艙外雙臂機器人Dextre[1],通常固定在“加拿大臂”末端或在指定軌道上移動,能夠協(xié)助宇航員完成艙外任務甚至代替其執(zhí)行一些危險任務。美國航空航天局(NASA)的艙內(nèi)雙臂機器人Robonaut2[2]作為國際空間站乘員,初期任務的主要目標是驗證雙臂機器人在太空零重力、高輻射環(huán)境中的適應性,后期將協(xié)助人類宇航員,甚至和人類宇航員共同進行艙外活動等復雜任務。ROS開源機器人操作系統(tǒng)平臺[3],具有易于實現(xiàn)復雜系統(tǒng)的模塊化設計和豐富的機器人軟件系統(tǒng)開發(fā)工具等優(yōu)點,很大程度上解決了代碼復用和軟件模塊化的問題。在此,結合機器人宇航員預研項目,使用ROS對機器人宇航員模型進行搭建,闡述在ROS環(huán)境下機器人宇航員模型構建的方法[4],包括機器人描述格式文件的構建、三維零件導入和節(jié)點動態(tài)鏈接等。
雙臂仿人機器人宇航員由以下幾部分組成:頭部、軀干、左右手臂、左右靈巧手和可移動輪式平臺。典型機器人宇航員系統(tǒng)整體結構如圖1所示。該系統(tǒng)整體是由大量集成的軟硬件組成的分布式系統(tǒng),通過傳感器、控制器與執(zhí)行器共同協(xié)作完成任務。在控制系統(tǒng)的原理樣機開發(fā)階段,它能夠極大簡化不同部分的硬件集成,簡化仿真實驗。
圖1 典型機器人宇航員系統(tǒng)
機器人宇航員結構具備49個自由度[5],其中包括2個7自由度機械臂,2個15自由度的HIT/DLR Hand Ⅱ靈巧手[6],具有俯仰和回轉2自由度的腰部[7]和3自由度的頭部[8]。機器人宇航員的手臂與腰部的D-H參數(shù)如表1和表2所示。其中,ai-1和αi-1分別為連桿i-1的長度和扭角;di和θi分別為連桿i之間的偏置和夾角。
表1 右臂D-H參數(shù)
表2 腰部D-H參數(shù)
機器人宇航員的結構設計緊湊,外觀尺寸接近人體比例。眼部固定2臺相機作為其雙目視覺感知設備。機器人宇航員頭部具備3個自由度,分別可以進行回轉、俯仰和側擺3類運動,同時頸部具備可旋轉關節(jié)進行回轉運動。
機器人宇航員軀干作為其主體,連接著頭部與兩側的七自由度機械臂。軀干下方固定在輪式移動平臺上。軀干具備關節(jié)結構,可以使軀干完成回轉與俯仰運動,且具備更大的輸出力矩與關節(jié)運動范圍。
機器人宇航員雙臂結構采用七自由度冗余機械臂,左右臂末端分別連接左右靈巧手。宇航員機器人機械臂的各個關節(jié)間具有近似的結構,簡化了系統(tǒng)設計。
ROS是基于Linux的開源的機器人軟件系統(tǒng)開發(fā)框架,其特點是基于進程間通信機制把機器人系統(tǒng)中的各個模塊,如關節(jié)控制、運動規(guī)劃和碰撞檢測等,分割為若干獨立運行的程序,從而降低了模塊之間的依賴,實現(xiàn)了軟件設計的高內(nèi)聚和低耦合,降低了不同系統(tǒng)之間共享代碼的難度,提高了代碼的復用率。在此基礎上,ROS提供了各種系統(tǒng)中間件以簡化機器人軟件系統(tǒng)的開發(fā),如機器人描述語言URDF,機器人關節(jié)控制架構ROS Control,機器人的運動規(guī)劃框架MoveIt!等。
ROS建立在Linux操作系統(tǒng)之上,分布式的處理方式分散了來自各個功能實時計算的壓力,實現(xiàn)了模塊之間的松耦合。節(jié)點之間可以采用message,service,action等的不同的通訊模型進行數(shù)據(jù)交互。同時,ROS支持多種編程語言機器接口實現(xiàn),包括C++,Python,Lisp等。在機器人軟件系統(tǒng)中可以使用C/C++進行底層開發(fā),如驅(qū)動程序、控制算法等,而基于Python,Lisp等腳本語言完成任務規(guī)劃、用戶界面等上層模塊,從而簡化系統(tǒng)開發(fā),增加系統(tǒng)的魯棒性和可維護性。
在機器人操作系統(tǒng)中,使用機器人統(tǒng)一描述格式(URDF)來描述機器人的關節(jié)配置、關節(jié)限位和外觀信息等。URDF是基于XML[9]的一種描述式建模語言,具有便于理解、便于維護和修改的特點。
在ROS機器人統(tǒng)一描述格式描述中,機器人宇航員樹形結構模型由本體、關節(jié)和節(jié)點等共同組成。機器人宇航員本體由基座、腰部、軀干3部分構成。左右手臂分別由7個關節(jié)連桿與1只靈巧手構成,本體與頭部、手臂通過節(jié)點關聯(lián)形成機器人整體架構。
建立機器人宇航員的機器人模型需要構建不含結構大小與尺寸信息的URDF樹形結構,并導入三維零件模型。完成URDF基本指令的編寫后,需要對完成的文件進行校驗,確保文件準確性。
表3 URDF基本命令
機器人宇航員的基座、軀干、頭部以及各個關節(jié)等三維模型在Pro/E中建立。使用
圖2 機器人宇航員三維部件
在基本的樹形結構狀態(tài)下,使用
以左臂關節(jié)連桿left arm link 5與left arm link 6為例進行建模,所得left arm joint 6關節(jié)連桿結構相對關系如圖3所示。其他關節(jié)連桿關系的建立相類似,搭建雙臂仿人宇航員機器人的模型,后利用計算機在ROS環(huán)境中對機器人模型進行運動仿真。
圖3 關節(jié)連桿結構相對關系
消息文件(message)是用于描述ROS消息域的文本文檔,該文件用于生成以不同編程語言編寫的源代碼。msg文件存儲在一個功能包下的msg目錄下。消息文件每1行給出1個域類型和值域。其提供統(tǒng)一的串行化/解串行化方法,通過自定義消息文件生成代碼減輕復雜工作量。如本實驗中節(jié)點joint_state_publisher所發(fā)布的話題joint_states的消息類型為sensor_msgs。
服務文件(services)是用于描述服務的文件,由請求和響應2部分組成,是另一種節(jié)點間相互通信的方法。服務文件儲存在一個功能包下的srv目錄下,用于處理ROS通訊中的同步通訊,采用server/client語義。每個service type擁有request與response 2部分,對于service中的server,ROS不會檢查重名,只有最后注冊的server會生效,與client建立連接。本文實驗中joint_state_publisher與rviz等節(jié)點均具有get_longgers與set_longer_level的服務通訊類型。
action是ROS中一個很重要的功能包集合,可以解決在請求-響應式的使用場景中,srevice機制在請求執(zhí)行期間用戶無法查看執(zhí)行的進度或者取消請求的問題。ctionlib使用client-server工作模式,ActionClient 和ActionServer通過“ROS Action Protocol”進行通信,“ROS Action Protocol”以ROS消息方式進行傳輸。ActionClient 和ActionServer給用戶提供了接口,用戶使用這些接口可以完成goal請求(client)和goal執(zhí)行(server)。在運動規(guī)劃框架MoveIt!中常用此種通信方式,運動規(guī)劃框架MoveIt!的規(guī)劃結果以一個action的形式發(fā)布。
根據(jù)已知的機器人宇航員架構URDF文件,分析各個模塊的數(shù)據(jù)與消息傳遞機制,可建立宇航員機器人關節(jié)連桿關系樹形結構。在完成了機器人宇航員整體URDF模型構建后,使用ROS包中的可視化工具可以使建立的URDF結構圖像化顯示。URDF可視化樹形結構圖能夠顯示關節(jié)之間位置角度的相對關系,以及整體與部分、父關節(jié)與子關節(jié)的明確關系。
建立機器人宇航員內(nèi)部節(jié)點動態(tài)鏈接。ROS定義了基于主題的點對點消息傳遞機制,具體實現(xiàn)在儲存節(jié)點、主題、服務的注冊信息的節(jié)點管理器中。節(jié)點在與節(jié)點管理器通信時,可獲取關于其他已注冊節(jié)點的信息并且建立與其他節(jié)點的聯(lián)系。當節(jié)點訂閱主題時會建立一個與發(fā)布該主題節(jié)點的鏈接,并在協(xié)議的基礎上建立連接。機器人宇航員仿真節(jié)點如圖4所示。圖4中橢圓代表各個功能節(jié)點,矩形框代表傳遞的消息數(shù)據(jù),箭頭代表消息數(shù)據(jù)的傳遞方向。
圖4 仿真節(jié)點框圖
在通訊過程中,ROS創(chuàng)建的網(wǎng)絡連接所有進程。其中,所有節(jié)點均可通過創(chuàng)建的網(wǎng)絡與其余各個節(jié)點交互,獲取其發(fā)布信息或?qū)⒆陨頂?shù)據(jù)發(fā)布至網(wǎng)絡上。節(jié)點之間通過消息完成溝通交流,消息中包含了節(jié)點發(fā)布的數(shù)據(jù)信息。主題相當于對消息進行管理的數(shù)據(jù)總線,消息信息會發(fā)布到相應的主題。節(jié)點通過的訂閱主題的方式接收來自其他節(jié)點的消息。
將完成的URDF文件絕對路徑打開,啟動三維可視化工具Rviz,完成機器人宇航員模型的導入。在機器人操作系統(tǒng)中Rviz環(huán)境下對機器人宇航員三維模型進行運動仿真,通過控制關節(jié)節(jié)點可實現(xiàn)對機器人宇航員的運動控制。其模擬運動過程如圖5所示,其中使用多個運動時間節(jié)點代表模擬運動的全過程,表示機器人宇航員運動可達預設工作環(huán)境的所有目標位置。
圖5 機器人宇航員模擬運動
為使機器人宇航員模型完成工作空間中目標物體的抓取實驗,需要將機器人可移動的關節(jié)角定義關節(jié)運動類型,使各個關節(jié)根據(jù)目標位置信息運動到合適的關節(jié)角來確定末位置姿態(tài)。
圖6 工作臺上杯子的抓取模擬實驗
提出了一種在ROS環(huán)境中建立雙臂仿人機器人宇航員三維可視化模型與機器人模擬運動仿真的方法,使用開源次級操作系統(tǒng)ROS的統(tǒng)一機器人描述格式URDF,對雙臂仿人宇航員機器人進行模型建立。通過對宇航員機器人各個關節(jié)與整體進行模擬運動仿真,驗證該模型的合理性,同時完成了雙臂宇航員機器人對工作空間內(nèi)目標物體的抓取模擬實驗。該實驗為在ROS環(huán)境下對機器人宇航員復雜運動控制打下基礎,后期將對本課題深入研究,建立機器人逆運動學模型,對雙臂模型進行完整的運動規(guī)劃,進而實現(xiàn)機械臂與固定目標對接、雙臂夾持搬運物體等復雜工作。
[1] Coleshill E, Oshinowo L, Rembala R, et al. Dextre: Improving maintenance operations on the International Space Station[J]. Acta Astronautica, 2009, 64(9/10):869-874.
[2] Diftler M A, Mehling J S, Abdallah M E, et al. Robonaut 2 - The first humanoid robot in space[C]// IEEE International Conference on Robotics and Automation, 2011:2178-2183.
[3] 張建偉, 張立偉,胡穎,等.開源機器人操作系統(tǒng):ROS[J].北京:科學出版社,2012.
[4] Quigley M, Conley K, Gerkey B P, et al. ROS: an open-source robot operating system[C]// ICRA Workshop on Open Source Software,2009.
[5] 夏晶,蔣再男,劉宏,等.機器人宇航員遙操作中手臂運動映射優(yōu)化[J].華中科技大學學報(自然科學版), 2012, 40(12):55-59.
[6] 樊紹巍,劉伊威,金明河,等.HIT/DLR HandⅡ類人形五指靈巧手機構的研究[J].哈爾濱工程大學學報, 2009, 30(2):171-177.
[7] 姜力,周揚,孫奎,等.七自由度冗余機械臂障控制[J].光學精密工程,2013,21(7):1795-1802.
[8] 朱俊杰,王濱,劉宏,等.仿人機器人頭部設計及目標跟蹤研究[J].機械與電子,2010(7):49-52.
[9] Deutsch A, Fernandez M,Florescu D,et al.A query language for XML[J].Computer Networks, 1999, 31(11/12/13/14/15/16):1155-1169.