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

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

Из физики вращательного движения известно, что при вращении по окружности образуется центробежное ускорение. Его модуль определяется формулой (1)

a = \omega^2 r  \;\;\;\;   (1)

Тут омега - это угловая скорость вращения Земли. T= 24 часа = 86400 секунд

\omega = \frac{2\pi}{T}    \;\;\; (2)

из (1) и (2) получается (3)

a = \frac{4\pi^2}{T^2}R cos\varphi   \;\;\;\;\;         (3)

схема вычислений

Угол между вектором центробежной силы и силой гравитации равен (2)

\psi= 2\pi-\varphi \;\;\; (4)

Для вычисления модуля вектора суммарного ускорения g можно прибегнуть к формуле модуля суммы векторов. Это можно сделать по теореме косинусов.

Квадрат модуля силы тяжести примем равным

|g|^2 = |g_{G}|^{2}+ |a|^{2}-2|g_{G}||a|cos(2\pi-\varphi)\;\;\;\;\;\;\;\;\; (5)

именно результат формулы (6) покажет акселерометр

 g=\sqrt{|g_{G}|^{2}+ |a|^{2}-2|g_{G}||a|cos(2\pi-\varphi)}\;\;\;\;\;\;\;\;\; (6)

или

 g=\sqrt{g_{G}^{2}+ [\frac{4\pi^2}{T^2}R cos\varphi  ]^{2}-2g_{G}\frac{4\pi^2}{T^2}R cos(\varphi) cos(2\pi-\varphi)}\;\;\;\;\;\;\;\;\; (7)

упростив получается формула (8). Предположим что R и T константы.

 g=\sqrt{g_{G}^{2}+ \frac{16\pi^4R^2}{T^4}cos^2\varphi  -\frac{8g_{G}R\pi^2}{T^2} cos^2(\varphi)  }\;\;\;\;\;\;\;\;\; (8)


Получается вот такой график зависимости полного ускорения свободного падения от широты

Эту формул (8) можно вообще даже не вычислять, а раcсчитать на фазе компиляции прошивки для каждого градуса и хранить Look Up таблицу в ROM памяти микроконтроллера (секция .rodata).

import math
import matplotlib.pyplot as plt
import numpy as np

T=86400 ;
Gg=9.82;
pi = math.pi
print(pi)
R=6356863

phi_deg = np.arange(0,90,1)

phi_rad=np.deg2rad(phi_deg)

r=R*np.cos(phi_rad)
omera = (2*pi/T)
a = r*(omera**2) 

sqrt_arg = Gg**2 +(a**2) - 2*a*Gg*np.cos(2*pi-phi_rad)
g1 = np.sqrt(sqrt_arg) 

#plt.axis([0,90,-0.1,10.1])
plt.title('gravity at different latitudes')
plt.grid(True)
plt.xlabel('latitude (phi) [deg]')
plt.ylabel('Total G [m/c^2]')

plt.plot(phi_deg,g1,'r')
#plt.plot(phi_deg,a,'b')

plt.legend(['g','a'], loc=2)
plt.show()

Задача определения широты сводится к тому, что надо научиться измерять ускорение свободного падания с точностью (9.82-9.78)/90.0 = 0.0004444444444444547 m/c^2. То есть интерес представляют четверные цифры после запятой! Где бы мы не ходили по Земле с акселерометром наши показания в теории будут отличаться только на +/-0.040 m/c^2

Существуют ли такие MEMS акселерометры, которые показывают ускорение с точностью 4 цифры после запятой?

Вот например реальный дешевый MEMS акселерометр LIS3DH за 300 RUR обладает максимальной чувствительностью +/- 0.001g = 0.00982 m/c^2 на разряд. Это значит, что акселерометром LIS3DH можно вычислить широту с точностью +/- 22 градуса. Маловато.
Вот обзор еще нескольких MEMS акселерометров


