kinematicTrajectory

率驱动的轨道产生

描述

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

从费率生成轨迹:

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

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

要了解更多有关系统对象的方式工作,请参阅什么是系统对象?(MATLAB)。

创建

描述

弹道= kinematicTrajectory返回一个系统对象,弹道,这就产生了一个基于加速度和角速度的轨迹。

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

例子:轨迹= kinematicTrajectory( '采样率',200, '位置',[0,1,10])创建一个运动轨迹系统对象,弹道与200Hz的采样率和初始位置设定为[0,1,10]。

属性

全部展开

如果一个属性是可调,你可以在任何时候改变它的值。

在赫兹轨迹的采样率,指定为正标量。

可调:是的

数据类型:|

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

可调:是的

数据类型:|

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

可调:是的

数据类型:|

取向状态在本地导航坐标系,指定为一个标量或四元数3乘3实矩阵。方向是从本地导航帧的旋转坐标系的当前车体框架。

可调:是的

数据类型:四元||

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

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

  • “属性”——通过设置加速度属性

可调:没有

数据类型:字符|字符串

以m / s的加速状态2,指定为一个三元素行向量。

可调:是的

依赖关系

要启用这个特性,集AccelerationSource“属性”

数据类型:|

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

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

  • “属性”- 通过设置指定角速度状态AngularVelocity属性

可调:没有

数据类型:字符|字符串

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

可调:是的

依赖关系

要启用这个特性,集AngularVelocitySource“属性”

数据类型:|

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

可调:没有

依赖关系

要启用这个特性,集AngularVelocitySource“属性”AccelerationSource“属性”

数据类型:|

使用

描述

