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