ROS進階——MoveIt!運動學插件IKFAST配置

環境:Ubuntu16.04+ROS Kinetic


一、IKFAST簡介

IKFAST是一種基於解析算法的運動學插件,可以保證每次求解的一致性。



二、環境配置

安裝程序

sudo apt-get install cmake g++ git ipython minizip python-dev python-h5py python-numpy python-scipy qt4-dev-tools

安裝依賴庫

sudo apt-get install libassimp-dev libavcodec-dev libavformat-dev libavformat-dev libboost-all-dev libboost-date-time-dev libbullet-dev libfaac-dev libglew-dev libgsm1-dev liblapack-dev liblog4cxx-dev libmpfr-dev libode-dev libogg-dev libpcrecpp0v5 libpcre3-dev libqhull-dev libqt4-dev libsoqt-dev-common libsoqt4-dev libswscale-dev libswscale-dev libvorbis-dev libx264-dev libxml2-dev libxvidcore-dev

安裝OpenSceneGraph-3.4 

sudo apt-get install libcairo2-dev libjasper-dev libpoppler-glib-dev libsdl2-dev libtiff5-dev libxrandr-dev
git clone https://github.com/openscenegraph/OpenSceneGraph.git --branch OpenSceneGraph-3.4
cd OpenSceneGraph
mkdir build; cd build
cmake .. -DDESIRED_QT_VERSION=4
make -j$(nproc)
sudo make install

安裝Flexible Collision Library 0.5.0

cd ~/git
git clone https://github.com/flexible-collision-library/fcl
cd fcl; git checkout 0.5.0
mkdir build; cd build
cmake ..
make -j `nproc`
sudo make install
安裝sympy 0.7.1(注意版本,若版本不對會產生錯誤)
pip install --upgrade --user sympy==0.7.1

刪除mpmath

sudo apt remove python-mpmath

安裝MoveIt! IKFast

sudo apt-get install ros-kinetic-moveit-kinematics

安裝OpenRAVE

git clone --branch latest_stable https://github.com/rdiankov/openrave.git
cd openrave && mkdir build && cd build
cmake -DODE_USE_MULTITHREAD=ON -DOSG_DIR=/usr/local/lib64/ ..
make -j$(nproc)
sudo make install
注意不建議採用sudo apt-get install ros-kinetic-openrave,會一併安裝mpmath,導致後面生成IKFAET文件失敗,因此採用源碼安裝的方式。


三、配置IKFAST插件

1、相關參數

(1)MYROBOT_NAME(機器人名字) - name of robot as in your URDF

(2)PLANNING_GROUP(規劃組名字) - name of the planning group you would like to use this solver for, as referenced in your SRDF and kinematics.yaml

(3)MOVEIT_IK_PLUGIN_PKG (插件包名字)- name of the new package you just created

(4)IKFAST_OUTPUT_PATH(IKFAST輸出路徑) - file path to the location of your generated IKFast output.cpp file

export MYROBOT_NAME="panda_arm"
export IKFAST_PRECISION="5"//保留精度小數點後5位
export PLANNING_GROUP="panda_arm"
export BASE_LINK="0"//起始關節
export EEF_LINK="8"//末端關節
export FREE_INDEX="1"//若關節數大於6需設置一自由關節
export IKFAST_OUTPUT_PATH=`pwd`/ikfast61_"$PLANNING_GROUP".cpp

2、配置流程

設置機器人名字

export MYROBOT_NAME="panda_arm"

若機器人模型爲xacro格式需先轉爲urdf格式

rosrun xacro xacro --inorder -o "$MYROBOT_NAME".urdf "$MYROBOT_NAME".urdf.xacro
機器人模型urdf格式轉換爲dae格式
rosrun collada_urdf urdf_to_collada "$MYROBOT_NAME".urdf "$MYROBOT_NAME".dae

設置精度爲小數點後5位,然後保留備份後重新設置dae格式機器人模型描述文件的精度

export IKFAST_PRECISION="5"
cp "$MYROBOT_NAME".dae "$MYROBOT_NAME".backup.dae  # create a backup of your full precision dae.
rosrun moveit_kinematics round_collada_numbers.py "$MYROBOT_NAME".dae "$MYROBOT_NAME".dae "$IKFAST_PRECISION"

查看模型關節數據(數據如下圖)

openrave-robot.py "$MYROBOT_NAME".dae --info links


查看模型

  openrave "$MYROBOT_NAME".dae

選擇IK項(默認Transform6D )

http://openrave.org/docs/latest_stable/openravepy/ikfast/#ik-types

設置運動規劃組

export PLANNING_GROUP="panda_arm"

設置運動規劃的關節組,以上面的模型關節數據爲基礎設置

export BASE_LINK="0"
export EEF_LINK="8"

若關節數量大於6需設置一自由關節,若無則無需設置

export FREE_INDEX="1"
設置IKFAST輸出路徑
export IKFAST_OUTPUT_PATH=`pwd`/ikfast61_"$PLANNING_GROUP".cpp

生成IKFAST文件(6軸)

python `openrave-config --python-dir`/openravepy/_openravepy_/ikfast.py --robot="$MYROBOT_NAME".dae --iktype=transform6d --baselink="$BASE_LINK" --eelink="$EEF_LINK" --savefile="$IKFAST_OUTPUT_PATH"

生成IKFAST文件(7軸)

python `openrave-config --python-dir`/openravepy/_openravepy_/ikfast.py --robot="$MYROBOT_NAME".dae --iktype=transform6d --baselink="$BASE_LINK" --eelink="$EEF_LINK" --freeindex="$FREE_INDEX" --savefile="$IKFAST_OUTPUT_PATH"

備註:生成IKFAST文件時間一般較長,在半個小時左右,若生成失敗可以降低精度或者需要修改模型本身。

生成插件

export MOVEIT_IK_PLUGIN_PKG="$MYROBOT_NAME"_ikfast_"$PLANNING_GROUP"_plugin
cd ~/catkin_ws/src
catkin_create_pkg "$MOVEIT_IK_PLUGIN_PKG"
catkin build
rosrun moveit_kinematics create_ikfast_moveit_plugin.py "$MYROBOT_NAME" "$PLANNING_GROUP" "$MOVEIT_IK_PLUGIN_PKG" "$IKFAST_OUTPUT_PATH"

注意:create_ikfast_moveit_plugin.py默認該目錄下存在名字爲"$MYROBOT_NAME"_moveit_config的功能包如下,該功能包爲機器人模型通過moveit_setup_assistant配置生成的功能包。

      plan_pkg = robot_name + '_moveit_config'
      plan_pkg_dir = roslib.packages.get_pkg_dir(plan_pkg)
      print 'Loading robot from \''+plan_pkg+'\' package ... '


三、使用IKFAST插件

    cd到"$MYROBOT_NAME"_moveit_config功能包的config文件目錄下,修改該目錄下的kinematics.yaml文件或者採用下面方式找到該文件。

rosed "$MYROBOT_NAME"_moveit_config kinematics.yaml

修改內容如下

<planning_group>:
  kinematics_solver: <myrobot_name>_<planning_group>_kinematics/IKFastKinematicsPlugin
-INSTEAD OF-
  kinematics_solver: kdl_kinematics_plugin/KDLKinematicsPlugin

測試

    運行"$MYROBOT_NAME"_moveit_config功能包的demo.launch檢查是否成功。


參考

http://www.guyuehome.com/1921

http://docs.ros.org/kinetic/api/moveit_tutorials/html/doc/ikfast/ikfast_tutorial.html

https://scaron.info/teaching/installing-openrave-on-ubuntu-16.04.html

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