MATLAB 串行驱动程序测试

TCP/UDP/IP 工具箱还可用于直接与 SITL 串行端口交互。这样就可以使用 MATLAB 复制传感器协议,以便测试和调试 ArduPilot 驱动程序。与之前的示例不同,这里使用的是 TCP 协议,可以进行双向通信。默认情况下,SITL 将 5760 至 5763 端口用于串行端口 0 至 3。 应将适当的 SERIALx_PROTOCOL 参数设置为正在测试的驱动程序,波特率不会被使用。这种 MATLAB 工具大大加快了驱动程序的开发速度,无需在真实硬件上进行闪存和测试。

这是一个用于从模拟水速传感器发送 NMEA 字符串的示例:

厘
清除

% 这 是 a 范例 的 使用 MATLAB 至 测试 a 传感器 驾驶 使用 TCP
% 我们 发送 a NMEA 信息 于 1赫兹, 备注 那 此 假设 那 SITL 是
% 跑步 于 真正的 时间.

% NMEA 是 a 基本的 一种 办法 规程 但 更多 复杂 协议 会 是
% 已实施 于 的 一样 办法

% 使用 的 一样 TCP/UDP 图书馆 那 是 中古 对于 MALTAB SITL
添加路径(基因路径(';.../.../SITL/examples/JSON/MATLAB/tcp_udp_ip_2.0.6';))

% 如果 此 dosn'不工作 先试试 MALTAB SITL 示例
pnet('closeall';)

% 启动 的 TCP 港, 5763 是 串行 2
u = pnet('tcpconnect';,'127.0.0.1',5763);

触发器 = 真;
虽然(真)

    如果 触发器
        % 发送 MTW 温度 信息
        水温 = 10 + randn();
        NMEA_string = sprintf('$YXMTW、%0.1f,C',水温);
    不然
        % 发送 VHW 速度 信息
        水流速度 = 5 + randn()*2;
        水流速度 = 水流速度 * 1.852;
        NMEA_string = sprintf('$vwvhw,,t,,m、%0.1f,N,%0.1f,F',水流速度,水流速度);
    最后
    触发器 = ~触发器;

    % 计算 的 正确的 校验和值
    NMEA_string = 添加校验和(NMEA_string);

    % 发送 至 ap
    pnet(u,'printf';,sprintf('%s\r\n',NMEA_string));
    pnet(u,'writepacket';);

    % 还 打印 至 MATLAB 游戏机
    fprintf(";%s\n";,NMEA_string);

    % 1赫兹 (等)
    暂停(1);
最后

功能 NMEA_string_out = 添加校验和(NMEA_string_in)
    校验和值 = uint8(0);
    对于 i = 2:数(NMEA_string_in)
        校验和值 = 比特(校验和值,uint8(NMEA_string_in(i)),'uint8';);
    最后
    NMEA_string_out = sprintf('%s*%s',NMEA_string_in,dec2hex(校验和值));
最后