1. 程式人生 > >ROS下如何使用moveit驅動UR5機械臂

ROS下如何使用moveit驅動UR5機械臂

原來的moveit實在Ubuntu12.04上安裝的,ros版本是hydro,後來重灌電腦,系統變成了16.04,對應的ros版本為Kinetic。重灌的時候,又重新記錄了一下安裝步驟。

moveit安裝

配置:ROS:hydro,Ubuntu:12.04 32位

1、安裝UR5

安裝UR5必需的包:

$ sudo apt-get install \
  ros-indigo-ur-gazebo \
  ros-indigo-ur5-moveit-config \
  ros-indigo-ur-kinematics

2、MoveIt!配置助手 (MoveIt! Setup Assistant)

2.1 開啟MoveIt!配置助手對UR5機械臂進行配置

#開啟setup_assistant
roslaunch moveit_setup_assistant setup_assistant.launch

    MoveIt! Setup Assistant 是一個圖形介面,可以讓我們不用寫程式碼看程式碼,直接用滑鼠點選就可以配置機器人的運動規劃所需要的資訊。點選Create New MoveIt Configuration Package來建立新的配置包,選擇UR5的urdf,然後點選Load Files 載入檔案。
關於UR5如何配置可以參考網頁 Setup Assistant Tutorial

2.2 建立規劃群 (Planning Groups)

建立Planning Group是MoveIt的核心之一。
首先,點選Add Group,介面如圖所示

這裡寫圖片描述

Group Name: 規劃群名字
Kinematic Solver: 運動學求解工具,這個就是負責求解正向運動學(Forward Kinematics)和逆運動學(IK)的。 一般我們選用KDL, The Kinematics and Dynamics Library。這是一個運動學與動力學的庫,可以很好的解決6自由度以上的單鏈機械結構的正逆運動學問題。當然你也可以用其他IK Solver, 比如SRV或者IK_FAST,甚至你可以自己開發新的Solver然後插入進來,如果有空,我以後會發帖講解如何建立新的運動學求解庫並插入到MoveIt。
Kin. Search Resolution

: 關節空間的取樣密度
Kin. Search TImeout: 求解時間
Kin. Solver Attempts: 求解失敗嘗試次數,一般來說這三項使用預設值就可以。你也可以根據具體需要做出適當調整。

3、MoveIt 配置包詳解

3.1 MoveIt! 配置檔案

    使用下面命令,可以進入MoveIt! 配置檔案的資料夾

cd /opt/ros/hydro/share/ur5_moveit_config/config

    先看config資料夾裡面包含如下檔案:
fake_controllers.yaml:這是虛擬控制器配置檔案,方便我們在沒有實體機器人,甚至沒有任何模擬器(如gazebo)開啟的情況下也能執行MoveIt。
joint_limits.yaml:這裡記錄了機器人各個關節的位置速度加速度的極限,這些都會被用於以後的規劃中。
kinematics.yaml:用於初始化運動學求解庫
ur5.srdf:這個是一個重要的MoveIt配置檔案,配合URDF使用。我 們可以看到這是一個xml格式的配置檔案,根是robot,並有一個屬性值name=’ur5’。下面各個專案應該很明顯,就是我們剛剛在Setup Assistant裡面所設定的東西,包含了組群,位姿,終端控制器,虛擬關節,以及碰撞免測矩陣ACM的定義。理論上,只要有了srdf和urdf,我 們就可以完全定義一個機器人moveit資訊。
ompl_planning.yaml:這裡是配置OMPL各種演算法的各種引數。

3.2 Launch檔案

    使用下面命令,可以進入MoveIt! Launch資料夾

cd /opt/ros/hydro/share/ur5_moveit_config/launch

我們來看看幾個重要的檔案。

