MATLAB 实时绘图

为 SITL 实现的高速 MATLAB UDP 连接也可用于将 ArduPilot 的数据流传输到 MATLAB。这样就可以在 MATLAB 中进行实时绘图和计算。这只是一个单向链接,数据无法传回 ArduPilot。ArduPilot 可以使用其任何 模拟后端包括 MATLAB 或 Simulink,前提是它们在第二个 MATLAB 实例中运行。这种方法可用于缩短以前需要 SITL 测试飞行和日志分析的任何分析时间。

为了避免滞后,MATLAB 必须以足够快的速度处理数据,使输入缓冲区保持为空。这种工具的常见用例是函数原型。一旦函数在 MATLAB 中按预期运行,就可以手动将其翻译为 C++,并在 ArduPilot 中本地运行。然后,c++ 结果可以包含在流向 MATLAB 的数据中,以便与原型实现进行比较。

只需对 ArduPilot 进行少量修改。首先,必须在相关 cpp 的头文件中包含套接字库。然后定义一个 socket 私有变量。例如

#include <AP_HAL/utility/Socket.h>;
 流媒体示例
{
  私人:
  SocketAPM   袜子{};
};

然后,在相关函数中,数据被组合成一个结构,并通过 UDP 发送出去。请注意,结构必须对齐,最简单的方法是使用相同的变量类型。IP 和端口号的设置应与 MATLAB 中使用的一致。

结构 有趣的数据 {
  浮动 数据1 = 有趣的数字1;
  浮动 数据2 = 有趣的数字2;
  浮动 数据3 = 有趣的数字2;
} 要发送的数据;

袜子.发送到(及样品;要发送的数据, 侧面(要发送的数据), 127.0.0.0.1, 9002)

接收数据的 MATLAB 代码如下,TCP/UDP/IP 工具箱应添加到 MATLAB 路径中。

% 启动  UDP 
pnet('closeall';)
u = pnet('udpsocket';,9002); %   比赛  中古  美联社
pnet(u,'setreadtimeout';,0);

字节数 =  3*4; % 期待 3 花车  4 字节数 每种

虽然 

  % 看看 如果 那儿  无论何事 等待
  字节数 = pnet(u,'readpacket';,字节数);

  如果 字节数 == 0
      % 等待 对于 数据
      %  可以 使用  等待  更新 您的 剧情
      虽然 
          字节数 = pnet(u,'readpacket';,字节数);
          如果 字节数 >; 0
              断裂;
          最后
      最后
  最后

  % 阅读  数据  美联社
  % C++ 花车  a MATLAB 单人 类型,  期待 3, 铸造  双倍 作为 中古  MATLAB 本地
  数据接收 = 双人(pnet(u,'阅读';,3,'单身';,'英特尔';));

  % 转化   美联社 变量 姓名 对于 一致性
  有趣的数字1 = 数据接收(1);
  有趣的数字2 = 数据接收(2);
  有趣的数字3 = 数据接收(3);

  %  什么 有趣 这里

最后