ROS機器人實例 —— PR2
PR2(Personal Robot 2,個人機器人2代)是Willow Garage公司設計的機器人平台,其中數字2代表第二代機器人。
PR2有兩條手臂,每條手臂七個關節,手臂末端是一個可以張合的夾爪;PR2依靠底部的四個輪子移動,在頭部、胸部、肘部、夾爪上分別安裝有高解析度攝像頭、激光測距儀、慣性測量單元、觸覺感測器等豐富的感測設備。在PR2的底部有兩台八核電腦作為機器人各硬體的控制和通信中樞,並且都安裝了Ubuntu和ROS系統。
PR2和ROS有千絲萬縷的關係,可以說ROS產生於PR2,也促成了PR2。ROS原本是Willow Garage為複雜的PR2機器人平台設計的軟體框架,依靠強大的ROS,PR2可以獨立完成多種複雜的任務,例如PR2可以自己開門、找到插頭給自己充電、打開冰箱取出啤酒、打簡單的撞球等等。只不過PR2價格高昂,而且能力還達不到商業應用的要求,如今主要用於學術研究。
可見,PR2是ROS中元老級的機器人平台,所有軟體代碼依託於ROS,並且全部在ROS社區中開放源代碼,為我們學習、應用ROS提供了豐富的資源。
一、 PR2功能包安裝
在ROS Kinetic中,大部分PR2功能包還無法支持,官方推薦使用ROS Indigo運行PR2。
首先使用如下命令安裝PR2機器人的相關功能包:
$ sudo apt-get install ros-indigo-pr2-*
以上命令主要安裝了下表中PR2機器人相關的ROS功能包。
PR2機器人售價昂貴,大多數人都無法接觸到,所以這裡我們使用模擬器運行PR2的相關功能。
二、 Gazebo中的PR2
使用如下命令啟動gazebo模擬環境,並使用pr2.launch將機器人載入到gazebo中:
$ roslaunch gazebo_ros empty_world.launch$ roslaunchpr2_gazebo pr2.launch
也可以使用pr2_gazebo功能包中的pr2_empty_world.launch一次性啟動gazebo並載入機器人模型:
$ roslaunch pr2_gazebo pr2_empty_world.launch
啟動成功後,就可以在一個空曠的gazebo模擬環境中看到PR2機器人了。
查看當前系統中的話題列表,會看到眾多話題已經發布或者等待訂閱,這就是PR2機器人模擬器提供給用戶的介面,我們可以基於這些介面實現很多功能。
為了測試PR2的感測器是否啟動成功,可以在模擬環境中隨機添加一些外部物體。
然後打開rviz,添加點雲、激光、攝像頭等插件,實現感測器數據的可視化顯示。
目前PR2機器人還處於靜止狀態,可以運行鍵盤控制節點,控制PR2運動:
$ roslaunch pr2_teleop teleop_keyboard.launch
啟動後根據終端中的提示,使用鍵盤控制PR2機器人在gazebo中移動,同時rviz中的PR2模型也會同步更新。
在控制PR2移動時,rviz中的Fixed Frame需要修改為odom_combined
二、 使用PR2實現SLAM
在PR2模擬環境中,我們已經獲取到所有感測器的數據,並且可以控制PR2移動,接下來嘗試使用PR2實現SLAM。
第一步還是啟動PR2的gazebo模擬環境:
$ roslaunchpr2_gazebo pr2_empty_world.launch
然後在空曠的gazebo模擬環境中添加一些障礙物體。
這裡以gmapping為例,創建一個啟動gmapping節點的啟動文件pr2_build_map.launch:
<launch> <node name="gmapping_node"pkg="gmapping"type="slam_gmapping" respawn="false" > <remap to="base_scan" from="scan"/> <paramname="odom_frame" value="odom_combined" /> </node></launch>
然後在該文件所在的路徑下直接運行以下命令:
$ roslaunch pr2_build_map.launch
如果launch文件、節點、可執行文件等在終端的當前路徑下,運行命令時可以不加功能包名。
啟動成功後,gmapping節點就開始SLAM建圖了。啟動rviz並添加顯示插件後,可以看到如圖所示的SLAM效果。
啟動鍵盤控制節點,控制PR2機器人在模擬環境中圍繞障礙物體移動,就可以實現SLAM了。
$ roslaunch pr2_teleop teleop_keyboard.launch
三、 PR2機械臂的使用
PR2不僅是一個移動機器人平台,它還裝配了兩個機械手,可以實現很多複雜的機械臂操作。類似於鍵盤發布速度控制指令,我們也可以在終端中使用如下命令控制PR2的兩個機械臂:
$ roslaunch pr2_gazebo pr2_empty_world.launch$ roslaunch pr2_teleop_general pr2_teleop_general_keyboard.launch
啟動成功後,可以在終端中看到提示信息,分別控制PR2的頭部、身體、機械臂等多個可運動部位。
此處選擇控制機械臂,然後會看到一系列控制命令。
按照命令提示點擊鍵盤按鍵,就可以控制PR2機器人的兩個手臂運動了。
說到機械臂運動,就不得不提到MoveIt!,PR2機器人的機械臂也可以通過MoveIt!控制。在安裝完成的PR2功能包中,已經包含了PR2手臂的MoveIt!配置功能包,可以直接啟動demo示例:
$ roslaunch pr2_moveit_config demo.launch
在啟動的rviz中會看moveit的界面,可以通過MoveIt!插件或代碼控制機械手臂運動。
除此之外,我們也可以使用如下命令,通過MoveIt!控制gazebo模擬器中的PR2:
$ roslaunch pr2_gazebopr2_empty_world.launch$ roslaunch pr2_moveit_config move_group.launch$ roslaunch pr2_moveit_config moveit_rviz.launch
各種控制器插件在這裡都已經配置完成,有興趣的讀者可以詳細學習PR2功能包中的源碼,這些都是我們實踐過程中重要的參考資料。
再次在rviz中控制PR2的機械手臂運動,gazebo中PR2的手臂將根據規劃的軌跡完成運動。
更多內容可關注微信公眾號:古月居 (guyue_home)
或訪問古月居網站:
古月居 - 怕什麼真理無窮,進一寸有一寸的歡喜推薦閱讀:
※全球首位機器人公民Sophia將到華南頂尖科技峰會—火星峰會現場
※怎麼研究工業機器人?
※能行走如飛,會自己摺疊:這個哈佛實驗室有一群神奇的機器人
※如何配置與使用ABB機器人示教器的可編程按鍵?
※人工智慧對語言、文字的理解以及與之相關的風險
TAG:機器人操作平台ROS | 機器人 |