https://docs.google.com/spreadsheets/d/1fdQT1M2ptGPf8z9bGbsvIadOyoKVGr3zhjSLuwBl80s/edit#gid=0

Глядя на формулу (3) можно, кстати, заметить что, если бы Земля вращалась с периодом 1.4 часа, то на экваторе бы наступила невесомость. Это позволило бы пользоваться для определения широты простыми акселерометрами. Однако это бы вызвало на экваторе область пониженного давления, подули бы сильные ветры от полюсов к экватору и весь воздух от полюсов улетучился бы в космос через экватор и всем бы наступил конец.

К счастью Земля вращается достаточно медленно. Более того Земля еще и замедляется в своем вращении вокруг своей оси. Это вызвано тем, что Луна вызывает приливы и океаны тем самым тормозят Землю.

Поэтому эффектом неоднородности притяжения вдоль меридианов можно пользоваться пока не поздно.

Достоинства навигации по акселерометру:

++1 Измерение широты происходит мгновенно. Это если измерять g MEMS акселерометром.

Недостатки навигации по акселерометру:

--1 измерительный прибор должен быть статичным

--2 акселерометр должен быть точным и чувствительным.

--3 невозможно измерять координаты акселерометром в море из-за волн.

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

Вывод

Чтобы говорить о измерении широты акселерометром надо акселерометр с точностью 4 цифры после запятой и такие акселерометры есть (IIS2ICLX).

Links

Вектор(геометрия)

Online LaTeX Equation Editor - create, integrate and download

Ускорение свободного падения

Гравиметр

