最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

MAVLink TLOG の読み込みと再生

この例では、MAVLink パケットを含むテレメトリ ログ (TLOG) を MATLAB® に読み込む方法を説明します。メッセージの詳細が、プロット用に抽出されます。次に、飛行を再度シミュレートするために、MAVLink 通信インターフェイス経由でメッセージが再パブリッシュされます。このパブリッシュは、TLOG に記録されている飛行を実行する無人航空機 (UAV) を再現しています。

MAVLink TLOG の読み込み

"common.xml" 方言を使用して mavlinkdialect オブジェクトを作成します。mavlinktlog をこの方言と共に使用して、TLOG データを読み込みます。

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

TLOG から姿勢メッセージを抽出します。姿勢メッセージのメッセージ名を指定します。stackedplot を使用して、ロール、ピッチ、ヨーのデータをプロットします。

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

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

robotics.Rate オブジェクトを使用して、最初の 100 個のメッセージを 50 Hz のレートで送信します。

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

両方の MAVLink 通信インターフェイスから切断します。

disconnect(receiver)
disconnect(sender)