主要内容

insSensor

惯性导航系统与GNSS/GPS仿真模型

描述

insSensor系统对象™模拟一种设备,该设备融合来自惯性导航系统(INS)和全球导航卫星系统(GNSS)的测量数据,如GPS,并输出融合的测量数据。

输出融合的INS和GNSS测量值:

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

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

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

创建

描述

例子

INS= insSensor返回一个System对象,INS它模拟了一个从INS和GNSS输出测量数据的设备。

INS=惯性传感器(名称,值属性使用一个或多个名称-值对。未指定的属性具有默认值。将每个属性名用引号括起来。

属性

全部展开

除非另有说明,属性是不能,这意味着您不能在调用对象后更改其值。对象在调用时锁定,并且释放函数打开它们。

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

有关更改属性值的更多信息,请参见在MATLAB中使用系统对象进行系统设计

传感器在平台上的位置,单位为米,指定为三元素实值矢量形式[xyz].该向量定义了传感器原点与平台原点的偏移量。

可调:是的

数据类型:|

传感器主体的滚动测量精度,以度为单位,指定为非负实标量。

旋转是绕着x传感器本体的-轴。滚动噪声被建模为白噪声过程。RollAccuracy设置滚动测量噪声的标准偏差。

可调:是的

数据类型:|

传感器体的节距测量精度,以度为单位,指定为非负实标量。

旋转是绕着y传感器本体的-轴。基音噪声被建模为白噪声过程。PitchAccuracy定义螺距测量噪声的标准偏差。

可调:是的

数据类型:|

传感器体偏航测量的精度,以度数为单位,指定为非负实标量。

偏航旋转是绕着z-传感器主体的轴。偏航噪声被建模为白噪声过程。雅瓦准确性定义偏航测量噪声的标准偏差。

可调:是的

数据类型:|

传感器体位置测量的精度,以米为单位,指定为非负实标量或三元素实值向量。向量的元素决定了x-,y- - - - - -,z分别测量-安置。如果您指定PositionAccuracy作为标量值,然后对象将所有三个位置的精度设置为此值。

将位置噪声建模为白噪声过程。PositionAccuracy定义位置测量噪声的标准偏差。

可调:是的

数据类型:|

传感器体速度测量的精度,单位为米/秒,指定为非负实标量。

速度噪声被建模为白噪声过程。VelocityAccuracy定义速度测量噪声的标准偏差。

可调:是的

数据类型:|

传感器体加速度测量的精度,单位为米/秒,指定为非负实标量。

加速度噪声被建模为白噪声过程。加速精度定义加速度测量噪声的标准差。

可调:是的

数据类型:|

传感器体角速度测量的精度,单位为米/秒,指定为非负实标量。

角速度建模为白噪声过程。AngularVelocityAccuracy定义加速度测量噪声的标准差。

可调:是的

数据类型:|

允许输入的模拟时间,指定为一个逻辑0)或1真正的).将此属性设置为真正的用。输入仿真时间simTime论点

可调:没有

数据类型:逻辑

启用GNSS修复,指定为逻辑1真正的)或0).将此属性设置为来模拟GNSS接收机修复的丢失。当GNSS接收机固定位丢失时,位置测量值以指定的速率漂移PositionErrorFactor财产。

可调:是的

依赖关系

要启用此属性,请设置TimeInput真正的

数据类型:逻辑

没有GNSS固定的位置误差因子,指定为标量或标量的1 × 3向量。

哈斯菲克斯属性设置为,由于加速计中的恒定偏置,位置误差以二次速率增长。位置组件的位置错误Et)可以表示为Et) = 1/2αt2,在那里α位置误差因子是否为对应组件和t是GNSS修复丢失后的时间。在运行时,对象进行计算t基于simTime输入。计算出的Et)的值xy,z组件被添加到组件的相应位置gTruth输入。

可调:是的

依赖关系

要启用此属性,请设置TimeInput真正的哈斯菲克斯

数据类型:|

随机数源,指定为这些选项之一:

  • “全球流”——使用当前全局随机数流生成随机数。

  • “与种子mt19937ar”—使用mt19937ar算法生成随机数,种子由种子财产。

数据类型:烧焦|字符串

mt19937ar随机数生成器算法的初始种子,指定为一个非负整数。

依赖关系

要启用此属性,请设置RandomStream“与种子mt19937ar”

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

使用

描述

例子

