Портрет

Лебедев Валентин Павлович
кандидат физико-математических наук, старший научный сотрудник Института солнечно-земной физики СО РАН

Что из себя представляет стенд “Узконаправленные низкоэнергетические каналы связи”? Как устроен процесс слежения “радаром” за “спутником” и как устроен процесс управления стендом? Обо всем этом можно узнать из данной темы.

#ТехнологииСвязи #ПрограммноАппаратныйКомплекс


Продолжаем знакомиться с комплексом, на котором решаются задачи трека «Технологии беспроводной связи». Стенд «Узконаправленные низкоэнергетические каналы связи» — основной стенд, он достаточно большой. Именно на этом поле разыгрываются основные события, которые решаются в задачах, предлагаемых участникам Олимпиады КД НТИ. На стенде расположены два основных «действующих лица»: это «спутник», который может двигаться влево-вправо, и объект «радар»  — статичный, но тоже может поворачиваться влево-вправо. 

Вот такие у нас два «действующих лица», с которыми можно решать и изучать различные аспекты технологий беспроводной связи.  

Как вы видите, на «спутнике» расположен квадратик с узором в виде некоторой стрелочки, этот узор (рисунок) называется ArUco маркер. Для чего он здесь расположен? Для того, чтобы «радар», на котором в свою очередь расположена камера, мог с помощью библиотек компьютерного зрения (OpenCV) распознать этот маркер и соответственно зафиксировать положение «спутника» в кадре и определить угловое положение объекта «спутник» относительно линии визирования «радара». Линия визирования «радара» — это воображаемая линия, которая ориентирована по нормали к поверхности камеры. Таким образом, чем больше этот угол, тем ближе к краю кадра находится наш «спутник». 


Какие возможности есть у «спутника»? 

В видео вы уже видели, что «спутник» может двигаться влево-вправо по прямой, но при этом характер движения у него может быть достаточно сложным и интересным. И характер движения может быть вами задан. Можно управлять через определенный файл с расписанием движения, а можно задать какую-то аналитическую функцию, по которой будет двигаться данный объект. Кроме того, «спутник» не просто движется влево-вправо пусть и каким-то замысловатым образом, «спутник» также передаёт данные — это его основная задача. Основная задача «спутника» — передача данных. Передача данных ведётся по ИК-каналу.

С ИК-каналом мы уже с вами сталкивались, когда знакомились с малым стендом, на котором были расположены шестерёнки. Здесь по ИК-каналу общаются между собой «спутник» и «радар». Скорость передачи данных тоже может меняться и настраиваться — это тоже управляемый параметр.

Давайте ещё раз перечислим те управляемые параметры, которые нам доступны для работы со «спутником»:

  • Первый это движение и положение «спутника». Движение может быть самое замысловатое: мы сегодня с вами увидим как это работает. 

  • Второй параметр — передача данных. В «спутнике» у нас находиться передатчик, в «радаре» — приёмник. 

  • Скорость передачи данных тоже может меняться. 

  • А главное на «спутнике» есть «бортовой компьютер», на который можно загружать информацию различного типа. Это могут быть текстовые файлы (какие-то рассказы), или какие-то числовые данные (например, наш «спутник» летает вокруг какой-то планеты, собирает информацию и должен в режиме реального времени передавать эту информацию на «радар», на котором в дальнейшем эта информацию будет обрабатываться). Перед отправкой данных, для того, чтобы её быстрее можно было передать, её, конечно, нужно сжать. А кроме того, её нужно защитить от помех и шумов, которые её могут исказить. Таким образом, на «бортовой компьютер» «спутника»  может быть помещён программный комплекс, который позволит вам решить эти задачи, то есть сжать информацию и закодировать каким-то помехоустойчивым кодом. 


«Радар»