[位置取向速度促进angularVelocity)=轨迹(bodyAccelerationbodyAngularVelocity输出轨迹状态,然后根据输出的轨迹状态更新轨迹状态bodyAccelerationbodyAngularVelocity

这句法是如果只有有效AngularVelocitySource被设置为“输入”AccelerationSource被设置为“输入”

[位置取向速度促进angularVelocity)=轨迹(bodyAngularVelocity输出轨迹状态,然后根据输出的轨迹状态更新轨迹状态bodyAngularAcceleration

这句法是如果只有有效AngularVelocitySource被设置为“输入”AccelerationSource被设置为“属性”

[位置取向速度促进angularVelocity)=轨迹(bodyAcceleration输出轨迹状态,然后根据输出的轨迹状态更新轨迹状态bodyAcceleration

这句法是如果只有有效AngularVelocitySource被设置为“属性”AccelerationSource被设置为“输入”

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

这句法是如果只有有效AngularVelocitySource被设置为“属性”AccelerationSource被设置为“属性”

输入参数

全部展开

加速度在主体坐标系中每秒平方米,指定为ñ3矩阵。

ñ为当前帧中的采样数。

在物体坐标系中的角速度,单位为弧度/秒,表示为ñ3矩阵。

ñ为当前帧中的采样数。

输出参数

全部展开

在本地导航位置坐标系中的米,返回一个ñ3矩阵。

ñ为当前帧中的采样数。

数据类型:|

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

ñ为当前帧中的采样数。

数据类型:|

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

ñ为当前帧中的采样数。

数据类型:|

加速在本地导航坐标系中每秒平方米,返回一个ñ3矩阵。

ñ为当前帧中的采样数。

数据类型:|

在本地导航角速度坐标系统以每秒弧度,返回一个ñ3矩阵。

ñ为当前帧中的采样数。

数据类型:|

对象函数

一步 运行系统对象算法

例子

全部收缩

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

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

默认情况下,kinematicTrajectory物体的初始位置为[0 0 0],初速度为[0 0 0]。方向由四元数1 (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

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

弹道
轨迹= kinematicTrajectory与属性:采样率:100位置:[2.5000e-04 2.5000e-04 0]方向:[1×1四元数]速度:[0.0500 0.0500 0] AccelerationSource: '输入' AngularVelocitySource: '输入'

促进angularVelocity的输出弹道对象对应于bodyAccelerationbodyAngularVelocity,但他们在返回导航坐标系。使用取向输出旋转促进angularVelocity并验证它们近似等价于bodyAccelerationbodyAngularVelocity

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

kinematicTrajectorySystem object™允许您通过属性修改弹道状态。将位置设置为[0,0,0],然后在体坐标系中调用具有指定加速度和角速度的对象。为了便于说明,复制弹道对象之前修改位置财产。调用两个对象,观察它们的位置是否发散。

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

这个例子显示了如何创建一个轨迹振荡沿北使用本地NED坐标系轴kinematicTrajectory系统对象™。

创建一个默认kinematicTrajectory宾语。默认的初始取向与当地对准NED坐标系。

traj = kinematicTrajectory
位置:[0 00]方位:[1x1四元数]速度:[0 00]加速度来源:'输入'角度速度来源:'输入'

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

FS = traj.SampleRate;持续时间= 10;NUMSAMPLES =持续时间* FS;cyclesPerSecond = 1;samplesPerCycle = FS / cyclesPerSecond;numCycles =小区(NUMSAMPLES / samplesPerCycle);maxAccel = 20;三角形= [linspace(maxAccel,1 / FS-maxAccel,samplesPerCycle / 2),linspace (-maxAccel maxAccel - (1 / fs), samplesPerCycle / 2)];振荡= repmat(三角形numCycles 1);振荡=振荡(1:numSamples);accNED = [0 (numSamples, 2),振动);angVelNED = 0 (numSamples, 3);angVelNED(:, 2) = 2 *π;

绘制加速度控制信号。

timeVector = 0:1 / fs: (duration-1 / fs);图(1)情节(timeVector振荡)包含(“时间(s)”)ylabel ('加速(米/秒)^ 2')标题(“局部NED坐标系下的加速度”

产生一个循环的轨迹样本由样本。该kinematicTrajectory系统对象假定加速度和角速度输入是在当地传感器主体坐标系。旋转加速度和角速度的控制信号从NED坐标系到传感器主体使用的坐标系rotateframe取向状态。每次更新位置的3d图。添加暂停模拟实时处理。一旦循环完成,绘制位置随时间的变化。旋转accNEDangVelNED控制信号到本地坐标体系统确保沿向下轴线运动停留。

图(2)plotHandle = plot3(traj.Position(1),traj.Position(2),traj.Position(3),“博”);网格包含('北')ylabel (“东”)zlabel(“下来”)轴([ -  1 1 -1 1 0 1.5])保持Q =一(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(II,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 = [radius, 0,0];initVel = [0, speed, climbRate];initOrientation =四元数([initialYaw球场0],'eulerd''ZYX''帧');轨迹= kinematicTrajectory (“SampleRate”,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''帧');速度= SQRT(总和(速度^ 2,2)。);timeVector =(0:(N-1))/ FS;图(之一)plot3(位置(:,1),位置(:,2),位置(:,3))xlabel(“北(m)”)ylabel ('东(M)')zlabel(“下来(m)”)标题('位置'网格)

图(2)情节(timeVector eulerAngles (: 1),timeVector eulerAngles (:, 2),timeVector eulerAngles(: 3)轴([0,持续时间,-180180])传奇('Yaw(向下旋转)'“基音(绕着东)”'Roll (Rotation Around North)')包含(“时间(s)”)ylabel (的旋转(度))标题(“定位”

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

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

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

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

TRAJ = kinematicTrajectory(“SampleRate”,FS,'位置'initPos,'速度'initVel,“定位”,initOrient,“AccelerationSource”“属性”“加速”accBody,“AngularVelocitySource”“属性”“AngularVelocity”,angVelBody);

调用在一个循环的运动轨迹对象并记录位置输出。绘制随时间变化的位置。

N = 10000;POS =零(N,3);对于i = 1:N个pos(i,:) = traj();结束plot3(pos(:,1), pos(:,2), pos(:,3))'位置')包含(“X (m)”)ylabel ('Y(M)')zlabel(“Z (m)”

扩展功能

介绍了在R2018b