В последнее время мне приходится заниматься проектированием и изготовлением спутниковых навигационных антенн, антенных решеток и радиоприемных устройств (РПУ). Здесь нужно заметить, что эти РПУ — это пребразователи навигационного сигнала к виду удобному для дальнейшей обработки, а не те навигационные приемники, которые выдают решение навигационной задачи и которые встроены в ваши гаджеты.
При тестировании антенн, особенно новых их конструкций, в обычной городской комнате возникают проблемы с хорошей радио-видимостью спутников. Грубо говоря, сложно понять новая антенна лучше или хуже старой, измененная схема согласования РПУ с антенной дала или нет улучшение чувствительности системы. Про антенные решетки вообще говорить не приходится. К тому же, лично в моем случае, присутствует какая-то помеха, которая мешает приему.Стоит отойти от окна и приемник теряет спутники, хотя прямая видимость четверти неба сохраняется.
Летом дача становится спасением. Там почти свободное небо и нет никаких помех. Но туда нужно либо ехать со всем имуществом, либо держать там его дополнительный комплект. Есть еще товарищи с прошлой работы, которые дают поработать в безэховой камере. Не знаю за что, но бывает такое счастье.
В общем, нелегка доля разработчика.
[ad name=»MiBand2″]
Удача
Недавно мне посчастливилось подобраться к решению этой проблемы. Я всегда знал о симуляторах навигационных сигналов, но они были дороги для меня. Тут сложилось несколько счастливых событий.
- Один товарищ из Москвы при встрече рассказал о симуляторе GPS, опубликованном профессором Эбинумой в исходных текстах.
- Я уже был знаком с профессором по переписке и у меня сложилось доверие к нему и его разработкам. Можно было начинать работу, надеясь на консультацию профессора.
- У меня уже давно завалялась плата USRP B210, а она была указана в списке поддерживаемых плат.
Думалось, что было бы классно получить возможность тестировать антенны и РПУ стабильно и предсказуемо.
А потом, думалось, это ведь наша почти традиционная русская забава — обманывать GPS. Я вспомнил, как сам недавно был отброшен информационно из района метро Третьяковская в аэропорт Внуково. А можно даже сделать что-то типа матрешки — запустить на Третьяковской ложный сигнал, как будто я на Третьяковской.
Иллюзия, но она может помочь успокоить многих неспокойных людей, особенно весной. И как же это по-русски, черт возьми!
Ведь если им можно, то нам почему нельзя? Но надо особо оговориться, что запуск симулятора проводился на минимальной мощности 10 кВт и даже без подключения антенны выпали все волосы на голове. Просим всех при экспериментах быть аккуратными и надевать шапочку из фольги, чтобы не разрушить навигационное пространство окружающих людей и спецслужб. Также стоит напомнить, что незнание законов не освобождает от ответственности. И о том, что у нас в России принято не зарекаться не только от сумы.
Все, долой философию! К делу! Меньше букв, больше картинок!
[ad name=»Responbl»]
Как запустить
Для запуска своей системы глобального позиционирования раньше нам потребовалась бы орбитальная группировка спутников, наземные станции и т.д. Теперь всё проще.
Нам необходимо:
- Компьютер с операционной системой типа Виндуз или Линукс и, желательно, с портом 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.
[ad name=»UMI 600×313″]
Генерация сигнала GPS
Исходники берем тут. Что приятно удивило, так это легкость и простота сборки. Никаких зависимостей, никаких дополнительных действий. Все бы так.
Сборка под линукс
$ 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 минут) все устройства начнут определять местоположение как заданное вами. Но перед этим они внезапно потеряют текущее положение.
Внимательно прочитав инструкцию к программе проф. Эбинумы можно понять, как сгенерировать файл с изменяющимся местоположением, как использовать другие даты и прочее.
[ad name=»Responbl»]
Выводы
- Есть проверенный способ собрать самому из недорогих средств симулятор GPS-сигнала. Это большая радость для разработчиков. Спасибо профессору Эбинуме!
- Не все приемники подвержены влиянию имитационной помехи. Некоторые имеют защиту.
- Есть опасность, что такой симулятор будет использоваться или уже используется преступными элементами для своих целей. Сейчас уже есть приемники с функцией защиты от подмены сигнала. Нужно тестировать эту функцию и использовать такие приемники в ответственных приложениях.
- Есть вероятность, что в будущем у людей появятся малогабаритные и недорогие устройства для подмены навигационного сигнала, которые они будут использовать для своих почти бытовых нужд, начиная от обмана супругов и заканчивая обманом геоигр типа PokemonGO. Приемники, которые окажутся по соседству, должны будут как-то справляться с наличием большого количества таких имитационных помех.
И за последние два пункта — спасибо профессору Эбинуме! Разработчикам будет чем заняться по обе стороны баррикад.