昨天已經將OpenRAVE設定好了,接下來就是設定IKFast外掛了。
ikfast,機器人運動學的編譯器,在Rosen Diankov OpenRAVE運動規劃軟體提供,是一個強大的逆運動學求解器。不像大多數的逆運動學求解,ikfast可以求解任意複雜運動鏈的運動學方程,併產生特定語言的檔案(如C++)後供使用。最終的結果是非常穩定的解決方案,在最新的處理器能以5微秒的速度完成運算。From:https://www.ncnynl.com/archives/201610/1046.html
參考文獻:有詳細的如何生成(UR5)https://zhuanlan.zhihu.com/p/97364652
如何製作ikfast的外掛(兩篇差不多):https://blog.csdn.net/Kalenee/article/details/80740258
這裡的.xacro為你需要轉化的機器人模型的描述檔案,ur3.urdf是你想要新生成的.urdf檔案的名稱。我這裡的ur3_joint_limited_robot.urdf.xacro後面加了robotiq85夾爪,因此後面的模型視覺化是帶有夾爪的。
rosrun xacro xacro --inorder -o ur3.urdf ur3_joint_limited_robot.urdf.xacro
rosrun collada_urdf urdf_to_collada ur3.urdf ur3.dae
如果出現 [rospack] Error: package ‘collada_urdf’ not found,執行以下程式,即可解決
sudo apt-get install ros-melodic-collada-urdf
設定的精度會影響IKFAST的生成,設定過小會導致無法生成或求解精度過低,過大也會導致無法生成或者求解變慢,可以根據需求調整精度。這裡設定精度為小數點後5位,並備份生成的ur3.dae檔案,方便以後調整使用。
# 先備份
cp ur3.dae ur3.backup.dae
# 設定精度
export IKFAST_PRECISION="5"
rosrun moveit_kinematics round_collada_numbers.py ur3.dae ur3.dae "$IKFAST_PRECISION"
openrave-robot.py ur3.dae --info links
openrave ur3.dae
這裡的ur3.dae是之前第二步轉化你得到的名字,baselink和eelink的值根據你之前檢視的關節資料以及自己在setup assistant裡面設定Planning Group裡面的設定。由於我採用的無論是UR3還是UR5都是6DOF,所以直接預設transform6d就行,最後的savefile是你想儲存的路徑和名稱。最後兩篇參考文獻講的很清楚如何設定這些引數,不懂的可以去那裡詳細看看。生存過程比較久,大概是20分鐘的樣子,可以剛好開一局王者(23333)。
python `openrave-config --python-dir`/openravepy/_openravepy_/ikfast.py --robot=ur3.dae --iktype=transform6d --baselink=0 --eelink=9 --savefile=$(pwd)/ikfast61.cpp
此處需要將ikfast.h和ikfast61.cpp放在同一個資料夾下。
g++ ikfast61.cpp -o ikfast -llapack -std=c++11
由於目前網上只有UR5的設定作參考,為了驗證成功設定,因此還用UR5來驗證,成功得到了8組逆解。(UR機器人8組逆解,參考來源:https://www.zhihu.com/question/47605775/answer/113477680)
因此表示安裝完成,後面可以進一步生成外掛匯入rviz中。生成外掛的部分自行參考前言給出的後兩篇參考文獻,基本上不存在什麼坑,按照步驟catkin_make就行,之後可以檢視自己的kinematics.yaml,發現已經變成了ikfast。
然後可以roslaunch自己相應的config包裡面demo.launch來對比改變前後的區別。
目前我在rviz裡面沒有體會到特比大的區別,時間上因為rviz不止是運動學求解的時間,還有其他時間,因此沒有體會到4微秒那樣的速度。
也算是把ikfast設定好了,接下來要做的就是給定TCP(tool center point)的6D位姿,反解出各個關節角的值。這幾天準備看一些機器人的基礎理論知識,沖沖衝。