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)

或訪問古月居網站:

古月居 - 怕什麼真理無窮,進一寸有一寸的歡喜?

www.guyuehome.com


推薦閱讀:

全球首位機器人公民Sophia將到華南頂尖科技峰會—火星峰會現場
怎麼研究工業機器人?
能行走如飛,會自己摺疊:這個哈佛實驗室有一群神奇的機器人
如何配置與使用ABB機器人示教器的可編程按鍵?
人工智慧對語言、文字的理解以及與之相關的風險

TAG:機器人操作平台ROS | 機器人 |