Figure. Several possible path shapes for a single joint

五次多项式曲线(quintic polynomial)

$$\theta(t)=a_0+a_1t+a_2t^2+a_3t^3+a_4t^4+a_5t^5$$

  考虑边界条件:

$$\begin{align*} 
\theta_0&=a_0\\
\theta_f&=a_0+a_1t+a_2{t_f}^2+a_3{t_f}^3+a_4{t_f}^4+a_5{t_f}^5\\
\dot{\theta_0}&=a_1\\
\dot{\theta_f}&=a_1+2a_2t_f+3a_3{t_f}^2+4a_4{t_f}^3+5a_5{t_f}^4\\
\ddot{\theta_0}&=2a_2\\
\ddot{\theta_f}&=2a_2+6a_3{t_f}+12a_4{t_f}^2+20a_5{t_f}^3\\
\end{align*}$$

  这6组约束构成了一个6个未知数的线性方程组,可以求出系数为:

$$\begin{align*} 
a_0&=\theta_0\\
a_1&=\dot{\theta_0}\\
a_2&=\frac{\ddot{\theta_0}}{2}\\
a_3&=\frac{20\theta_f-20\theta_0-(8\dot{\theta_f}+12\dot{\theta_0})t_f-(3\ddot{\theta_0}-\ddot{\theta_f}){t_f}^2}{2{t_f}^3}\\
a_4&=\frac{30\theta_0-30\theta_f+(14\dot{\theta_f}+16\dot{\theta_0})t_f+(3\ddot{\theta_0}-2\ddot{\theta_f}){t_f}^2}{2{t_f}^4}\\
a_5&=\frac{12\theta_f-12\theta_0-(6\dot{\theta_f}+6\dot{\theta_0})t_f-(\ddot{\theta_0}-\ddot{\theta_f}){t_f}^2}{2{t_f}^5}
\end{align*}$$

  在MATLAB机器人工具箱中函数tpoly可以用于计算并生成机器人单轴的五次多项式轨迹曲线。当$t \in [0,T]$时,五次多项式曲线以及其一阶导数、二阶导数都是连续光滑的多项式曲线:

$$\begin{align*} 
S(t)&=At^5+Bt^4+Ct^3+Dt^2+Et+F\\
\dot{S}(t)&=5At^4+4Bt^3+3Ct^2+2Dt+E\\
\ddot{S}(t)&=20At^3+12Bt^2+6Ct+2D
\end{align*}$$

  根据约束条件

  可以写出矩阵方程如下:

  利用MATLAB提供的左除(反除)操作符,可以方便的求解线性方程组:Ax=b → x=A\b(表示矩阵A的逆乘以b)

   tpoly.m主要内容如下:

%TPOLY Generate scalar polynomial trajectory% [S,SD,SDD] = TPOLY(S0, SF, T, SD0, SDF) as above but specifies initial
% and final joint velocity for the trajectory and time vector T.function [s,sd,sdd] = tpoly(q0, qf, t, qd0, qdf)if isscalar(t)t = (0:t-1)';elset = t(:);endif nargin < 4qd0 = 0;endif nargin < 5qdf = 0;endtf = max(t);% solve for the polynomial coefficients using least squaresX = [0           0           0         0       0   1tf^5        tf^4        tf^3      tf^2    tf  10           0           0         0       1   05*tf^4      4*tf^3      3*tf^2    2*tf    1   00           0           0         2       0   020*tf^3     12*tf^2     6*tf      2       0   0];coeffs = (X \ [q0 qf qd0 qdf 0 0]')';% coefficients of derivatives coeffs_d = coeffs(1:5) .* (5:-1:1);coeffs_dd = coeffs_d(1:4) .* (4:-1:1);% evaluate the polynomialsp = polyval(coeffs, t);pd = polyval(coeffs_d, t);pdd = polyval(coeffs_dd, t);

  在MATLAB中输入下面命令生成从位置0运动到1的五次多项式曲线(时间步数为50步):

>>  [s, sd, sdd] = tpoly(0, 1, 50);

  其位置、速度、加速度曲线如下图所示:

  虽然这三条曲线都是连续且光滑的,但却存在一个很实际的问题。从速图曲线中可以看出在t=25时速度达到最大值,没有匀速段,其它时刻速度都小于最大值。平均速度除以最大速度的值为:mean(sd) / max(sd) = 0.5231,即平均速度只有最大速度的一半左右,速度利用率较低。对于大多数实际伺服系统,电机的最大速度一般是固定的,因此希望速度曲线在最大速度的时间尽可能长。

梯形速度曲线 / Linear segment with parabolic blend (LSPB) trajectory

  高次多项式轨迹曲线的计算量比较大,我们也可以考虑用直线段来构造简单的轨迹曲线,但是在不同直线段的交接处会发生速度跳变的情况(位移曲线不光滑),如果用抛物线(parabolic blend)进行拼接就可以得到光滑的轨迹。如下图所示,单轴从$t_0$开始匀加速运动(位移曲线为抛物线);$t_b$时刻达到最大速度,进行匀速直线运动(位移曲线为直线段);从$t_f-t_b$时刻开始进行匀减速运动,$t_f$时刻减速为零并到达目标位置。曲线关于时间中点$t_h$对称,由于这种轨迹的速度曲线是梯形的,因此也称为梯形速度(trapezoidal velocity trajectory)曲线,在电机驱动器中被广泛使用。