В видео вы уже видели: «радар» может поворачиваться влево-вправо, на «радаре» находиться камера, которая позволяет вам определить положение «спутника» в кадре. И это положение определяется в каких-то условных единицах. «Радар» также оснащён «бортовым компьютером», на котором тоже может быть развёрнуто ваше программное обеспечение. Задача этого программного обеспечения состоит в том, чтобы декодировать тот сигнал, который передаёт «спутник».

Вы видите, что у нас есть основные элементы, которые образуют канал связи: есть передатчик, есть установленный между «спутником» и «радаром» канал связи и приёмник. В канале связи между передатчиком и приёмником действуют различные шумы и помехи, которые сигнал меняют, искажают. Естественно, основная задача у нас состоит в том, чтобы научиться передавать данные так, чтобы ни шумы, ни помехи не могли нам помешать успешно решить задачу передачи данных.

Стоит сосредоточиться на следующем моменте: «спутник» движется и, например, возникает ситуация, когда он находится у нас в левой крайней точке, а «радар» смотрит в другую сторону — в крайнее правое положение. Мы видим, что «спутник» передаёт данные прямо (в направлении на камеру), а «радар» смотрит в направлении, которое отличается от направления передачи данных примерно на 45 градусов, то есть он смотрит в другую сторону. В этом случае у нас «радар» не видит ни ArUco маркер, то есть фактически ArUco маркер вышел за пределы области зрения «радара». А кроме того, «радар» не видит сам ИК-сигнал, в котором передаются данные. Это связано с тем, что и передатчик и приёмник обладают своей диаграммой направленности. То есть передатчик излучает сигнал не во все стороны равномерно — не изотропный передатчик, а направленный — это означает, что в некотором угле зрения данные излучаются нормально и могут быть приняты и декодированы, вне этого угла данные приняты быть не могут. Потому что фактически в данном направлении сигнал излучается очень слабый и не может быть выделен в тех шумах, которые нас окружают.

Вообще говоря, на прошлых видео мы знакомились с уравнением дальности радиосвязи и в числитель данного уравнения входили у нас диаграммы направленности и коэффициент усиления антенны. Фактически это и есть антенна. И «спутник» и «радар» обладают своими антеннами и эти антенны обладают своей диаграммой направленности, своей чувствительностью. В этом положении «радара» и «спутника» сигнал у нас излучается, но не принимается на радаре, поскольку фактически антенны «радара» и «спутника» смотрят в разные стороны.

Если промоделировать ситуацию, когда «радар» напрямую смотрит на «спутник», это означает, что диаграммы направленности их антенн смотрят навстречу друг другу, коэффициент усиления здесь максимальный, и значит отношение сигнал-шум тоже максимально. А если сигнал уверенно превышает шум, то в этом случае искажение связанные с шумами уже минимальны. То есть в таком положении практически без искажения сигнал будет приниматься на «радаре». Вот это очень важно понимать, когда вы работаете с этим стендом.

Таким образом, при работе с этим стендом у вас есть возможность параллельно управлять как передачей данных и приёмом, так и управлением «радаром». Вам важно обеспечить ситуацию когда «радар» практически непрерывно будет смотреть на «спутник». В этом случае у вас соотношение сигнал-шум будет наилучшим, и соответственно помех и потерь данных практически не будет. Эти события будут крайне редки. Для управления «радаром», для решения задачи чёткого сопровождения «спутника», разработан соответствующий API,  который позволяет управлять движением «радара» влево-вправо, управлять скоростью поворота «радарной башни», запускать и останавливать «радар».


Слежение за «спутником»

Давайте теперь посмотрим, как будет работать этот стенд в случае, когда «радар» сопровождает «спутник». Управляющий компьютер взаимодействует с «бортовыми» компьютерами «спутника» и «радара». Взаимодействие с этим компьютером осуществляется через разработанный интерфейс, сейчас сконфигурированы в интерфейсе задачи, которые были предложены на одной из Олимпиад НТИ по треку «Технологии беспроводной связи».

Посмотрим внимательно на задачу № 4: Слежение за «спутником». Прежде чем переходить к решению задачи, нужно проконтролировать, что управляющий компьютер взаимодействует с «бортовыми» компьютерами «спутника» и «радара». 

