주요 콘텐츠

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);

Figure contains an axes object with type geoaxes. The geoaxes object contains an object of type line.

TLOG에서 자세(attitude) 메시지를 추출합니다. 자세 메시지의 메시지 이름을 지정합니다. stackedplot을 사용하여 롤 데이터, 피치 데이터, 요 데이터를 플로팅합니다.

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

Figure contains an object of type stackedplot.

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)

참고 항목

|

도움말 항목