遨博协作机器人ROS开发 - 自定义运动学求解器算法插件
目錄
一、簡介
二、環境版本
三、學習目標
四、知識儲備
五、任務實施
六、任務拓展
?七、課堂小結
八、課后練習
一、簡介
大家好,歡迎關注遨博學院帶來的系列技術分享文章(協作機器人ROS開發),今天我們來學習一下“自定義運動學求解器算法插件”。
二、環境版本
- 主機系統版本:Windwos10 64位
- 處理器型號:Intel-i7
- 虛擬機版本:VMware Workstation 16 Pro
- 虛擬機系統:Ubuntu 18.04.6 LTS
- ROS版本:Melodic
三、學習目標
四、知識儲備
下面開始介紹本節內容的知識點:
1.MoveIt!插件機制
MoveIt!是ROS中一個重要的集成化開發平臺,由一系列功能包組成,提供運動規劃、操作控制、3D感知、運動學等功能模塊,是ROS社區中使用度排名前三的功能包,目前已經支持AUBO-E5機械臂。
MoveIt!中集成了眾多工具集軟件,集成了各種庫,包括:
運動規劃(Motion Planning):MoveIt!只需提供機器人URDF模型,就可以調用幾大運動規劃庫的規劃算法(如OMPL,SBPL,CHMOP),自動生成機器人運動軌跡。
軌跡插值(Trajectory Processing):由于大多數規劃器只能返回一系列路徑點,MoveIt!可以根據機器人的控制參數(速度、加速度限制等)重新處理路徑,生成一條帶有時間戳、位置、速度、加速度信息的完整軌跡。
操作(Manipulation):根據識別的物體生成一系列動作抓取物體(pick-and-place)目前MoveIt!本身這部分功能還比較弱,不涉及任何反饋、動力學、re-grasp等操作問題。
?
3D感知(Perception):可以利用傳感器采集的點云或深度圖像,生成用于碰撞檢測的OctoMap,OctoMap為八叉樹形式表示點云,可以大大降低存儲空間,同時,這些3D OctoMap也可以依據貝葉斯準則不斷實時更新。這樣,機器人就可以避開真實世界的障礙物了。
運動學(Kinematics):目前可以支持多種運動學求解器,如OpenRave的封閉解ikfast、Orocos的數值解KDL、考慮關節極限的數值解Trac_ik、用戶自己定義的基于service的求解器。
碰撞檢測(Collision Checking):碰撞檢測是運動規劃的一大難題,如果采用基于采樣的規劃算法,那么需要對每個采樣點做有效性判斷,這時候就需要進行碰撞檢測。所以,運動規劃需要提供一個高效的碰撞檢測算法。FCL(Flexible Collision Library),可以非常快速地實現各種幾何體(3D面片、OctoMap、基本幾何體)的碰撞檢測。?
控制(Control):屬于機器人控制接口,可以讓MoveIt!發布機器人需要的控制指令。
交互(Interaction):MoveIt!給開發者提供了三種交互方式,直觀的RViz圖形界面、快速編程的Python、豐富的高級功能的C++。
如右圖所示,MoveIt!中的眾多功能都使用插件機制集成,并提供了豐富的接口。這樣用戶可以方便的覆寫插件功能,而無需接觸框架的核心。?
2.MoveIt!運動學求解插件
運動學插件作為重要的功能模塊,目前使用的主要有以下3個。
(1)KDL
KDL(Kinematics and Dynamics Library)是MoveIt!中的默認運動學插件,其有自己的優缺點,優點在于可求解封閉情況下逆運動,缺點在于速度慢,同時可能找不到解。
(2)TRAC-IK
TRAC-IK和KDL類似,也是一種基于數值解的運動學插件,但是在算法層面上進行了很多改進,求解效率高了很多。可以直接使用以下命令安裝:
(3)IKFAST
IKFAST是一種基于解析算法的運動學插件,可以求解任意復雜運動鏈的運動學方程并保證每次求解的一致性,整體來說,IKFAST比較穩定快速,一般5us的速度可完成運算。
3.MoveIt!運動插件開發方法
MoveIt!并不提供算法源碼,只是將算法按照約定的方法進行封裝,算法是數學模型的代碼實現,和MoveIt!本身并沒有關系,如果需要集成功能算法到MoveIt!中,需要編寫接口文件,如下圖所示,滿足MoveIt!的插件規范即可,然后向move_group進行注冊,這樣使用時即可通過yaml或launch文件進行直接的調用。
?
?如圖所示。
planning_interface是由moveit_core_package的核心庫提供,提供一個標準的協議接口,方便用戶集成其他算法。
PlannerConfigurationSettings用于配置參數。
PlanningContext用于規劃算法的具體實現。
PlannerManager用于向MoveIt!注冊插件,并告知MoveIt!此插件的作用。
PlannerManager實現時核心調用接口是Register,目的是進行注冊。
PlanningContext實現時核心調用接口是solve,包含具體的運動規劃算法。
4.自定義運動規劃算法的實現
自定義一個LERPInterface類,主要內容是重構接口函數,完成自定義的運動規劃算法,在類中重點是實現兩個函數。
(1)solve函數,這是運動規劃算法的主要調用接口,通過輸入運動規劃場景、運動規劃的起始和終止位置,返回運動規劃結果。
(2)interpolate函數,這是運動規劃算法的具體實現函數,包含具體的算法。
自定義一個LERPPlanningContext類,這個類繼承自MoveIt!提供的planning_interface::PlanningContext,實現了兩個不同輸入條件下的solve函數,terminate終止運動函數、clear清除緩存函數,如下列代碼片段所示。??
自定義一個LERPPlannerManager 類,這個類繼承自MoveIt!提供的planning_interface::PlannerManager,其中,initialize實現了算法初始化、canServiceRequest實現該插件是否可以應答運動規劃的請求、getDescription實現了獲取運動規劃器的字符串描述、getPlanningAlgorithms實現了獲取運動規劃算法的名稱、getPlanningContext實現對避障狀態配置。
如下列代碼片段所示。?
五、任務實施
接下來,我們來看下替換默認運動學求解器算法插件為自定義插件,控制虛擬機器人運動,驗證算法的有效性的演示。
14.自定義運動學求解器算法插件
六、任務拓展
恢復默認配置。
完成更換自定義運動學求解器算法插件后,修改配置文件,將運動學插件更換為默認運動學求解器插件,分析相關配置文件的參數含義。
?七、課堂小結
下面我們進行課堂小結:
MoveIt!的功能大部分都是以插件的形式提供,并提供了開發接口,運動學、碰撞檢測、路徑規劃等功能都可以讓用戶將自己的算法移植到ROS中,完成對機器臂數學計算的驗證。
八、課后練習
最后給大家布置兩道課后習題。
1.在ROS中,分別更換運動學算法插件為KDL、TRAC-IK、IKFAST,完成相同路徑的軌跡規劃,對比AUBO-E5機械臂在不同運動學求解器下的路徑效果。
2.按照例程編寫一個運動學求解器算法插件,熟悉開發流程。
?
在接下來的ROS課程中,我們會講解Intel RealSense深度相機ROS驅動開發,歡迎持續關注。?
總結
以上是生活随笔為你收集整理的遨博协作机器人ROS开发 - 自定义运动学求解器算法插件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 内存 溢出_java内存溢出的
- 下一篇: ORACLE 授权 新增 修改 删除 注