Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

Carga y reproducción MAVLink TLOG

Este ejemplo muestra cómo cargar un registro de telemetría (TLOG) que contiene paquetes MAVLink en MATLAB®. Los detalles de los mensajes se extraen para el trazado. A continuación, para simular el vuelo de nuevo, los mensajes se vuelven a publicar a través de la interfaz de comunicación MAVLink. Esta publicación imita un vehículo aéreo no tripulado (UAV) que ejecuta el vuelo registrado en el tlog.

Cargar MAVLink TLOG

Cree un objeto utilizando el dialecto.mavlinkdialect"common.xml" Utilícelo con este dialecto para cargar los datos TLOG.mavlinktlog

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

Extraiga los mensajes GPS del TLOG y visualícelos utilizando .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);

Extraiga los mensajes de actitud del TLOG. Especifique el nombre del mensaje para los mensajes de actitud. Trazar el rollo, tono, datos de guiseda utilizando .stackedplot

msgs = readmsg(logimport,'MessageName','ATTITUDE','Time',[0 100]);  figure stackedplot(msgs.Messages{1},{'roll','pitch','yaw'});

Entradas de registro MAVLink de reproducción

Cree una interfaz de comunicación MAVLink y publique los mensajes del TLOG al puerto UDP definido por el usuario. Cree un remitente y un receptor para pasar los mensajes MAVLink. Este sistema de comunicación funciona de la misma manera que el hardware real publicaría mensajes utilizando los protocolos de comunicación 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));

Envíe los primeros 100 mensajes a una velocidad de 50 Hz utilizando un objeto.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

Desconecte de ambas interfaces de comunicación MAVLink.

disconnect(receiver) disconnect(sender)