Из-Под Глыб
Oct. 23rd, 2009
04:08 pm - как работает gps, часть 4
Остаётся рассказать, как читать сигналы gps, если в вашем устройстве есть такой чип.
Пропустим вопросы конфигурации и инициализации, это всё детали. Предположим, что у вас уже всё подключено, прогрето, сконфигурировано, gps нашел свои спутники и готов поделиться информацией. Взять её у него - наша задача.
Gps передаёт свою информацию по последовательному порту, на 4800 baud. Каждый блок представляет собой несколько строк ASCII символов. Каждая строка начинается с идентификатора. Есть стандарт на контент, но есть и реальность, в которой а) стандарт не всегда соблюдается, и б) proprietory форматы содержат много интересного, чего нет в стандартной информации.
Вот некоторые из идентификаторов:
$GPZDA - работает как часы, т.е. сообщает время и дату;
$GPRMC - минимальный источник текущего положения
$GPGGA - типичный источник текущего положения ("gps fix")
$GPGLL - ещё один альтернативный источник текущего положения
$GPGSA - сведения об использованных спутниках и точность по вертикали и по горизонтали
Так как самое интересное - это gps fix, то эти три, GPGGA, GPGLL, GPRMC я и приведу в деталях.
| GP*** | Время, Широта, Долгота | Высота | Скорость | Курс | Точность | <Пример | Интерпретация |
|---|---|---|---|---|---|---|---|
| RMC | + | + | + | + | + | $GPRMC,081836,A,3751.65,N,4507.36,E,010.0,1 |
t=08:18:36, all ok, lat=37°51.65' North, lon=45°7.36' East, speed=10 knots, course=117°, date=Nov.22,2009, magnetic deviation=11.3° East, and 42 is the checksum |
| GGA | + | + | - | - | + | $GPGGA,180823.30,3751.65,N,4507.36,E,1,0 |
t=08:18:36, lat=37°51.65' North, lon=45°7.36' East, source: satellite, 9 satellites, horizontal precision 3.1 m, altitude 271.8 m, geoid height above ellipsoid -34.5, age of DGPS data = 5.5 sec, DGPS id = 1234; and 42 is the checksum |
| GLL | + | - | - | - | - | $GPGLL,3751.65,N,4507.36,E,180823.30,A | lat=37°51.65' North, lon=45°7.36' East; t=08:18:36; A means data valid |
Есть много различных видов данных от GPS; разные GPS возвращают разные пакеты данных. Странное отсутстие высоты в минимальном пакете объясняется тем, что стандарт разрабатывали моряки, а у моряков пространство двумерное, они про высоту ничего не знают. А глубину GPS не меряет.
На этом я заканчиваю свои записки. Пользуйтесь этими данными как считаете нужным.
Ещё несколько замечаний на тему распространённых мифов.
- GPS передаёт данные на спутник. Это нужно верить в чудеса, чтобы полагать, что 30 спутников на высоте 20 тыс км в состоянии принять сигналы от, небось, полумиллиарда мобильников и навигаторов; если ещё учесть мощность сигнала мобильника... ну вы поняли.
- нужна постоянная видимость спутника. Нет; на самом деле, некоторые устройства могут проэкстраполировать ваше движение в тоннеле; кроме того, репитеры, aka DGPS, во множестве размещены по городам и весям; у нас в конторе, например, несколько таких репитеров висит просто на потолке; я так понимаю, что и в Гугле тоже эти приборы понатыканы; вскоре они появятся и в аэропортах, если уже не появились.
- спутники ни при чём, а всё ориентирование идёт через башни мобильников. Нельзя исключить, что такие приборы имеются, только их нельзя назвать GPS; система LORAN, использовавшаяся для морской и воздушной навигации до эпохи GPS, нынче уходит в прошлое, т.к. затраты на поддержку всех этих станций по всей планете несравнимы с затратами на спутник.
Замечания приветствуются. Через недельку я это перегоню в pdf и помещу у себя на сайте.
Oct. 20th, 2009
12:55 pm - как работает gps, часть 3
Ну вот, теперь мы получаем с более чем трёх спутников информацию об их положении в пространстве и о том, который на спутнике час. Остаётся вычесть разницу между показаниями наших часов и часов на спутнике, умножить на скорость света - и пожалуйста, имеем расстояние до каждого спутника. Вычисляем пересечение сфер. Две сферы - будет круг, три сферы могут пересечься с кругом в двух точках. Ну или мы найдём точку, ближайшую к кругу и к третьей сфере.
Но для этого надо знать расстояния. Расстояния получаются, если умножить скорость света на время. Скорость света на частоте L1 практически такая же, как и в вакууме; а время вычисляется путём вычитания времени на gps от времени, пришедшего с сигналом. Но тут закавыка получается. Откуда мы знаем, что наш gps синхронизирован со спутниками? Конечно же, нет.
Поэтому на самом деле задачу надо решать не в трёхмерном, а в четырёхмерном пространстве; четвёртое измерение - время; и для этого нужна четвёртая точка, в смысле - четвёртый спутник. Простой способ может быть, например, таким:
- вычислили точку по трём спутникам, в предположении, что часы синхронизированы;
- для четвёртого спутника вычислим расстояние двумя способами: умножением c * dt и по полученным координатам точки;
- разница между этими двумя расстояниями получена из-за расхождения часов. Теперь мы знаем точное время. Сделаем поправку на наших часах;
- по исправленному времени пересчитаем наши координаты.
На самом деле, конечно, можно использовать больше четырёх спутников и применять метод наименьших квадратов, минимизируя суммарную ошибку.
Ну а если время сошлось, то поправка и не нужна.
Разумеется, точно не получится; ионосфера преломляет сигнал, давая ошибку до 5 метров; тропосфера преломляет; сигнал отражается от предметов; немножко ошибаются часы на спутниках; эфемериды вычислены неточно. Проще всего устранить ошибку из-за задержек при получении сигнала и вычислении, т.к. все эти данные постоянны; ошибка вычислений тоже легко оценивается. С остальным приходится мириться, ну или усреднять по МНК.
Другой способ устранять ошибки - использовать наземные станции DGPS. Эти станции передают сигнал на низких частотах, и если в вашем приборе есть приёмник, то его сигнал можно использовать, и улучшить точность до сантиметров - как если бы вы использовали военный сигнал P(Y). Первоначально наземные станции были внедрены, чтобы устранить искусственную ошибку, скажем, в авиации - но теперь, хотя и спутники уже не врут, такие станции стоят где ни попадя.
Теперь о теории относительности. Как известно, Институт Теоретической Астрономии АН СССР ещё в 1985-м делал вычисления, не учитывая теорию относительности. С.С.Лавров уломал их признать Эйнштейна. С навигацией же без Эйнштейна никак.
У нас имеют место три релятивистских фактора:
- ОТО: на земле гравитация сильнее, чем на высоте 20 тыс км, и в результате наши часы отстают от спутниковых на 45.9 микросекунды в сутки;
- СТО: спутники летают относительно нас, поэтому их часы отстают от наших на 7.2 микросекунды в сутки;
- Эффект Саньяка: мы тут на земле тоже вертимся, и поэтому наши часы относительно спутниковых то спешат, то отстают, в зависимости от того, спутник на западе или на востоке от нас.
Альтернативы.
Китай разрабатывает свою систему, Япония - свою, Индия - свою. Но Индия ещё и с Россией стусовалась на почве использования ГЛОНАСС. В 2007-м году Путин подписал указ, разрешаюший гражданское использование ГЛОНАССа. (Карта покрытия глонасса, сдёрнутая из википедии, выкинута, как не соответствующая законам Ньютона и Кеплера и тому факту, что Земля круглая и вертится.)
Oct. 18th, 2009
02:47 pm - как работает gps, часть 2
Да, хочу добавить, что если Вы собаку съели на этом деле, то единственной причиной читать то что я тут пишу было бы только желание поправить - you are welcome!
Итак, недоуменный вопрос номер один: а как это на одной частоте передают со всех спутников, и мы при этом не путаем их сигналы?
Делается это так:
На нашу частоту L1 (ну и L2 тоже) накладывается сигнал, полученный из C/A кода и собственно информации. Применяется фазовая модуляция, но это роли не играет; важно другое.
После демодулирования полученной приёмником L1 мы получаем последовательность бит с частотой 1.023 мегагерца. Эти биты представляют собой сумму (по модулю 2, т.е. xor) кода C/A и собственно информации. Код C/A есть последовательность 1023 бит, повторяющаяся каждую миллисекунду. Собственно информация имеет частоту 50 герц, так что каждый информационный бит растянут на 20 копий A/C.
Ну и как же мы различаем все эти потоки информации? А вот как.
Последовательность из 1023 бит можно представить как вектор в 1023-мерном пространстве, над полем Z2, т.е. над полем целых чисел по модулю 2. В этом поле сложение - то же самое, что и xor, а умножение - and, если считать 1 за истину, а 0 за ложь.
Все эти последовательности обладают специфическим свойством:
их корреляция близка к нулю;
их автокорреляция близка к дельта-функции, т.е. равна единице только если сдвиг равен нулю.
Отсюда следует, что, зная один вектор, можно вычислять корреляцию с поступающим сигналом, и когда поймаем единицу, то считай поймали носитель.
В качестве таких последовательностей можно (и нужно) брать коэффициенты неприводимых полиномов по модулю 2. (Хмм... не в курсе, что такое неприводимые полиномы? Это такие полиномы, коорые не раскладываются в произведение других полиномов.)
Для степени 1023 таких полиномов, говорят, будет всего 1025, но нам достаточно 30. Теперь, что мы делаем, чтобы выловить сигнал? Мы ловим эти биты и умножаем на образцы векторов; как только получили произведение, равное количеству единичных бит, так, значит, словили сигнал; и теперь можно извлекать информацию. Это сравнение можно делать параллельно для всех тридцати векторов, и таким образом выловить сразу несколько сигналов.
Переходим к собственно информации, передаваемой, как я уже писал выше, на частоте 50 герц.
В пакете содержатся заголовок, собственное время спутника, его эфемерида и альманах.
Альманах содержит сведения о текущем положении всех спутников - эта информация меняется редко, посмотреть её можно здесь. Каждый спутник передаёт эти данные; имея их, можно сообразить, какие спутники должны быть сейчас видны.
Вот кусочек альманаха:ID: 01
Health: 063
Eccentricity: 0.3799438477E-002
Time of Applicability(s): 233472.0000
Orbital Inclination(rad): 0.9620113373
Rate of Right Ascen(r/s): -0.7807102520E-008
SQRT(A) (m 1/2): 5153.624512
Right Ascen at Week(rad): 0.1154047132E+001
Argument of Perigee(rad): 0.981060147
Mean Anom(rad): -0.2126137018E+001
Af0(s): -0.6103515625E-004
Af1(s/s): 0.0000000000E+000
week: 530
ID: 02
Health: 000
Eccentricity: 0.9121417999E-002
Time of Applicability(s): 233472.0000
Orbital Inclination(rad): 0.9411659241
Rate of Right Ascen(r/s): -0.7792550605E-008
SQRT(A) (m 1/2): 5153.675293
Right Ascen at Week(rad): -0.3042662144E+001
Argument of Perigee(rad): 2.906376719
Mean Anom(rad): 0.1646851182E+001
Af0(s): 0.1831054688E-003
Af1(s/s): 0.3637978807E-011
week: 530
Эфемерида - точные сведения об орбите конкретного спутника; эти сведения годны в течение четырёх часов.
Но главное, что требуется, чтобы оперативно и точно определить наше положение - это который час на спутнике.
Про это я напишу в следующей части.
Oct. 17th, 2009
10:51 pm - как работает gps, часть 1
Я ж обещался написать, а.
Итак, все знают, что в небе, на полустационарной орбите (т.е. примерно 20 тыс км, период примерно 12 часов) летает до 30 спутников, под разными углами, так что отовсюду и всегда видно штук пять-десять.
Все эти спутники шлют сигналы на как минимум двух частотах (L1=1575.42 MHz и L2=1227.60 MHz).
В вашем телефоне расположен чип (15 на 17 мм), и антенна, и этот чип ловит сигналы спутников, сколько именно, зависит от качества чипа.
Поймав эти сигналы, хитрый чип для каждого спутника расшифровывает положение спутника (передаётся в сигнале) и вычисляет расстояние до него. Так как наше пространство условно можно считать трёхмерным, то расстояния до четырёх опорных точек должно быть достаточно, чтобы узнать координаты точки.
В принципе, и трёх бы спутников хватило. Рисуем сферу радиуса R1 вокруг одного спутника, сферу радиуса R2 вокруг второго - в пересечении получается окружность; эта окружность пересекается со сферой радиуса R3 в двух точках; ну и эвристика подскажет, какая из двух. Даже и двух спутников хватит, если предположить, что мы находимся на поверхности Земли - вот вам и третья сфера.
Ну а если у нас больше чем три спутника, а, скажем, 5-8, то у нас много излишней информации, и мы можем очень хорошо избавиться от накапливающихся ошибок в вычислениях, используя Метод Наименьших Квадратов - т.е. вычислить точку, где суммарная квадратичная ошибка минимизируется. МНК удобная вещь, состоит в решении системы линейных уравнений, и даже в случае плохой, даже вырожденной матрицы есть очень миленькие методы, позволяющие найти решение.
Но тут у нас возникает два недоуменных вопроса:
а) как это мы на одной и той же частоте принимаем дикое количество сигналов, и не путаем, что от кого?
б) а как это по сигналу мы можем определить расстояние до спутника? Допплер? Но Допплер поможет измерить относительную скорость, а не расстояние.
Вот про это-то я и расскажу в следующих частях, а пока немножко беллетристики.
Из этих двух частот первая, L1, имеет общегражданское назначение, и даёт нам точность до трёх метров. L2, военная, помогает скорректировать результат до 30 см. Но это ещё что. До 2000-го года в сигнал L1 нарочно вводилась ошибка, снижающая точность до 10 метров по горизонтали и 30 по вертикали. Чтобы вражеские ракеты не ориентировались. А L2 как раз передавал поправку, но этот сигнал был зашифрован. Ну конечно ездить по Америке с точностью 10 метров не по кайфу, и поэтому на земле порасставлены станции DGPS, корректирующие сигнал. Эту ошибку отключали в 90-м, во время Gulf war, потому что в армии навигаторов не хватало, и они скупали гражданские - так чтоб не заблудились солдатики.
Ошибку должны были снять только к 2006-му году, но военные насобачились избирательно ставить ошибку, так что тогда же, 1-го мая 2000-го года, её и отменили.
Вообще, сейчас входит в моду устанавливать наземные станции GPS даже в зданиях, скажем, в аэропортах и в корпусах Гугла, чтобы можно было ориентироваться без всяких спутников и даже знать, на каком мы этаже, и показывать на телефоне план этажа.
