MoveIt轨迹规划问题
本文是求助贴,请大神帮忙,谢谢!(在古月居交流社区发帖,一周多都没人回复,请各位帮忙)
问题描述:
请看代码,pos存储三维点,posOffset存储三维点的偏差。
想通过设置一个初始点,然后根据偏差值规划一系列的点,期望机械臂末端(法兰盘中心)根据这些点运动。
目前遇到的问题:假设规划路径为A—B—C—……,A—B时,机器人会绕一整圈到达B点,并没有实现直线到达。
其实三维点描述的是S型轨迹(代码中的三维点已经被省略了),想让机械臂末端走S型曲线。
另外,四元素表示的姿态到底是怎么设置的?怎么知道它要取什么值?四元素感觉不直观。
请哪位大神帮忙解答,万分感谢!
//实现关节空间轨迹规划
#include<moveit/move_group_interface/move_group_interface.h>
#include <moveit/planning_scene_interface/planning_scene_interface.h>
#include <moveit_msgs/DisplayRobotState.h>
#include <moveit_msgs/DisplayTrajectory.h>
#include <moveit_msgs/AttachedCollisionObject.h>
#include <moveit_msgs/CollisionObject.h>
#include <vector>int main(int argc, char **argv){//初始化,其中ur_test02为节点名ros::init(argc, argv, "ur_test01");//多线程ros::AsyncSpinner spinner(1);//开启新的线程spinner.start();//初始化需要使用move group控制的机械臂中的arm groupmoveit::planning_interface::MoveGroupInterface arm("manipulator"); //允许误差arm.setGoalJointTolerance(0.001);//允许的最大速度和加速度arm.setMaxAccelerationScalingFactor(0.2);arm.setMaxVelocityScalingFactor(0.2);// 控制机械臂先回到水平位置,这个位置下载的文件中已经设置好了arm.setNamedTarget("home");arm.move();sleep(1);//关节空间std::vector<vector<double>> pos = {{ 1516.38824 24.37429249 4.945091105 },
{ 1517.288232 24.70266148 4.910326798 },
{ 1517.828202 25.1301746 4.869095553 },
{ 1518.6382 25.65316643 4.823924466 },
{ 1519.538144 26.23986586 4.779723388 },
{ 1520.43816 26.84294131 4.7401259 },
{ 1521.518101 27.43266236 4.705291704 },
{ 1522.418002 27.97653605 4.675852832 },
{ 1523.317976 28.47903696 4.648267775 },
{ 1524.038019 28.94768219 4.620115082 },
{ 1524.847979 29.38823305 4.590313158 }
};int n = pos.size();int m = pos[0].size();std::vector<vector<double>> posOffset(n-1,vector<double>(m,0));for(int i = 0; i < n-1; i++){posOffset[i][1] = pos[i+1][1] - pos[i][1];posOffset[i][2] = pos[i+1][2] - pos[i][2];posOffset[i][3] = pos[i+1][3] - pos[i][3];}geometry_msgs::Pose target_pose1;target_pose1.orientation.w = 1.0;target_pose1.position.x = 0.35;target_pose1.position.y = -0.05;target_pose1.position.z = 0.6;arm.setPoseTarget(target_pose1);for(int i = 0; i < n-1; i++){target_pose1.position.x += posOffset[i][1];target_pose1.position.y += posOffset[i][2];target_pose1.position.z += posOffset[i][3];arm.setPoseTarget(target_pose1);} arm.move();//输出确定是否运行成功moveit::planning_interface::MoveGroupInterface::Plan my_plan;bool success = (arm.plan(my_plan) == moveit::planning_interface::MoveItErrorCode::SUCCESS);ROS_INFO_NAMED("tutorial", "Visualizing plan 1 (pose goal) %s", success ? "" : "FAILED");//控制机械臂先回到初始化位置arm.setNamedTarget("home");arm.move();sleep(1);ros::shutdown();return 0;
}
MoveIt轨迹规划问题相关推荐
- 使用 MoveIt 控制自己的真实机械臂【4】——了解 MoveIt 的轨迹规划实现机制
上一节中我们提到了一个planning request adapters 的概念,在这一节中我们将对其展开详细了解. planning request adapters 是运动规划中 Motion P ...
- Moveit编程——moveit 编程技巧笔记——圆弧轨迹规划+修改轨迹
moveit 编程技巧笔记--圆弧轨迹规划+修改轨迹 1 笛卡尔空间圆弧轨迹规划 2 轨迹重定义(修改moveit生成的轨迹数据) 1 笛卡尔空间圆弧轨迹规划 之前学习过笛卡尔空间下轨迹规划API:( ...
- 机器人轨迹规划(熊友伦)
机器人轨迹规划(熊友伦) http://blog.csdn.net/jyc1228/article/details/3991881 http://blog.csdn.net/wx545644217/a ...
- 遨博协作机器人ROS开发 - 机械臂复杂轨迹规划
目录 一.简介 二.环境版本 三.学习目标 四.知识储备 五.任务实施 六.任务拓展 七.课堂小结 八.课后练习 一.简介 大家好,欢迎关注遨博学院带来的系列技术分享文章(协作机器人ROS开发),今天 ...
- (学习用1)调用用RRT算法进行笛卡尔空间轨迹规划和关节空间轨迹规划
在MoveIt中,可以通过调用computeCartesianPath()函数来使用RRT算法进行笛卡尔空间轨迹规划,可以通过调用computeJointSpacePath()函数来使用RRT算法进行 ...
- ROS进阶——笛卡尔轨迹规划descartes
一.配置 在kinetic版本无法直接通过apt-get安装descartes,因此直接下载源码到工作空间内编译使用(可去掉descartes_tests). git clone https://gi ...
- Matlab Robotic Toolbox V9.10工具箱(三):轨迹规划
利用matlab robotics 进行轨迹规划 轨迹规划有两个函数: (1).jtraj,已知初始和终止的关节角度,利用五次多项式来规划轨迹. [q,qd,qdd] = jtraj(q0, qf, ...
- github gis 路径规划_Apollo问答丨车辆定位和轨迹规划用的是语义,还是3D Position?...
自Apollo开发者社区小程序上线以来,我们每一天都会在「社区问答」板块收到许多开发者的技术提问. 每周,可爱的Apollo小姐姐都会精选出被采纳的社区问答进行整理汇总,并统一对大家进行答复. 开发者 ...
- 机器人中的轨迹规划(Trajectory Planning )
Figure. Several possible path shapes for a single joint 五次多项式曲线(quintic polynomial) $$\theta(t)=a_0+ ...
最新文章
- 数据库中的datatime的长度怎么设定_软件测试必备之数据库知识(一)
- 高性能MySQL读书笔记---查询优化
- BZOJ5467 PKUWC2018Slay the Spire(动态规划)
- 字符缓冲流特有功能复制Java文件
- javafx之TableView的FXCSS
- java后端工程师平时开发或多或少会用到eclipse,那么它有哪些快捷键呢
- 由Object.prototype.toString.call( )引发关于toString( )方法的思考
- spring事务源码解析
- java解决Exception in thread “main“ java.lang.OutOfMemoryError: GC overhead limit exceeded
- RabbitMQ和Kafka的显著差异(1)
- docker使用国内仓库
- Android okHttp网络请求之缓存控制Cache-Control
- elasticsearch索引模块缓存
- Mybatis-学习笔记(2)Mybatis配置文件
- 神思SS628(100)型第二代身份证验证阅读机具二次开发
- S3C2410,ARM920T,试题总结
- Pisces的属性配置文件加载
- websphereJDBC提供驱动程序配置问题,导致报错:Illegal attempt to enlist multiple 1PC XAResources
- emoji表情无法显示在html,微信分享页面Andriod手机emoji表情符无法显示问题?
- python中PIL的安装参考教程
热门文章
- 杰理之TIMER【篇】
- 【PTA乙级练习题】topic:1001
- centos java 乱码,linux(centos7)下程序中文输出乱码问题的解决
- UE4 通过UI蓝图来控制游戏的暂停和返回
- 莆田学院计算机系录取分数线,莆田学院2019录取分数线_高考升学网
- pHP分析网站日志,通过用数据挖掘技术来分析Web网站日志?
- Java学习第7篇_supper关键字
- 程序员们为什么不能“面朝大海,春暖花开?”
- 那些为用户保驾护航的产品
- C++训练 : 神奇的fans