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);
% 做 什么 有趣 这里
最后