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