主要内容

kinematicTrajectory

速率驱动轨迹发生器

描述

kinematicTrajectory系统对象™使用指定的加速度和角速度生成轨迹。

从利率生成轨迹:

  1. 创建kinematicTrajectory对象并设置其属性。

  2. 使用参数调用对象,就像调用函数一样。

有关系统对象如何工作的详细信息,请参见什么是系统对象?

创建

描述

例子

轨迹= kinematicTrajectory返回一个System对象,轨迹,根据加速度和角速度生成轨迹。

例子

轨迹= kinematicTrajectory (名称,值设置每个属性的名字到指定的价值.未指定的属性有默认值。

例子:轨迹=运动学轨迹('SampleRate',200,'Position',[0,1,10])创建一个运动学轨迹系统对象,轨迹,采样率为200hz,初始位置设置为[0,1,10]。

属性

全部展开

如果属性为可调,您可以随时更改其值。

以Hz为单位的轨迹采样率,指定为正标量。

可调:是的

数据类型:|

在局部导航坐标系中的位置状态(以米为单位),指定为三元素行向量。

可调:是的

数据类型:|

局部导航坐标系中的速度状态,单位为m/s,指定为三元素行向量。

可调:是的

数据类型:|

局部导航坐标系中的方向状态,指定为标量四元数或3 × 3实矩阵。方向是从局部导航坐标系到当前主体坐标系的帧旋转。

可调:是的

数据类型:四元数||

加速度状态的源,指定为“输入”“属性”

  • “输入”——指定加速度状态作为运动学轨迹对象的输入参数

  • “属性”参数指定加速状态加速度财产

可调:没有

数据类型:字符|字符串

加速度状态,单位为m/s2,指定为三个元素的行向量。

可调:是的

依赖关系

若要启用此属性,请设置AccelerationSource“属性”

数据类型:|

角速度状态的源,指定为“输入”“属性”

  • “输入”——指定角速度状态作为运动学轨迹对象的输入参数

  • “属性”参数指定角速度状态AngularVelocity财产

可调:没有

数据类型:字符|字符串

角速度状态,单位为rad/s,指定为三元素行向量。

可调:是的

依赖关系

若要启用此属性,请设置AngularVelocitySource“属性”

数据类型:|

每个输出帧的采样数,指定为正整数。

可调:没有

依赖关系

若要启用此属性,请设置AngularVelocitySource“属性”而且AccelerationSource“属性”

数据类型:|

使用

描述

例子

位置取向速度加速度angularVelocity=轨迹(bodyAccelerationbodyAngularVelocity输出轨迹状态,并根据更新轨迹状态bodyAcceleration而且bodyAngularVelocity

此语法仅在以下情况下有效AngularVelocitySource设置为“输入”而且AccelerationSource设置为“输入”

位置取向速度加速度angularVelocity=轨迹(bodyAngularVelocity输出轨迹状态,并根据更新轨迹状态bodyAngularAcceleration

此语法仅在以下情况下有效AngularVelocitySource设置为“输入”而且AccelerationSource设置为“属性”

位置取向速度加速度angularVelocity=轨迹(bodyAcceleration输出轨迹状态,并根据更新轨迹状态bodyAcceleration

此语法仅在以下情况下有效AngularVelocitySource设置为“属性”而且AccelerationSource设置为“输入”

位置取向速度加速度angularVelocity=轨迹()输出轨迹状态,然后更新轨迹状态。

此语法仅在以下情况下有效AngularVelocitySource设置为“属性”而且AccelerationSource设置为“属性”

输入参数

全部展开

加速度:物体坐标系中的加速度,单位为米每秒的平方,用an表示N3矩阵。

N是当前帧中的样本数。

角速度:物体坐标系中以弧度/秒为单位的角速度,用N3矩阵。

N是当前帧中的样本数。

输出参数

全部展开

在本地导航坐标系中的位置(以米为单位),返回为N3矩阵。

N是当前帧中的样本数。

数据类型:|

在本地导航坐标系中的方向,返回为N-乘1四元数列向量或3乘3乘-N真正的数组。每个四元数或3乘3旋转矩阵是从局部导航坐标系到当前体坐标系的一帧旋转。

N是当前帧中的样本数。

数据类型:|

本地导航坐标系中的速度,单位为米/秒,返回为N3矩阵。

N是当前帧中的样本数。

数据类型:|

本地导航坐标系中的加速度,单位为米每秒平方,返回为anN3矩阵。

N是当前帧中的样本数。

数据类型:|

本地导航坐标系中的角速度,单位为弧度/秒,返回为N3矩阵。

N是当前帧中的样本数。

数据类型:|

对象的功能

全部展开

扰动 定义在物体上的扰动
扰乱 对物体施加扰动
一步 运行系统对象算法

例子

全部折叠

创建默认值kinematicTrajectory系统对象™,并探索输入、属性和生成的轨迹之间的关系。

轨迹=运动学轨迹
轨迹=运动学轨迹与属性:SampleRate: 100位置:[0 00]方向:[1x1四元数]速度:[0 00]加速度来源:'输入' angularvelocitsource: '输入'

默认情况下,kinematicTrajectory物体的初始位置为[0 0 0],初始速度为[0 0 0]。方向用四元数1 (1 + 0i + 0j + 0k)表示。

kinematicTrajectory对象在属性中保持可见和可写状态位置速度,取向.调用对象时,将输出状态,然后更新状态。

例如,通过指定相对于物体坐标系的加速度和角速度来调用对象。

bodyAcceleration = [5,5,0];bodyAngularVelocity = [0,0,1];[位置,方向,速度,加速度,角速度]=轨迹(bodyAcceleration,bodyAngularVelocity)
位置=1×30 0 0
取向=四元数1 + 0i + 0j + 0k
速度=1×30 0 0
加速度=1×35 5 0
angularVelocity =1×30 0 1

的位置、方向和速度输出轨迹对象对应于属性在调用对象之前报告的状态。的轨迹State在被调用后被更新,并且可以从属性中观察到:

轨迹
轨迹=运动学轨迹与属性:SampleRate: 100位置:[2.5000e-04 2.5000e-04 0]方向:[1x1四元数]速度:[0.0500 0.0500 0]加速度来源:'输入' angularvelocitsource: '输入'

加速度而且angularVelocity的输出轨迹对象对应于bodyAcceleration而且bodyAngularVelocity,除了它们在导航坐标系中返回。使用取向输出旋转加速度而且angularVelocity并验证它们近似等价于bodyAcceleration而且bodyAngularVelocity

rotatedAcceleration =旋转点(方向,加速度)
rotatedAcceleration =1×35 5 0
rotatedAngularVelocity =旋转点(方向,角速度)
rotatedAngularVelocity =1×30 0 1

kinematicTrajectory系统对象™允许您通过属性修改轨迹状态。将位置设置为[0,0,0],然后在物体坐标系中调用具有指定加速度和角速度的对象。为说明目的,克隆轨迹对象,然后修改位置财产。调用两个对象并观察它们的位置是否偏离。

轨迹克隆=克隆(轨迹);轨迹。位置= [0,0,0]; position = trajectory(bodyAcceleration,bodyAngularVelocity)
位置=1×30 0 0
clonePosition = trajectory (bodyAcceleration,bodyAngularVelocity)
clonePosition =1×3103× 0.2500 0.2500

方法创建沿局部NED坐标系北轴振荡的轨迹kinematicTrajectory系统对象™。

创建默认值kinematicTrajectory对象。默认的初始方向与本地NED坐标系统对齐。

traj =运动学轨迹
traj = kinematicTrajectory with properties: SampleRate: 100 Position: [0 00] Orientation: [1x1四元数]Velocity: [0 00] AccelerationSource: 'Input' angularvelocitsource: 'Input'

定义一个持续10秒的轨迹,包括围绕东轴(俯仰)旋转和沿着局部NED坐标系的北轴振荡。使用默认值kinematicTrajectory采样率。

fs = traj.SampleRate;持续时间= 10;numSamples = duration*fs;cyclesPerSecond = 1;samplesPerCycle = fs/cyclesPerSecond;numCycles = ceil(numSamples/samplesPerCycle);maxAccel = 20;triangle = [linspace(maxAccel,1/fs-maxAccel,samplesPerCycle/2),...linspace (-maxAccel maxAccel - (1 / fs), samplesPerCycle / 2)];振荡= repmat(triangle,numCycles,1);振荡=振荡(1:numSamples);accNED = [0 (numSamples,2),振荡];angVelNED = 0 (numSamples,3);angVelNED(:,2) = 2*pi;

绘制加速度控制信号。

timeVector = 0:1/fs:(duration-1/fs);图(1)plot(timeVector,振荡)xlabel(“时间(s)”) ylabel (“加速度(m / s) ^ 2”)标题(局域NED坐标系下的加速度

在循环中生成一个一个样本的轨迹。的kinematicTrajectory系统对象假设加速度和角速度输入在局部传感器体坐标系中。使用将加速度和角速度控制信号从NED坐标系旋转到传感器本体坐标系rotateframe取向状态。每次更新位置的三维图。添加暂停模拟实时处理。循环完成后,绘制随时间变化的位置。旋转accNED而且angVelNED控制信号到局部身体坐标系,确保运动保持沿下轴。

图(2)plotHandle = plot3(traj.Position(1),traj.Position(2),traj.Position(3),“波”);网格包含(“北”) ylabel (“东”) zlabel (“下来”)轴([-1 1 -1 1 0 1.5])保持q = ones(numSamples,1,“四元数”);ii = 1:numSamples accBody = rotateframe(traj.Orientation,accNED(ii,:));angVelBody = rotateframe(traj.Orientation,angVelNED(ii,:));(pos (ii):), q (ii),或者,ac) = traj (accBody angVelBody);集(plotHandle,“XData”pos (2, 1),“YData”pos (2, 2),“ZData”、pos(2, 3))暂停(1 / fs)结束图(3)情节(timeVector pos (: 1),“波”...timeVector, pos (:, 2),“r”。...timeVector, pos (:, 3),“g”。)包含(“时间(s)”) ylabel (“位置(m)”)标题(“NED Position Over Time”)传说(“北”“东”“下来”

将记录的方向转换为欧拉角并绘制。虽然平台的方向随着时间的推移而改变,但加速度始终沿北轴作用。

图4 eulerAngles = eulerd(q,“ZYX股票”“帧”);情节(timeVector eulerAngles (: 1),“波”...timeVector eulerAngles (:, 2),“r”。...timeVector eulerAngles (: 3)“g”。)轴([0,duration,-180,180])“偏航”“节”“滚”)包含(“时间(s)”) ylabel (的旋转(度))标题(“定位”

方法生成线圈轨迹kinematicTrajectory系统对象™。

创建一个持续1000秒的圆形轨迹,采样率为10 Hz。设置圆的半径为5000米,速度为80米/秒。将爬升速率设置为每秒100米,坡度设置为15度。指定指向运动方向的初始方向。

持续时间= 1000;%秒Fs = 10;%赫兹N = duration*fs;样本数%半径= 5000;%米速度= 80;米/秒climbRate = 50;米/秒initialYaw = 90;%度Pitch = 15;%度initPos = [radius, 0,0];initVel = [0, speed, climbRate];initOrientation =四元数([initialYaw,pitch,0],“eulerd”“zyx股票”“帧”);轨迹=运动学轨迹“SampleRate”fs,...“速度”initVel,...“位置”initPos,...“定位”, initOrientation);

在物体坐标系中指定恒定的加速度和角速度。旋转身体框架,以考虑pitch。

accBody = 0 (N,3);accBody(:,2) =速度^2/半径;accBody(:,3) = 0.2;angVelBody = 0 (N,3);angVelBody(:,3) =速度/半径;pitchRotation =四元数([0,pitch,0],“eulerd”“zyx股票”“帧”);angVelBody = rotateframe(pitchRotation,angVelBody);accBody = rotateframe(pitchRotation,accBody);

调用轨迹在物体坐标系中,用指定的加速度和角速度。画出位置,方向和速度随时间的变化。

[位置,方向,速度]=轨迹(accBody,angVelBody);eulerAngles = eulerd(方向,“ZYX股票”“帧”);速度=平方根(sum(速度。^2,2));timeVector = (0:(N-1))/fs;图(1)plot3(position(:,1),position(:,2),position(:,3))“北(m)”) ylabel (“东(m)”) zlabel (“下来(m)”)标题(“位置”网格)

图中包含一个轴对象。标题为Position的axes对象包含一个类型为line的对象。

图(2)情节(timeVector eulerAngles (: 1),...timeVector eulerAngles (:, 2),...timeVector,eulerAngles(:,3))坐标轴([0,duration,-180,180])偏航(向下旋转)“Pitch(围绕东方旋转)”“Roll(向北旋转)”)包含(“时间(s)”) ylabel (的旋转(度))标题(“定位”

图中包含一个轴对象。标题为Orientation的axis对象包含3个类型为line的对象。这些物体代表偏航(向下旋转),俯仰(向东旋转),滚转(向北旋转)。

图(3)plot(timeVector,speed) xlabel(“时间(s)”) ylabel (“速度(米/秒)”)标题(“速度”

图中包含一个轴对象。标题为Speed的axes对象包含一个line类型的对象。

定义一个恒定的角速度和恒定的加速度来描述一个螺旋的圆形轨迹。

Fs = 100;R = 10;速度= 2.5;initialYaw = 90;initPos = [r 0 0];initVel = [0 speed 0];initOrient =四元数([initialYaw 0 0],“eulerd”“ZYX股票”“帧”);accBody = [0 speed^2/r 0.01];angVelBody = [0 0 speed/r];

创建一个运动学轨迹对象。

轨迹(“SampleRate”Fs,...“位置”initPos,...“速度”initVel,...“定位”initOrient,...“AccelerationSource”“属性”...“加速”accBody,...“AngularVelocitySource”“属性”...“AngularVelocity”, angVelBody);

在循环中调用运动学轨迹对象并记录位置输出。画出随时间变化的位置。

N = 10000;pos = 0 (N, 3);i = 1:N pos(i,:) = traj();结束Plot3 (pos(:,1), pos(:,2), pos(:,3))“位置”)包含(“X (m)”) ylabel (“Y (m)”) zlabel (“Z (m)”

图中包含一个轴对象。标题为Position的axes对象包含一个类型为line的对象。

扩展功能

版本历史

R2019b引入

另请参阅