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