标签:插件 pi back CHOMP start state push home 180
解决CHOMP插件出现start state is empty,无法执行动作的问题
解决CHOMP插件出现start state is empty,无法执行动作的问题
之前把moveit运动学插件从OMPL换成了CHOMP,想着试一试轨迹能不能更优化一点,因为OMPL在OrientationConstraints和PositionConstraints存在的情况下轨迹实在是奇葩得捉鸡(CHOMP有没有更好一点,有待验证)。结果发现原来的代码在CHOMP下跑不了了。
代码如下:
std::vector<double> home;
home.push_back(16.45/180*pi);
home.push_back(3.52/180*pi);
home.push_back(110.05/180*pi);
home.push_back(107.48/180*pi);
home.push_back(70.01/180*pi);
home.push_back(-90.28/180*pi);
move_group.setJointValueTarget(home);
move_group.move();
机器人无任何反应。打开rviz终端,发现错误信息如下:
[ERROR] [1635749227.631148088]: Start state is empty
但是这个代码片在OMPL下执行得好好的啊!!!
随后,我分析原因,OMPL中的moveit是通过sudo apt安装的,而这样的二进制moveit中没有集成CHOMP,所以为了使用CHOMP,这里的moveit是从github上clone下来通过源码安装的。应该差异就在这里。
可是,找遍谷歌、StackOverflow,没找到一个像样的解答,唯一一条带有CHOMP、Start state is empty的问题下也没有我想要的回答……
最终,我想起以前见过的网上代码中好像有这样两条看起来用不上的语句:
robot_state::RobotState start_state(*move_group.getCurrentState());
move_group.setStartState(start_state);
加上这两条语句后,问题奇迹般地解决了。
相关部分的整体代码如下:
// 取消注释这两行,可以使问题得到解决
// robot_state::RobotState start_state(*move_group.getCurrentState());
// move_group.setStartState(start_state);
std::vector<double> home;
home.push_back(16.45/180*pi);
home.push_back(3.52/180*pi);
home.push_back(110.05/180*pi);
home.push_back(107.48/180*pi);
home.push_back(70.01/180*pi);
home.push_back(-90.28/180*pi);
move_group.setJointValueTarget(home);
move_group.move();
大功告成。
标签:插件,pi,back,CHOMP,start,state,push,home,180 来源: https://blog.csdn.net/weixin_41707730/article/details/121080382
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。