kinematicTrajectory
速率驱动轨迹发生器
描述
的kinematicTrajectory
系统对象™使用指定的加速度和角速度生成轨迹。
从利率生成轨迹:
创建
kinematicTrajectory
对象并设置其属性。使用参数调用对象,就像调用函数一样。
有关系统对象如何工作的详细信息,请参见什么是系统对象?
创建
属性
如果属性为可调,您可以随时更改其值。
SampleRate
- - - - - -轨迹采样率(Hz)
One hundred.
(默认)|积极的标量
以Hz为单位的轨迹采样率,指定为正标量。
可调:是的
数据类型:单
|双
位置
- - - - - -局部导航坐标系中的位置状态(m)
[0 0 0]
(默认)|三元行向量
在局部导航坐标系中的位置状态(以米为单位),指定为三元素行向量。
可调:是的
数据类型:单
|双
速度
- - - - - -局部导航坐标系下速度状态(m/s)
[0 0 0]
(默认)|三元行向量
局部导航坐标系中的速度状态,单位为m/s,指定为三元素行向量。
可调:是的
数据类型:单
|双
取向
- - - - - -局部导航坐标系中的方位状态
四元数(1,0,0,0)
(默认)|标量四元数|3 × 3实矩阵
局部导航坐标系中的方向状态,指定为标量四元数或3 × 3实矩阵。方向是从局部导航坐标系到当前主体坐标系的帧旋转。
可调:是的
数据类型:四元数
|单
|双
AccelerationSource
- - - - - -加速度状态源
“输入”
(默认)|“属性”
加速度状态的源,指定为“输入”
或“属性”
.
“输入”
——指定加速度状态作为运动学轨迹对象的输入参数“属性”
参数指定加速状态加速度
财产
可调:没有
数据类型:字符
|字符串
加速度
- - - - - -加速度状态(m/s)2)
[0 0 0]
(默认)|三元行向量
AngularVelocitySource
- - - - - -角速度状态的来源
“输入”
(默认)|“属性”
角速度状态的源,指定为“输入”
或“属性”
.
“输入”
——指定角速度状态作为运动学轨迹对象的输入参数“属性”
参数指定角速度状态AngularVelocity
财产
可调:没有
数据类型:字符
|字符串
AngularVelocity
- - - - - -角速度状态(rad/s)
[0 0 0]
(默认)|三元行向量
SamplesPerFrame
- - - - - -每个输出帧的样本数
1(默认)|正整数
每个输出帧的采样数,指定为正整数。
可调:没有
依赖关系
若要启用此属性,请设置AngularVelocitySource来“属性”
而且AccelerationSource来“属性”
.
数据类型:单
|双
使用
语法
描述
[
输出轨迹状态,并根据更新轨迹状态位置
,取向
,速度
,加速度
,angularVelocity
=轨迹(bodyAcceleration
,bodyAngularVelocity
)bodyAcceleration
而且bodyAngularVelocity
.
此语法仅在以下情况下有效AngularVelocitySource
设置为“输入”
而且AccelerationSource
设置为“输入”
.
[
输出轨迹状态,并根据更新轨迹状态位置
,取向
,速度
,加速度
,angularVelocity
=轨迹(bodyAngularVelocity
)bodyAngularAcceleration
.
此语法仅在以下情况下有效AngularVelocitySource
设置为“输入”
而且AccelerationSource
设置为“属性”
.
[
输出轨迹状态,并根据更新轨迹状态位置
,取向
,速度
,加速度
,angularVelocity
=轨迹(bodyAcceleration
)bodyAcceleration
.
此语法仅在以下情况下有效AngularVelocitySource
设置为“属性”
而且AccelerationSource
设置为“输入”
.
[
输出轨迹状态,然后更新轨迹状态。位置
,取向
,速度
,加速度
,angularVelocity
=轨迹()
此语法仅在以下情况下有效AngularVelocitySource
设置为“属性”
而且AccelerationSource
设置为“属性”
.
输入参数
bodyAcceleration
- - - - - -体坐标系中的加速度(m/s)2)
N3矩阵
加速度:物体坐标系中的加速度,单位为米每秒的平方,用an表示N3矩阵。
N是当前帧中的样本数。
bodyAngularVelocity
- - - - - -体坐标系角速度(rad/s)
N3矩阵
角速度:物体坐标系中以弧度/秒为单位的角速度,用N3矩阵。
N是当前帧中的样本数。
输出参数
位置
-在局部导航坐标系中的位置(m)
N3矩阵
在本地导航坐标系中的位置(以米为单位),返回为N3矩阵。
N是当前帧中的样本数。
数据类型:单
|双
取向
-在局部导航坐标系中定位
N-元素四元数列向量| 3乘3乘-N真正的数组
在本地导航坐标系中的方向,返回为N-乘1四元数列向量或3乘3乘-N真正的数组。每个四元数或3乘3旋转矩阵是从局部导航坐标系到当前体坐标系的一帧旋转。
N是当前帧中的样本数。
数据类型:单
|双
速度
-局部导航坐标系速度(m/s)
N3矩阵
本地导航坐标系中的速度,单位为米/秒,返回为N3矩阵。
N是当前帧中的样本数。
数据类型:单
|双
加速度
-局部导航坐标系加速度(m/s)2)
N3矩阵
本地导航坐标系中的加速度,单位为米每秒平方,返回为anN3矩阵。
N是当前帧中的样本数。
数据类型:单
|双
angularVelocity
-局部导航坐标系中的角速度(rad/s)
N3矩阵
本地导航坐标系中的角速度,单位为弧度/秒,返回为N3矩阵。
N是当前帧中的样本数。
数据类型:单
|双
例子
创建默认的kinematicTrajectory
创建默认值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)”)标题(“位置”网格)在
图(2)情节(timeVector eulerAngles (: 1),...timeVector eulerAngles (:, 2),...timeVector,eulerAngles(:,3))坐标轴([0,duration,-180,180])偏航(向下旋转),“Pitch(围绕东方旋转)”,“Roll(向北旋转)”)包含(“时间(s)”) ylabel (的旋转(度))标题(“定位”)
图(3)plot(timeVector,speed) xlabel(“时间(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 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)”)
扩展功能
C/ c++代码生成
使用MATLAB®Coder™生成C和c++代码。
版本历史
R2019b引入
另请参阅
Abrir比如
Tiene una versión modificada de este ejemplo。¿Desea abrir este ejemplo con sus modificaciones?
MATLAB突击队
Ha hecho clic en unenlace que对应一个este commando de MATLAB:
弹射突击队introduciéndolo en la ventana de commandos de MATLAB。Los navegadores web no permission comandos de MATLAB。
您也可以从以下列表中选择一个网站:
如何获得最佳的网站性能
选择中国站点(中文或英文)以获得最佳站点性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。