在用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 <myrobot_name>.urdf <myrobot_name>.dae
把<myrobot_name>换成自己的你机器人名称,下句也是一样
rosrun moveit_kinematics round_collada_numbers.py <myrobot_name>.dae <myrobot_name>.rounded.dae 5
四、生成IK解决方案(具体参数一定要参考篇首的官网与翻译介绍)
python `openrave-config --python-dir`/openravepy/_openravepy_/ikfast.py --robot=<myrobot_name>.dae --iktype=transform6d --baselink=1 --eelink=8 --savefile=<ikfast_output_path>
这里的myrobot_name是rounded后的文件:myrobot_name.rounded.dae
--baselink=1 --eelink=8中的1和8根据自己的机械臂参考官网来定义
<ikfast_output_path>是生成一个cpp文件的文件名,我的是savefile=./ikfast06_arm.cpp
五、创建插件
1、创建包含IK插件的包,包名自己定义一个
cd ~/catkin_ws/src
catkin_create_pkg <moveit_ik_plugin_pkg>
2、编译
cd ~/catkin_ws
catkin_make
3、创建插件源码 ,<myrobot_name>是urdf中的机械臂的名字, <planning_group_name> 配置moveit时机械臂的规划组名,我的是arm,<moveit_ik_plugin_pkg>上句生成的包, <ikfast_output_path>,给新生成的cpp文件定义名字与路径,如 /home/xs/ikfast/ikfast61_arm.cpp
rosrun moveit_kinematics create_ikfast_moveit_plugin.py <myrobot_name> <planning_group_name> <moveit_ik_plugin_pkg> <ikfast_output_path>
这步完成后,在src/目录会生成新的源码<myrobot_name>_<planning_group_name>_ikfast_moveit_plugin.cpp文件
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<myrobot_name>_<planning_group_name>_moveit_ikfast_moveit_plugin.so,让MoveIt使用,在catkin_ws中build中可以看见。
5、使用
你可以在当初配置机器人moveit文件时生成的kinematics.yaml文件中,通过改kinematics_solver参数,在KDL和ikfast求解器之间切换
<planning_group_name>:
kinematics_solver: <myrobot_name>_<planning_group_name>_kinematics/IKFastKinematicsPlugin
-INSTEAD OF-
kinematics_solver: kdl_kinematics_plugin/KDLKinematicsPlugin
6、打开逆运动学求解文件测试