主要内容

运动学

速率驱动轨迹发生器

描述

这个运动学系统对象™使用指定的加速度和角速度生成轨迹。

要根据速率生成轨迹,请执行以下操作:

  1. 创建运动学对象并设置其属性。

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

要了解有关系统对象如何工作的更多信息,请参见什么是系统对象?

创建

描述

实例

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

实例

弹道=运动轨迹(名称、值)设置每个属性的名字到指定的价值。未指定的属性具有默认值。

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

属性

全部展开

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

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

可调:是的

数据类型:仅有一个的|

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

可调:是的

数据类型:仅有一个的|

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

可调:是的

数据类型:仅有一个的|

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

可调:是的

数据类型:四元数|仅有一个的|

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

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

  • “属性”——指定加速状态通过设置加快所有物

可调:

数据类型:烧焦|字符串

加速度状态(单位:m/s)2.,指定为三元素行向量。

可调:是的

依赖关系

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

数据类型:仅有一个的|

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

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

  • “属性”–通过设置角速度所有物

可调:

数据类型:烧焦|字符串

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

可调:是的

依赖关系

要启用此属性,请设置角速度源“属性”

数据类型:仅有一个的|

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

可调:

依赖关系

要启用此属性,请设置角速度源“属性”AccelerationSource“属性”

数据类型:仅有一个的|

用法

描述

实例

[位置,方向,速度,加快,angularVelocity]=轨迹(bodyAcceleration,bodyAngularVelocity)输出轨迹状态,然后根据轨迹状态进行更新bodyAccelerationbodyAngularVelocity

此语法仅在以下情况下有效:角速度源设置为“输入”AccelerationSource设置为“输入”

[位置,方向,速度,加快,angularVelocity]=轨迹(bodyAngularVelocity)输出轨迹状态,然后根据轨迹状态进行更新体角加速度

此语法仅在以下情况下有效:角速度源设置为“输入”AccelerationSource设置为“属性”

[位置,方向,速度,加快,angularVelocity]=轨迹(bodyAcceleration)输出轨迹状态,然后根据轨迹状态进行更新bodyAcceleration

此语法仅在以下情况下有效:角速度源设置为“属性”AccelerationSource设置为“输入”

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

此语法仅在以下情况下有效:角速度源设置为“属性”AccelerationSource设置为“属性”

输入参数

全部展开

身体坐标系中的加速度,单位为米/秒平方,指定为N-by-3矩阵。

N是当前帧中的样本数。

身体坐标系中的角速度(弧度/秒),指定为N-by-3矩阵。

N是当前帧中的样本数。

输出参数

全部展开

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

N是当前帧中的样本数。

数据类型:仅有一个的|

在本地导航坐标系统中的方向,返回为N-by-1四元数列向量或3X-3-by-N实数数组。每个四元数或3×3旋转矩阵是从本地导航坐标系到当前身体坐标系的帧旋转。

N是当前帧中的样本数。

数据类型:仅有一个的|

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

N是当前帧中的样本数。

数据类型:仅有一个的|

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

N是当前帧中的样本数。

数据类型:仅有一个的|

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

N是当前帧中的样本数。

数据类型:仅有一个的|

目标函数

全部展开

扰动 物体上定义的摄动
使焦虑 对对象应用扰动
一步 系统对象算法

例子

全部崩溃

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

轨迹=运动轨迹
[0 0] Position: [0 0] Orientation: [1x1 quaternion] Velocity: [0 00] AccelerationSource: 'Input' AngularVelocitySource: 'Input'

默认情况下,运动学物体的初始位置为[0 0 0],初始速度为[0 0 0]。方位用四元数(1 + 0i + 0j + 0k)来描述。

这个运动学对象在属性中保持可见和可写状态位置,速度方向.当您调用对象时,将输出状态并更新。

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

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

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

弹道
轨迹= kinematicTrajectory with properties: SampleRate: 100 Position: [2.5000e-04 2.5000e-04 0] Orientation: [1x1 quaternion] Velocity: [0.0500 0.0500 0] AccelerationSource: 'Input'

这个加快angularVelocity的输出弹道对象对应于bodyAccelerationbodyAngularVelocity,但它们是在导航坐标系中返回的。使用方向要旋转的输出加快angularVelocity到物体坐标系,并验证它们近似等价于bodyAccelerationbodyAngularVelocity

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

这个运动学系统对象™可以通过属性修改轨迹状态。将位置设置为[0,0,0],然后在物体坐标系中以指定的加速度和角速度调用对象。为说明目的,克隆弹道对象,然后再修改位置属性。调用这两个对象并观察位置是否有差异。

trajectoryClone =克隆(轨迹);轨迹。位置= [0,0,0]; position = trajectory(bodyAcceleration,bodyAngularVelocity)
位置=1×30 0 0
clonePosition=轨迹Clone(车身加速度、车身角度速度)
克隆定位=1×310-3× 0.2500 0.2500 0

此示例演示如何使用创建沿本地NED坐标系的北轴振荡的轨迹运动学系统对象™.

创建默认值运动学对象。默认初始方向与本地坐标系对齐。

traj=运动轨迹
traj=具有属性的运动学轨迹:采样器:100位置:[0]方向:[1x1四元数]速度:[0]加速度源:'Input'角度速度源:'Input'

定义持续时间为10秒的轨迹,包括围绕东轴旋转(俯仰)和沿本地NED坐标系的北轴振荡。使用默认值运动学采样率。