3.2.1 demo.launch

    demo是執行的總結點,開啟我們可以看到他include了其他的launch檔案。其中第14行說,如果有需 要,釋出靜態的tf。比如說,你的機器人基座不在世界座標的原點,你可以釋出一個靜態tf來描述機器人在世界座標中的位置。第17-21行,就是我們釋出 虛擬機器器人狀態的地方了,當然,如果你有實體機器人或者有gazebo之類的模擬器,你需要去掉這一部分,有其他相應的節點來發布機器人狀態。26-32 行運行了另一個moveit重要的節點,move group。

3.2.2 move_group.launch

    顧名思義,move group的功能是讓一個規劃組群動起來。怎麼動,那就要做運動規劃了,在move_group.launch第24-26行定義了運動規劃庫的使用,我 們可以看到,預設的是使用ompl運動規劃庫。同樣的,如果以後有時間,我會發帖詳解如何建立新的運動規劃庫外掛並讓moveit使用其他的運動規劃算 法。其他的都是設定一些基本引數,暫時可以略過。

3.2.3 planning_context.launch

    這裡我們可以看到,定義了所使用的urdf和srdf檔案,以及運動學求解庫。不建議手動更改這些,但是如果你需要使用不同的urdf,srdf,可以在這裡更改。

3.2.4 setup_assistant.launch

4、執行demo

    現在我們可以來嘗試執行moveit了!

roslaunch  /opt/ros/hydro/share/ur5_moveit_config/launch/demo.launch

    等待幾秒,當看到綠色字型 All is well! Everyone is happy! You can start planning now! 的時候,就代表啟動成功了。
我們可以看到一個Rivz視窗,其中有一個運動規劃Motion Planning模組。
這裡寫圖片描述
    第一個進入視野的就是Planning Library, OMPL,這裡告訴你當前用的是OMPL運動規劃演算法。點選unspecified按鈕,在中間的下來選單裡面有很多的具體演算法,之後你可以嘗試不同的演算法,看看他們的區別。

這裡寫圖片描述
如果你需要更改一些配置,那麼可以直接執行

5、使用Move Group Interface/C++ API規劃路徑

    想對UR5進行運動學規劃,可以參考下網站上給出的PR2運動規劃到例子,在上面作出相應到修改。

5.1、PR2的demo

    在網站(參考檔案[5])上下載pr2的相關檔案(MoveIt! Packages for PR2)(hydro版本可能是自帶裝好的,我在執行demo時,發現是執行/opt/ros/hydro/share/pr2_moveit_tutorials/launch裡的檔案)。之後,在工作空間內編譯。關於launch檔案的含義,可以參考檔案[6]。

#確保此時路徑在工作空間內,如我自己在~/catkin_ws2$,編譯工作空間
$catkin_make
#執行demo,我這裡寫的是絕對路徑。
$roslaunch  /home/exbot/catkin_ws2/src/moveit_pr2-hydro-devel/pr2_moveit_tutorials/planning/launch/move_group_python_interface_tutorial.launch

    執行時,會自動調出rivz的視窗,顯示模擬結果。勾選左側loop Animation,可以迴圈顯示動畫。這個demo就是對給定的目標點和初始點進行運動規劃,同時呼叫rviz軟體進行模擬顯示。
這裡寫圖片描述
    如果roslaunch後沒有結果,可以開啟move_group_interface_tutorial.launch檔案,看一下里面< include file=”$(find pr2_moveit_config)/launch/demo.launch”/>這句,可以直接改成編譯完成後到demo.launch路徑。

本文參考文件:

在ubuntu 16.04下利用moveit 除錯ur5

環境:ROS Kinetic;ubuntu 16.04 64位版

安裝moveit

ROS Kinetic
Install Ubuntu Packages
Simply run:

sudo apt-get install ros-kinetic-moveit

Setup your environment

source /opt/ros/kinetic/setup.bash

安裝ur5的配置檔案

從GitHub的universal_robot專案的README.md檔案上,可以看到,再安裝高於indigo的版本時,需要從source中編譯。

Installation from Source
There are releases available for ROS Hydro and ROS Indigo. However, for the latest features and developments you might want to install from source.

