В этом примере показано, как загрузить журнал телеметрии (TLOG), содержащий пакеты MAVLink, в MATLAB ®. Детали сообщений извлекаются для графического изображения. Затем, чтобы снова симулировать рейс, сообщения переиздаются через коммуникационный интерфейс MAVLink. Эта публикация имитирует беспилотное летательное транспортное средство (БПЛА), выполняющий рейс, записанный в tlog .
Создайте mavlinkdialect
объект с использованием "common.xml"
диалект. Использование mavlinktlog
с помощью этого диалекта для загрузки данных TLOG.
dialect = mavlinkdialect('common.xml'); logimport = mavlinktlog('mavlink_flightlog.tlog',dialect);
Извлеките GPS-сообщения из TLOG и визуализируйте их с помощью 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 и опубликуйте сообщения от 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 сообщений со скоростью 50 Гц.
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)