测量= INS (gTruth对从INS传感器读数和GNSS传感器读数接收的数据进行建模。输出测量是基于传感器本体的惯性地面真实状态,gTruth

例子

测量= INS (gTruthsimTime另外指定模拟的时间,simTime.要启用此语法,请设置TimeInput财产真正的

输入参数

全部展开

传感器本体的惯性地真状态,在局部笛卡尔坐标下,指定为包含以下字段的结构:

描述
“位置”

位置,单位为米,指定为实数有限N- × 3矩阵的[xyz)向量。N是当前帧中的样本数。

“速度”

速度(v),单位为米每秒,指定为实数有限N- × 3矩阵的[vxvyvz]向量。N是当前帧中的样本数。

“定位”

相对于本地笛卡尔坐标系的方向,指定为以下选项之一:

  • N元素的列向量四元数对象

  • 3-by-3-by -N旋转矩阵阵列

  • N- × 3矩阵的[xy球场z偏航角度

每个四元数或旋转矩阵是从局部笛卡尔坐标系到当前传感器体坐标系的帧旋转。N是当前帧中的样本数。

“加速”

加速度(一个),单位为米每秒的平方,指定为实数有限N- × 3矩阵的[一个x一个y一个z)向量。N是当前帧中的样本数。

“AngularVelocity”

角速度(ω),以每秒平方度为单位,指定为实数有限N- × 3矩阵的[ωxωyωz)向量。N是当前帧中的样本数。

字段值的类型必须为

位置速度,取向字段是必需的。其他字段是可选的。

例子:结构('Position',[0 0],'Velocity',[0 0],'Orientation',四元数([1 0 0]))

模拟时间,以秒为单位,指定为非负实标量。

数据类型:|

输出参数

全部展开

测量传感器的身体运动,在局部笛卡尔坐标,返回为包含以下字段的结构:

描述
“位置”

位置,单位为米,指定为实数有限N- × 3矩阵的[xyz)向量。N是当前帧中的样本数。

“速度”

速度(v),单位为米每秒,指定为实数有限N- × 3矩阵的[vxvyvz]向量。N是当前帧中的样本数。

“定位”

相对于本地笛卡尔坐标系的方向,指定为以下选项之一:

  • N元素的列向量四元数对象

  • 3-by-3-by -N旋转矩阵阵列

  • N- × 3矩阵的[xy球场z偏航角度

每个四元数或旋转矩阵是从局部笛卡尔坐标系到当前传感器体坐标系的帧旋转。N是当前帧中的样本数。

“加速”

加速度(一个),单位为米每秒的平方,指定为实数有限N- × 3矩阵的[一个x一个y一个z)向量。N是当前帧中的样本数。

“AngularVelocity”

角速度(ω),以每秒平方度为单位,指定为实数有限N- × 3矩阵的[ωxωyωz)向量。N是当前帧中的样本数。

返回的字段值具有类型中对应字段值的类型相同gTruth输入。

对象的功能

要使用对象函数,请指定System对象作为第一个输入参数。例如,释放名为system的对象的系统资源obj,请使用以下语法:

发行版(obj)

全部展开

扰动 物体上定义的扰动
扰乱 对物体施加扰动
一步 运行系统对象算法
克隆 创建副本系统对象
isLocked 确定是否系统对象正在使用中
重置 重置的内部状态系统对象
释放 释放资源并允许更改系统对象属性值和输入特征

例子

全部折叠

创建一个运动结构,定义在当地东北下(NED)原点的固定位置。因为平台是固定的,所以您只需要定义一个样本。假设地面真实运动以100hz采样率采样10秒。创建一个默认的insSensor系统对象™。对象的预分配变量以保存输出insSensor对象。

Fs = 100;时间= 10;numSamples = f *时间;运动=结构(...“位置”, 0(1、3)...“速度”, 0(1、3)...“定位”, (1, 1,“四元数”));INS = insSensor;positionMeasurements = 0 (numSamples, 3);velocityMeasurements = 0 (numSamples, 3);orientationMeasurements = 0 (numSamples 1“四元数”);

在循环中,调用INS使用静止运动结构返回在本地NED坐标系下的位置、速度和方向测量值。记录位置、速度和方位测量值。

i=1:numSamples测量值=INS(运动);位置测量(i,:)=测量值。位置;速度测量(i,:)=测量值。速度;方向测量(i)=测量。方向;结束

出于可视化目的,将方向从四元数转换为Euler角度。绘制随时间变化的位置、速度和方向测量值。

方向测量=eulerd(方向测量,“ZYX股票”“帧”); t=(0:(numSamples-1))/Fs;子地块(3,1,1)图(t、位置测量)标题(“位置”)包含(“时间(s)”) ylabel (“位置(m)”)传说(“北”“东”“下来”)子图(3,1,2)plot(t,velocityMeasurements) title(“速度”)包含(“时间(s)”) ylabel (“速度(米/秒)”)传说(“北”“东”“下来”)子地块(3,1,3)地块(t、方向测量)标题(“定位”)包含(“时间(s)”) ylabel ('旋转(度)')传说(“滚”“节”“偏航”

图中包含3个轴对象。带有标题Position的轴对象1包含3个类型为line的对象。这些物体代表北,东,下。标题为Velocity的轴对象2包含3个类型为line的对象。这些物体代表北,东,下。带有标题方向的轴对象3包含3个类型为line的对象。这些对象代表滚转,俯仰,偏航。

在驾驶场景中,通过安装在车辆上的INS传感器生成测量数据。根据车辆的地面真实状态绘制INS测量值,并可视化车辆的速度和加速度剖面。

创建驾驶场景

在马萨诸塞州纳蒂克的MathWorks®Apple Hill园区加载一条驾驶路线的地理数据。

data =负载(“ahroute.mat”);拉丁= data.latitude;lonIn = data.longitude;

将路线的纬度和经度坐标转换为笛卡尔坐标。将原点设置为行驶路线中的第一个坐标。为简单起见,假设路线的高度为0。

alt=0;origin=[拉丁语(1),洛宁语(1),alt];[xEast,yNorth,zUp]=拉丁语(拉丁语,洛宁语,alt,origin);

创建一个驾驶场景。将转换后的路线原点设置为地理参考点。

场景= drivingScenario (“地理参考”、来源);

根据路线的笛卡尔坐标创建一条道路。

roadCenters = [xEast yNorth z上);路(场景,roadCenters);

创建一个车辆,遵循道路的中心线。车辆以每秒4 - 5米(每小时9 - 11英里)的速度行驶,在路上转弯时减速。为了创造轨迹,使用平滑轨迹函数。计算出的轨迹使加速度最小化,避免了加速度不连续,这是惯性导航传感器建模的要求。

egoVehicle =车辆(场景中,“ClassID”1);egoPath = roadCenters;egoSpeed = [5 5 5 4 4 4 4 4 4 4 5 5 5 5 5 5];smoothTrajectory (egoVehicle egoPath egoSpeed);

绘制场景,并从自我车后面展示一个3d视图。

情节(场景)chasePlot (egoVehicle)

创建INS传感器

创建一个接收模拟时间输入的INS传感器。通过将速度和精度测量的标准差分别设置为0.1和0.05,将噪声引入到传感器测量中。

INS = insSensor (“TimeInput”,真的,...“VelocityAccuracy”, 0.1,...“加速精度”, 0.05);

可视化INS测量

初始化用于显示INS测量值和演员地面实况的地理播放机。将播放机配置为显示其最后10个位置,并将缩放级别设置为17。

zoomLevel = 17;球员= geoplayer(拉丁语(1)lonIn (1) zoomLevel,...“HistoryDepth”10“历史风格”“行”);

为模拟期间捕获的模拟时间、速度测量和加速度测量预先分配空间。

numWaypoints=长度(拉丁语);时间=零(numWaypoints,1);gTruthAccelerations=零(numWaypoints,1);gTruthAccelerations=零(numWaypoints,1);传感器速度=零(numWaypoints,1);传感器加速度=零(numWaypoints,1);

模拟的场景。在仿真循环中,获取自我飞行器的地面真实状态和INS对该状态的测量。将这些读数转换为地理坐标,并在每个航路点,可视化地面真相和INS读数的地理玩家。还可以获取速度和加速度数据,用于绘制速度和加速度剖面。

nextWaypoint = 2;推进(场景)%获得自我车辆的地面真实状态。gTruth =状态(egoVehicle);获得INS传感器测量。测量= INS (gTruth scenario.SimulationTime);%将读数转换为地理坐标。[它实用,lonOut] = local2latlon (measurement.Position (1),...测量。位置(2),...measurement.Position(3),来源);%绘制地面真实位置与传感器报告位置之间的差异。reachedWaypoint = sum(abs(roadCenters(nextWaypoint,:) - gTruth.Position)) < 1; / /获取路径如果reachedWaypoint plotPosition(球员,拉丁语(nextWaypoint) lonIn (nextWaypoint),“TrackID”(1) plotPosition lonOut播放器,它实用,“TrackID”2.“标签”“英寸”%捕获模拟时间、速度和加速度。时间(1)nextWaypoint = scenario.SimulationTime;gTruthVelocities (nextWaypoint 1) = gTruth.Velocity (2);gTruthAccelerations (nextWaypoint 1) = gTruth.Acceleration (2);sensorVelocities (nextWaypoint 1) = measurement.Velocity (2);sensorAccelerations (nextWaypoint 1) = measurement.Acceleration (2);nextWaypoint = nextWaypoint + 1;结束如果nextWaypoint > numWaypoints打破结束结束

绘制速度剖面图

将车辆随时间变化的地面真实纵向速度与INS传感器捕获的速度测量值进行比较。

从时间矢量和速度矢量中去掉零。

Times (Times == 0) = [];gTruthVelocities(gTruthVelocities == 0) = [];sensorvelocity (sensorvelocity == 0) = [];图保存情节(次,gTruthVelocities)情节(次,sensorVelocities)标题(“纵向速度剖面”)包含(“时间(s)”) ylabel (“速度(米/秒)”)传说(“地面实况”“英寸”)举行

情节加速度剖面

将车辆随时间变化的地面真实纵向加速度与INS传感器捕获的加速度测量值进行比较。

gTruthAccelerations(gTruthAccelerations == 0) = [];sensorAccelerations(sensorAccelerations == 0) = [];图保存情节(次,gTruthAccelerations)情节(次,sensorAccelerations)标题(纵向加速度剖面的)包含(“时间(s)”) ylabel ('加速度(m/s^2)')传说(“地面实况”“英寸”)举行

提示

  • 要获得驾驶场景中参与者的基本真实状态,请使用状态函数。

  • 传感器报告本地笛卡尔坐标系中的测量值。要将这些测量值转换为地理位置以便在地图上可视化,请使用local2latlon函数。要将该数据转换回本地坐标,请使用latlon2local函数。

扩展功能

介绍了R2021a