В этом примере показано, как загрузить журнал телеметрии (TLOG), содержащий пакеты MAVLink, в MATLAB ®. Подробные данные сообщений извлекаются для печати. Затем для повторного моделирования полета сообщения повторно публикуются через интерфейс связи MAVLink. Эта публикация имитирует беспилотный летательный аппарат (БПЛА), выполняющий зафиксированный в tlog полет .
Создать mavlinkdialect с использованием "common.xml" диалект. Использовать mavlinktlog с этим диалектом для загрузки данных TLOG.
dialect = mavlinkdialect('common.xml'); logimport = mavlinktlog('mavlink_flightlog.tlog',dialect);
Извлеките сообщения GPS из TLOG и визуализируйте их с помощью 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);

Извлеките сообщения об отношении из TLOG. Укажите имя сообщения для сообщений об отношении. Постройте график крена, шага, рыскания с помощью stackedplot.
msgs = readmsg(logimport,'MessageName','ATTITUDE','Time',[0 100]); figure() stackedplot(msgs.Messages{1},{'roll','pitch','yaw'});

Создайте коммуникационный интерфейс MAVLink и опубликуйте сообщения из TLOG на пользовательском порту 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));
Передача первых 100 сообщений со скоростью 50 Гц.
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)