Figure. Linear segment with parabolic blends

  MATLAB机器人工具箱中函数lspb可以用于计算并生成梯形速度曲线,下面的命令生成从位置0运动到1的梯形速度轨迹曲线,时间步数为50步,最大速度为默认值:

>>   [s, sd, sdd] = lspb(0, 1, 50);

  另外也可以指定最大速度(In fact the velocity cannot be chosen arbitrarily, too high or toolow a value for the maximum velocity will result in an infeasible trajectory ):

>> s = lspb(0, 1, 50, 0.025);
>> s = lspb(0, 1, 50, 0.035);

  下图a是默认最大速度的曲线,图b是指定不同速度的对比。

  lspb.m的主要内容如下:

%LSPB  Linear segment with parabolic blend
%
% [S,SD,SDD] = LSPB(S0, SF, M) is a scalar trajectory (Mx1) that varies
% smoothly from S0 to SF in M steps using a constant velocity segment and
% parabolic blends (a trapezoidal velocity profile).  Velocity and
% acceleration can be optionally returned as SD (Mx1) and SDD (Mx1)
% respectively.
%
% [S,SD,SDD] = LSPB(S0, SF, M, V) as above but specifies the velocity of
% the linear segment which is normally computed automatically.function [s,sd,sdd] = lspb(q0, q1, t, V)if isscalar(t)t = (0:t-1)';elset = t(:);endtf = max(t(:));if nargin < 4
        % if velocity not specified, compute itV = (q1-q0)/tf * 1.5;elseV = abs(V) * sign(q1-q0); % 判断实际速度符号if abs(V) < abs(q1-q0)/tferror('V too small');elseif abs(V) > 2*abs(q1-q0)/tferror('V too big');endendif q0 == q1      % 目标位置和起始位置相同            s = ones(size(t)) * q0;sd = zeros(size(t));sdd = zeros(size(t));returnendtb = (q0 - q1 + V*tf)/V;  % 计算匀加减速段时间a = V/tb;s = zeros(length(t), 1);sd = s;sdd = s;for i = 1:length(t)tt = t(i);if tt <= tb           % 匀加速段   % initial blends(i) = q0 + a/2*tt^2;sd(i) = a*tt;sdd(i) = a;elseif tt <= (tf-tb)  % 匀速段% linear motions(i) = (q1+q0-V*tf)/2 + V*tt;sd(i) = V;sdd(i) = 0else                  % 匀减速段% final blends(i) = q1 - a/2*tf^2 + a*tf*tt - a/2*tt^2;sd(i) = a*tf - a*tt;sdd(i) = -a;endend

多自由度轨迹规划

  机器人工具箱中的函数mtraj可以在内部调用单自由度轨迹生成函数,来生成多个轴的运动轨迹。mtraj第一个参数为单自由度轨迹生成函数的句柄,q0和qf分别为起始和目标点的坐标(是一个多维向量)。

function [S,Sd,Sdd] = mtraj(tfunc, q0, qf, M)if ~isa(tfunc, 'function_handle')error('first argument must be a function handle');endM0 = M;if ~isscalar(M)M = length(M);endif numcols(q0) ~= numcols(qf)error('must be same number of columns in q0 and qf')ends = zeros(M, numcols(q0));sd = zeros(M, numcols(q0));sdd = zeros(M, numcols(q0));for i=1:numcols(q0)% for each axis[s(:,i),sd(:,i),sdd(:,i)] = tfunc(q0(i), qf(i), M);end

  mtraj可以调用tpoly或lspb,在50步内生成从(0, 2)运动到(1, -1)的轨迹。返回值x是一个50×2的矩阵,每一列代表一个轴的数据,每一行代表一个时间点。

>> x = mtraj(@tpoly, [0 2], [1 -1], 50);
>> x = mtraj(@lspb, [0 2], [1 -1], 50);>> plot(x) 

  在指定的时间内x1从0运动到1,x2从2运动到-1:

参考:

V-rep学习笔记:Reflexxes Motion Library 4

多轴插补为什么普遍使用梯形速度曲线?

工业机器人运动轨迹规划方法简述

Introduction to Robotics - Mechanics and Control. Chapter 7 Trajectory generation

Robotics, vision and control fundamental algorithms in MATLAB Chapter 3 Time and Motion

转载于:https://www.cnblogs.com/21207-iHome/p/7843517.html