В правом углу монитора вы видите цветные значки. Например, первый значок говорит о том, что сеть в порядке; следующий значок (такое стилизованное изображение радара) — цветная картинка говорит о том, что управляющий компьютер взаимодействует с «бортовым» компьютером «радара»; дальше идёт изображение значок «спутник» тоже цветной,  значит, «бортовой» компьютер «спутника» взаимодействует с управляющим компьютером; и совсем уже в правом углу тусклое серое изображение шестерёнок — не цветное изображение — это говорит о том, что стенд с шестерёнками у нас не подключен.

Данный стенд подразумевает, что к нему можно подключить через разъёмы и малый стенд с шестерёнками, и управляться этот стенд может также через общий управляющий компьютер. Так что полный комплект комплекса «Беспроводные технологии связи» включает в себя управляющий компьютер, большой стенд, на котором расположены «спутник» и «радар», а также подразумевается возможность подключения малого стенда с шестерёнками.

Задачи с шестерёнками мы с вами уже решали, и в текущей конфигурации интерфейса они пронумерованы с первой по третью.

Ну вот мы с вами разобрались с общей структурой стенда. 

Приступим к задаче, в которой необходимо как можно точнее сопровождать «радару» данный «спутник». Давайте посмотрим, какой последовательности действий нужно придерживаться для решения данной задачи. Эта последовательность действий пронумерована пунктами с первого по пятый. Что нужно сделать на первом шаге? Вообще нужно загрузить свою программу управления «радаром» — программу слежения. Ваша программа слежения может содержать весь ваш опыт разработки такого рода систем, то есть, если вы занимались в кружке с робототехникой и реализовывали алгоритм движения робота, допустим, по чёрной линии или обход препятствия, все эти знания могут пригодиться и здесь. Если вы знаете, что такое ПИД-алгоритм, ПИД-регулятор, то эти знания вам здесь, конечно же, пригодятся. Но вы увидите, что для наиболее точного сопровождения объекта нужно также применить смекалку. Только стандартный ПИД-регулятор организовать точное сопровождение не всегда вам поможет, но с эти мы разберёмся чуть попозже.

Первый шаг — загружаем наш трекер.  Ваш трекер может быть написан на языках программирования: C, C++, Python, Java. Вот на одном из этих четырёх языков программирования вы можете написать свой трекер и загрузить его непосредственно в «бортовой» компьютер «радара».

Итак, давайте попробуем, у нас есть заготовленные трекеры на всех этих языках программирования, выберем, например, на С++. Нажав на значок <> вы можете посмотреть на тот код, который вы загружаете, это очень важно для того, чтобы ничего не перепутать, для того, чтобы убедиться, что код, действительно, тот, с которым вы хотите работать. Вот здесь вы можете видеть, стандартный трекер как выглядит. 

Итак, мы убедились, что всё в порядке, что ничего не пропало, все скобочки открыты, загружаем теперь этот код на радар и компилируем. Компилировать нужно обязательно. Вот обратите внимание, что у нас в результате компиляции ошибок нет.

Здесь показан список файлов, которые сформировались на этапе компиляции, ошибок нет — значит можно запускать. А если бы ошибки были, конечно же, нужно было их отработать, иначе «радар» не стал бы работать, не сопровождал бы «спутник». 

Попробуем запустить наш трекер, сейчас «радар» будет сопровождать «спутник», а «спутник» будет двигаться по некоторой хитрой аналитической функции, но прежде чем начинать свое движение, «спутник» калибрует своё положение, он должен начинать свое движение относительно центра вот этой вот направляющей, вдоль которой он движется. Ну вот сейчас он выставился на центр и сразу же поехал вправо, и сейчас уже в данный момент он движется по некоторой аналитической замысловатой функции. Обратите внимание: «радар» пытается сопровождать объект, вот видите, он пытается удерживать камеру в направлении на объект, ну мы с вами уже понимаем, для чего это нужно, для того, чтобы передаваемый и, соответственно, принимаемый сигнал был наибольшей амплитуды. 

