遨博协作机器人ROS开发 - 机械臂复杂轨迹规划
目錄
一、簡介
二、環境版本
三、學習目標
四、知識儲備
?五、任務實施
六、任務拓展
?七、課堂小結
?八、課后練習
一、簡介
大家好,歡迎關注遨博學院帶來的系列技術分享文章(協作機器人ROS開發),今天我們來學習一下“機械臂復雜軌跡規劃”。
二、環境版本
- 主機系統版本:Windwos10 64位
- 處理器型號:Intel-i7
- 虛擬機版本:VMware Workstation 16 Pro
- 虛擬機系統:Ubuntu 18.04.6 LTS
- ROS版本:Melodic
三、學習目標
四、知識儲備
下面開始介紹本節內容的知識點:
1.MoveIt!的正向運動學
通過MoveIt!的API接口控制機械臂運動,程序中一般是通過設置機械臂末端需要到達的位姿,然后規劃路徑并執行來控制機械臂運動的,這樣可以保證每次末端都會運動到指定的位姿,但是,機械臂6個關節的姿態每次規劃并不一定相同。
如下方兩個示意圖所示,機械臂具有相同的末端位姿,但是具備不同的關節角。
?通過機械臂末端的位姿來計算機器人運動的路徑,其實是一個逆運動學的過程,如果需要每次機械臂運動后的整體姿態是固定的,就需要使用正運動學過程,如下列代碼所示,設置的目標不是末端的位姿,而是6個關節的角度。
需要注意的是,在ROS中角度使用的單位是弧度,而在機械臂示教器中使用的單位是角度,需要進行單位的轉換。
設置關節角為目標姿態時需要調用setJointValueTarget函數。
?2.圓弧軌跡規劃
在MoveIt!規劃中,圓弧軌跡插補API是未提供的。實際應用里,例如焊接等任務需要圓弧軌跡,那么就需要自行實現。方法如下圖所示,是用很多直線段模擬圓弧,取點越多越接近實際圓弧。在圓弧上均勻采樣,將位置依次添加到路點,最后調用直線路徑規劃API實現圓弧運動,實現方法如右側代碼所示。
3.軌跡重定義
如果對規劃出來的軌跡不是很滿意,可以在“plan”和“execute”之間對軌跡進行修改。這里以刪除軌跡中的中間點為例,對軌跡進行重定義。
首先調用MoveIt!的API規劃得到一條路徑plan(軌跡規劃),如下列代碼所示:
?接著調用右側代碼中實現的函數,delete_trajectory(plan, 10);,這是對plan每隔10個點刪除一個,完成軌跡重定義,當然如果刪除的點太多,會造成真實機械臂運動產生卡頓和抖動。
?4.多軌跡連續運動
如果要一次運動多種復雜的軌跡,使用前面的方法,需要每次規劃路徑,然后等待機械臂運動完成,再次規劃下一條路徑,如此往復。在執行每條路徑后,要規劃下一條路徑,這必然會導致計算路徑耗時所產生的停頓,如果計算機的運算能力不高,這種停頓時間會更加明顯。
如何讓機械臂在各段軌跡之間不停頓,一氣呵成完成所有軌跡的運動?MoveIt!本身是沒有此功能的,因為MoveIt!規劃出來的軌跡一定是速度從0到0的軌跡,我們需要重新組合API的調用來實現多軌跡連續運動。
實現方法是將規劃得到的多條軌跡拼接成一條,然后對這一條軌跡中的速度,加速度進行重新規劃,成為一條完整的軌跡,關鍵就在于如何重規劃。
下面給出用時間最優算法對拼接的軌跡進行重規劃,當然也可以用其它算法實現。
?下列是多條軌跡連續規劃示例代碼,生成新軌跡,然后就可以控制機械臂運動。
代碼流程為首先定義一個軌跡變量trajectory,接著將已經規劃好的路徑中的每個點加入到trajectory中,重復此操作加入所有規劃的軌跡,然后將所有的軌跡點重新規劃,生成新的軌跡trajectory,最后將新軌跡賦值到規劃變量中。
?5.修改超時運動限制
MoveIt!對于機械臂運動一條軌跡的時間是有默認限制的,如果采用多軌跡連續運動,那么會認為這是一條完整的軌跡,一般復雜軌跡運動的時間是比較長的,所以需要修改這個限制,以防超時導致的報錯,方法如下。
修改AUBO-E5的MoveIt功能包下launch文件夾下的trajectory_execution.launch.xml文件,將執行的超時時間修改為20,單位是秒,如果在運行時報timeout的錯誤,也和機械臂運行速度有關,可適當增大這個數值。
在下圖所示的位置進行修改,需要注意的是,軌跡執行時間限制的修改最好經過測試并符合實際需求。
?五、任務實施
接下來,我們來看下通過機械臂跳舞案例,展現正向運動學、軌跡重定義、多軌跡連續運動等內容。
12.機械臂復雜軌跡規劃
六、任務拓展
設置機械臂速度與加速度限制。
為了使機械臂舞蹈運動速度和加速度更快,需要修改AUBO-E5的MoveIt功能包下config文件夾下的joint_limits.yaml文件,如右圖所示,這里可以設置機械臂6個關節最大速度和加速度。
此文件內內參數的含義如下:
- has_velocity_limits:速度限制是否生效,true代表生效,false代表不生效,生效時才能控制最大速度;
- max_velocity:最大速度限制值,單位為弧度/s;
- has_acceleration_limits:加速度限制是否生效,true代表生效,false代表不生效,生效時才能控制最大加速度;
- max_acceleration:最大加速度限制值,單位為弧度/平方秒。
?七、課堂小結
下面我們進行課堂小結:
1.本節內容主要針對MoveIt!的復雜路徑規劃,可以利用圓弧軌跡規劃、軌跡重定義、多軌跡連續運動等方式完成需要的軌跡路徑,這在實際的應用過程中是非常重要的。
2.真實機械臂的ROS最大速度與最大加速的限制調節需要以安全為主,特別是在調試開發階段,防止速度超出預期造成不必要的損失,同時也請放心,在ROS控制下,機械臂的碰撞停止等安全功能依然有效。
?八、課后練習
最后給大家布置一道課后習題。
1.利用圓弧軌跡規劃的方法,編寫1個在水平面規劃圓形末端軌跡的程序節點,并控制真實機械臂完成此軌跡的驗證。
2.利用軌跡重定義的方法,逐步刪除軌跡中的路點,觀察真實機械臂的運動情況。
在接下來的ROS課程中,我們會講解遨博機械臂末端工具ROS驅動,歡迎持續關注。
總結
以上是生活随笔為你收集整理的遨博协作机器人ROS开发 - 机械臂复杂轨迹规划的全部內容,希望文章能夠幫你解決所遇到的問題。