~欢迎关注~
微信公众号:古月居
新浪微博:古月春旭
知乎专栏:古月居
古月居联合深蓝学院推出的“古月私房课”第一弹——《ROS机械臂开发:从入门到实战》已经上线啦,欢迎各位小伙伴前来围观,以下是第七讲《MoveIt!中不得不说的“潜规则”》的内容精要。
大家好,这里是《ROS机械臂开发:从入门到实战》的第七讲——MoveIt!中不得不说的“潜规则”,我是主讲人胡春旭。
今天我们来揭秘MoveIt!使用过程中的一些潜规则,也是大家经常会有疑惑的地方,很多在MoveIt!教程中并没有说明,而是古月君在研究过程中结合API文档发现的,也给大家分享一下。
首先我们来看圆弧轨迹的规划。
很多同学会有这样一个疑问,MoveIt!可以规划笛卡尔直线运动,那能不能规划圆弧运动,甚至任意曲线轨迹的运动呢?MoveIt!中没有直接的API接口,但是下边这张图应该可以给大家灵感:通过直线逼近的方式,就可以实现啦!
按照这样的思路,我们来看MoveIt!下实现的圆弧轨迹规划例程,演示中我们可以看到机械臂的终端走出了一个完整的圆形轨迹。
该例程实现的流程:首先通过圆的轨迹方程,计算得到一系列圆上的路径点,然后使用computeCartesianPath函数完成所有路径点之间的直线轨迹规划,最后execute执行运动。
很多情况下,我们对MoveIt!规划的轨迹并不满意,那这条轨迹能不能修改呢?当然是可以的。
运行例程,我们可以看到机器人会完成两次相同的运动,但是速度有明显的差异,这就是因为我们对MoveIt!规划的轨迹做了人为的修改。
该例程实现的流程:首先使用plan正常完成规划,然后遍历规划得到的轨迹数据,里边的位置、速度、加速度、时间想怎么改就怎么改了,最后execute执行修改之后的轨迹即可。
到现在为止,例程中机械臂每次运动的速度变化都是从0到0的,在连续运动中会出现频繁的停顿,如何减少甚至去掉中间的停顿呢?古月君结合自己对API的研究,给大家介绍一种方法。
运行多轨迹连续运动的例程,机械臂会一次完成两条轨迹的运动,中间并不会出现停顿的问题。
该例程的实现相对复杂一些,用到了很多MoveIt!深层的API。主要流程如下:首先规划多条需要连续运动的轨迹,但是此时机器人并没有真实运动,所以需要注意后续轨迹规划的起点应该是前一条轨迹的终点。
然后创建一个新的轨迹对象,把以上规划好的轨迹全部push进去,再调用IPTP时间最优算法的接口,重新规划这条新轨迹的速度、加速度、时间等信息,规划完成后就可以调用execute连续运动啦。
最后一个部分我们来介绍如何更换MoveIt!中的运动学插件。
在之前的课程中,我们介绍过MoveIt!三大核心功能之一就是运动学,那什么是运动学?大家可以参考《机器人学导论》中的理论介绍,以一个两自由度的机械臂为例,已知关节角度推算终端XY坐标的过程就是正运动学,相反就是逆运动学。
MoveIt!默认使用的运动学插件是KDL,但是该算法是基于迭代的数值解,求解速度慢,失败率高,并不是开发的首选。
TRAC-IK虽然也是数值解,但是算法上做了很多优化,速度和成功率都有了很大程度的提升。
TRAC-IK的使用方法也很简单,安装后修改配置文件就可以启用了。
另外一个运动学插件是基于解析解的IKFAST,可以根据模型生成专属的运动学算法插件,求解速度快,成功率高,不过配置过程着实有点复杂,有兴趣的小伙伴可以参考古月君的配置:
以上就是本讲的内容精要,详细讲解过程和仿真/真机演示过程请见具体课程。
更多精彩,欢迎大家关注“古月居”。
更多内容欢迎关注:
微信公众号:古月居 (guyue_home)
新浪微博:古月春旭
知乎专栏:古月居