【MATLAB UAV Toolbox】使用指南(二)

可视化和回放MAVLink飞行日志

这个例子将展示如何将包含MAVLink包的遥测日志(TLOG)加载进MATLAB。提取的详细信息用来绘图。然后再次仿真飞行,这些消息通过MAVLink通信接口重新发布。发布的内容则是模仿无人机执行遥测日志记录的飞行情况。

加载MAVLink遥测日志

common.xml创建一个对象mavlinkdialect给到dialect。使用mavlinktlogdialect用于加载遥测日志的数据。

dialect = mavlinkdialect('common.xml');
logimport = mavlinktlog('mavlink_flightlog.tlog',dialect);

从遥测日志中提取GPS信息和用交会图统计分析(GeoPlot)将其可视化

msgs = readmsg(logimport, 'MessageName', 'GPS_RAW_INT', ...
                          'Time',[0 100]);
latlon = msgs.Messages{1};
% filter out zero-valued messages
latlon = latlon(latlon.lat ~= 0 & latlon.lon ~= 0, :);
figure()
geoplot(double(latlon.lat)/1e7, double(latlon.lon)/1e7);

【MATLAB UAV Toolbox】使用指南(二)_第1张图片
从遥测信息中提取姿态信息。指定姿态信息的信息名称。使用叠加图(stackedplot)绘制横滚、俯仰、偏航数据。

msgs = readmsg(logimport,'MessageName','ATTITUDE','Time',[0 100]);

figure()
stackedplot(msgs.Messages{1},{'roll','pitch','yaw'});

【MATLAB UAV Toolbox】使用指南(二)_第2张图片

播放MAVLink日志条目

创建MAVLink通信接口,并将来自遥测信息的消息发布到自定义的UDP端口。
创建用于传递MAVLink消息的发送方和接收方。
该通信系统的工作方式与实际硬件使用MAVLink通信协议发布消息的方式相同。

sender = mavlinkio(dialect,'SystemID',1,'ComponentID',1,...
                   'AutopilotType',"MAV_AUTOPILOT_GENERIC",...
                   'ComponentType',"MAV_TYPE_QUADROTOR");
connect(sender,'UDP');

destinationPort = 14550;
destinationHost = '127.0.0.1';

receiver = mavlinkio(dialect);
connect(receiver,'UDP','LocalPort',destinationPort);

subscriber = mavlinksub(receiver,'ATTITUDE','NewMessageFcn',@(~,msg)disp(msg.Payload));

以50Hz的速率发送前100条消息。

payloads = table2struct(msgs.Messages{1});
attitudeDefinition = msginfo(dialect, 'ATTITUDE');
for msgIdx = 1:100
    sendudpmsg(sender,struct('MsgID', attitudeDefinition.MessageID, 'Payload', payloads(msgIdx)),destinationHost,destinationPort);
    pause(1/50);
end

断开MAVLink通信接口

disconnect(receiver)
disconnect(sender)

你可能感兴趣的:(matlab,开发语言)