baxter使用moveit+kdl+rvizplugin进行拖拽规划时出现completed listing of explantions for invalid states规划错误解决方法

实际上这几天一直在学习baxter的基本操作方法,发现baxter真的是一款很好的机器人,官方给提前配置好了很多东西,使用起来很方便。虽然如此,但是在对其进行ikfast插件配置的过程中仍然艰辛满满,其实还是手生。

这几天的摸索流程是这样的

  1. 按照官方教程http://sdk.rethinkrobotics.com/wiki/MoveIt_Tutorial指导的,对baxter直接进行了ikfast的配置,实际上主要是修改了/home/zzurobotics/baxter_ws/src/moveit_robots/baxter/baxter_moveit_config/config路径下的kinematics.yaml文件,通过屏蔽和选择不同的解算器来达到了选择ikfast解算器的目的,当时以为挺简单的,实际上官方已经把几乎所有的文件都配置好了,你直接用就成,但是我一直不知道到底怎样才算是确定当前改变后是用了ikfast的解算器,这里说明一下我看了YouTube上的相关视频,发现,当yaml文件等一些列设置好之后,moveit rviz插件面板中不会有任何提示,还是会显示ompl库,在面板中还是显示原来的算法,但是实际上已经变成了ikfast。
  2. 查找过程中发现http://sdk.rethinkrobotics.com/wiki/Custom_IKFast_for_your_Baxter可根据自己的baxter定制一个ikfast插件,我就又对着教程搞了一遍,这个教程很好,在做自己的ikfast插件的时候也可以参考这个教程进行配置。但是这个过程确实很麻烦,计算ikfast_solver的时候很慢,一条胳膊的计算时间大约2个小时左右,很麻烦。配置来配置去还总是报错,这里再提一下,自动生成的baxter_right_arm_ikfast_solver.cpp、baxter_left_arm_ikfast_solver.cpp这两个文件里的#include“ikfast.h”会报错找不到,需要把具体路径填进去,而且,里面还需要手动为两个变量添加空间前缀std::才能够编译成功,否侧会报错,这个问题按下不表。
  3. 最后折腾来折腾去,想着算了,先用默认的kdl吧,然后就改回来原来的配置想着先用着,重头戏来了,结果拖拽末端执行器总是规划失败提示错误completed listing of explantions for invalid states。查来查去,终于解决了,记录一下方法。

 

这个问题出现的原因是moveit在执行规划的时候会考虑baxter的碰撞问题,包括自碰撞和障碍物碰撞,由于一些参数的配置问题导致moveit认为规划的结果总是会导致自碰撞。原因是在考虑碰撞的时候会考虑模型建立不准确啥的原因,会在模型周围多出一定距离进行碰撞检测。而我遇到的问题原因猜测是因为两只手都安装了电动夹具,夹具的两个夹柱可能会认为自碰撞。这个参数查了之后参考http://groups.google.com/forum/#!topic/moveit-users/tMOL-GmwCGw (可能要翻墙)说修改/home/zzurobotics/baxter_ws/src/moveit_robots/baxter/baxter_moveit_config\config路径下的ompl_planning.yaml文件

打开之后

planner_configs:
  SBLkConfigDefault:
    type: geometric::SBL
  LBKPIECEkConfigDefault:
    type: geometric::LBKPIECE
  RRTkConfigDefault:
    type: geometric::RRT
  //range:.2      //参考链接中甚至指出添加这条语句(planner_configs到left_arm之间每块都加)目的是为了产生更小的step,但是我没有添加,也能正常使用
  RRTConnectkConfigDefault:
    type: geometric::RRTConnect
  LazyRRTkConfigDefault:
    type: geometric::LazyRRT
  ESTkConfigDefault:
    type: geometric::EST
  KPIECEkConfigDefault:
    type: geometric::KPIECE
  RRTStarkConfigDefault:
    type: geometric::RRTstar
  BKPIECEkConfigDefault:
    type: geometric::BKPIECE
left_arm:
  default_planner_config: RRTConnectkConfigDefault
  planner_configs:
    - SBLkConfigDefault
    - LBKPIECEkConfigDefault
    - RRTkConfigDefault
    - RRTConnectkConfigDefault
    - ESTkConfigDefault
    - KPIECEkConfigDefault
    - BKPIECEkConfigDefault
    - RRTStarkConfigDefault
  projection_evaluator: joints(left_s0,left_s1)
  longest_valid_segment_fraction: 0.05    //这里和下面的0.05修改为0.02
right_arm:
  default_planner_config: RRTConnectkConfigDefault
  planner_configs:
    - SBLkConfigDefault
    - LBKPIECEkConfigDefault
    - RRTkConfigDefault
    - RRTConnectkConfigDefault
    - ESTkConfigDefault
    - KPIECEkConfigDefault
    - BKPIECEkConfigDefault
    - RRTStarkConfigDefault
  projection_evaluator: joints(right_s0,right_s1)
  longest_valid_segment_fraction: 0.05   //修改为0.02
both_arms:
  default_planner_config: RRTConnectkConfigDefault   //注意这个,修改的话就可以自定义默认的算法,                                                      
  planner_configs:                                   //就不用每次都手动选择修改了。
    - SBLkConfigDefault
    - LBKPIECEkConfigDefault
    - RRTkConfigDefault
    - RRTConnectkConfigDefault
    - ESTkConfigDefault
    - KPIECEkConfigDefault
    - BKPIECEkConfigDefault
    - RRTStarkConfigDefault
  projection_evaluator: joints(right_s0,right_s1)
  longest_valid_segment_fraction: 0.05  //修改为0.02
left_hand:
  default_planner_config: RRTConnectkConfigDefault
  planner_configs:
    - SBLkConfigDefault
    - LBKPIECEkConfigDefault
    - RRTkConfigDefault
    - RRTConnectkConfigDefault
    - ESTkConfigDefault
    - KPIECEkConfigDefault
    - BKPIECEkConfigDefault
    - RRTStarkConfigDefault
right_hand:
  default_planner_config: RRTConnectkConfigDefault
  planner_configs:
    - SBLkConfigDefault
    - LBKPIECEkConfigDefault
    - RRTkConfigDefault
    - RRTConnectkConfigDefault
    - ESTkConfigDefault
    - KPIECEkConfigDefault
    - BKPIECEkConfigDefault
    - RRTStarkConfigDefault

猜测是夹爪两根柱本身就很近,大约5cm也就是0.05,所有很有可能会产生误判,修改为检测范围2cm即0.02,就不会误以为碰撞了。

太晚了,准备睡觉,再说一下默认使用的RRTConnectkConfigDefault感觉很挺好用的,结算时间在0.006s之类的范围,几乎是瞬解,先用着这个。详细的以后再补充吧

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值