kinematicTrajectory

Rate-driven轨迹发生器

描述

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

从费率生成轨迹:

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

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

有关系统对象如何工作的更多信息,请参见什么是系统对象?(MATLAB)。

创建

描述

例子

轨迹= kinematicTrajectory返回一个系统对象,轨迹,其基于加速度和角速度的轨迹。

例子

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

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

属性

展开全部

如果属性可调,您可以随时更改它的值。

轨迹的采样率(Hz),为正的标量。

可调:

数据类型:|

在本地导航位置状态坐标系中米,指定为三元件行向量。

可调:

数据类型:|

速度状态在局部导航坐标系中以m/s表示,指定为三元素行向量。

可调:

数据类型:|

在局部导航坐标系中的定位状态,指定为标量四元数或3×3实矩阵。方向是从本地导航坐标系统到当前身体框架的框架旋转。

可调:

数据类型:四元数||

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

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

  • '属性'- 通过设置指定加速状态加速度财产

可调:没有

数据类型:烧焦|

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

可调:

依赖

要启用此属性,请设置AccelerationSource'属性'

数据类型:|

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

  • “输入”- 指定角速度状态作为输入参数提供给运动轨迹对象

  • '属性'——通过设置AngularVelocity财产

可调:没有

数据类型:烧焦|

以rad/s表示的角速度状态,用三元素行向量表示。

可调:

依赖

要启用此属性,请设置AngularVelocitySource'属性'

数据类型:|

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

可调:没有

依赖

要启用此属性,请设置AngularVelocitySource'属性'AccelerationSource'属性'

数据类型:|

使用

描述

例子

(位置,取向,速度,加速度,角速度)=轨迹(bodyAcceleration,bodyAngularVelocity)输出轨迹状态,然后更新基于轨迹状态bodyAccelerationbodyAngularVelocity

这种语法只有在以下情况下才有效AngularVelocitySource被设置为“输入”AccelerationSource被设置为“输入”

(位置,取向,速度,加速度,角速度)=轨迹(bodyAngularVelocity)输出轨迹状态,然后更新基于轨迹状态bodyAngularAcceleration

这种语法只有在以下情况下才有效AngularVelocitySource被设置为“输入”AccelerationSource被设置为'属性'

(位置,取向,速度,加速度,角速度)=轨迹(bodyAcceleration)输出轨迹状态,然后更新基于轨迹状态bodyAcceleration

这种语法只有在以下情况下才有效AngularVelocitySource被设置为'属性'AccelerationSource被设置为“输入”

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

这种语法只有在以下情况下才有效AngularVelocitySource被设置为'属性'AccelerationSource被设置为'属性'

输入参数

展开全部

物体坐标系中的加速度,单位是米/秒方,用an表示N-by-3矩阵。

N是样品的在当前帧的数目。

在本体角速度坐标系统以每秒弧度,指定为N-by-3矩阵。

N是样品的在当前帧的数目。

输出参数

展开全部

在本地导航坐标系统中的位置,以米为单位返回N-by-3矩阵。

N是样品的在当前帧的数目。

数据类型:|

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

N是样品的在当前帧的数目。

数据类型:|

速度在本地导航坐标系中米每秒,返回一个N-by-3矩阵。

N是样品的在当前帧的数目。

数据类型:|

在本地导航坐标系统中的加速度单位是米/秒的平方,返回为N-by-3矩阵。

N是样品的在当前帧的数目。

数据类型:|

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

N是样品的在当前帧的数目。

数据类型:|

对象的功能

运行系统对象算法

例子

全部折叠

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

轨迹= kinematicTrajectory
轨迹= kinematicTrajectory与属性:采样率:100的位置:[0 0 0]定位:[1×1四元数]速度:[0 0 0] AccelerationSource: '输入' AngularVelocitySource: '输入'

默认情况下,kinematicTrajectory对象具有的初始位置[0 0 0],[0 0 0]的初始速度。取向由四元一(1 + 0I + 0j的+ 0K)中所述。

kinematicTrajectory对象在属性中维护可见和可写的状态位置,速度,取向。当你调用该对象的状态输出,然后更新。

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

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

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

轨迹
位置:[1×1四元数]方位:[1×1四元数]速度:[0.0500 0.0500 0]加速度来源:'输入'角度速度来源:'输入'

加速度角速度的输出轨迹对象对应于bodyAccelerationbodyAngularVelocity,但它们是在导航坐标系统中返回的。使用取向输出旋转加速度角速度到主体坐标系和验证它们大致相当于bodyAccelerationbodyAngularVelocity

