MAVLink 비행 로그 시각화 및 재생하기
MAVLink 패킷이 포함된 텔레메트리 로그(TLOG)를 MATLAB®으로 불러옵니다. 플로팅에 사용할 수 있는 메시지의 세부 정보가 추출됩니다. 그런 다음, 비행을 다시 시뮬레이션하기 위해 MAVLink 통신 인터페이스를 통해 메시지가 다시 퍼블리시됩니다. 이렇게 퍼블리시된 메시지는 UAV(무인 항공기)가 tlog에 기록된 비행을 실행하는 모습을 모방합니다.
MAVLink TLOG 불러오기
"common.xml" dialect를 사용하여 mavlinkdialect 객체를 생성합니다. mavlinktlog를 이 dialect와 함께 사용하여 TLOG 데이터를 불러옵니다.
dialect = mavlinkdialect('common.xml'); logimport = mavlinktlog('mavlink_flightlog.tlog',dialect);
TLOG에서 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);

TLOG에서 자세(attitude) 메시지를 추출합니다. 자세 메시지의 메시지 이름을 지정합니다. stackedplot을 사용하여 롤 데이터, 피치 데이터, 요 데이터를 플로팅합니다.
msgs = readmsg(logimport,'MessageName','ATTITUDE','Time',[0 100]); 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개의 메시지를 50Hz 속도로 보냅니다.
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)