First set up a catkin workspace (see this tutorials).
Then clone the repository into the src/ folder. It should look like /path/to/your/catkin_workspace/src/universal_robot.
Make sure to source the correct setup file according to your workspace hierarchy, then use catkin_make to compile.
根據檔案指示,首先將在ros-industrial/universal_robot專案中找到ur5的對應版本,這裡是選擇kinetic-devel
這裡寫圖片描述

將檔案儲存在~/catkin_ws/src裡,之後

這裡寫圖片描述

$ cd ~/catkin_ws
$ catkin_make

注:每次開啟新終端,除錯ur5時,先輸入下面語句(Don’t forget to source the correct setup shell files and use a new terminal for each command!):

$ . ~/catkin_ws/devel/setup.bash

UR5的配置檔案路徑為:~/catkin_ws/src/universal_robot-kinetic-devel/ur_description/urdf/
可以選擇其中的ur5_joint_limited_robot.urdf.xacro file,或者 ur5_robot.urdf.xacro

For the UR5, load either the ur5_robot.urdf.xacro or the ur5_joint_limited_robot.urdf.xacro file. The former sets the joint limits to their actual values (+-2pi for all joints), while the latter restricts that to half of that (+-pi). MoveIt (and/or some of its planners) don’t work too well with full 2pi joint limits, hence the joint limited variant of that file.
Import UR5 urdf to Moveit!原文連結

除錯

除錯前出現的一個小問題

在我除錯的時候,出現了匯入ur5_joint_limited_robot.urdf.xacro時出現錯誤的問題,後來我重新執行了如下語句,匯入成功。

$ cd ~/catkin_ws
$ catkin_make

模擬

輸入下面命令,可以在 rviz 中模擬ur5下面三個命令,需要在三個不同終端中呼叫,同時在呼叫之前,需要分別重新輸入

$ . ~/catkin_ws/devel/setup.bash
roslaunch ur_gazebo ur5.launch limited:=true

roslaunch ur5_moveit_config ur5_moveit_planning_execution.launch sim:=true limited:=true

roslaunch ur5_moveit_config moveit_rviz.launch config:=true

在rivz中,規劃庫中有多種演算法,某一個規劃演算法可能會遇到failed,多試幾個,總有一個成功。

這裡寫圖片描述

實體聯調

使用ur_driver的問題

roslaunch ur_bringup ur5_bringup.launch robot_ip:=IP_OF_THE_ROBOT [reverse_port:=REVERSE_PORT]
rosrun ur_driver test_move.py

我在執行第二句rosrun ur_driver test_move.py時,發現程式卡在“Waiting for server…”這句。後來上網差原因,看資料顯示,可能是版本相容的問題。有人提出用
ur_modern_driver代替universal_robot。但是我從官網ur_modern_driver下載,按官網步驟,拷入~/catkin_ws/src資料夾下,執行catkin_make命令時,報錯。後來又去網上查原因,發現有人說是ur_modern_driver不支援ROS kinetic版本(作者說近期會對其進行改進),但是經過一些修改後可以使用。此處WangJIankun1992 說他將ur_modern_driver裡的 ur_hardware_interface.cpp,檔案中的 controller_it->hardware_interface改成 controller_it->type. 這樣可以保證執行成功。按此方法對檔案進行修改後,執行catkin_make可以編譯成功。

實際與ur5控制時,無法連結查了github上的註釋,說是目前對3.3.2.266還不支援(Support for UR3 version 3.3.2.266? #75)。很可惜我這臺ur5前段時間剛升到3.3。問題待解決

  1. Gazebo 與Rviz 的區別
    Gazebo is the actual real world physics simulator that you will set up a world and simulate your robot moving around. Rviz is the visualization software, that will allow you to view that gazebo data (if you are simulating) or real world data (if you are not using gazebo, but a real robot).原文連結

  2. 列表內容

參考文件: