写在前面
首先要有个缓存的概念,参见知乎的这个话题,很有学习意义!
机械臂是怎么保证速度平滑且位置精确的?
https://www.zhihu.com/question/53678758?sort=created
这里的缓存实际上存的就是已经规划插补好的位置数据,缓存大小自己设定。可以将其理解为前瞻,也就是说缓存的首位置存的是机械臂正常运行时每个插补周期输出的位置数据,每输出一次,缓存中每个位置数据都会向前挪动一位;缓存的最后一个位置,存的是当前轨迹规划插补的位置数据,这样一来实际的上层轨迹规划就永远在下层插补输出的前面,机械臂就能实现连续插补,而非在中间点停顿。
停止轨迹运动的原理
理解了上面的“缓存”概念后,停止轨迹运动就可以直接在缓存中做文章。
第一步:当下发停止命令时,此时存在一个设定大小的缓存段数据。先对缓存段中的数据进行时间域上的连续模型构建,得到一个数据与时间一一对应的连续数学模型,这里可以选择多项式对模型进行构建;
第二步:根据当前速度与加速度大小,计算停止时间T。对停止时间T进行规划,采用缩放的方法,“前梳后密”,将时间密化处理,代入第一步构建好的数学模型,得到与时间一一对应的位置数据;
第三步:按设定的插补周期,输出重新规划的位置数据,直到停止结束。
效果
假设在0.05s时下发停止命令,下图中蓝色点线为规划的位置输出,红点线为下发停止命令后的实际位置输出,黄色圆圈即为缓存位置数据,大小自己设定。可以看出,该方法通过规划缓存中的位置数据,实现轨迹运动停止。
这是停止后的速度曲线,可以看出仍然有加速运动的过程,属于算法缺陷。
我经验不足,上面只是一个简单测试,希望有经验的大佬们指点一下 ,大家相互交流交流,在下感激不尽~