kinematicTrajectory

Rate-driven轨迹发生器

描述

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

从利率生成轨迹:

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

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

了解更多关于系统对象是如何工作的,看到的系统对象是什么?

创建

描述

例子

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

例子

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

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

属性

全部展开

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

采样率的轨迹在赫兹,指定为一个积极的标量。

可调:是的

数据类型:|

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

可调:是的

数据类型:|

速度状态在当地导航坐标系在m / s,指定为一个三元素行向量。

可调:是的

数据类型:|

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

可调:是的

数据类型:四元数||

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

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

  • “属性”——通过设置指定加速状态加速度财产

可调:没有

数据类型:字符|字符串

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

可调:是的

依赖关系

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

数据类型:|

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

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

  • “属性”——国家通过设置指定角速度AngularVelocity财产

可调:没有

数据类型:字符|字符串

角速度在rad / s,指定为一个三元素行向量。

可调:是的

依赖关系

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

数据类型:|

每个输出的样本数量,指定为一个正整数。

可调:没有

依赖关系

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

数据类型:|

使用

描述

例子

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

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

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

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

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

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

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

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

输入参数

全部展开

加速体内坐标系在米每秒的平方,指定为一个N3矩阵。

N在当前帧的样本数量。

角速度在弧度/秒身体坐标系统,指定为一个N3矩阵。

N在当前帧的样本数量。

输出参数

全部展开

位置在当地导航坐标系米,作为一个返回N3矩阵。

N在当前帧的样本数量。

数据类型:|

定位在当地导航坐标系,作为一个返回N1四元数或3-by-3-by -列向量N真正的数组。每个四元数或3 x3的旋转矩阵是一个从本地导航坐标系旋转坐标系到当前坐标系统。

N在当前帧的样本数量。

数据类型:|

速度在当地导航坐标系在米每秒,作为一个返回N3矩阵。

N在当前帧的样本数量。

数据类型:|

加速度在当地导航坐标系在米每秒的平方,作为一个返回N3矩阵。

N在当前帧的样本数量。

数据类型:|

角速度在当地导航坐标系在弧度/秒,作为一个返回N3矩阵。

N在当前帧的样本数量。

数据类型:|

对象的功能

全部展开

扰动 扰动对象上定义的
扰乱 应用扰动对象
一步 运行系统对象算法

例子

全部折叠

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

轨迹= kinematicTrajectory
轨迹= kinematicTrajectory属性:SampleRate: 100位置:[0 0 0]取向:[1 x1四元数]速度:[0 0 0]AccelerationSource:“输入”AngularVelocitySource:“输入”

默认情况下,kinematicTrajectory对象的初始位置(0 0 0)和(0 0 0)的初始速度。方向是由一个四元数描述的(1 + 0 + 0 j + 0 k)。

kinematicTrajectory对象保持可见和可写状态的属性位置,速度,取向。当你调用的对象,国家输出,然后更新。

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

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

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

轨迹
轨迹= kinematicTrajectory属性:SampleRate: 100位置:[2.5000 e-04 2.5000 e-04 0]取向:[1 x1四元数]速度: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

kinematicTrajectory系统对象™使您能够通过属性修改轨迹状态。将位置设置为(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 0

这个例子展示了如何创建一个轨迹沿着北轴振动的地方NED坐标系统使用kinematicTrajectory系统对象™。

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

traj = kinematicTrajectory
traj = kinematicTrajectory属性:SampleRate: 100位置:[0 0 0]取向:[1 x1四元数]速度:[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 = [0 (numSamples, 2),振动);angVelNED = 0 (numSamples, 3);angVelNED(:, 2) = 2 *π;

情节加速度控制信号。

timeVector = 0:1 / fs: (duration-1 / fs);图(1)情节(timeVector振荡)包含(“时间(s)”)ylabel (“加速度(m / s) ^ 2”)标题(NED坐标系的加速度在当地的)

在一个循环中生成轨迹连续取样。的kinematicTrajectory系统对象假设加速度和角速度输入在本地传感器坐标系。旋转加速度和角速度控制信号从NED坐标系到传感器的身体坐标系统使用rotateframe取向状态。更新一个3 d位置在每个时间的情节。添加暂停模拟的实时处理。循环完成后,随着时间的推移图位置。旋转accNEDangVelNED身体控制信号向当地坐标系统保证了运动保持沿轴。

图(2)plotHandle = plot3 (traj.Position (1) traj.Position (2), traj.Position (3),“波”);网格包含(“北”)ylabel (“东”)zlabel (“下来”)轴([1 1 1 1 0 1.5])q = 1 (numSamples 1“四元数”);2 = 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秒的持续时间和采样率10赫兹。圆的半径设置为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 (“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股票”,“帧”);速度=√和速度。^ 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股票”,“帧”);accBody =(0.01 0速度^ 2 / r);angVelBody =[0 0速度/ r];

创建一个运动轨迹对象。

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

在一个循环中调用运动轨迹对象和日志输出的位置。随着时间的推移图的位置。

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

扩展功能

介绍了R2018b