Этот пример показывает, как загрузить телеметрический журнал (TLOG), содержащий пакеты MAVLink в MATLAB®. Детали сообщений извлечены для графического вывода. Затем чтобы моделировать рейс снова, сообщения переизданы по коммуникационному интерфейсу MAVLink. Эта публикация подражает беспилотному воздушному автомобилю (UAV), выполняющему рейс, зарегистрированный в tlog.
Создайте объект mavlinkdialect
с помощью диалекта "common.xml"
. Используйте 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, соединяют интерфейсом и публикуют сообщения от 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 Гц с помощью объекта robotics.Rate
.
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 communcation интерфейсы.
disconnect(receiver) disconnect(sender)