做机械臂导航时遇到的问题9:用IKFast进行运动学求解(报错的解决办法)

在用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、打开逆运动学求解文件测试



猜你喜欢

转载自blog.csdn.net/weixin_39579805/article/details/80256027