Курсовая работа АП СРНС 2021 — различия между версиями
Korogodin (обсуждение | вклад) (Новая страница: «== Курсовая работа 2021 == Название: '''Разработка модуля расчёта координат спутника Beidou''' К…») |
Текущая версия на 20:03, 15 февраля 2022
Содержание |
[править] Курсовая работа 2021
Название: Разработка модуля расчёта координат спутника Beidou
Курсовая работа по АП СРНС выполняется во втором семестре. В рамках проекта студенты знакомятся с рядом инструментов и техник, используемых при разработке навигационных приемников.
Цель проекта - добавление в программное обеспечение приемника функции расчета положения спутника Beidou на заданное время по данным его эфемерид.
Требования к разрабатываемому программному модулю:
- требования назначения;
- отсутствие утечек памяти;
- малое время выполнения;
- низкий расход памяти;
- корректное выполнение при аномальных входных данных.
Для достижения цели выполняется ряд задач, соответствующих этапам проекта и контрольным мероприятиям:
- обработка данных от приемника, работа со сторонними сервисами для подготовки входных и проверочных данных для разрабатываемого модуля;
- моделирование модуля в Matlab/Python;
- реализация программного модуля на С/С++, включая юнит-тестирование в Check.
Этапы курсовой работы отличаются осваиваемыми инструментами.
На каждом из этапов действуют следующие правила:
- Взаимодействие осуществляется через github (пул реквесты, комментарии)
- Этап сдан тогда, когда принят пул реквест
[править] Этап 1. Использование сторонних средств
Дедлайн: 03.03.21 (устранение замечаний и итоговый мёрдж до 09.03.21)
Конечная цель всего курсового проекта - получить библиотеку функций на Си++, позволяющую рассчитывать положение спутника Beidou по его эфемеридам. На первом этапе подготовим вспомогательные данные для разработки: эфемериды и оценки положения спутника от сторонних сервисов (чтобы было с чем сравниваться на след. этапах)
На крыше корпуса Е МЭИ установлена трехдиапазонная антенна Harxon HX-CSX601A. Она через 50-метровый кабель, сплиттер, bias-tee и усилитель подключена к трем навигационным приемникам:
- Javad Lexon LGDD,
- SwiftNavigation Piksi Multi,
- Clonicus разработки ЛНС МЭИ.
Эти приемники осуществляют первичную обработку сигналов Beidou B1I, выдавая по интерфейсам соответствующие потоки данных - наблюдения псевдодальностей и эфемериды спутников. Данные от приемника Clonicus, записанные вечером 16 февраля 2021 года, доступны в рабочем репозитории (директория logs) в нескольких форматах.
Во-первых, это дамп бинарного потока данных от приемника в формате NVS BINR.
Во-вторых, текстовый файл данных пакета 0xF7, полученный из данного дампа - для тех, кому лень разбираться с бинарным файлом и протоколом. Он получен подобным printf'ом для каждого спутника с периодом передачи эфемерид:
pack->SatNum, // 1
pack->bds[0].toe, // 2
pack->bds[0].Crs, // 3
pack->bds[0].Dn, // 4
pack->bds[0].M0, // 5
pack->bds[0].Cuc, // 6
pack->bds[0].e, // 7
pack->bds[0].Cus, // 8
pack->bds[0].sqrtA, // 9
pack->bds[0].Cic, // 10
pack->bds[0].Omega0,// 11
pack->bds[0].Cis, // 12
pack->bds[0].i0, // 13
pack->bds[0].Crc, // 14
pack->bds[0].omega, // 15
pack->bds[0].OmegaDot, // 16
pack->bds[0].iDot, // 17
pack->bds[0].Tgd, // 18
pack->bds[0].toc, // 19
pack->bds[0].af2, // 20
pack->bds[0].af1, // 21
pack->bds[0].af0, // 22
pack->bds[0].URA, // 23
pack->bds[0].IODE, // 24
pack->bds[0].IODC, // 25
pack->bds[0].codeL2,// 26
pack->bds[0].L2P, // 27
pack->bds[0].WN // 28
);
Для приемки первого этапа оформляется отчет по ГОСТ 7.32, содержащий результаты работ:
- Определение формы орбиты и положения спутника на ней на начало рассматриваемого интервала времени по данным сервиса CelesTrak: общий вид + положение спутника на 18:00 МСК 16 февраля 2021, так, чтобы было видно подспутниковую точку и время (примерно так)
- Расчет графика угла места собственного спутника от времени по данным Trimble GNSS Planning Online на интервал времени с 18:00 МСК 16 февраля до 06:00 МСК 17 февраля 2021 года.
- Расчет диаграммы угла места и азимута спутника (SkyView, он же SkyPlot) по данным Trimble GNSS Planning Online на на интервал времени с 18:00 МСК 16 февраля до 06:00 МСК 17 февраля 2021 года.
- Формирование списка и описание параметров, входящих в состав эфемерид в сигнале B1I Beidou
- Формирование таблицы эфемерид собственного спутника (номер спутника Beidou см. в журнале выше) с подписанными размерностями (как тут, но только для одного спутника)
Работа осуществляется в репозитории на github на базе bdsephexercise. Для этого:
- Завести, если до сих пор нет, аккаунт на github
- Сделать форк проекта bdsephexercise (маленькая кнопка сверху справа в вэб-интерфейсе)
- Установить на рабочем компьютере git (для выполнения последующих этапов удобнее будет сделать это в ОС GNU/Linux, вероятно, на виртуальной машине)
- Клонировать свой форк на рабочий компьютер (
git clone https://github.com/MySuperAccount/bdsephexercise.git
) - Промежуточные и итоговые результаты по первому этапу хранить в каталоге processing (
git pull; git add <files>; git commit -m "Сделал то-то то-то"; git push
) - По результатам первого этапа завести Pull Request в исходный проект в ветку, название которой совпадает с вашей фамилией (кнопка наверху в вэб-интерфейсе)
- Устранить все замечания, добиться принятия Pull Request'а.
Этап сдан тогда, когда ваш ПР принят.
[править] Этап 2. Моделирование
Дедлайн: 02.04.21 (исправления замечаний до 09.04.21)
Эфемериды - параметры некоторой модели движения спутника. В разных ГНСС эти модели разные, а значит отличается и формат эфемерид, и алгоритмы расчета положения спутника.
Одна из самых простых и удобных моделей - в системе GPS. Beidou наследует данную модель.
Требуется реализовать на языке Matlab или Python функцию расчета положения спутника Beidou на заданный момент по шкале времени UTC. В качестве эфемерид использовать данные, полученные на предыдущем этапе.
Построить трехмерные графики множества положений спутника Beidou с системным номером, соответствующим номеру студента по списку. Графики в двух вариантах: в СК ECEF WGS84 и соответствующей ей инерциальной СК. Положения должны соответствовать временному интервалу с 18:00 МСК 16 февраля до 06:00 МСК 17 февраля 2021 года. Допускается использовать одни и те же эфемериды на весь рассматриваемый интервал.
Построить SkyView за указанный временной интервал (напоминаю, антенна на крыше корпуса Е) и сравнить результат с Trimble GNSS Planning Online, полученный на прошлом этапе.
Оформить отчет по результатам этапа:
- Реализация в Matlab или Python (описание модели и её листинг)
- Таблица использованных эфемерид
- Трехмерные графики положений спутника в ECEF и ECI (не забудьте подписать оси, изобразите соответствующую Земле сферу в начале СК)
- Расчётный и полученный в GNSS Planing Online SkyView
- Сравнение результатов моделирования с результатами первого этапа
Работы по данному этапу осуществляются в каталоге simulation. Правила приемки этапа те же, что и на первом этапе.
[править] Этап 3. Реализация
Дедлайн: 11.05.21 (исправления до 18.05.21)
Требуется разработать на языке С/С++ функцию расчета положения спутника Beidou на заданное время по шкале UTC, минимизируя время её исполнения и количество затрачиваемой оперативной памяти. Вызов функции не должен приводить к выбросу исключений или утечкам памяти при любом наборе входных данных.
Функция расчета положения спутника в Matlab/Python относительно проста, т.к. доступны библиотеки линейной алгебры и решения уравнений. Но при разработке встраиваемого ПО приходится сохранять лицензионную частоту, минимизировать вычислительную нагрузку и затраты памяти. Поэтому отобразить модель из Matlab/Python в прошивку приемника дословно, как правило, не получается. В рассматриваемом примере потребуется, как минимум, выполнить свою реализацию решения трансцендентного уравнения.
Программный модуль должен сопровождаться unit-тестами под check:
- Тесты функции решения уравнения Кеплера
- Тест расчетного положения спутника в сравнении с Matlab/Python с шагом 0.1 секунды.
Во время второго теста должно вычисляться и выводиться средняя длительность исполнения функции. Допускается использовать одни и те же эфемериды на весь рассматриваемый интервал (как на предыдущем этапе).
Требуется провести проверку на утечки памяти с помощью утилиты valgrind.
Оформить отчет по результатам курсового проекта. В качестве первых двух глав использовать отчёты с предыдущих этапов, в третьей главе отразить результаты этого этапа:
- Код реализации
- Вывод тестов, включая анализ времени исполнения
- Вывод valgrind
- Вывод по этапу
- Заключение по проекту
В репозитории расположен каркас программного модуля libbdssvpos, представленного в виде подключаемой библиотеки на базе системы сборки CMake. Настроена компиляция статической/динамической библиотек компилятором/кросскомпилятором и выполнение юнит-тестов (проверено в GNU/Linux системах). Для примера в библиотеке реализованы две функции: умножения и сложения.
В функцию сложения add внесена ошибка, на которую указывает результат соответствующего юнит-теста:
korogodin@KorPC:~/bdsephexercise/libbdssvpos$ cd build
korogodin@KorPC:~/bdsephexercise/libbdssvpos/build$ cmake ..
-- The C compiler identification is GNU 5.4.0
-- The CXX compiler identification is GNU 5.4.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- libbdssvpos version: cd76a7e
-- Found PkgConfig: /usr/bin/pkg-config (found version "0.29.1")
-- Checking for one of the modules 'check'
-- Configuring done
-- Generating done
-- Build files have been written to: /home/korogodin/bdsephexercise/libbdssvpos/build
korogodin@KorPC:~/bdsephexercise/libbdssvpos/build$ make
[ 33%] Built target bdssvpos-static
[ 66%] Built target bdssvpos
Scanning dependencies of target test_bdssvpos
[ 77%] Building CXX object test/CMakeFiles/test_bdssvpos.dir/check_position.cpp.o
[ 88%] Linking CXX executable test_bdssvpos
Running unit tests
Running suite(s): My test suite
50%: Checks: 2, Failures: 1, Errors: 0
/home/korogodin/bdsephexercise/libbdssvpos/test/check_position.cpp:11:F:Main tests:test_add:0: 1+2 should be 3
test/CMakeFiles/test_bdssvpos.dir/build.make:121: ошибка выполнения рецепта для цели «test/test_bdssvpos»
make[2]: *** [test/test_bdssvpos] Ошибка 1
make[2]: *** Удаляется файл «test/test_bdssvpos»
CMakeFiles/Makefile2:179: ошибка выполнения рецепта для цели «test/CMakeFiles/test_bdssvpos.dir/all»
make[1]: *** [test/CMakeFiles/test_bdssvpos.dir/all] Ошибка 2
Makefile:127: ошибка выполнения рецепта для цели «all»
make: *** [all] Ошибка 2
Работы по данному этапу осуществляются в каталоге libbdssvpos. Правила приемки этапа те же.