UR機器人和ROS-Industrial入門

Note1: 本文主要講了ROS-Industrial節點與Universal Robots UR5 (controller CB3)的通信過程。此過程在UR5中進行測試,當應用在UR10中也採用相同的過程。

準備工作

需要前期準備的安裝環境:
1. ROS kinetic系統
2. ROS-Industrial 的 universal_robot包
UR5機器人控制器的鏡像版本是 3.0。

驅動兼容性
需要檢查 universal_robot包的驅動和控制器的兼容性。

綜述

universal_robot包通過以太網連接與硬件進行通信,當建立連接的時候ROS-Industrial上傳由URScript編寫的程序,URScript是類似python的UR機器人自己的腳本語言。這段程序負責監聽ROS-Industrial的 simple_messages 包發送的消息信息,並將這些消息解釋成硬件指令。

我們不必明確瞭解安裝在UR機器人上的所有與ROS-Industrial進行通信的程序

實現步驟

安裝必要的軟件

可以通過 apt-get (preferred) 命令,也可以用源碼進行安裝。參考 universal_robot包進行。

配置硬件

確保機器人控制器能夠通過以太網進行通信。UR控制器的網絡功能默認是關閉的。打開網絡功能需要示教盒進行操作,操作步驟是Setup Robot -> Setup Network Menu (shown in the below attachment).

這裏寫圖片描述
可以使用動態ip地址、靜態ip地址,用ping命令進行調試

ping IP_OF_THE_ROBOT

如果沒反應則檢查錯誤。

在ROS中描述機械臂

launch文件可以用來啓動描述機械臂的ur_description包。

與UR機器人進行通信

注意:如果UR機器人控制器的版本在3.0及以上的,需要使用新的驅動包ur_modern_driver ,包中ur_Interface_Hardware源碼文件中,需要把”->interface_hardware”改成”->type”。

一下命令用於ROS與UR機器人建立連接,需要把”IP_OF_THE_ROBOT”改成機器人控制器的IP地址。

roslaunch ur_modern_driver ur5_bringup.launch robot_ip:=IP_OF_THE_ROBOT [reverse_port:=REVERSE_PORT]

這時及以後就應該手在急停按鈕附近了

在一個新終端裏,就可以使用腳本語言控制機器人按照預定義的位置進行運動了

rosrun ur_driver test_move.py//可以試一下,沒試過

使用MoveIt! 操作硬件

設置moveit!節點:

roslaunch ur5_moveit_config ur5_moveit_planning_execution.launch

啓動帶有運動規劃插件的 RViz

roslaunch ur5_moveit_config moveit_rviz.launch config:=true

由於MoveIt!在[π,π] 範圍內進行運動規劃有困難,所以將關節約束在[π2,π2] 範圍內,使用關節約束的版本的命令:

roslaunch ur_modern_driver ur5_bringup.launch limited:=true robot_ip:=IP_OF_THE_ROBOT [reverse_port:=REVERSE_PORT]
roslaunch ur5_moveit_config ur5_moveit_planning_execution.launch limited:=true
roslaunch ur5_moveit_config moveit_rviz.launch config:=true 

仿真學習

有些時候操作機器人不方便,那麼可以通過gazebo仿真學習

roslaunch ur_gazebo ur10.launch
roslaunch ur10_moveit_config ur10_moveit_planning_execution.launch sim:=true
roslaunch ur10_moveit_config moveit_rviz.launch config:=true

分析ROS Industrial(ROS-I2

工業機器人是機器人中非常重要的一個部分,在工業領域應用廣泛而且成熟,ROS迅猛發展的過程中,也不斷滲入到工業領域,從而產生了一個新的分支——ROS-Industrial
這裏寫圖片描述

  1. GUI:上層UI分爲兩個部分:一個部分是ROS中現在已有的UI工具;另外一個部分是專門針對工業機器人通用的UI工具,不過是將來纔會實現。
  2. ROS Layer:ROS基礎框架,提供核心通訊機制
  3. MoveIt! Layer:爲工業機器人提供規劃、運動學等核心功能的解決方案
  4. ROS-I Application Layer:處理工業生產的具體應用,也是針對將來的規劃
  5. ROS-I Interface Layer:接口層,包括工業機器人的客戶端,可以通過 simple message協議與機器人的控制器通信
  6. ROS-I Simple Message Layer:通信層,定義了通信的協議,打包和解析通信數據
  7. ROS-I Controller Layer:機器人廠商開發的工業機器人控制器。

從上邊的架構我們可以看到,ROS-I在複用已有ROS框架、功能的基礎上,針對工業領域進行了針對性的拓展,而且可以通用於不同廠家的機器人控制器。

這種架構的上層控制本身就是複用的已有的軟件包,ROS-I目前主要關注的是如何使用這些軟件包來控制工業機械臂,也就是最下邊的三層結構。我們把這三層從上到下分析一下:

首先是ROS-I Interface Layer層,這一層需要我們設計一個機器人的客戶端節點,主要功能是完成數據從ROS到機械臂的轉發,ROS-I爲我們提供了許多編程接口,可以幫助我們快速開發,下圖就是幾個比較常用的API,具體API的使用說明可以查看官方文檔。
這裏寫圖片描述

對於機械臂來講,這裏最重要的是 robot_state和 joint_trajectory。 robot_state包括很多狀態信息,ROS-I都已經幫我們定義好了,可以去industrial_msgs包裏看到消息的定義文件。joint_trajectory訂閱了MoveIt規劃出來的路徑消息,然後打包發送給最下層的機器人服務器端。通常會把這一層的功能封裝成robot_name_driver功能包,可以看ROS-I中ABB和UR的機械臂都是這樣的,可以參考他們的源碼進行設計。

然後是ROS-I Simple Message Layer層,這一層主要是上下兩層的通信協議。Simple Message這個協議是基於TCP的,上下層客戶端和服務器端的消息交互,全部通過這一層提供的API進行打包和解析。具體使用方法可以參考http://wiki.ros.org/simple_message,也可以直接看ROS-I的源碼:https://github.com/ros-industrial/industrial_core,主要實現SimpleSerialize和TypedMessage兩個類的功能即可。

最下層的ROS-I Controller Layer是廠家自己的控制器,考慮到實時性的要求,一般不會使用ROS,只要留出TCP的接口即可,接收到trajectory消息解析之後,就按照廠家自己的算法完成動作了。可見,如果我們想要通過ROS-I來控制自己的機械臂,最下邊的三層使我們需要實現的重點,上層運動規劃部分可以交給ROS來完成。


這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章