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(校验和值));
最后