郝 奇,許四祥,江天琦,朱寶林
(安徽工業大學 機械工程學院, 安徽 馬鞍山 243000)
鋼鐵行業定尺大型連鑄坯采用數控火焰切割機,火焰切割后熔融的鋼液向下流動導致板坯底部粘連有一條呈冰柱狀的毛刺,嚴重影響軋鋼的表面質量和軋輥的壽命。而現有的刮刀式去除法和錘刀式去除法都具有去毛刺效率低和刀具壽命低的缺點,兩者都無法滿足工業現場的需要。許四祥等[1]提出了一種等離子去板坯毛刺的新方法,經實驗表明:等離子弧切割不僅速度較快而且不會出現二次掛污,無論去毛刺質量或效率都得到很大的提升。在此基礎上,筆者通過ROS操作系統實現了機器人等離子切割板坯毛刺的運動規劃及離線仿真,為機器人等離子切割板坯毛刺開源平臺的開發提供技術支持。
ROS機械臂控制系統基于MoveIt架構及其插件,包括控制系統核心MoveGroup類,這個類提供簡易方式實現大部分功能,比如:設置關節或目標姿態、創建行為規劃、移動機器人、在環境中增加對象或給機器人增加或減少對象[2-5]。除了核心MoveGroup類,還包括ROS參數服務器接口、機器人控制器接口、Python的moveit_commander接口、傳感器接口和RVIZ插件接口,其系統結構如圖1所示。
圖1 MoveIt控制系統架構
參數服務器加載urdf、config和srdf機器人配置信息;通過機器人控制器接口MoveGroup類與機器人控制器接口交換JointTrajectoryAction的關節運動數據信息;機器人傳感器是為了獲得JointState反饋的關節信息,便于MoveGroup調用運動規劃算法求得正逆運動學解和生成運動軌跡。
MoveIt控制機器人軌跡規劃流程如圖2所示。第1步:構建URDF,然后在RVIZ下進行檢驗。第2步:使用MoveIt的Setup_Assistant生成配置文件,并在其中添加機器人控制器插件。第3步:MoveIt控制機器人進行運動軌跡規劃,包括啟動配置文件和Python運動規劃程序,最終分析運動規劃結果。
圖2 MoveIt軌跡規劃流程
URDF(universal robotic description format)是統一描述機器人仿真模型設定的XML語言[6-8]。URDF代碼主要定義了link和joint,其中joint中包含關節名稱、關節類型、坐標值、子父系連桿和limit限位信息,而link中包含inertial慣性、collision碰撞檢測和visual可視化信息。
采用SolidWorks繪制了六自由度機器人模型,其中每個連桿都要設定如圖3所示的coordinate參考坐標系和axis旋轉軸,然后通過sw_urdf_exporter插件順序定義所關節的子父系link、參考坐標系、旋轉軸和限位參數,即可導出URDF。
得到URDF文件以后,在Ubuntu終端使用urdf_to_graphiz命令進行圖形解析。如果語法結構合理,URDF會生成一個pdf文件,再使用evince命令得到如圖4所示的包含位姿的關節連桿鏈形圖。如果關節連桿關系定義有誤,使用gedit命令對URDF文件進行修改。
圖3 機器人零部件
圖4 關節連桿鏈形
RVIZ可視化工具是基于MoveIt架構的插件,用于生成機器人的場景以及與機器人直接交互。驗證URDF模型語法和結構之后,啟動joint_state_publisher節點,發布sensor_msgs/JointState信息,調用use_gui:=true控制模型關節運動,檢查模型有無干涉和關節限位,進一步配置和修改URDF。RVIZ結果如圖5所示。
圖5 RVIZ可視化
MoveIt控制系統功能的實現來源于其配置,在得到合理的URDF以后,需要使用MoveIt的setup_asssistant來生成特定的配置文件,其具體流程如圖6所示。
圖6 setup_assistant配置流程
圖6中:碰撞矩陣列出不可能發生碰撞的連桿,這樣在運動規劃時可節省碰撞檢測時間。添加規劃組時,定義由base_link到gripper_link的規劃組arm,選擇KDL工具求解正逆運動學解。添加預備位姿會使后面的操作更方便,配置后存儲在srdf文件中。
添加arbotix控制器插件,首先要在launch啟動文件中添加arbotix啟動節點,在config文件夾中修改joint_limits.yaml機器人關節位置、速度和加速度參數,修改controller.yaml關節電機配置信息。
運行一個launch文件啟動配置的所有插件、節點和內置啟動文件,其中主要包括4個節點,rviz、arbotix、robot_state_publisher和move_group節點。move_group激活一系列主題和服務來處理運動學動力學、規劃場景、碰撞檢測和關節軌跡控制。運行launch啟動機器人系統,rviz顯示加載的機器人及其場景,終端顯示加載的控制參數。
本研究背景是機器人等離子切割板坯毛刺,按照任務要求設計運動流程,RVIZ可視化軌跡如圖8所示:首先機器人回到初始位姿home,之后伸展至板坯遠端a點,同時末端執行器到達切割位姿(切割板坯毛刺要求末端執行器6軸水平且繞Z軸轉動45°)。然后末端執行器切割點貼近板坯面到達b點,然后直線切割到c點,切割過后末端執行器離開板坯小段距離,最后機器人回到home初始位姿。
運動規劃采用笛卡兒空間規劃為末端執行器設定目標位姿,并限制軌跡的位置和方向。笛卡兒空間的路徑規劃就是計算機器人在給定路徑點處的位姿,其直線插補公式如下所示:
對于位置插補,設定初始位置為P1,步長為a,目標位置為P(i):
P(i)=P1+a×i
(1)
對于姿態插補,設定初始姿態為R1,目標姿態為R2,調整姿態為R:
(2)
同時利用旋轉變換求取等效轉軸的轉角,進而求取機器人第i步相對于初始姿態的調整量。在笛卡兒空間中,將位置和姿態整合,進而求得第i步的位姿矩陣:
(3)
運動規劃采用MoveIt調用OMPL(open motion planning library)的LBKPIECE隨機采樣規劃算法[9-11]。路徑中如果不施加約束,Moveit生成的 TCP路徑將是曲線,如圖8中的初始位姿到a點,而在機器人切割板坯工作過程中要求有直線切割,如圖8的b點到c點。因此,通過在笛卡兒路徑規劃中引入一系列路徑點的方法來限制末端執行器軌跡的位置和方向。笛卡兒直線運動規劃方法的部分Python代碼如下:
waypoints=[] #初始化一個空列表
if cartesian: waypoints.append(start_pose) #添加當前位姿到列表
vrpose=deepcopy(start_pose)
vrpose.position.y-=1.5 #設定板坯寬度方向另外一點的位姿
if cartesian: waypoints.append(deepcopy(vrpose)) #添加位姿到列表
else: arm.set_pose_target(vrpose) #笛卡兒參數為false,設定目標點位姿
arm.go() rospy.sleep(1) #立即移動機器人并休息1s
if cartesian: fraction=0.0 max=50 atmp=0 #設定計數器
arm.set_start_state_to_current_state()
while fraction<1.0 and atmp (plan,fraction)=arm.compute_cartesian_path(waypoints,0.001,0,True) #設定笛卡兒路徑計算函數的參數 atmp+=1 #計算下一個路徑點位姿 RVIZ顯示如圖7所示,黃色機器人代表初期導入的模型,白色表示初始和最終的home位姿,左上角的終端窗口可以看到OMPL成功調用LBKPIECE算法生成運動軌跡,左下角終端輸出機器人6軸的位置、速度和時間(PVT)數據,這個數據通過JointTrajectoryAction話題傳送給機器人底層控制器。機器人末端執行器的軌跡如圖8所示,全程軌跡符合程序代碼設計的期望。通過ROS工具rqt_plot添加終端joint_states話題數據,實時監控各個關節隨時間變化曲線,具體如圖9所示,整個運動過程機器人各個關節都能實現平滑的軌跡過渡,最后通過終端rosbag命令保存運動規劃和離線仿真PVT數據包。 圖7 RVIZ機器人運動過程 圖8 末端執行器軌跡 圖9 機器人各關節角度隨時間變化曲線 在ROS中構建了URDF模型、RVIZ可視化檢驗、配置及啟動MoveIt控制系統,設計了Python運動規劃程序執行等離子切割任務、rqt_plot可視化分析運動軌跡。通過上述工作流程,在ROS中實現了機器人等離子切割板坯毛刺的運動規劃及離線仿真,全程軌跡符合程序代碼設計的期望。該研究方法便捷有效,為機器人等離子切割板坯毛刺開源平臺的開發提供技術支持,對工業機器人在ROS下的應用研究有著重要的科學意義。4.3 運動規劃結果
5 結束語