机器人中的轨迹规划(Trajectory Planning )相关推荐

  1. 轨迹规划 trajectory planning

    机器人的运动规划分为 路径规划 轨迹规划 路径规划的目标是使路径与障碍物的距离尽量远同时路径的长度尽量短: 轨迹规划的目的主要是机器人关节空间移动中使得机器人的运行时间尽可能短,或者能量尽可能小. 轨 ...

  2. 斯坦福大学《机器人学》-轨迹规划Trajectory planning

    从机器人的运动学和动力学可以看出,只要知道机器人的关节变量就能根据其运动方程来确定其位置,或者已知机器人的期望位姿就能确定相应的关节变量.速度和加速度. 因此,机器人轨迹规划的目的,是生成运动控制系统 ...

  3. 机器人关节空间轨迹规划--S型速度规划

    关节空间 VS 操作空间 关节空间与操作空间轨迹规划流程图如下(上标$i$和$f$分别代表起始位置initial和目标位置final): 在关节空间内进行轨迹规划有如下优点: 在线运算量更小,即无需进 ...

  4. 2021-11-12 轨迹规划了解

    1. 机器人中的轨迹规划 曲线柔顺: 五次多项式曲线 起终点位置.速度.加速度约束六个方程 虽然这三条曲线都是连续且光滑的,但却存在一个很实际的问题.从速图曲线中可以看出在t=25时速度达到最大值,没 ...

  5. 动态场景下的轨迹规划(轨迹生成/代码实现/未来挑战)!

    作者 | Young 编辑 | 半杯茶的小酒杯 点击下方卡片,关注"自动驾驶之心"公众号 ADAS巨卷干货,即可获取 点击进入→自动驾驶之心[轨迹预测]技术交流群 后台回复[轨迹预 ...

  6. 图解自动驾驶中的运动规划(Motion Planning),附几十种规划算法

    目录 1 自动驾驶驶向何处? 2 什么是运动规划? 3 运动规划实战教程 4 加入我们 5 订阅需知 1 自动驾驶驶向何处? 自动驾驶,又称无人驾驶,是依靠计算机与人工智能技术在没有人为操纵的情况下, ...

  7. 六轴机器人轨迹规划之五次多项式插值

    1.轨迹规划的定义 轨迹规划(trajectory planning)是运动规划(motion planning)研究的主要内容.运动规划指的是运动插补,在起始点和终止点之间插入中间点序列,实现沿着轨 ...

  8. 机器人轨迹规划(熊友伦)

    机器人轨迹规划(熊友伦) http://blog.csdn.net/jyc1228/article/details/3991881 http://blog.csdn.net/wx545644217/a ...

  9. 多自由度机械臂运动学正-逆解|空间轨迹规划控制|MATLAB仿真+实际机器调试

    多自由度机械臂运动学正-逆解|空间轨迹规划控制|MATLAB仿真+实际机器调试 ) DH建模法可以参考这个博客: 还有<机器人>这本书,一定要理论实践相结合,理解后可以用几何法建模也可以用 ...

最新文章

  1. MS SQL入门基础:启动与关闭服务器
  2. python公历转农历_Python如何实现阳历转阴历的方法分享
  3. [网络安全自学篇] 四十四.Windows远程桌面服务缺陷(CVE-2019-0708)复现及防御详解
  4. php 递归合并类 call,PHP多个数组合并(递归的进行)
  5. Python 两大环境管理神器:pyenv 和 virtualenv
  6. sysbench相关
  7. Linux内核协议栈-一个socket的调用过程,从用户态接口到底层硬件
  8. java四舍五入自己写_java提高篇-----详解java的四舍五入与保留位
  9. 分布式缓存的面试题2
  10. IntelliJ IDEA 中 右键新建时,选项没有Java class
  11. 虚拟服务器搭建棋牌,棋牌开源游戏服务器框架
  12. 华为钱包扫码云闪付_Huawei Pay开通与使用银联云闪付教程
  13. mysql or 索引失效_MySQL索引失效的几种情况详析
  14. 陶哲轩(Terence Tao)对从事数学职业的建议
  15. Daily English Dictation Number Three
  16. 不积跬步无以至千里 不积小流无以成江海
  17. Proxmox VE
  18. 【Rust日报】2022-07-20 极简主义 Poem 指南
  19. Matlab基于动态粒子群算法的动态环境寻优算法 基本粒子群算法首先是在解空间中随机初始化所有粒子
  20. 电脑检查内存条型号的方法

热门文章

  1. hdu4956 Poor Hanamichi
  2. UILabel 宽高自适应
  3. SD卡启动盘制作软件
  4. C# WCF WinCE 解决方案 错误提示之:已超过传入消息(65536)的最大消息大小配额。若要增加配额,请使用相应绑定元素上的 MaxReceivedMessageSize 属性...
  5. python3字符串常用操作
  6. 绝对定位relative、相对定位absolute(脱离文档流)
  7. 口腔取模过程及注意事项_康贝齿科首家引进LAUNCA数字化口腔扫描,走进口腔数字化诊疗时代!...
  8. android 线程 界面,android开发教程之子线程中更新界面
  9. 前后端分离,如何解决跨域问题
  10. (多表)关联update 超过两个字段以上