在用moveit进行机械臂的运动学求解时,我们一般选择的是KDL求解器,但KDL求解器求解运动学问题时会有很多缺点,如求解速度慢、精确度低等。今天我们选择用IKFast求解器来代替KDL,提高求解速度。
看考http://docs.ros.org/kinetic/api/moveit_tutorials/html/doc/ikfast_tutorial.html
翻译https://www.ncnynl.com/archives/201610/1046.html
一、MoveIt! IKFast 安装
sudo apt-get install ros-indigo-moveit-ikfast
二、OpenRAVE 安装
sudo apt-get install ros-indigo-openrave
三、创建Collada文件
rosrun collada_urdf urdf_to_collada .urdf .dae
把
rosrun moveit_kinematics round_collada_numbers.py .dae .rounded.dae 5
四、生成IK解决方案(具体参数一定要参考篇首的官网与翻译介绍)
python `openrave-config --python-dir`/openravepy/_openravepy_/ikfast.py --robot=.dae --iktype=transform6d --baselink=1 --eelink=8 --savefile=
这里的myrobot_name是rounded后的文件:myrobot_name.rounded.dae
--baselink=1 --eelink=8中的1和8根据自己的机械臂参考官网来定义
五、创建插件
1、创建包含IK插件的包,包名自己定义一个
cd ~/catkin_ws/src
catkin_create_pkg
2、编译
cd ~/catkin_ws
catkin_make
3、创建插件源码 ,
rosrun moveit_kinematics create_ikfast_moveit_plugin.py
这步完成后,在src/目录会生成新的源码
4、再次编译,生成插件
cd ~/catkin_ws
catkin_make
此时会报错,解决方法如下
六、报错的解决办法
1、在创建的ik插件的包内的src中的robot6dof_with_eye_arm_ikfast_solver.cpp文件中,搜索isinf,在前面加上std::。
2、在创建的ik插件的包内的src中的robot6dof_with_eye_arm_ikfast_moveit_plugin.cpp文件中,查找lookupparam,将string中的robot名称直接赋值。
3、在创建的ik插件的包内的src中的robot6dof_with_eye_arm_ikfast_moveit_plugin.cpp文件中,将robot_model 的urdf文件直接赋值
4、再次编译,生成插件
cd ~/catkin_ws
catkin_make
这会生成新插件库lib
5、使用
你可以在当初配置机器人moveit文件时生成的kinematics.yaml文件中,通过改kinematics_solver参数,在KDL和ikfast求解器之间切换
:
kinematics_solver: __kinematics/IKFastKinematicsPlugin
-INSTEAD OF-
kinematics_solver: kdl_kinematics_plugin/KDLKinematicsPlugin
6、打开逆运动学求解文件测试