主要内容

在Android设备上使用MAT-File日志在地图上绘制路线和速度

这个例子向您展示了如何在Android™设备上使用MAT-file日志在web地图上绘制旅程的路线和速度。GPS坐标被收集到mat文件中,用于绘制路线和速度。

简介

金宝app用于And金宝approid设备的Simulink®支持包支持在mat文件格式的Android设备上记录来自Simulink模型的信号。mat文件日志记录使您能够监视信号的行为并对历史数据进行分析。

为了演示Android设备上的mat文件日志记录,本示例使用了androidMatFile金宝app仿真软件模型。这个模型在多个mat文件中记录Android设备上的GPS(纬度和经度)坐标。然后,您可以将mat文件导入到计算机中,并使用这些文件在MATLAB®中进行进一步分析。在本例中,mat文件用于在网络地图上绘制旅程的路线和速度。地图上的折线代表路线。折线的颜色表示速度。

先决条件

在你开始这个例子之前,我们建议你阅读:

所需的产品下载188bet金宝搏

要运行此示例,请下载并安装:

所需的硬件

  • Android设备

  • USB电缆

步骤1:配置Simulink Mod金宝appel

请注意:在继续此步骤之前,您必须安装适用于Android设备的Simulink支持包金宝app金宝app安装Androi金宝appd设备支持

1.打开androidMatFile模型。

2.建模在工具条的选项卡上,选择模型设置

3.在“配置参数”对话框中,选择硬件实现.验证硬件板参数设置为Android设备

4.列表下目标硬件资源中,选择设备的选择

5.设备列表,选择你的Android设备。如果您的设备不在列表中,请单击刷新

请注意:如果单击后设备仍未列出刷新,确保已启用USB调试您的设备上的选项。要启用USB调试,输入androidhwsetup在MATLAB命令窗口,并按照屏幕上的指示。

步骤2:启用MAT-file Logging

1.在“配置参数”对话框中,浏览到代码生成>接口>先进的参数并验证这些设置:

一个。MAT-file日志选中“选项”。

b。mat文件变量名修饰符列表设置为rt_.使用此列表,您可以指定ifrt_将作为前缀或后缀添加到mat文件中的变量名。如需使用变量名,请选择没有一个

2.点击应用保存更改,然后单击好吧

步骤3:配置为工作区块

1.在Simuli金宝appnk模型中,双击到工作空间块,自由的工作空间而且经度的工作区.验证这些参数值:

参数值| |描述  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 纬度工作区中的变量名|纬度(块)|的变量名纬度和经度(经度工作区中的块)| |经度坐标MAT-file要记录。Limit data points to last | 500 | mat文件中要记录的坐标数。保存格式|带时间的结构|将数据保存为带有相关时间信息的结构。

2.点击应用保存更改,然后单击好吧

步骤4:指定仿真时间,并在Android设备上部署Simulink模型金宝app

请注意:在继续此步骤之前,

  • 您必须拥有Simulink Co金宝appder许可证。

  • 确保位置设置您的Android设备已打开。

1.在Simuli金宝appnk模型工具栏上,“仿真停止时间”参数指定在mat文件中记录坐标的持续时间。例如,如果“模拟停止时间”参数为10.0秒,记录坐标10.0秒,然后记录停止。然而,该模型将持续运行一段不确定的时间。在本例中,模拟停止时间指定为,表示该坐标将被无限期地记录。

2.硬件选项卡中的Simuli金宝appnk模型模式部分中,选择在船上跑然后点击构建、部署和启动.此操作将在您的Android设备上构建并下载模型。成功部署后,应用程序开始在设备上运行,并在mat文件中记录纬度和经度坐标。

3.拿着设备走路。确保至少在模拟停止时间参数指定的时间内行走。

步骤5:从Android设备导入mat文件

1.通过在MATLAB命令窗口中输入以下命令,将mat文件从Android设备复制到MATLAB中:

[] = codertarget.android.internal.getFiles('')

variable1是一个MATLAB变量,用于显示复制操作的状态。variable2显示复制到MATLAB的mat文件列表。在一次不成功的复制操作中,variable2显示错误消息。

例如,

[result, matFiles] = codertarget.android.internal.getFiles('androidMatFile')
结果=
0
matFiles =
“成功从设备中提取以下文件:androidMatFile_1_1.”垫androidMatFile_1_2。垫androidMatFile_1_3。垫androidMatFile_1_4。垫androidMatFile_1_5。垫androidMatFile_1_6。垫androidMatFile_1_7。垫androidMatFile_1_8。垫的

成功复制文件后,的值结果变量就0.的matFiles变量显示复制到MATLAB中的mat文件的名称。您还可以在MATLAB当前文件夹窗口中看到复制的文件。

的值,如果MATLAB在复制文件时遇到任何问题结果变量更改为非零值。的matFiles变量显示相应的错误消息。

