杜比強(qiáng) 喬傲
摘要:現(xiàn)代工業(yè)中機(jī)械臂的使用越來(lái)越廣泛,但傳統(tǒng)的機(jī)械臂缺乏同工作環(huán)境的交互能力,靈活性較差。為此考慮利用視覺(jué)來(lái)引導(dǎo)機(jī)械臂作業(yè),為機(jī)械臂配置視覺(jué)傳感器,實(shí)時(shí)獲取工況信息,以提高機(jī)械臂在線實(shí)時(shí)作業(yè)的能力。ROS(Robot Operating System)在機(jī)器人開(kāi)發(fā)領(lǐng)域的應(yīng)用愈加廣泛,借助ROS構(gòu)建相應(yīng)的視覺(jué)引導(dǎo)機(jī)械臂作業(yè)的仿真模型。在Gazebo完成機(jī)械臂和Kinect相機(jī)的建模仿真,利用ROS節(jié)點(diǎn)通訊機(jī)制實(shí)現(xiàn)視覺(jué)識(shí)別結(jié)果對(duì)機(jī)械臂路徑規(guī)劃的指導(dǎo)。仿真運(yùn)行結(jié)果驗(yàn)證了該模型的可行性。
關(guān)鍵詞:ROS;機(jī)械臂;物體識(shí)別;MoveIt!;Gazebo
中圖分類號(hào):TP273? ? ?文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1009-3044(2022)04-0120-03
1 引言
ROS(Robot Operating System)作為一個(gè)開(kāi)源的分布式系統(tǒng),各個(gè)節(jié)點(diǎn)間相互獨(dú)立運(yùn)行,數(shù)據(jù)可以在各個(gè)節(jié)點(diǎn)間傳輸。模塊化的操作大大提高了代碼的復(fù)用率[1-2]。ROS的社區(qū)擁有大量的功能包,如camera_calibration(相機(jī)標(biāo)定),navigation(導(dǎo)航功能包,包括大多數(shù)經(jīng)典的SALM算法)。此外ROS還集成了許多現(xiàn)有的開(kāi)源軟件平臺(tái),如OpenCV、Player、MoveIt!等。仿真平臺(tái)Gazebo、Rviz和ROS也能完美兼容,為機(jī)器人研究提供巨大的便利。
機(jī)器視覺(jué)利用從傳感器中收集到的信息,并從其中提取相關(guān)信息加以處理,模擬人眼來(lái)進(jìn)行判斷和觀測(cè)[3]。在工業(yè)生產(chǎn)中,機(jī)器視覺(jué)往往用于代替人工在一些危險(xiǎn)工況、高精度檢測(cè)或自動(dòng)化生產(chǎn)這些場(chǎng)合[4]。在ROS平臺(tái)的基礎(chǔ)上 ,利用Gazebo模擬仿真出機(jī)械臂及Kinect相機(jī),觀察視覺(jué)和機(jī)械臂間的配合作業(yè)。
2 ROS仿真工具平臺(tái)
2.1物理仿真環(huán)境Gazebo
機(jī)器人仿真系統(tǒng)是每個(gè)機(jī)器人領(lǐng)域的工程師必不可少的工具。Gazebo提供高保真度的物理模擬和一整套完整的傳感器模型,能夠在復(fù)雜的室內(nèi)和室外環(huán)境中準(zhǔn)確有效地模擬真實(shí)的環(huán)境,如重力、摩擦、慣性和碰撞體積等。并且Gazebo是與ROS無(wú)縫兼容的!Gazebo的應(yīng)用大大降低了機(jī)器人研究的時(shí)間與成本[5]。
2.2 數(shù)據(jù)可視化工具Rviz
機(jī)器人系統(tǒng)中存在大量數(shù)據(jù),包括機(jī)器人自身的參數(shù)狀態(tài)還有從傳感器獲取到的外部信息。這些數(shù)據(jù)在計(jì)算和傳遞的過(guò)程中往往都處于數(shù)據(jù)形態(tài),例如圖像數(shù)據(jù)中0~255的RGB值,機(jī)器人坐標(biāo)姿態(tài)。但是這種數(shù)據(jù)形態(tài)的值往往不利于開(kāi)發(fā)者去感受數(shù)據(jù)所描述的內(nèi)容,所以常常需要將數(shù)據(jù)可視化顯示,例如機(jī)器人模型的可視化、圖像數(shù)據(jù)的可視化、地圖數(shù)據(jù)的可視化等。Rviz是一款三維可視化工具,很好地兼容了各種基于ROS軟件框架的機(jī)器人平臺(tái)。在Rviz中,可以使用XML對(duì)機(jī)器人、周圍物體等任何實(shí)物進(jìn)行尺寸、質(zhì)量、位置、材質(zhì)、關(guān)節(jié)等屬性的描述,并且在界面中呈現(xiàn)出來(lái)。同時(shí),Rviz還可以通過(guò)圖形化的方式,實(shí)時(shí)顯示機(jī)器人傳感器的信息、機(jī)器人的運(yùn)動(dòng)狀態(tài)、周圍環(huán)境的變化等。
3 物體識(shí)別
3.1 find_object
視覺(jué)抓取過(guò)程中非常關(guān)鍵的一個(gè)環(huán)節(jié)就是對(duì)被抓取物體的識(shí)別,無(wú)論是二維圖像還是三維點(diǎn)云,在ROS中都可以找到對(duì)應(yīng)的功能包。find_object是一種基于模板匹配算法(包括彩色圖像或點(diǎn)云匹配)的物體識(shí)別和檢測(cè)的功能包。find_object安裝命令:
$ sudo apt-get install ros-kinect-find-object-2d (對(duì)應(yīng)ROS的kinetic版本)
該功能包有兩個(gè)重要節(jié)點(diǎn):find_object_2d和find_object_3d。其中find_object_2d負(fù)責(zé)二維圖像的特征提取和識(shí)別,普通的單目相機(jī)就可以使用。而find_object_3d則是專為kinect或者zed雙目之類的深度相機(jī)準(zhǔn)備的,可以通過(guò)在匹配目標(biāo)后識(shí)別目標(biāo)中心的深度信息輸出目標(biāo)的三維坐標(biāo)。
3.2 配置啟動(dòng)文件
為了確定物體所處的位置,需要給機(jī)械臂配置它的“眼睛”。在Gazebo中仿真kinect相機(jī),除了添加它的外觀模型文件外,還需要配置Kinect的相機(jī)描述插件“l(fā)ibgazebo_ros_
openni_kinect.so”。這樣才能給這個(gè)模型文件添加“靈魂”,賦予模型作為相機(jī)的功能?!發(fā)ibgazebo_ros_openni_kinect.so”會(huì)將獲取到的圖像信息以topic(ROS的一種通訊機(jī)制)的形式發(fā)布出去。關(guān)鍵代碼如下:
<imageTopicName>rgb/image_raw</imageTopicName>
<depthImageTopicName>depth/image_raw</depthImageTopicName>
......
<cameraInfoTopicName>rgb/camera_info</cameraInfoTopicName>
其中rgb/image_raw為對(duì)齊后的彩色圖像信息,depth/image_raw是圖像的深度信息,rgb/camera_info是相機(jī)標(biāo)定信息。
在ROS的節(jié)點(diǎn)間可以通“發(fā)布/訂閱”的方式進(jìn)行數(shù)據(jù)的傳遞,為了可以訂閱Kinect發(fā)布的圖像信息,需要對(duì)find_object_2d功能包中的一些參數(shù)修改。按照路徑/find_object
_2d/launch/find_object_3d.launch 找到啟動(dòng)文件,修改其中的參數(shù)和Kinect相機(jī)發(fā)布的話題對(duì)應(yīng)。
<arg name="rgb_topic"? ? ? ? ?default="camera/rgb/image_raw"/>
<arg name="rgb_topic"? ? ? ? ?default="camera/rgb/image_raw"/>
<arg name="camera_info_topic" default="camera/rgb/camera_info"/>
3.3 物體識(shí)別
啟動(dòng)文件后得到一個(gè)仿真物體識(shí)別的操作頁(yè)面,通過(guò)菜單View-Parame-eters調(diào)出參數(shù)欄選項(xiàng)卡進(jìn)行調(diào)整。find_object_2d提供了多種物體識(shí)別算法,如:SURF、SIFT、ORB、FAST等。觀察目標(biāo)物體上的特征點(diǎn)數(shù)量及效果,以及處理的流暢程度,衡量選擇合適的算法匹配。該功能包是基于模板匹配算法實(shí)現(xiàn)物體識(shí)別的,首先需要在圖像中手動(dòng)圈出待識(shí)別物體,提取物體的特征點(diǎn)。
可以看到目標(biāo)物體按照需要被識(shí)別出并用邊線圈出,識(shí)別結(jié)果會(huì)以/objects 話題的形式發(fā)布出去。發(fā)布的消息包含物體的寬、高信息和單應(yīng)性矩陣信息,這些信息用來(lái)計(jì)算物體的位置、方向和剪切值。調(diào)用以下命令,查看物體四個(gè)頂點(diǎn)的坐標(biāo)和物體id:
$ rosrun find_object_2d print_objects_detected image:=/camera/color/image_raw
打開(kāi)Rviz添加坐標(biāo)變換樹(shù),可以直觀地觀察物體和相機(jī)的坐標(biāo)變換關(guān)系。
4 機(jī)械臂仿真抓取
4.1 轉(zhuǎn)換坐標(biāo)系
在Rviz中可以通過(guò)訂閱/tf_example消息來(lái)獲得目標(biāo)物體在相機(jī)坐標(biāo)系中的位姿信息,并通過(guò)機(jī)械臂坐標(biāo)系到相機(jī)坐標(biāo)系的映射關(guān)系,最終獲得目標(biāo)物體在機(jī)械臂坐標(biāo)系的位姿。
ROS教程提供了一種tf轉(zhuǎn)換方法,可以直接查詢機(jī)械臂基座標(biāo)到物體的tf關(guān)系,實(shí)現(xiàn)不同物體坐標(biāo)系之間的轉(zhuǎn)換。機(jī)械臂確定了物體坐標(biāo)系和基座坐標(biāo)系之間的坐標(biāo)映射關(guān)系,就可以通過(guò)路徑規(guī)劃完成機(jī)械臂末端的移動(dòng)實(shí)現(xiàn)抓取作業(yè)。
創(chuàng)建一個(gè)監(jiān)聽(tīng)坐標(biāo)系發(fā)布法的節(jié)點(diǎn),代碼關(guān)鍵段:
tf::StampedTransform transform;// 創(chuàng)建一個(gè)tf::TransformBroadcaster類的實(shí)例,用來(lái)廣播坐標(biāo)的變換關(guān)系
try{
listener.lookupTransform("/camrea_link", "/object_1",? //第一個(gè)參數(shù)為相機(jī)坐標(biāo)系,第二個(gè)參數(shù)為物體的坐標(biāo)系
ros::Time(0), transform);
}
catch (tf::TransformException ex){
ROS_ERROR("%s",ex.what());
ros::Duration(1.0).sleep();
}
4.2 MoveIt!
MoveIt!是一個(gè)易于使用的集成化開(kāi)發(fā)平臺(tái),包含了大量機(jī)械臂運(yùn)動(dòng)操作的功能包,如:機(jī)械臂運(yùn)動(dòng)學(xué)、路徑規(guī)劃、碰撞檢測(cè)等[6],是ROS社區(qū)中排名前三的功能包[7]。MoveIt!留有豐富C++和pythom接口,因此除了借助ROS原生的接口函數(shù)外,我們還可以自己編寫(xiě)一個(gè)節(jié)點(diǎn),完成機(jī)械臂對(duì)物體的抓取[8]。
move_group節(jié)點(diǎn)作為 MoveIt!的核心,集成了運(yùn)動(dòng)分析、規(guī)劃和執(zhí)行、取放操作等功能。在move_group中給出機(jī)械臂需要移動(dòng)的目標(biāo)狀態(tài),MoveIt!便會(huì)按照特定路徑規(guī)劃算法(如RRT,PRM等)移動(dòng)機(jī)械臂。
在Gazebo中僅僅是仿真出機(jī)械臂模型,物體和周圍環(huán)境,機(jī)械臂末端的移動(dòng)過(guò)程不能直觀地表現(xiàn)出來(lái)。在Rviz中添加機(jī)器人模型末端的軌跡線,就可以清楚地看到機(jī)械臂就緒-抓取-移動(dòng)-回歸就緒狀態(tài)的工作過(guò)程。
5 結(jié)語(yǔ)
本文基于ROS平臺(tái),并利用ROS強(qiáng)大的開(kāi)源社區(qū)找到相應(yīng)的物體識(shí)別功能包,實(shí)現(xiàn)了對(duì)二維、三維情況下的物體識(shí)別,將識(shí)別結(jié)果實(shí)時(shí)發(fā)送給機(jī)械臂,引導(dǎo)機(jī)械臂靈活作業(yè)。
通過(guò)借助于Gazebo、Rviz仿真平臺(tái),模擬出kinec相機(jī)對(duì)特定物體的識(shí)別效果,并通過(guò)Rviz將坐標(biāo)變化結(jié)果可視化,方便觀察。憑借ROS節(jié)點(diǎn)間的通訊機(jī)制,將得到的坐標(biāo)信息發(fā)布出去,然后MoveIt!訂閱消息,獲得物體位置并轉(zhuǎn)化為相對(duì)于機(jī)械臂基座的坐標(biāo),實(shí)現(xiàn)對(duì)目標(biāo)物體的抓取。此次仿真結(jié)果實(shí)現(xiàn)了視覺(jué)對(duì)機(jī)械臂的引導(dǎo),驗(yàn)證了視覺(jué)實(shí)時(shí)引導(dǎo)機(jī)械臂作業(yè)的可行性。
參考文獻(xiàn):
[1] 翟文正.將ROS引入嵌入式技術(shù)與應(yīng)用專業(yè)的實(shí)踐教學(xué)淺析[J].工業(yè)和信息化教育,2020(7):79-84.
[2] 李鳳.基于ROS的機(jī)械臂控制系統(tǒng)設(shè)計(jì)[J].自動(dòng)化技術(shù)與應(yīng)用,2018,37(11):72-76.
[3] 朱正德,楊虹,方琳,等.機(jī)器視覺(jué):質(zhì)量監(jiān)控的第三只眼[J].現(xiàn)代零部件,2010(10):56-63.
[4] 章煒.機(jī)器視覺(jué)技術(shù)發(fā)展及其工業(yè)應(yīng)用[J].紅外,2006,27(2):11-17.
[5] 滕步煒.基于ROS和Gazebo的Hector四旋翼仿真[J].電腦知識(shí)與技術(shù),2020,16(8):259-260.
[6] 劉月祺,辛大欣,劉文強(qiáng).基于MoveIt的六自由度機(jī)器臂軌跡規(guī)劃[C]//2018中國(guó)自動(dòng)化大會(huì)(CAC2018)論文集.西安,2018:670-675.
[7] 曹正萬(wàn),平雪良,陳盛龍,等.基于ROS的機(jī)器人模型構(gòu)建方法研究[J].組合機(jī)床與自動(dòng)化加工技術(shù),2015(8):51-54.
[8] 左軒塵,韓亮亮,莊杰,等.基于ROS的空間機(jī)器人人機(jī)交互系統(tǒng)設(shè)計(jì)[J].計(jì)算機(jī)工程與設(shè)計(jì),2015,36(12):3370-3374.
收稿日期:2021-09-21
作者簡(jiǎn)介:杜比強(qiáng)(1974—),男,江西吉安人,副教授,博士,主要研究方向?yàn)楣I(yè)機(jī)器人及應(yīng)用;喬傲(1997—),男,河北衡水武邑縣人,學(xué)生,主要研究方向?yàn)閞os機(jī)器人操作系統(tǒng)仿真。