使用 MATLAB 来利用您的实时物联网数据
如果您曾经从传感器或其他类型的数据源进行过任何数据分析,那么您很可能遵循以下过程:收集数据、转换数据,然后使用 MATLAB 处理和分析数据。使用 MATLAB 分析数据是完成该任务的众所周知的工具。收集和转换数据以使其在 MATLAB 中可用,可能需要大量时间。由于 MathWorks 完成的集成,现在可以轻松地将 MATLAB 与在 DDS 上发布和订阅的实时数据连接起来。随着 MATLAB 成为用于分析数据的顶级工具之一,而 DDS 迅速成为 IIoT 应用程序的数据通信中间件,这种集成将为开发人员提供一些非常快速的原型设计和测试分析。这篇博文将通过几个示例介绍如何发布 DDS 数据以及如何使用 MATLAB 订阅 DDS 数据。
入门
首先,您需要确保计算机上安装了 MATLAB 和 RTI Connext DDS。对于这组示例,使用了以下版本:
- MathWorks MATLAB R2016b
- MathWorks DDS 模块集 2.9.2
- RTI Connext DDS 5.2.3(视频教程 - Linux 和 Windows 安装)
- RTI Shapes 演示应用程序(与 Connext DDS 一起安装;在此处查看教程)
- Windows 10 电脑
安装完成后,只需按照此链接中的视频即可完成并验证安装:安装视频
初始化
安装并验证所有内容后,只需几个步骤即可在 MATLAB 中正确设置 DDS。
- 导入将在您的项目中使用的数据类型。
- 创建 DDS 域参与者
- 创建 DDS 数据写入器
- 创建 DDS 数据读取器
在 MATLAB 中导入数据类型很简单。在 DDS 中,数据类型是使用 IDL 文件指定的。 MATLAB import 语句可以直接读取 IDL 文件,并将创建在 MATLAB 解释器中使用该数据类型所需的“.m”文件。以下 MATLAB 调用将从位于当前工作目录的 ShapeType.idl 文件中导入名为“ShapeType”的数据类型:
>> DDS.import('ShapeType.idl','matlab','f')
现在,在 DDS 中创建主题的 DataReader 和 DataWriter 时可以使用该数据类型。另请注意,一旦导入完成,以后就不必再运行此步骤。该类型将在 MATLAB 中可用。进行 DDS 发现的下一步是创建 DDS 域参与者。这可以在此调用中完成:
>> dp =DDS.DomainParticipant;
使用此 DomainParticipant (dp) 对象,然后您可以创建 DataWriter 和 DataReader 对象。以下两个命令将向 dp 添加 datawriter 对象和 datareader 对象,指定其类型为新创建的“ShapeType”,主题分别为“Triangle”和“Square”。
>> dp.addWriter('ShapeType','Triangle')>> dp.addReader('ShapeType','Square')
订阅形状演示中的数据
使用 ShapeType 是为了与 RTI 提供的标准 RTI Shapes Demonstration 应用程序 (Shapes) 进行通信。 Shapes 支持创建“Square”、“Circle”和“Triangle”主题的 DataWriters 和 DataReaders,这些主题依次基于“ShapeType”数据类型。有关如何使用 Shapes 应用程序的更多信息,请单击此处查看我们的视频教程。
在 Shapes 中,下一步是创建 Triangle 的订阅者。在下一个屏幕中,将所有其他 QoS 选项保留为默认值。
在 MATLAB 中发布数据
现在我们已经在 MATLAB 中设置了 DataWriter 来发送三角形主题的 ShapeType,并且我们也设置了 Shapes Demo 来接收发布,让我们练习编写器。以下命令将填充 ShapeType 的字段,然后发布关于三角形主题的数据:
%% 创建一个 ShapeTypemyData =ShapeType;myData.x =int32(75);myData.y =int32(100);myData.shapesize =int32(50);myData.color ='GREEN';%%将数据写入 DDSdp.write(myData);
Shapes Demo 中三角形主题的结果将是此处显示的单个绿色三角形:
在 MATLAB 中发布 Triangle 的一些更有趣的用例是:
%% 以 1 Hz 的频率在一行中发布绿色三角形 for i=1:10 myData.x =int32(20 + 10*i); myData.y =int32(40 + 10*i); dp.write(myData); pause(1);end%% 以 20Hz for i=1:1000 角度 =10*pi * (i/200); 以 20Hz 的频率以圆形图案发布绿色三角形; myData.x =int32(100 + (50 * cos(angle))); myData.y =int32(100 + (50 * sin(angle))); myData.shapesize =int32(40); myData.color ='绿色'; dp.write(myData);暂停(0.05);结束
Shapes Demo 上的结果输出分别为:
在形状演示中发布数据
在 Shapes 演示中,创建 Square 的发布者。在下一个屏幕中,只需选择一种颜色并将所有其他 QoS 选项保留为默认值。以下屏幕截图显示了 Square 发布屏幕。对于我的演示,我选择了一个橙色方块。这将每 30 毫秒在屏幕上发布一次 X、Y 位置。
在 MATLAB 中订阅数据
如果您还记得之前我们在 MATLAB 中向领域参与者添加了一个 Square Topic DataReader。我们将使用这个 DataReader 订阅我们现在从 Shapes Demonstration 发布的数据。 MATLAB 中的以下命令将以 1 Hz 的频率读取 10 个样本。
%% read datafor i=1:10 dp.read() pause(1);end
MATLAB 中的结果输出将是以下 10 个报告:
更有趣的事情
现在我们有两个方向,让我们对数据做一些更有创意的事情。首先,我们将读入 Square 数据并修改它以切换 X 和 Y 坐标,然后将其重新发布到 RED Triangle。其次,我们将获取生成的 Position 数据并直接在 MATLAB 中绘制它。这些是在 MATLAB 中使用的命令来实现这一点。
%% 分配一个包含 100 个元素的数组 xArray =zeros(1,100);%% 运行一个循环来收集数据并将其存储到数组中%% 还切换 X 和 Y 坐标,然后重新发布到 %% 三角形主题上i=1:100 [myData, status] =dp.read(); if ~isempty(myData) x =myData(1).x; y =myData(1).y; xArray(i) =x; yArray(i) =y; myData(1).y =x; myData(1).x =y; myData(1).color ='RED'; dp.write(myData(1)); end pause(0.05)end%% 绘制 X 位置数据t =1:100;plot(t,xArray);legend('xPos');xlabel('Time'), ylabel('Position');title('X职位');
Shapes Demo 中的结果输出将是一个与橙色正方形相反的红色三角形,并且还将在 MATLAB 中生成一个显示 X 位置数据的图:
如您所见,DDS 与 MATLAB 的集成使用起来非常简单,并且可以非常轻松地收集数据、注入数据和分析数据。在本演示中,我们使用了简单的 Shapes 应用程序,但所使用的数据也可以很容易地成为您自己的应用程序数据。如果您想了解有关 MATLAB 与 RTI Connext DDS 集成的更多信息,请访问 MathWorks 站点上的此站点:MATLAB DDS 集成。如果您想了解有关使用 Connext DDS 的更多信息,请单击此处访问我们的开发者资源。
物联网技术