MoveIt!是ROS中一个重要的集成化开发平台,由一系列移动操作的功能包组成,提供运动规划、操作控制、3D感知、运动学等功能模块,是ROS社区中使用度排名前三的功能包,目前已经支持众多机器人硬件平台。
MoveIt!中的众多功能都使用插件机制集成,其中有一个重要的功能模块——运动学插件。
今天我们就来聊下MoveIt!中的运动学求解器。
一、KDL
Kinematics and Dynamics Library (KDL)是MoveIt!中的默认运动学插件,在使用MoveIt! Setup Assistant进行模型配置时,可以进行配置。
配置完成后,就可以运行demo.launch控制虚拟机械臂进行运动规划了。但是KDL有自己的优缺点:
比如一次逆解的求解时间:0.062192秒。。。
很多时候我们在做运动规划的时候,MoveIt!经常会提示规划失败、求解失败等错误,很多都是因为KDL这款运动学插件导致的,那么问题就来了——能不能更换一个运动学插件?
当然可以,以下介绍两个用的最多的运动学插件:TRAC-IK和IKFAST。
二、TRAC-IK
TRAC-IK和KDL类似,也是一种基于数值解的运动学插件,但是在算法层面上进行了很多改进,求解效率高了很多。比如在下边这张图中,左侧的红点是KDL无法求解的姿态点,但是在右侧使用TRAC-IK是可以求解的。
那么如何将KDL更换成TRAC-IK呢,方法很简单,ROS的软件源中已经集成了TRAC-IK的安装包,可以直接使用以下命令安装:
sudo apt-get install ros-kinetic-trac-ik-kinematics-plugin
然后修改机械臂MoveIt!配置功能包下的kinematics.yaml文件就可以使用啦:
arm:
kinematics_solver: trac_ik_kinematics_plugin/TRAC_IKKinematicsPlugin
kinematics_solver_attempts: 3
kinematics_solver_search_resolution: 0.005
kinematics_solver_timeout: 0.05
接下来再次运行demo.launch,默认加载的就是TRAC-IK运动学插件了,试试规划求解的效率是不是高了很多!
但是TRAC-IK也有问题,它是一种数值算法,每次求解得到的关节位置不一定相同。
三、IKFAST
IKFAST是一种基于解析算法的运动学插件,可以保证每次求解的一致性。
相比KDL和TRAC-IK,IKFAST的安装过程就比较复杂了,不过就笔者的使用经验来讲,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
-
安装sympy
pip install --upgrade --user sympy==0.7.1
-
删除mpmath
sudo apt remove python-mpmath
-
安装IKFast功能包
sudo apt-get install ros-kinetic-moveit-kinematics
-
安装OpenRave
sudo apt-get install ros-kinetic-openrave
-
创建collada文件
export MYROBOT_NAME="marm"
rosrun xacro xacro --inorder -o "$MYROBOT_NAME".urdf "$MYROBOT_NAME".xacro
rosrun collada_urdf urdf_to_collada "$MYROBOT_NAME".urdf "$MYROBOT_NAME".dae
-
创建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
-
生成六轴机器人配置
export PLANNING_GROUP="arm"
export BASE_LINK="1"
export EEF_LINK="11"
export IKFAST_OUTPUT_PATH=`pwd`/ikfast61_"$PLANNING_GROUP".cpp
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"
-
创建插件
export MOVEIT_IK_PLUGIN_PKG="$MYROBOT_NAME"_ikfast_"$PLANNING_GROUP"_plugin
cd ~/catkin_ws/src
catkin_create_pkg "$MOVEIT_IK_PLUGIN_PKG"
rosrun moveit_kinematics create_ikfast_moveit_plugin.py "$MYROBOT_NAME" "$PLANNING_GROUP" "$MOVEIT_IK_PLUGIN_PKG" "$IKFAST_OUTPUT_PATH"
-
重新编译工作空间
catkin_make
-
修改使用的插件
rosed "$MYROBOT_NAME"_moveit_config/config/kinematics.yaml
<planning_group>:
kinematics_solver: <myrobot_name>_<planning_group>_kinematics/IKFastKinematicsPlugin
-INSTEAD OF-
kinematics_solver: kdl_kinematics_plugin/KDLKinematicsPlugin
注意以上步骤中的机器人名称、运动规划组名称、坐标系序号等需要和自己所使用的机器人匹配,也可以参考官方教程配置:
http://docs.ros.org/kinetic/api/moveit_tutorials/html/doc/ikfast/ikfast_tutorial.html
现在运行demo.launch文件时,使用的运动学插件就是IKFAST了,快试一试效果是不是还不错!
全部评论(134)
6151626c0d3ef
我出现这个错误,怎么解决呢?我安装了上面那个,还是错误
古月作者
古月作者
确定
碧潭沉宝镜
薄荷新意
古月作者
60a1ccf9b733f
薄荷新意
薄荷新意
清风徐来水波不兴
同学加个好友一起学习吧
l2i67_0853
jill_zhou
古月作者
90m0u_9335
7jldq_6023
615973debee0e
python环境问题,把moveit_fk_demo.py文件的第一行#!/usr/bin/env python改成#!/usr/bin/env python2就可以了
60fa6220663ab
今天刚好遇到这个问题,我这边的原因是用python3作为解释器了,如果你用pycharm等IDE的话,留意一下解释器是不是python2的,用命令行运行的时候,用python指令,而不是python3指令。
佚名
佚名
古月作者
佚名
古月作者
佚名
古月作者
佚名
古月作者
佚名
古月作者
佚名
佚名
zl_6068
快乐小精灵
佚名
古月作者
佚名
古月作者
0aeyr_1832
rda84_5783
请问,这个要怎么修改,求指导,实在不理解。QQ:1531524127
佚名
快乐小精灵
佚名
古月作者
佚名
古月作者
佚名
古月作者
佚名
佚名
佚名
佚名
佚名
佚名
古月作者
佚名
古月作者
佚名
古月作者
佚名
佚名
古月作者
佚名
佚名
古月作者
佚名
古月作者
佚名
古月作者
佚名
古月作者
佚名
佚名
古月作者
佚名
古月作者
佚名
古月作者
佚名
古月作者
佚名
佚名
古月作者
古月作者
佚名
古月作者
佚名
古月作者
佚名
古月作者
佚名
kss74_4838
kss74_4838
佚名
古月作者
佚名
古月作者
佚名
古月作者
佚名
佚名
佚名
古月作者
佚名
佚名
佚名
古月作者
佚名
古月作者
佚名
佚名
佚名
佚名
古月作者
佚名
古月作者
佚名
古月作者
佚名
古月作者
佚名
古月作者
佚名
古月作者
佚名
古月作者
佚名
佚名
佚名
古月作者
佚名
佚名
古月作者
佚名
佚名
佚名