Добрый день, судя по фотографии, на Бали выпал снег! Как же так получилось?
Плач
В последнее время мне приходится заниматься проектированием и изготовлением спутниковых навигационных антенн, антенных решеток и радиоприемных устройств (РПУ). Здесь нужно заметить, что эти РПУ — это пребразователи навигационного сигнала в виду удобному для дальнейшей обработки, а не те навигационные приемники, которые выдают решение навигационной задачи и которые встроены в ваши гаджеты.
При тестировании антенн, особенно новых их конструкций, в обычной городской комнате возникают проблемы с хорошей радио-видимостью спутников. Грубо говоря, сложно понять новая антенна лучше или хуже старой, измененная схема согласования РПУ с антенной дала или нет улучшение чувствительности системы. Про антенные решетки вообще говорить не приходится. К тому же, лично в моем случае, присутствует какая-то помеха, которая мешает приему. Стоит отойти от окна и приемник теряет спутники, хотя прямая видимость четверти неба сохраняется.
Летом дача становится спасением. Там почти свободное небо и нет никаких помех. Но туда нужно либо ехать со всем имуществом, либо держать там его дополнительный комплект. Есть еще товарищи с прошлой работы, которые дают поработать в безэховой камере. Не знаю за что, но бывает такое счастье.
В общем, нелегка доля разработчика.
Удача
Недавно мне посчастливилось подобраться к решению этой проблемы. Я всегда знал о симуляторах навигационных сигналов, но они были дороги для меня. Тут сложилось несколько счастливых событий.
-
Один товарищ из Москвы при встрече рассказал о симуляторе GPS, опубликованном профессором Эбинумой в исходных текстах.
-
Я уже был знаком с профессором по переписке и у меня сложилось доверие к нему и его разработкам. Можно было начинать работу, надеясь на консультацию профессора.
- У меня уже давно завалялась плата USRP B210, а она была указана в списке поддерживаемых плат.
Думалось, что было бы классно получить возможность тестировать антенны и РПУ стабильно и предсказуемо.
А потом, думалось, это ведь наша почти традиционная русская забава — обманывать GPS. Я вспомнил, как сам недавно был отброшен информационно из района метро Третьяковская в аэропорт Внуково. А можно даже сделать что-то типа матрешки — запустить на Третьяковской ложный сигнал, как будто я на Третьяковской.
Иллюзия, но она может помочь успокоить многих неспокойных людей, особенно весной. И как же это по-русски, черт возьми!
Ведь если им можно, то нам почему нельзя? Но надо особо оговориться, что запуск симулятора проводился на минимальной мощности 10 кВт и даже без подключения антенны выпали все волосы на голове. Просим всех при экспериментах быть аккуратными и надевать шапочку из фольги, чтобы не разрушить навигационное пространство окружающих людей и спецслужб. Также стоит напомнить, что незнание законов не освобождает от ответственности. И о том, что у нас в России принято не зарекаться не только от сумы.
Все, долой философию! К делу! Меньше букв, больше картинок!
Как запустить
Для запуска своей системы глобального позиционирования раньше нам потребовалась бы орбитальная группировка спутников, наземные станции и т.д. Теперь всё проще.
Нам необходимо:
-
Компьютер с операционной системой типа Виндуз или Линукс и, желательно, с портом USB 3.0. На порту 2.0 я не тестировал, но должно заработать.
-
Плата USRP b210 (возможны и другие варианты).
-
Сгенерированный файл с сигналом, либо программа для его генерации GPS-SDR-SIM от проф. Эбинумы.
- Блог профессора (немного не по-русски)
- Исходники симулятора
Порядок установки
Для запуска всего этого добра на компьютер надо неторопясь и аккуратно установить от производителя платы набор софта. Хотя, может, это и не обязательно. Но пусть будет. При установке под виндуз оно иногда жалуется, что не может добавить себя в PATH, но это не мешает, так как из всего этого добра мне понадобилась только утилитка uhd_find_devices.exe, которая позволила понять, увидела ли вообще система эту плату. Найти утилиту можно по адресу:
C:/UHD/bin/uhd_find_devices.exe
Затем втыкаем плату и открываем диспетчер задач. Где можно обнаружить, что драйверов под устройство автоматом не установилось. Что же – бывает. Вручную с помощью программки zadig указываем системе, что под плату надо использовать драйвера libusb, т.е. winusb.
После того, как система подцепила стандартный драйвер, можно запустить uhd_find_devices из набора софта от производителя платы. Эта утилита должна найти плату и прошить её контроллер (там стоит FX3 от Cypress). Кажется, после этого устройство изменит свой PID и надо будет рассказывать системе (с помощью zadig), что и под это устройство можно использовать стандартные драйвера winusb.
Конечно же оно с первого раза не заработает. И конечно же это можно вылечить путем отсоединения платы и подсоединения обратно. Вот подробная инструкция.
Необходимо установить гнурадио, которое внутри себя содержит пайтон-питон. Я взял отсюда последнюю версию под AVX2 процессоры.
Мне было лень настраивать правильным образом окружение, поэтому я воспользовался скриптом, входящим в комплект: C:/GNURadio-3.7/bin/run_gr.bat
Через него я буду запускать скрипт для посылки сгенерированного файла в плату b210.
Для удобства путь до этого скрипта надо добавить в переменную окружения PATH.
Генерация сигнала
Исходники берем тут. Что приятно удивило, так это легкость и простота сборки. Никаких зависимостей, никаких дополнительных действий. Все бы так.
Сборка под линукс
$ gcc gpssim.c -lm -O3 -o gps-sdr-sim
Сборка под виндуз
-
Start Visual Studio. Запустить студию (я использовал 2015)
-
Create an empty project for a console application. Создать пустой консольный проект. Именно пустой!
-
On the Solution Explorer at right, add "gpssim.c" and "getopt.c" to the Souce Files folder. Добавить два сишных файла в проект.
-
Select "Release" in Solution Configurations drop-down list. Изменить тип сборки на релизный, выбрать архитектуру x86 / amd64.
- Build the solution. Собственно, собрать.
Я под линукс не собирал, т.к. была необходимость запустить всё на конкретной машине, а на ней стояла десятка.
Подробное описание параметров генератора есть в ридми. Для начала можно не разбираться, а сделать очень просто, сгенерировать сигнал таким образом:
gps-sdr-sim.exe -e brdc3540.14n -s 2500000 -l 30.286502,120.032669,100 -b 8 -d 300 -v -o sim.bin
-
gps-sdr-sim.exe — это файл, который вы собрали студией.
-
brdc3540.14n — это файл с эфемеридами спутников.
-
2500000 — это частота дискретизации
-
30.286502,120.032669 — координаты
-
100 — высота
-
8 — это разрядность чисел в выходном файле (один отсчет — это IQ, два числа).
-
300 — это длительность в секундах.
-
-v — это чтобы побольше писало в лог
- sim.bin — имя выходного файла.
Вы можете взять строчку из ридми, но она сгенерирует сигнал с ЧД=2,6 МГц, тогда и b210 надо будет настраивать на ту же ЧД (частота дискретизации). Если сгенерировать с одной частотой, а на плату выдавать с другой, то, конечно же, ничего не заработает.
Сигнал на плату я подавал с помощью такой команды:
run_gr.bat gps-sdr-sim-uhd.py -t sim.bin -s 2500000 -x 40
40 — это уровень. 2500000 — это ЧД. Подробное описание настроек можно увидеть в файле gps-sdr-sim-uhd.py, он очень прост для понимания.
Для b210 значение ЧД должно нацело делить частоту внутреннего генератора, а он там, кажется 40 МГц.
Запуск
А теперь самое интересное.
-
Отключаем плату.
-
Подключаем плату.
-
Запускаем uhd_find_devices
-
Если не определилось, то goto 1.
-
Запускаем transmit.bat, следим за логом.
- В определенный момент на плате загорится второй диод, что будет означать, что всё уже начало излучаться.
Если в логах постоянно выводится буква U, значит, ваша система не успевает подсовывать данные в плату. Вам стоит проверить, не работает ли что-то на фоне и не указали ли вы очень высокую ЧД.
Через некоторое время (до 3 минут) все устройства начнут определять местоположение как заданное вами. Но перед этим они внезапно потеряют текущее положение.
Внимательно прочитав инструкцию к программе проф. Эбинумы можно понять, как сгенерировать файл с изменяющимся местоположением, как использовать другие даты и прочее.
Выводы
-
Есть проверенный способ собрать самому из недорогих средств симулятор GPS-сигнала. Это большая радость для разработчиков. Спасибо профессору Эбинуме!
-
Не все приемники подвержены влиянию имитационной помехи. Некоторые имеют защиту.
-
Есть опасность, что такой симулятор будет использоваться или уже используется преступными элементами для своих целей. Сейчас уже есть приемники с функцией защиты от подмены сигнала. Нужно тестировать эту функцию и использовать такие приемники в ответственных приложениях.
- Есть вероятность, что в будущем у людей появятся малогабаритные и недорогие устройства для подмены навигационного сигнала, которые они будут использовать для своих почти бытовых нужд, начиная от обмана супругов и заканчивая обманом геоигр типа PokemonGO. Приемники, которые окажутся по соседству, должны будут как-то справляться с наличием большого количества таких имитационных помех.
И за последние два пункта — спасибо профессору Эбинуме! Разработчикам будет чем заняться по обе стороны баррикад.
Скоро я расскажу о попытках избавиться от помехи и из этого получилось.
Автор: itsar