Комментарии (30)


  1. Jury_78
    29.06.2023 18:03
    +5

    в этих расчетах не учитываются гравитационные аномалии.

    Как повлияют Лунные и Солнечные приливы? Не точнее ли будет по компасу и часам?

    p.s. Если нужна точность то лучше это - гравиметр.


  1. dsoastro
    29.06.2023 18:03
    +5

    Но ведь Земля не шар, думаю эффект ее не шарообразности может быть сравним с эффектом от вращения, что усложняет задачу


    1. Kopilov
      29.06.2023 18:03
      +1

      Калибровка, конечно, потребуется, но по части чувствительности геоидальность только помогает (на экваторе и ускорение есть, и от центра дальше)


  1. Akina
    29.06.2023 18:03
    +5

    Задача определения широты сводится к тому, что надо научиться измерять ускорение свободного падания с точностью (9.82-9.78)/90.0 = 0.0004444444444444547 m/c^2.

    Для справки - именно на столько различается ускорение свободного падения на уровне поверхности земли и приблизительно в 150 метрах над ней. То есть грубо: поднялся на 60 этаж, а по мнению этого "акселерометра" сместился на градус к экватору.


    1. MaxAkaAltmer
      29.06.2023 18:03
      +1


      Земля не точка, интеграл по объему нужен - гравитация сначала ростет по мере подъема.


      1. Akina
        29.06.2023 18:03
        +1

        гравитация сначала ростет по мере подъема

        Это с какого такого перепугу? В процессе подъёма с поверхности Земли точка измерения удаляется от ЛЮБОЙ точки Земли, что приводит к СНИЖЕНИЮ силы тяготения. Небоскрёбами и горой на горизонте можно пренебречь.

        Нет, если рассматривать подъём из километровой шахты - то да, эффект роста силы тяжести по мере подъёма на начальном этапе имеет место быть.


        1. MaxAkaAltmer
          29.06.2023 18:03
          +2

          Интеграл по объему возьмите. То что в горизонте у земли, тянет вас в стороны, когда поднимаетесь - результирующий вектор направленный вниз поначалу будет рости. Не поленитесь - посчитайте.

          Ну или поднимитесь на небоскреб и прислушайтесь к сосудам в ногах - это вполне можно даже почувствовать.


          1. MaxAkaAltmer
            29.06.2023 18:03
            +1

            Каюсь - был неправ, пояснения в комментарии ниже.


  1. trir
    29.06.2023 18:03
    +4

    Не учитываются аномалии гравитационного поля https://upload.wikimedia.org/wikipedia/commons/1/14/Gravity_anomalies_on_Earth.jpg


    1. Radisto
      29.06.2023 18:03
      +1

      Пишут, что величина даже больших гравитационных аномалий в 12 меньше разницы между g экватора и полюса


  1. anonymous
    29.06.2023 18:03

    НЛО прилетело и опубликовало эту надпись здесь


  1. Albert2009Zi
    29.06.2023 18:03
    +1

    Акселерометром мерять координаты так-то уж очень не комильфо. Можно применить дусы и обвешать по трём плоскостям гироплтаформу, тогда сильно точнее будет. Но в любом случае не сравнится с сигналами от трех спутников, благо их уже на орбиту хорошо понавешали.


    1. eri
      29.06.2023 18:03
      +1

      gps могут подделывать


      1. freeExec
        29.06.2023 18:03
        +2

        GNSS сигналы подделывают, гравитацию не смогут.


        1. anonymous
          29.06.2023 18:03

          НЛО прилетело и опубликовало эту надпись здесь


  1. aamonster
    29.06.2023 18:03
    +1

    Учитывая, что "земля имеет форму чемодана" (c) погрешность будет великовата. Ну и в любом случае долготы не хватает, так что даже если у вас есть достаточно точный акселерометр – пользы мало. Но как лабораторная работа для старшеклассников – было бы интересно. Особенно если после получения результата следующим шагом сравнить его с действительностью и всем классом обсудить причины отличий.

    Можно, кстати, вторую лабу сделать по измерению угла наклона магнитных силовых линий к земной поверхности. Тут ещё несколько любопытных нюансов всплывёт – разница между магнитными и географическими полюсами, магнитные аномалии.


  1. MaxAkaAltmer
    29.06.2023 18:03
    +3

    Нельзя полагаться на эти расчеты - например гравитация зависит от высоты, при чем нелинейно, стачала растет, потом падает. И еще куча моментов имеется.


    1. simenoff
      29.06.2023 18:03
      +1

      Почему сначала растёт? 0_o


      1. MaxAkaAltmer
        29.06.2023 18:03
        +1

        Потому что сила тяжести определяется векторной суммой гравитационного взаимодействия всех частичек, т.е. нужно брать интеграл по объему планеты относительно положения объекта.


        1. simenoff
          29.06.2023 18:03
          +1

          Где-нибудь можно об этом почитать?


          1. MaxAkaAltmer
            29.06.2023 18:03
            +1

            О том как взять интеграл?


            1. MaxAkaAltmer
              29.06.2023 18:03
              +1

              #include <iostream>
              #include <math.h>
              
              using namespace std;
              
              __inline double h_triangle_equ(double a, double r)
              {
                  return sqrt(r*r-a*a/4.0);
              }
              
              __inline double h_triangle(double a, double b, double c)
              {
                  double p = (a+b+c)/2.0;
                  double rv =  2.0*sqrt(p*(p-a)*(p-b)*(p-c))/a;
                  return rv;
              }
              
              void sh_numeric_integral()
              {
                  const int alt_parts = 1000;
                  const double R = 6371000.0;
                  const double alt_delta = R/double(alt_parts);
                  const int lat_parts = 500;
                  const double lat_delta = acos(-1.0)/double(lat_parts);
                  const int lon_parts = lat_parts*2;
                  const double lon_delta = (2.0*acos(-1.0))/double(lon_parts);
                  const double density_start = 13500;
                  const double density_end = 3000;
                  const double m = 1;
                  const double y = R+0;
                  const double x = 0.0;
                  const double z = 0.0;
              
                  double v_test = 0.0, m_planet = 0.0;
                  double gravity_x = 0.0, gravity_y = 0.0, gravity_z = 0.0;
                  for(int alt = 0; alt< alt_parts; alt++ )
                  {
                      double r_curr = double(alt+1)*alt_delta;
                      double r_prev = double(alt)*alt_delta;
                      double r_middle = double(alt+0.5)*alt_delta;
                      double c = 2.0* r_curr * sin(lat_delta/2.0);
                      double c_prev = 2.0* r_prev * sin(lat_delta/2.0);
                      double density_curr = density_start+double(alt+0.5)*((density_end-density_start)/double(alt_parts));
              
                      for(int lat = 0; lat<lat_parts; lat++ )
                      {
                          double lat_start = lat*lat_delta-acos(-1.0)/2.0;
                          double lat_middle = lat_start+lat_delta*0.5;
                          double lat_end = lat_start+lat_delta;
              
                          double a = abs(2.0*r_curr*cos(lat_start)*sin(lon_delta/2.0));
                          double b = abs(2.0*r_curr*cos(lat_end)*sin(lon_delta/2.0));
              
                          double H = sqrt(c*c-((b-a)/2.0)*((b-a)/2.0));
                          double s_curr = ((a+b)/2.0)*H;
                          double h_curr = h_triangle(H,h_triangle_equ(a,r_curr),h_triangle_equ(b,r_curr));
              
                          double a_prev = abs(2.0*r_prev*cos(lat_start)*sin(lon_delta/2.0));
                          double b_prev = abs(2.0*r_prev*cos(lat_end)*sin(lon_delta/2.0));
              
                          double H_prev = sqrt(c_prev*c_prev-((b_prev-a_prev)/2.0)*((b_prev-a_prev)/2.0));
              
                          double s_prev = ((a_prev+b_prev)/2.0)*H_prev;
                          double h_prev = alt ? h_triangle(H_prev,h_triangle_equ(a_prev,r_prev),h_triangle_equ(b_prev,r_prev)) : 0.0;
              
                          for(int lon = 0; lon<lon_parts; lon++ )
                          {
                              double lon_middle = double(lon+0.5)*lon_delta-acos(-1.0);
                              double cm_x = r_middle*cos(lat_middle)*sin(lon_middle);
                              double cm_y = r_middle*sin(lat_middle);
                              double cm_z = r_middle*cos(lat_middle)*cos(lon_middle);
              
                              double distp2 = ((cm_x-x)*(cm_x-x)+(cm_y-y)*(cm_y-y)+(cm_z-z)*(cm_z-z));
                              double dist = sqrt(distp2);
              
                              double dv = (s_curr * h_curr)/3.0 - (s_prev * h_prev)/3.0;
                              double M = dv*density_curr;
              
                              double f = (m*M*0.0000000000667)/distp2;
              
                              gravity_x += (cm_x-x)*f/dist;
                              gravity_y += (cm_y-y)*f/dist;
                              gravity_z += (cm_z-z)*f/dist;
              
                              v_test += dv;
                              m_planet += M;
                          }
                      }
                  }
              
                  double result_gravity = sqrt(gravity_x*gravity_x+gravity_y*gravity_y+gravity_z*gravity_z);
              
                  double v_test_formula = (4.0*acos(-1)*R*R*R)/3.0;
                  cout << "Volume test: numeric = " << v_test << ", formula = " << v_test_formula << endl;
                  cout << "Planet mass: " << m_planet << endl;
                  cout << "Gravity: " << result_gravity << endl;
              }
              
              int main()
              {
                  sh_numeric_integral();
                  return 0;
              }
              

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


              1. MaxAkaAltmer
                29.06.2023 18:03
                +1

                Довольно похоже на Землю вышло =)
                Volume test: numeric = 1.0831e+21, formula = 1.08321e+21
                Planet mass: 6.09242e+24
                Gravity: 9.97903


  1. azudem
    29.06.2023 18:03

    У вас орфографическая ошибка уже в заголовке.


  1. ferosod
    29.06.2023 18:03
    +1

    Интересно было бы сравнить с точностью определения широты по углу наклона магнитных линий Земли к поверхности


  1. Radisto
    29.06.2023 18:03
    +1

    Это был бы интересный опыт. Правда, для него желательно попутешествовать в меридианальном направлении, а это дороговато))) и интересно было бы узнать, насколько действительно влияют приливы и отливы. Время прилива и отлива (гравитационное, конечно, не волна воды, которая смещена и определяется еще р рельефом дна и глубиной) само по себе может дать координату (долготу, скорее всего, для широты мне кажется сомнительно, абсолютные значения ускорения мало меняются. Хотя вектор может сильнее? Сравнивать по осям?), если конечно способ позволит относительно точно определить момент прохода "под луной". Правда, для этого надо прибор оставить в покое как минимум на сутки.


    1. Radisto
      29.06.2023 18:03
      +1

      Посмотрел тут в разных местах. Кажется, для этого нужна будет точность еще на порядки выше.


    1. freeExec
      29.06.2023 18:03
      +1

      Так давно в GNSS применяется

      Ocean Loading BLQ Format

      Нашёл первый попавшийся пример

      Hidden text
      An example of the output for station Onsala in BLQ-format
      $$ Ocean loading displacement
      $$
      $$ Calculated using olfg/olmpp of H.-G. Scherneck
      $$
      $$ COLUMN ORDER: M2 S2 N2 K2 K1 O1 P1 Q1 MF MM SSA
      $$
      $$ ROW ORDER:
      $$ AMPLITUDES (m)
      $$ RADIAL
      $$ TANGENTL EW
      $$ TANGENTL NS
      $$ PHASES (degrees)
      $$ RADIAL
      $$ TANGENTL EW
      $$ TANGENTL NS
      $$
      $$ Displacement is defined positive in upwards, South and West direction.
      $$ The phase lag is relative to Greenwich and lags positive. The
      $$ Gutenberg-Bullen Green's function is used. In the ocean tide model the
      $$ deficit of tidal water mass has been corrected by subtracting a uniform
      $$ layer of water with a certain phase lag globally.
      $$
      $$
      $$ Complete <model name> : No interpolation of ocean model was necessary
      $$ <model name>_PP       : Ocean model has near the station been interpolated
      $$
      $$ Ocean tide model: GOT00.2, long period tides from FES99
      $$
      $$
        Onsala
      $$ GOT00.2_PP ID: Aug  16, 2001 13:35
      $$ Computed by OLMPP by H G Scherneck, Onsala Space Observatory, 2001
      $$ Onsala,                              RADI TANG lon/lat:   11.9264   57.3958
        .00366 .00123 .00089 .00032 .00223 .00115 .00071 .00009 .00091 .00048 .00042
        .00149 .00035 .00040 .00009 .00046 .00043 .00015 .00009 .00013 .00006 .00007
        .00069 .00027 .00020 .00004 .00029 .00014 .00009 .00004 .00003 .00002 .00001
         -62.3  -51.3  -94.8  -39.7  -57.7 -110.6  -60.3 -164.6    9.9    5.8    2.1
          87.0  114.0   57.2  126.4  102.3   35.4   97.0   -6.8 -166.3 -169.8 -177.7
         109.9  152.4   86.4  149.1   50.7  -59.4   47.7  173.6  -27.8   -1.5    7.3


  1. Avante_sb
    29.06.2023 18:03
    +1

    Учитываю зависимость изменения g от высоты над уровнем моря - способ пригоден только для моря, но в море волны. Кажется если сделать какой то "стэдикам" для акселерометра то в море вполне можно пользоваться и точность будет соизмерима со старыми способами определения широты. То есть не очень точно, но независимо от хронометра и облачности.


  1. tormozedison
    29.06.2023 18:03
    +1

    "невозможно измерять координаты акселерометром в море из-за волн"

    Вообще на любом движущемся объекте, поскольку он хотя бы слегка, но трясётся.