rotatedAcceleration = rotatepoint(定位、加速度)
rotatedAcceleration =1×35 5 0
angularVelocity rotatedAngularVelocity = rotatepoint(方向)
rotatedAngularVelocity =1×30 0 1

kinematicTrajectory系统对象™使您可以通过属性修改轨迹状态。设定的位置为[0,0,0],然后调用与体内的特定的加速度和角速度的物体坐标系。为了便于说明,克隆轨迹对象之前修改位置财产。调用两个对象,观察它们的位置是否发散。

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

此示例演示如何使用。创建一个沿着局部NED坐标系的北轴振荡的轨迹kinematicTrajectory系统对象™。

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

traj = kinematicTrajectory
TRAJ = kinematicTrajectory与属性:采样率:100的位置:[0 0 0]定位:[1x1的四元数]速度:[0 0 0] AccelerationSource: '输入' AngularVelocitySource: '输入'

定义一个持续10秒的轨迹,包括绕东轴旋转(俯仰)和沿当地NED坐标系的北轴摆动。使用默认的kinematicTrajectory采样率。

fs = traj.SampleRate;时间= 10;numSamples = * fs持续时间;cyclesPerSecond = 1;samplesPerCycle = fs / cyclesPerSecond;numCycles =装天花板(numSamples / samplesPerCycle);maxAccel = 20;三角= [linspace (1 / fs-maxAccel maxAccel, samplesPerCycle / 2),...linspace(-maxAccel,maxAccel-(1 / FS),samplesPerCycle / 2)]';振荡= repmat(三角形,numCycles,1);振荡=振荡(1:NUMSAMPLES);accNED = [零(NUMSAMPLES,2),振荡];angVelNED =零(NUMSAMPLES,3);angVelNED(:,2)= 2 * PI;

绘制加速度控制信号。

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

在一个循环中逐样本生成轨迹。的kinematicTrajectory系统对象假设加速度和角速度输入在局部传感器体坐标系中。将加速度和角速度控制信号从NED坐标系旋转到传感器体坐标系rotateframe取向州。更新各时刻的位置的3-d情节。加暂停为了模拟实时处理。一旦循环完成,绘制随时间变化的位置。旋转accNEDangVelNED控制信号到当地的身体坐标系统,确保运动保持沿下轴。

图(2)plotHandle = plot3(traj.Position(1),traj.Position(2),traj.Position(3),“波”);格xlabel(“北”)ylabel (“东”)zlabel (“下来”)轴([-1 -1 1 0 1.5])保持q = 1 (numSamples 1“四元数”);= 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位置随时间变化")图例(“北”,“东”,“下来”)

记录的方向转换为欧拉角和情节。虽然该平台的方向变化随着时间的推移,加速度始终沿着北轴作用。

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

此示例演示如何使用kinematicTrajectory系统对象™。

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

时间= 1000;%秒fs = 10;%赫兹N = * fs持续时间;样品的%数半径= 5000;%米速度= 80;米秒climbRate = 50;米秒initialYaw = 90;%度节距= 15;%度initPos = [半径,0,0];initVel = [0,速度,climbRate];initOrientation =四元数([initialYaw,俯仰,0],“eulerd”,“zyx股票”,“帧”);轨迹= kinematicTrajectory('采样率'fs,...“速度”initVel,...“位置”initPos,...“定位”,initOrientation);

在物体坐标系中指定恒定的加速度和角速度。旋转车身框架,以适应俯仰。

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

调用轨迹在物体坐标系中具有指定的加速度和角速度。绘制位置、方向和速度随时间的变化。

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

图(2)情节(timeVector eulerAngles (: 1),...timeVector,为:eulerAngles(:,2),...timeVector eulerAngles(: 3)轴([0,持续时间,-180180])传奇(“偏航(左右旋转下)”,“俯仰(向东旋转)”,“滚动(绕着北)”)包含(“时间(s)”)ylabel (“旋转(度)”)标题(“定位”)

图(3)情节(timeVector、速度)包含(“时间(s)”)ylabel (“速度(米/秒)”)标题(“速度”)

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

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

创建一个运动轨迹对象。

traj = kinematicTrajectory ('采样率'Fs,...“位置”initPos,...“速度”initVel,...“定位”initOrient,...“AccelerationSource”,'属性',...“加速”,accBody,...'AngularVelocitySource','属性',...'角速度',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)”)

扩展功能

另请参阅

介绍了R2018b