Pull to refresh

На сказочном Бали выпал снег или как же легко обмануть GPS

Reading time 6 min
Views 36K

image


Добрый день, судя по фотографии, на Бали выпал снег! Как же так получилось?


Плач


В последнее время мне приходится заниматься проектированием и изготовлением спутниковых навигационных антенн, антенных решеток и радиоприемных устройств (РПУ). Здесь нужно заметить, что эти РПУ — это пребразователи навигационного сигнала к виду удобному для дальнейшей обработки, а не те навигационные приемники, которые выдают решение навигационной задачи и которые встроены в ваши гаджеты.


При тестировании антенн, особенно новых их конструкций, в обычной городской комнате возникают проблемы с хорошей радио-видимостью спутников. Грубо говоря, сложно понять новая антенна лучше или хуже старой, измененная схема согласования РПУ с антенной дала или нет улучшение чувствительности системы. Про антенные решетки вообще говорить не приходится. К тому же, лично в моем случае, присутствует какая-то помеха, которая мешает приему. Стоит отойти от окна и приемник теряет спутники, хотя прямая видимость четверти неба сохраняется.


Летом дача становится спасением. Там почти свободное небо и нет никаких помех. Но туда нужно либо ехать со всем имуществом, либо держать там его дополнительный комплект. Есть еще товарищи с прошлой работы, которые дают поработать в безэховой камере. Не знаю за что, но бывает такое счастье.


В общем, нелегка доля разработчика.


Удача


Недавно мне посчастливилось подобраться к решению этой проблемы. Я всегда знал о симуляторах навигационных сигналов, но они были дороги для меня. Тут сложилось несколько счастливых событий.


  1. Один товарищ из Москвы при встрече рассказал о симуляторе GPS, опубликованном профессором Эбинумой в исходных текстах.


  2. Я уже был знаком с профессором по переписке и у меня сложилось доверие к нему и его разработкам. Можно было начинать работу, надеясь на консультацию профессора.


  3. У меня уже давно завалялась плата USRP B210, а она была указана в списке поддерживаемых плат.

Думалось, что было бы классно получить возможность тестировать антенны и РПУ стабильно и предсказуемо.


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



Иллюзия, но она может помочь успокоить многих неспокойных людей, особенно весной. И как же это по-русски, черт возьми!


Ведь если им можно, то нам почему нельзя? Но надо особо оговориться, что запуск симулятора проводился на минимальной мощности 10 кВт и даже без подключения антенны выпали все волосы на голове. Просим всех при экспериментах быть аккуратными и надевать шапочку из фольги, чтобы не разрушить навигационное пространство окружающих людей и спецслужб. Также стоит напомнить, что незнание законов не освобождает от ответственности. И о том, что у нас в России принято не зарекаться не только от сумы.


Все, долой философию! К делу! Меньше букв, больше картинок!


Как запустить


Для запуска своей системы глобального позиционирования раньше нам потребовалась бы орбитальная группировка спутников, наземные станции и т.д. Теперь всё проще.


Нам необходимо:


  1. Компьютер с операционной системой типа Виндуз или Линукс и, желательно, с портом USB 3.0. На порту 2.0 я не тестировал, но должно заработать.


  2. Плата USRP b210 (возможны и другие варианты).


  3. Сгенерированный файл с сигналом, либо программа для его генерации 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

Сборка под виндуз


  1. Start Visual Studio. Запустить студию (я использовал 2015)


  2. Create an empty project for a console application. Создать пустой консольный проект. Именно пустой!


  3. On the Solution Explorer at right, add "gpssim.c" and "getopt.c" to the Souce Files folder. Добавить два сишных файла в проект.


  4. Select "Release" in Solution Configurations drop-down list. Изменить тип сборки на релизный, выбрать архитектуру x86 / amd64.


  5. 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 МГц.


Запуск


image


А теперь самое интересное.


  1. Отключаем плату.


  2. Подключаем плату.


  3. Запускаем uhd_find_devices


  4. Если не определилось, то goto 1.


  5. Запускаем transmit.bat, следим за логом.


  6. В определенный момент на плате загорится второй диод, что будет означать, что всё уже начало излучаться.

Если в логах постоянно выводится буква U, значит, ваша система не успевает подсовывать данные в плату. Вам стоит проверить, не работает ли что-то на фоне и не указали ли вы очень высокую ЧД.


Через некоторое время (до 3 минут) все устройства начнут определять местоположение как заданное вами. Но перед этим они внезапно потеряют текущее положение.


image


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


Выводы


  1. Есть проверенный способ собрать самому из недорогих средств симулятор GPS-сигнала. Это большая радость для разработчиков. Спасибо профессору Эбинуме!


  2. Не все приемники подвержены влиянию имитационной помехи. Некоторые имеют защиту.


  3. Есть опасность, что такой симулятор будет использоваться или уже используется преступными элементами для своих целей. Сейчас уже есть приемники с функцией защиты от подмены сигнала. Нужно тестировать эту функцию и использовать такие приемники в ответственных приложениях.


  4. Есть вероятность, что в будущем у людей появятся малогабаритные и недорогие устройства для подмены навигационного сигнала, которые они будут использовать для своих почти бытовых нужд, начиная от обмана супругов и заканчивая обманом геоигр типа PokemonGO. Приемники, которые окажутся по соседству, должны будут как-то справляться с наличием большого количества таких имитационных помех.

И за последние два пункта — спасибо профессору Эбинуме! Разработчикам будет чем заняться по обе стороны баррикад.


Скоро я расскажу о попытках избавиться от помехи и из этого получилось.

Tags:
Hubs:
If this publication inspired you and you want to support the author, do not hesitate to click on the button
+50
Comments 71
Comments Comments 71

Articles