このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
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)