2.方法将所有mat文件合并为单个mat文件Android_MAT_stitcher命令。该命令将当前目录中以相同名称开头的所有mat文件合并为一个文件。拼接的顺序基于文件名末尾的数字字符。缝合文件的名称以__stitched.mat

请注意:一个预加载的缝合文件可供您使用。要使用预加载的文件,请按照本节的下一步所述直接加载该文件。

Android_MAT_stitcher (dir (' * .mat '));

有关缝合命令的信息,请输入编辑(“Android_MAT_stitcher.m”);

3.加载缝合的mat文件。

负载(' < stitchedMATfile >”);

例如,

负载(“androidMatFile_1__stitched.mat”);

4.要查看已记录的纬度和经度坐标,请双击rt_latitude而且rt_longitude中的变量工作空间窗口。

第六步:用经纬度计算速度

1.将坐标值赋给MATLAB变量。

Lat = rt_latitude.signals.values;Lon = rt_longitude.signals.values;

2.计算你旅行的速度。

L =长度(lat);半径= 6371.00;时间= 1;社民党= 0 (l, 1);如果t= 1:l如果t>1 oldat = lat(t);Oldlon = lon(t);newLat = lat(t-1);newLon = lon(t-1);dat = deg2rad(newLat-oldLat);dLon = deg2rad(newLon- oldlon); a = sin(dLat/2) * sin(dLat/2) + ... cos(deg2rad(oldLat)) *cos(deg2rad(newLat)) * ... sin(dLon/2) * sin(dLon/2); c = 2 * asin(sqrt(a)); spd(t) = (6371.00 * c*1609.00 *60)/1000; else spd(t) = 0; end end

步骤7:将速度范围与颜色值相关联

要用离散颜色表示速度,请对速度值进行bin。

nBins = 10;binSpacing = (max(spd) - min(spd))/nBins;binRanges = min(spd):binSpacing:max(spd)-binSpacing;
要将最后一个bin以上的值括起来,在binRanges中添加一个inf。binRanges(end+1) = inf;
%|histc|决定每个速度值的bin。[~, spdBins] = histc(spd, binRanges);

步骤8:按速度分割经纬度数据

请注意:在继续此步骤之前,您必须具有映射工具箱许可证。

MATLAB为每个速度箱创建不连续线段。每一段都被赋予了相同的颜色。这样创建的总线段比将每个相邻的纬度和经度值对作为它们自己的线段要少得多。

获取这些段的地理向量特征geoshape命令。

spdBins = spdBins';
创建一个空的geoshape向量s = geoshape();
当k = 1时:nins
只存储与当前bin匹配的lat和lon值。指定%不匹配的值为NaN。NaN被解释为线段中的断线。latValid = nan(1, length(lat));latValid(spdBins==k) = lat(spdBins==k);
lonValid = nan(1, length(lon));lonValid(spdBins==k) = lon(spdBins==k);
对于一个连续路径,存储从当前速度仓转换到下一个速度仓后发生的lat和lon值。transitions = [diff(spdBins) 0];insertionInd = find(spdBins==k & transitions~=0) + 1;
预分配空间并插入额外的lat和lon值。latSeg = 0 (1, length(latValid) + length(insertionInd));latSeg(insertionInd + (0:length(insertionInd)-1)) = lat(insertionInd);latSeg(~latSeg) = latValid;
lonSeg = 0(1,长度(lonValid) +长度(insertionInd));lonSeg(insertionInd + (0:length(insertionInd)-1)) = lon(insertionInd);lonSeg(~lonSeg) = lonValid;
将纬度和长度值分配给地理形状矢量。s(k) = geoshape(latSeg, lonSeg);
结束

步骤9:创建Web地图和路由覆盖

1.在浏览器中打开一个网络地图。

wm = webmap('公开街道地图');

2.在地图上画出你当前的位置作为参考。在本例中,MathWorks®印度班加罗尔办公室被标记。

mwLat = 12.9434;mwLon = 77.6914;name = 'MathWorks';iconDir = fullfile(matlabroot,'toolbox','matlab','icons');iconFilename = fullfile(iconDir, 'matlabicon.gif');wmmarker(mwLat, mwLon, 'FeatureName', name, 'Icon', iconFilename);

3.控件用不同颜色表示每个速度箱秋天命令。该命令创建一个nBins3数组。数组中的每一行都包含代表每个箱子的颜色的红色、绿色和蓝色强度。

颜色=秋天(nins);

4.控件在web地图上绘制线叠加wmline命令。地图可以直观地显示你的路线和行程速度。折线表示路由。折线的颜色代表旅程的速度。

wmline(s, 'Color', colors, 'Width', 5);

5.要控制网页地图的缩放级别,请使用wmzoom命令。

wmzoom (16);

另请参阅

Android设备mat文件中的日志信号