Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

MAVLink フライト ログの可視化と再生

MAVLink パケットを含むテレメトリ ログ (TLOG) を MATLAB に読み込みます。メッセージの詳細をプロット用に抽出します。次に、フライトのシミュレーションを再実行するために、MAVLink 通信インターフェイスを介してメッセージを再パブリッシュします。このパブリッシュは、TLOG に記録された無人航空機 (UAV) によるフライト実行を模しています。

MAVLink TLOG の読み込み

"common.xml" ダイアレクトを使用して mavlinkdialect オブジェクトを作成します。このダイアレクトを指定して mavlinktlog を使用し、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 から姿勢メッセージを抽出します。姿勢メッセージのメッセージ名を指定します。stackedplot を使用してロール、ピッチ、ヨーのデータをプロットします。

msgs = readmsg(logimport,'MessageName','ATTITUDE','Time',[0 100]);

figure()
stackedplot(msgs.Messages{1},{'roll','pitch','yaw'});

MAVLink ログ エントリの再生

MAVLink 通信インターフェイスを作成し、ユーザー定義の UDP ポートに TLOG からのメッセージをパブリッシュします。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 Hz のレートで送信します。

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)