Как навигатор определяет где мы?
[музыка]
Всем привет, с вами Георгий Вольфсон. Это реальная математика на канале QWERTY. Надеюсь, вы давно уже на нас подписаны. Если вдруг этого не сделали, срочно сделайте! Не так давно мы выпускали ролик, посвященный тому, как работает навигатор, точнее, как он определяет оптимальный маршрут. Кто не видел, посмотрите. Но сегодня мы попробуем разобрать более глобальную проблему: а как навигатор вообще понимает, где вы находитесь в данный момент? Как он определяет ту точку, где вы находитесь?
Заодно попробуем развенчать некоторые мифы, например, о том, что спутники, которые летают вокруг нас, считывают наши координаты, что для того, чтобы работал навигатор, обязательно нужен хорошо работающий интернет и так далее. Я и так во всем по порядку.
Первым делом давайте осознаем, что общая такая система спутников, это система GPS или ГЛОНАСС, как она работает? Работа на примерно так: вокруг Земли находится несколько спутников. Там их может быть несколько десятков, возможно, в какой-то системе будет несколько сотен когда-нибудь. Обычно используется не так много. Кроме того, на Земле есть информационный центр, который синхронизирует работу этих спутников, потому что ключевой момент, чтобы спутники в каждый момент времени осознавали то время, которое сейчас есть. Причем одинаковое время должно быть на всех спутниках. Если чуть-чуть пойдет рассинхрон, уже будет плохо. Для этого и нужен информационный центр, а во-вторых — находились свои координаты. Это уже их задачей, про это сейчас говорить не будем.
Теперь, собственно, как работает наш навигатор? Вот мы находимся в некоторой точке. Сразу будем считать, что мы находимся в пространстве, в котором введены декартовы координаты x, y и z. Эти самые координаты x, y и z я и хочу найти. При этом у нас есть спутник, у него есть координаты, его там x1, y1, z1 — это он знает. А кроме того, есть время этого спутника, который он тоже знает. Ну и есть время наше, которое знает наш навигатор, вот сколько времени в данный момент.
Обратите внимание, что это время наше и спутника, они, конечно, отличаются в том смысле, что если спутник нам пришлет, сколько времени сейчас у него, то пока сигнал идет, время проходит. И вот то время, когда мы принимаем этот сигнал, не должно совпасть с временем, которое было на спутнике, когда сигнал был отправлен. Ну, про время на самом деле более качественный разбор можно посмотреть вот в этом ролике, который также выходил на нашем канале. Пока же обратим внимание на то, что для того чтобы определять свою позицию, совершенно не нужно отправлять какие-то данные спутнику, мы будем только принимать данные.
И в качестве данных, еще раз, мы принимаем координаты спутника и его время. Теперь, вот допустим, мы привели это дело. Дальше вопрос: а чему тогда равно расстояние от нашей точки до спутника? Как мы знаем, все с расстояния равно v умножить на t, то есть скорость, с которой шел сигнал, умножить на время, которое он шел. Скорость, с которой шел сигнал, это скорость света, а время, которое шел сигнал, это, собственно, разница между временем нашим, то есть который мы можем считать в момент приема сигнала, и временем спутника, которое он отправил, когда улетал сигнал.
Значит, вот это расстояние, назову его s1. Мы просто можем найти все эти три величины, нам известно. Теперь с другой стороны — это был так слегка физика. Теперь немножко геометрии. Расстояние между двумя точками можно найти по следующей формуле: d² = (x - x1)² + (y - y1)² + (z - z1)². То есть квадрат расстояния между двумя точками в пространстве равен сумме квадратов разностей соответствующих координат этих точек.
Но в нашем случае вот это вот расстояние d — это s1, и есть. Мы его нашли. То есть я перепишу так: (x - x1)² + (y - y1)² + (z - z1)² = s1². Что мы в этом уравнении знаем, что не знаем? Мы знаем координаты x1, y1, z1 — это те самые координаты нашего спутника, который мы получили. Мы знаем s1, вычислили. Значит не знаем мы только x, y и z. Проблема в том, что одно уравнение о переменных. Как вы, наверное, помните, еще со школьной скамьи, чтобы найти те самые переменные, желательно, чтобы уравнений было столько же, сколько переменных.
Так нет ничего проще. Давайте просто попробуем принять сигнал не с одного, а с трех спутников. И тогда у нас получится аналогично еще два уравнения. Что (x - x2)² + (y - y2)² + (z - z2)² = s2². x2, y2, z2 будут координаты второго спутника, s2 будет расстояние до него. И (x - x3)² + (y - y3)² + (z - z3)² = s3². Классно, правда?
Дальше ваша машина решает эту систему, находит x и y, а z в этой системе. Причем система решается достаточно легко. Если вычесть одно уравнение из другого, квадрат уходит. В общем-то, все хорошо. Проблема в том, что это все замечательно работает, если ваши часы исходно синхронизированы с временем спутника. Кстати, эту же задачу можно рассмотреть и геометрически. Ведь что значит, что вы знаете вот эти самые координаты спутника и находите расстояние? Это значит, что ваша точка, в которой вы находитесь, должна быть на определенном расстоянии от спутника.
А что такое общие точки, равноудаленные от данной? Они задают сферу. Представим себе некую сферу, которая проходит через точку, в которой находится ваш автомобиль, с центром в точке, где находится спутник. Ясно, что на этой сфере ваш автомобиль может находиться где угодно. Но если мы возьмем второй спутник и вторую сферу, то она пересечет первую по некоторой окружности. Здесь будет вот такая вот окружность, на которой опять же может лежать ваша точка.
Ну а если мы возьмем третью сферу, то три сферы уже пересекаются только в одной точке. И вот у вас получится итоговая точка, в которой и находится ваш автомобиль. Вот оно, здесь и будь хорошо. Но проблема ведь вот чем: что если ваши часы в телефоне или в машине хоть чуть-чуть рассинхронизированы с часами, которые есть на спутнике, то погрешность будет очень велика.
Но действительно, помните, когда мы считали расстояние, мы умножали c на разность между нашим временем и временем спутника. Так вот, если наше время будет от нормального времени, которое должно быть под спутником, отличаться всего лишь на, там допустим, одну тысячную, то есть вот добавим сюда такую погрешность в одну тысячную, то когда мы раскрываем скобки, ведь c у нас 300000 километров в секунду, и тогда вот эта погрешность в одну тысячную секунды дает нам погрешность при вычислении расстояния в 300 километров. А вы не очень хотите, правда, чтобы при вычислении расстояния у вас была погрешность в 300 километров? Вот такое вот малое изменение уже вызывает такие проблемы.
Что же делать? На самом деле с этим тоже можно побороться. И побороться следующим образом: давайте будем считать, как раз, что наше время отличается от нормального на некую погрешность, назовем ее k. Эта k может быть положительно, может быть отрицательным. Но вот это время со штрихом — это такое же, как на спутнике, в смысле синхронизированное со спутником. Тогда, если мы вычисляем расстояние, например, s1, она у нас, напомню, была c умножить на (t our - t спутника), иначе говоря это будет c умножить на (t our штрих - t спутника + k).
То есть появился вот этот коэффициент k, который мы тоже не знаем. Мы не знаем, насколько наши часы отстают и спешат по сравнению со спутниковым временем. И тогда, когда мы раскрываем скобки, мы получим, что c умножить на (t our штрих) — это то, что мы знаем. Минус c умножить на (t это — это то, что мы знаем) плюс c умножить на k.
А вот это наша новая какая-то переменная. Ну давайте и обозначим через, допустим, p. Тогда наше уравнение, которое мы раньше писали, вот оно, прям скопированное, это уравнение будет выглядеть следующим образом: (x - x1)² + (y - y1)² + (z - z1)² = s1 штрих + некое p.
И вот это p мы не знаем. Соответственно, в втором уравнении у вас будет (x - x2)² + (y - y2)² + (z - z2)² = s2 штрих + все то же погрешность p. Заметьте, эта p не меняется в зависимости от спутника, потому что c одно и тоже, и k — вот это изменение времени по сравнению со спутником одно и то же.
Написали третье уравнение и что мы видим? Что теперь у нас есть система из трех уравнений с четырьмя неизвестными. Как с этим бороться? Да, естественно, здесь нам понадобится еще четвертый спутник. Если мы его допишем, то мы получили систему из четырех уравнений с четырьмя переменными, которые решаются. Все отсюда вы находите x, y и z, а в качестве бонуса вы еще и находите p.
А напомню, что такое p? p — это c, скорость света, умноженная на вот ту погрешность, которая есть в ваших часах по сравнению со спутниковым временем. Значит, ваш навигатор может поправить свое время, сдвинув на эту самую погрешность, когда он ее узнает. Это дополнительный круто, то есть каждый момент мы можем синхронизировать со спутником.
Нужен ли нам интернет для того, чтобы определять свою гео-позицию, свои координаты? Нет, нам нужна именно связь со спутником. Здесь никакого выхода в интернет, как минимум, в этот момент не планируется.
Отдельно хочется отметить, что когда мы все это считали, мы применили формулу из школьной геометрии, которая находила расстояние между точками. Можете написать нам в комментариях, помнили ли вы до этого ролика такую формулу. Действительно, нам было бы видеть и если помнили, значит, все-таки пригодилась, чтобы понять то, что происходило сегодня.
Ну а у нас на этом все. Если вам понравилось, ставьте лайки и не забывайте подписываться на наш канал. И до новых встреч. Пока-пока!
Северус Снейп: Шалость удалась. [музыка]