Ну вот сейчас «спутник» закончил передавать данные. Когда он закончил передавать данные, он останавливается. Он останавливается, значит обязательно нужно остановить процесс сопровождения, мы нажимаем на стоп-трекер. Обратите внимание, что «радар» остановился, и характерный звук двигателя прекратился.

Дальше можно посмотреть лог точности сопровождения «радаром» «спутника»

Обратите внимание, что сначала у нас идут какие-то малые цифры, вот, допустим, тут идёт сначала двоечка, двоечка, двоечка — это означает в каких-то относительных единицах смещение «спутника» относительно линии визирования «радара». Чем это число меньше, тем, соответственно, точнее «радар» сопровождает объект. Ну, а вначале-то у нас объект находился в центре, поэтому вот это вот смещение практически равно нулю. Дальше «спутник» начал двигаться, и видно резкие изменения как раз в точности сопровождения, пошли числа уже большие, тут уже вот 65, 70 относительных единиц и так далее. Вот мы видим, что в какой-то момент времени «радар» сопровождает «спутник» точнее, в какой-то — менее точно, и в зависимости от качества сопровождения, конечно, меняется сигнал-шум. Дальше пошли уже отрицательные числа. О чём это говорит? О том, что «спутник» уже находится в кадре с другой стороны от линии визирования. Лог достаточно продолжительный, мы видим, что иногда у нас возникают какие-то очень большие числа, это говорит о том, что «радар» в какой-то момент времени теряет «спутник». Это вполне себе штатная ситуация, которая означает, что либо камера не успела обработать кадр, либо библиотека, которая анализирует принятый кадр, не успела определить объект. Такие ситуации в жизни в реальной практике возникают достаточно часто, и поэтому в алгоритмах сопровождения такие вещи тоже необходимо предусматривать. Итак, мы видим, что у нас есть частичная кратковременная потеря «спутника» в кадре, дальше вот опять он появился, и вот в какой-то момент времени точность сопровождения была очень хорошей, вот опять потеря в кадре и так далее. По данным логам, как раз и можно оценить, насколько точен, насколько хорош ваш алгоритм сопровождения объектов. Можно скачать себе этот лог в файл на флешку и дальше проанализировать уже динамику вот этих самых ошибок сопровождения, которые возникли в процессе работы. И дальше уже алгоритм изменить таким образом, чтобы избежать таких внештатных ситуаций.

Итак, мы с вами посмотрели всю последовательность действий, последний шаг позволяет посмотреть, насколько хорошо ваш алгоритм справился с задачей сопровождения нашего движущегося «спутника». Вы можете получить оценку точности, в нашем случае мы видим здесь 54%, это не высокая оценка, это, скажем так, на «троечку» сопровождение. То есть можно алгоритм существенно доработать, можно сделать его лучше, максимальная оценка — это 100%. Ребята на Олимпиаде НТИ, которые работали на данном стенде, добились точности сопровождения 90%.

Мы с вами познакомились сегодня с этапами решения очень важной задачи, в которой «радар» должен сопровождать «спутник». Почему эта задача важна? Потому что, чем точнее «радар» будет сопровождать объект, тем больше отношение сигнал-шум и, соответственно, меньше ошибок, меньше каких-то искажений и потерь в принятых данных.

Для размышления

1. Используя любой из удобных вам языков программирования. Попробуйте перевести численные данные из лога слежения “радара” за “спутником” в логическое смещение по формату.
Входной формат:
32
32
-54
-54
Выходной формат:
Смещение вправо на 32 позиции
Смещение вправо на 32 позиции
Смещение влево на 54 позиции
Смещение влево на 54 позиции

Скачать данные

2. Подумайте, как можно усовершенствовать алгоритм слежения, для увеличения точности.

Материалы

Последнее изменение: Thursday, 24 December 2020, 12:19