Загрузите и воспроизведите MAVLink TLOG

В этом примере показано, как загрузить телеметрический журнал (TLOG), содержащий пакеты MAVLink в MATLAB®. Детали сообщений извлечены для графического вывода. Затем чтобы симулировать рейс снова, сообщения переизданы по коммуникационному интерфейсу MAVLink. Эта публикация подражает беспилотному воздушному транспортному средству (UAV), выполняющему рейс, зарегистрированный в tlog.

Загрузите MAVLink TLOG

Создайте mavlinkdialect объект с помощью "common.xml" диалект. Используйте mavlinktlog с этим диалектом, чтобы загрузить данные TLOG.

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

Извлеките сообщения GPS из TLOG и визуализируйте их использующий geoplot.

msgs = readmsg(logimport, 'MessageName', 'GPS_RAW_INT');
latlon = msgs.Messages{1};
% filter out zero-valued messages
latlon = latlon(latlon.lat ~= 0 & latlon.lon ~= 0, :);
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

Создайте коммуникацию 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 Гц с помощью robotics.Rate объект.

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

Отключите от обоих MAVLink communcation интерфейсы.

disconnect(receiver)
disconnect(sender)