ubuntu18.04下IKfast配置记录1

最近项目需要用到IKfast,在找很多教程之后仍然有许多坑,在此记录。

安装:

        使用github上的脚本安装,为使用虚拟机尝试过,失败了,在双系统上尝试成功,可能是环境配置问题,具体原因未知。

坑1:

        配置好插件之后,运行roslaunch  xx_moveit_config demo.launch之后,rviz界面出不来,显示有:undefined symbol: xxx的错误信息

        解决:使用C++filt发现这个symbol是GetFreeParameters所产生,而GetFreeParameters并为在源文件定义,需要自己去定义(可能是相关库迭代的问题,wiki上有说GetFreeParameters已经重命名为了别的函数名称),于是在ikfast_slover下定义该函数:IKFAST_API int* GetFreeParameters() { return 0; },问题得到了解决。

注:对于7轴机械臂来说,有一个FREE_INDEX,此时GetFreeParameters中是需要有返回参数的,于是这里就要加上:IKFAST_API int* GetFreeParameters() { static int freeparams[] = {0}; return freeparams; },其中freeparams[]的数值根据FREE_INDEX的数值而改变。

  坑2:

        第一个问题解决之后,运行roslaunch  xx_moveit_config demo.launch,rviz正常显示,但是没有出现可拖动的小球,报错信息显示Joint numbers of RobotModel (6) and IKFast solver (5) do not match

解决:意为模型文件机械比有6个关节,而IKfast的解决方案中的模型是5个关节,这个问题的产生可能在于生成IKfast的时候base_link 和eef_link的选取问题,我并没有重新去生存IFfast的cpp文件,而是查看xxx_ikfast_moveit_plugin.cpp,发现这行报错信息的代码在491行:

if (joint_names_.size() != num_joints_)

{

ROS_FATAL_NAMED(name_, "Joint numbers of RobotModel (%zd) and IKFast solver (%zd) do not match",

joint_names_.size(), num_joints_);

return false;

}

可以发现IKFast solver的关节数量为num_joints_,查看num_joints_,发现他是由GetNumJoints函数赋值,跳转到GetNumJoints函数,其函数定义为:

IKFAST_API int GetNumJoints() { return 5; }

我不知道这里为啥生成的是5,可能是IKfast配置中出现的问题,手动该为6,问题解决

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值