fs=traj.采样器;持续时间=10;numSamples=持续时间*fs;周期秒=1;samplesPerCycle=fs/周期秒;numCycles=ceil(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 *π;

绘制加速度控制信号。

时间向量=0:1/fs:(持续时间-1/fs);图(1)绘图(时间向量,振荡)xlabel(‘时间’)伊拉贝尔('加速度(m/s)^2')头衔(“本地坐标系中的加速度”)

在循环中逐样本生成轨迹样本运动学System object假定加速度和角速度输入在局部传感器体坐标系中。使用将加速度和角速度控制信号从NED坐标系旋转到传感器体坐标系旋转场方向状态。每次更新位置的3-D图。添加暂停模拟实时处理。一旦循环完成,绘制位置随时间的变化。旋转意外angVelNED发送到局部身体坐标系的控制信号确保运动沿下轴进行。

图(2)plotHandle = plot3(traj.Position(1),traj.Position(2),traj.Position(3),“波”);网格在…上xlabel(“北方”)伊拉贝尔(“东方”)兹拉贝尔(“向下”)轴([-11-1011.5])保持在…上q=一(numSamples,1,“四元数”);对于ii=1:numSamples accBody=rotateframe(平移方向,accNED(ii,:);angVelBody=rotateframe(平移方向,angveled(ii,:);[pos(ii,:),q(ii),vel,ac]=traj(accBody,angVelBody);set(plotHandle,“扩展数据”,位置(ii,1),“伊达塔”,位置(ii,2),“ZData”,位置(ii,3))暂停(1/fs)终止图(3)绘图(时间向量,位置(:,1),“波”,...时间向量,位置(:,2),“r.”,...时间向量,位置(:,3),“g”。)xlabel(‘时间’)伊拉贝尔(‘位置(m)’)头衔(“随时间变化的NED位置”)传说(“北方”,“东方”,“向下”)

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

图(4)eulerAngles=eulerd(q,“ZYX”,“框架”);绘图(时间向量,欧拉曲线(:,1),“波”,...时间向量,欧拉格(:,2),“r.”,...timeVector eulerAngles (: 3)“g”。)轴([0,持续时间,-180180])图例(“偏航”,“投球”,“滚”)xlabel(‘时间’)伊拉贝尔(的旋转(度))头衔(“方向”)

此示例显示如何使用运动学系统对象™.

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

持续时间=1000;%秒fs=10;%赫兹N=持续时间*fs;%样本数半径=5000;%米速度=80;%米每秒上升率=50;%米每秒initialYaw = 90;%学位螺距=15;%学位initPos=[半径,0,0];initVel=[速度,爬坡率];initOrientation=四元数([初始偏航,俯仰,0],“欧勒德”,“zyx”,“框架”);轨迹= kinematicTrajectory (“SampleRate”,财政司司长,...“速度”,initVel,...“位置”,initPos,...“方向”, initOrientation);

在躯干坐标系中指定恒定加速度和角速度。旋转躯干框架以考虑俯仰。

accBody=0(N,3);accBody(:,2)=速度^2/半径;accBody(:,3)=0.2;angVelBody=0(N,3);angVelBody(:,3)=速度/半径;俯仰旋转=四元数([0,俯仰,0],“欧勒德”,“zyx”,“框架”);angVelBody = rotateframe (pitchRotation angVelBody);accBody = rotateframe (pitchRotation accBody);

呼叫弹道在身体坐标系中具有指定的加速度和角速度。绘制随时间变化的位置、方向和速度。

[位置、方向、速度]=轨迹(accBody、angVelBody);eulerAngles=eulerd(方向、,“ZYX”,“框架”);速度=sqrt(和(速度^2,2));时间向量=(0:(N-1))/fs;图(1)绘图3(位置(:,1),位置(:,2),位置(:,3))xlabel("北(m)")伊拉贝尔("东(m)")兹拉贝尔(‘向下(m)’)头衔(“位置”网格)在…上

图中包含一个轴。具有标题位置的轴包含一个line类型的对象。

图(2)绘图(时间向量,欧拉曲线(:,1),...时间向量,欧拉格(:,2),...时间向量,欧拉曲线(:,3))轴([0,持续时间,-180180])图例(“偏航(旋转四周向下)”,'俯仰(绕东旋转)',“Roll(绕北旋转)”)xlabel(‘时间’)伊拉贝尔(的旋转(度))头衔(“方向”)

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

图(3)绘图(时间矢量、速度)xlabel(‘时间’)伊拉贝尔(‘速度(米/秒)’)头衔(“速度”)

图中包含一个坐标轴。标题为Speed的轴包含一个字行对象。

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

Fs=100;r=10;速度=2.5;初始偏航=90;初始位置=[r 0];初始水平=[0速度0];初始方向=四元数([初始偏航0],“欧勒德”,“ZYX”,“框架”);accBody=[0速度^2/r 0.01];angVelBody=[0速度/r];

创建运动轨迹对象。

traj=运动轨迹(“SampleRate”,财政司司长,...“位置”,initPos,...“速度”,initVel,...“方向”,东方,...“AccelerationSource”,“属性”,...“加速”accBody,...“AngularVelocitySource”,“属性”,...“AngularVelocity”,angVelBody);

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

N=10000;pos=0(N,3);对于i = 1:N pos(i,:) = traj();终止图3(位置(:,1),位置(:,2),位置(:,3))标题(“位置”)xlabel(‘X(m)’)伊拉贝尔(‘Y(m)’)兹拉贝尔(‘Z(m)’)

图中包含一个轴。具有标题位置的轴包含一个line类型的对象。

扩展功能

在R2018b中引入