MAVLink 비행 로그 시각화 및 재생하기
MAVLink 패킷이 포함된 텔레메트리 로그(TLOG)를 MATLAB®으로 불러옵니다. 플로팅에 사용할 수 있는 메시지의 세부 정보가 추출됩니다. 그런 다음, 비행을 다시 시뮬레이션하기 위해 MAVLink 통신 인터페이스를 통해 메시지가 다시 퍼블리시됩니다. 이 과정에서 UAV(무인 항공기)가 로그 파일에 기록된 비행을 실행하는 모습을 모방합니다.
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)