Определение геолокации робота на местности

KSlon
Offline
Зарегистрирован: 15.04.2019

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

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

подпишусь

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Так же само как и диспечеры полетов самолета. Пилот спрашивает где я. А диспечер  говорит где летит самолет. И все это с помощью компьютера. надо точнее, так подача звукового и электромагнитного сигнала. Разница и дает расстояние до диспечера.

Nosferatu
Offline
Зарегистрирован: 04.11.2012

У дронов есть снимки местности. Сравниваются контрастные предметы (здания, деревья или линия горизонта) на этих снимках, их размеры, пропорции и углы, со снимком с местонахождения дрона.

В общем проще три цветных маяка воткнуть на берегу. И использовать тригонометрию.

Но утренний туман над озером испортит всю малину.

Onkel
Offline
Зарегистрирован: 22.02.2016

я вот что сделал - курсовую устойчивость. Это снижает отклонение во время движения. Можно добавить к GPS
https://youtu.be/jDATptM75Ew

Гриша
Offline
Зарегистрирован: 27.04.2014

KSlon пишет:

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

приводной маяк... но это мало поможет, ищите инфу как робот пылесос ищет свою базу.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

KSlon пишет:

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

всё давно придумано, посмотрите программу TOWER для андроида, координаты точек остановки забиваются при формировании задания, заливаются в контроллер, определение координат по GPS, при 15 видимых спутниках какая такая погрешность, при возврате домой укладывалось в 1 метр, то-есть прямо в руку приземлялся )))
Да, это для контроллера APM 2.6-2.8, на других контроллерах есть INAV

Для очень точной привязки, сантиметры, надо воспользоваться сетью картографических геостанций, но это платно

stepan_sotnikov
Offline
Зарегистрирован: 06.04.2019

предлагаю следующее.
Дано:
Сигналы точного времени приходят со спутников GPS.
Основные погрешности измерения задержки, и не точности вычисления нав координат:
Стратосферная задержка, не совсем корректные эфемириды, не самая удачная конфигурация созвездия групировки.
Ну и там еще пару нюансов...
По этому при определении навкоординат в WGS84 нас бросает из стороны в сторону при определении координат.
НО:
Все эти погрешности и отклонения, для двух находяшихся навприемников, по вектору отклонения от условно истенного положения буду примерно равнозначны.
то есть две GPS антены ловят сигналы, и если они будут примерно ловить сигналы от одной и теже группировки, то смещения каждого определения будут примерно одинаковы... Если не в даваться в дебри о несущей L1 L2... то в радиусе примерно 4км. Если видимость на станции один и два равны... То: Установив одну станцию не подвижно. Указать ей координаты (можно статистикой набрать эпох так 100) и потом каждое определение новых навкоординат вычитать из указанных то получим корректирующий вектор. Который мы можем смело переносить на двужушийся приемник, ровер, и на основании нав координат и полученный по радио каналу или другим способом вектором от базовой станции то получим годные координаты рвоера. Точность достигаемая в полевых условиях 50-70мм при залесенной местности 400-1000мм.
Если Вам совсем хочеться круто, то тогда нужен приемник с возможностью записи сырых данных задержки Л1 Л2 несущей, постобработка в РТК режиме... но там уже другие цены и другая математика... Все что касаеться математики этой лабуды Я подскажу. 
Но реализовать это на 8-16 МК не получиться или того не стоит, из-за плавающих запятых... или долгой длинной арифметики... 

Да бы не быть голословным привожу пример кода преобразования плоских координат (СК-42 это наш аналог WGS84)в геодезические координаты... просто посмотрите как много цифер... 
 

//СК-42  плоских прямоугольных преобразование в геодезические координаты. 
	//  ГОСТ 32453-2013 5.4.1
	public static double[]  PloscToCk42ug (double X, double Y, double H) {
		double[] Point = { 0, 0, 0 };
		double β = X / 6367558.4968;
		double Sin2b = Math.sin(β * 2);
		double Sin2_b = Math.pow(Math.sin(β), 2);
		double Bo = β
				+ Sin2b
				* (0.00252588685 - 0.00001491860 * Sin2_b + 0.00000011904 //  В ГОСТЕ ОШИБКА!!!!
						* Sin2_b * Sin2_b);
	//	System.out.println("Bo="+Bo);
		double n = (int) (Y * Math.pow(10, -6));
	//	System.out.println("n="+n);
		double Sin_Bo = Math.sin(Bo);
		double Sin2_Bo = Math.pow(Sin_Bo, 2);
		double Sin4_Bo = Math.pow(Sin_Bo, 4);
		double Sin6_Bo = Math.pow(Sin_Bo, 6);
		double Cos_Bo = Math.cos(Bo);
		double Sin2Bo = Math.sin(Bo * 2);
		double Zo = (Y - (10 * n + 5) * 100000) / (6378245 * Cos_Bo);
		//System.out.println("Zo="+Zo);
		double Zo2 = Math.pow(Zo, 2);
		
		double 
		dB=-Zo2*Sin2Bo*(0.251684631-0.003369263*Sin2_Bo+0.000011276*Sin4_Bo-
			Zo2*(0.10500614-0.04559916*         Sin2_Bo+0.00228901*  Sin4_Bo-0.00002987*  Sin6_Bo-
			Zo2*(0.042858-0.025318*             Sin2_Bo+0.014346*    Sin4_Bo-0.001264*    Sin6_Bo-
			Zo2*(0.01672-0.00630*               Sin2_Bo+0.01186*     Sin4_Bo-0.00328*     Sin6_Bo))));
double  l=  Zo*(1-0.0033467108*                 Sin2_Bo-0.0000056002*Sin4_Bo-0.0000000187*Sin6_Bo-
		    Zo2*(0.16778975+0.16273586*         Sin2_Bo-0.00052490*  Sin4_Bo-0.00000846*  Sin6_Bo-
		    Zo2*(0.0420025+0.1487407*           Sin2_Bo+0.0059420*   Sin4_Bo-0.0000150*   Sin6_Bo-
		    Zo2*(0.01225+0.09477*               Sin2_Bo+0.03282*     Sin4_Bo-0.00034*     Sin6_Bo-
		    Zo2*(0.0038+0.0524*                 Sin2_Bo+0.0482*      Sin4_Bo+0.0032*      Sin6_Bo)))));
 	
//System.out.println("dB="+dB);
//System.out.println("l="+l);
// ГОСТ 32453-2013
Point[0]=Math.toDegrees(Bo+dB);
Point[1]=Math.toDegrees((6*(n-0.5)/57.29577951)+l);
//System.out.println("B="+Point[0]);
//System.out.println("L="+Point[1]);
return Point;
}

 

А первый вариант, с погрешностью 400мм на МК возможно сделать... 
Есть более приближенные методы преобразования, и придеться вникать в формулу Венсети,  ортодромию и ее отличие от локсодормы а оно вам надо? 

stepan_sotnikov
Offline
Зарегистрирован: 06.04.2019

забыл сказать, что вся эта муть называеться системой диф поправок(корекции) ГНСС толкьо сдесь мы сами себе задаем базовую станцию.... примерно как и в Геодезическом методе РТК, но не в случаи пост обработки статического метода... там уже другая матемаика.
Да если займетесь, спросите... в инете много ошибочных формул... даже в ГОСТе выявленны косяки... 

stepan_sotnikov
Offline
Зарегистрирован: 06.04.2019

https://www.youtube.com/watch?v=n8PUyOtiGKo&t=2540s
вот очень не плохо и доходчиво рассказывает об этом...
правда не по нашенски

Samid777
Offline
Зарегистрирован: 24.04.2019

Попробуйте провести эксперемент, на точке, координаты который вы узнали через гугл планета земле или другой сервис (не самый точнй вариант) включите несколько разных GPS приемников. Результат, они будут мало отличаться друг от друга, но сильно отличаться от координаты, подсмотренных на карте. 
Отсюда есть одна идея. На берегу озера находится маяк, с удобными координатами в той системе отсчета, в которой будем делать треки. На маяке есть GPS навигатор с микроконтроллером (ардуино), который принимает координату, и вычисляет поправку между реальными для нас координатами, и принимаемыми. 
Он отправляет эту поправку на катер, и ардуино на катере, прибавив поправку к полученным координатам получает точные или нет, совершенно не важно, он получает координаты в той системе, в которой мы писали трэк. Можно при этом сделать хоть свою координатную сетку.
Кто пользуется на дорогах навигатором, может замечал такую штуку, сдвигается на соседнюю полосу, на навигаторе видно, что мы сместились на пару метров, но ехали мы по обочине, а теперь по первой полосе, (или со своей ушли на встречку) т.е. он достаточно чувствителен, но несколько смещен относительно карты, но и это не всегда.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Samid777 пишет:

...т.е. он достаточно чувствителен, но несколько смещен относительно карты, но и это не всегда.

По поводу "но несколко смещен": сейчас более половины карт (по сути ВСЕ карты для навигационных прогамм мелких фирм и ВСЕ альтернативные карты для навигационных программ "законодателей мод" в этой области) получается конвертацией в нужный формат данных openstreetmap. А там карты делаются любителями, в значительной степени - новичками, которые выравнивают дороги не по GPS-трекам, а по спутниковым снимкам, которые, зачастую, довольно криво склеены.

Т.е. вероятнее всего, что смещен именно рисунок дороги на карте, а не показания навигатора.

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

stepan_sotnikov
Offline
Зарегистрирован: 06.04.2019

 "зачастую, довольно криво склеены." как правило склеены с точностью превышаещие возможность бытовых навигаторов. Кроме этого снимки отцифровываються уже на уточненых фактических эфемеридах... Нестыковки появляються только в наших системах. Когда мы пытаемся на на свою СК геоид  Красовского натянуть NAD27. Вот из этого постоянно вылезает 3.7м. У Google такого нет, т.к. у него своих снимков хватает. Искажения бываею на краях сника, т.к. мы уже смотрим не под прямым углом, а как бы сбоку... но это уже не лечится... но Google хорошо бориться вводя коррекцию этого... и только высокие объекты могут выдать это... но обычно мы этого не видим т.к. нам подсовывают каждый раз шороший снимок.

Samid777
Offline
Зарегистрирован: 24.04.2019

Вообще карты в этой идее не главное. Да и не посмотрел я ответы все, оказывается stepan_sotnikov раньше меня предложил этот вариант, только более развернуто и со скетчем уже. Думаю что с поправкой, которую будет приносить наземная станция, долждно получится. Тем более что почти так и работает та же технология, которая позволяет получить точность в пару сантиметров. Хотя в этом случае такая точность не достижима. А погрешность будет... Берем датчик, смотрим, как он "шумит", вот с этим ничего не сделаете. Не считая корелляции... 
А какую точность требуется получить, при определении координат катамарана?

Logik
Offline
Зарегистрирован: 05.08.2014

//А какую точность требуется получить, при определении координат катамарана?

Наконец прозвучал ключевой вопрос. )))

Из личного опыта. Есть такая прога https://play.google.com/store/apps/details?id=com.webmajstr.anchor

Ниче особого, запоминает GPS координаты и мониторит отклонение от них. Алармит если уплыли далеко. По умолчанию отклонение до 15 метров допускается. Я её так и запустил был, лодка значить в растяг на якоре и к берегу, тихая заводь, чистое небо, смеркалось.. Первый аларм минут через 5. Я увиличил допуск до 20 метров.. Так я полночи прибавлял по 5метров, дошел до 40, потом сильно спать хотелось уже, поставил 70. Успехов с GPS ;)

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

stepan_sotnikov пишет:

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

Вы заблуждаетесь.

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

Цитата:

Когда мы пытаемся на на свою СК геоид  Красовского натянуть NAD27.

Я что-то нигде не видел, чтобы эллипсоид Красовского использовался для навигации.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Logik пишет:

//А какую точность требуется получить, при определении координат катамарана?

Наконец прозвучал ключевой вопрос. )))

Из личного опыта. Есть такая прога https://play.google.com/store/apps/details?id=com.webmajstr.anchor

Ниче особого, запоминает GPS координаты и мониторит отклонение от них. Алармит если уплыли далеко. По умолчанию отклонение до 15 метров допускается. Я её так и запустил был, лодка значить в растяг на якоре и к берегу, тихая заводь, чистое небо, смеркалось.. Первый аларм минут через 5. Я увиличил допуск до 20 метров.. Так я полночи прибавлял по 5метров, дошел до 40, потом сильно спать хотелось уже, поставил 70. Успехов с GPS ;)

надо, чтобы GPS приёмник мог лить данные с двух систем, тогда усреднение даст точность 5 метров, m-8n кстати 4-х системный

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

stepan_sotnikov
Offline
Зарегистрирован: 06.04.2019

andriano  на параметрах элепсоида красовского основанна Пулковская СК-42, читаем ГОСТ 51794,  Сейчас действует ПЗ-90 (Параметры Земли), но на нее все болт забили, потому, что потом ввели ПЗ-90.02 и постановлением парвительства №1463 от 28 декабря 12года вводят ПЗ-90.11 Эти параметры все ближе и ближе к NAD27(пиндосовская ПЗ на которой основанна WGS-84).
Это к вопросу о навигации. Все Российские НавСистемы работают по Этим данным... Даже наш ГЛОНАС думает, что он летает вокруг тела с параметрами как посчитал Кросовский. Наши спутники отправляют снимки с дифпоправками на эти параметры и гравиметрическоеполя земли (ГАО2012, для ГСК-2011), читаем ГОСТ51353-99 (Геоинформационное картографирование. Метаданные ЭК (электронных карт.)
Второе, я совсем не заблуждающь. Я это достоверно знаю. И могу рассказать о всех этапах который проходит снимок сделанный на спутники. 
Возможно мы о разном говорим? То что на основе снимков рисуют кривые карты с этим я не спорю.
И вы обсолютно правы. Тамошний форум, когда я читаю средце кровью обливаеться, от той ересь, что там происходит. И если дешифровкой КС (космических снимков) обучают 4 семестра. 3 семестра нафотограмметрию. 2 симестра на арэрофтогеодезию. То те "специалисты" занют лучше специалистов из МИИГАиК, как надо рисовать.
Между прочем это та причина по кторой я выбрал этот форум, потому, что на других как правило делитанты учат новичков. Примерно как и так же и там. 

stepan_sotnikov
Offline
Зарегистрирован: 06.04.2019

 Я думаю уважаемый KSlon  не правильно сформулировал задачу. =))) Может и правда он хочет, что бы он к нему вернулся, а не выходил на позицию точнее чем НавОперделение координат? У нас даже БЛА делают облет по Нав координатам для картирования местности, правда у них на борту есть Антена которая пишит сырые данные от ГНСС, и потом эта инфа обрабатывается. И сники привязыватся к обработанным данным.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

интересно, ESP-32 потянет?

Logik
Offline
Зарегистрирован: 05.08.2014

//Я думаю уважаемый KSlon  не правильно сформулировал задачу.

Так он её и не сформулировал толком и сам свалил в неизвестном направлении. Нет информации о требуемой точности и дальности. Может надо плавать не далее 15м чтоб дитё поигралось. А может 20 км. Короче, расходимся нас нае....

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Logik пишет:

//Я думаю уважаемый KSlon  не правильно сформулировал задачу.

Так он её и не сформулировал толком и сам свалил в неизвестном направлении. Нет информации о требуемой точности и дальности. Может надо плавать не далее 15м чтоб дитё поигралось. А может 20 км. Короче, расходимся нас нае....

Ну чё так сразу расходимся, а сделать земную станцию )))

Samid777
Offline
Зарегистрирован: 24.04.2019

Если плавать на 15 м, для детей, то все то же самое, станция, поправки... но катер будет сам и катером, и станцией поправки. Для этого просто нужно указать катеру точку старта, и указать, что это есть эта точка, и пусть он немного посчитает, и сделает поправку, сместив трек под начало координат, или координаты под трек. Главное так не отправлять, чтобы он на точку старта на 20 метров сдвинутую не ушел.

 

stepan_sotnikov
Offline
Зарегистрирован: 06.04.2019

Я думаю ESP-32 потянет. Там основная проблемма плавающая запятая. 
Привожу код на Жабе, для решения этих задач. Полную сборку я потерял в связи утратой компа, остались только черновики на жабе они исправно работают. "Полевые испытания" пройдены. Данные для обрабоки брали после обрабокит сырых данных. Исп оборудования при тестах примемная Topcon GR-5,  ПО Magnet Tools. базис примерно 900м, разность вычисления Tools и кода не привышала 0.1мм на 900м. Обработка данных "на лету" СКО 70мм, что нас весьма поразило тогда. Данные собирались в поле. Обработка и анализ велась камерально. Я так и не допилил это, что бы это все было на сотовом (пара сотовых которые можно было испытать as is) после утраты ноута, забил на этом. 
 


	//расстояние на элепсоиде через формулу Венсенти
		// где B широта L долгота в градуса, десятичных двух точек
		// Aa большая полуось э-да Ea, Ea сжатие
		// на выходе расстояние.
	// Обратная геодезическая задача
		public static double vincenty(double B, double L, double B1,
				double L1, double Aa, double Ea) {
			// Параметры эллипсоида:
			double a = Aa;//6378245.0;
			double f = Ea;//1 / 298.3;
			double b = (1 - f) * a;
			double EPS = 0.5*Math.pow(10,-30);//0.5E-30;
			double APARAM;
			double BPARAM, CPARAM, OMEGA, TanU1, TanU2, lambda, LambdaPrev, SinL, CosL, USQR, U1, U2, SinU1, CosU1, SinU2, CosU2, SinSQSigma, CosSigma, TanSigma, Sigma, SinAlpha, Cos2SigmaM, DSigma;
			double PI = Math.PI;
			L = L * (PI / 180);
			B = B * (PI / 180);
			L1 = L1 * (PI / 180);
			B1 = B1 * (PI / 180); // Пересчет значений координат в
												// радианы
			TanU1 = (1 - f) * Math.tan(B);
			TanU2 = (1 - f) * Math.tan(B1);
			U1 = Math.atan(TanU1);
			U2 = Math.atan(TanU2);
			SinU1 = Math.sin(U1);
			CosU1 = Math.cos(U1);
			SinU2 = Math.sin(U2);
			CosU2 = Math.cos(U2);

			OMEGA = L1 - L;
			lambda = OMEGA;

			do { // Начало цикла итерации
				LambdaPrev = lambda;
				SinL = Math.sin(lambda);
				CosL = Math.cos(lambda);
				SinSQSigma = (CosU2 * SinL * CosU2 * SinL)
						+ (CosU1 * SinU2 - SinU1 * CosU2 * CosL)
						* (CosU1 * SinU2 - SinU1 * CosU2 * CosL);

				CosSigma = SinU1 * SinU2 + CosU1 * CosU2 * CosL;
				TanSigma = Math.sqrt(SinSQSigma) / CosSigma;

				if (TanSigma > 0) {
					Sigma = Math.atan(TanSigma);
				} else {
					Sigma = Math.atan(TanSigma) + PI;
				}

				if (SinSQSigma == 0) {
					SinAlpha = 0;
				} else {
					SinAlpha = CosU1 * CosU2 * SinL / Math.sqrt(SinSQSigma);
				}

				if ((Math.cos(Math.asin(SinAlpha)) * Math.cos(Math.asin(SinAlpha)) == 0)) {
					Cos2SigmaM = 0;
				} else {
					Cos2SigmaM = CosSigma
							- (2 * SinU1 * SinU2 / (Math.cos(Math.asin(SinAlpha)) * Math
									.cos(Math.asin(SinAlpha))));
				}

				CPARAM = (f / 16.0)
						* Math.cos(Math.asin(SinAlpha))
						* Math.cos(Math.asin(SinAlpha))
						* (4 + f
								* (4 - 3 * Math.cos(Math.asin(SinAlpha))
										* Math.cos(Math.asin(SinAlpha))));

				lambda = OMEGA
						+ (1 - CPARAM)
						* f
						* SinAlpha
						* (Math.acos(CosSigma) + CPARAM
								* Math.sin(Math.acos(CosSigma))
								* (Cos2SigmaM + CPARAM * CosSigma
										* (-1 + 2 * Cos2SigmaM * Cos2SigmaM)));
						} while ((Math.sqrt((lambda - LambdaPrev) * (lambda - LambdaPrev))) > EPS);
			// Конец цикла итерации

			USQR = Math.cos(Math.asin(SinAlpha)) * Math.cos(Math.asin(SinAlpha))
					* (a * a - b * b) / (b * b);
			APARAM = 1 + (USQR / 16384)
					* (4096 + USQR * (-768 + USQR * (320 - 175 * USQR)));
			BPARAM = (USQR / 1024)
					* (256 + USQR * (-128 + USQR * (74 - 47 * USQR)));
			DSigma = BPARAM
					* Math.sqrt(SinSQSigma)
					* (Cos2SigmaM + BPARAM
							/ 4
							* (CosSigma * (-1 + 2 * Cos2SigmaM * Cos2SigmaM) - BPARAM
									/ 6
									* Cos2SigmaM
									* (-3 + 4 * SinSQSigma)
									* (-3 + 4 * Cos2SigmaM * Cos2SigmaM)));
			return b * APARAM * (Sigma - DSigma);
		}

		// Венсете дубль два Обратная задача. 
		// На входе долгота широта в градусах, Дистанция, угол выхода, угол входа
		// Обратная геодезическая задча
		public static double[] Vincenty	(double la1,double lo1,double  la2,double lo2, double Aa,double Ea ){
				
		//  так.
		// https://en.wikipedia.org/wiki/Vincenty%27s_formulae
		// Расчет между двумя точками на земной поверхности
		double a=Aa;          //length of semi-major axis of the ellipsoid (radius at equator);	(6378137.0 metres in WGS-84)
		double f=Ea;          //ƒ	flattening of the ellipsoid;	(1/298.257223563 in WGS-84)
		//double b = (1 - f)*a; //length of semi-minor axis of the ellipsoid (radius at the poles);	(6356752.314245 meters in WGS-84)
		double Φ1=Math.toRadians(la1); 	      // latitude of the points 1;
		double Φ2=Math.toRadians(la2);	 // latitude of the points 1;
		double U1 = Math.atan((1-f)*Math.tan (Φ1));//   reduced latitude (latitude on the auxiliary sphere)
		double U2 = Math.atan((1-f)*Math.tan (Φ2));//	reduced latitude (latitude on the auxiliary sphere)		
		double L1=Math.toRadians (lo1);
		double L2=Math.toRadians (lo2);
		double L = L2 - L1;	// difference in longitude of two points (разница в долготе двух точек)
		double s;//	ellipsoidal distance between the two points;
		// f=(geoid.max-geoid.min)/geoid.max;
		// f*geoid.max=geoid.max-geoid.min
		// geoid.max-f*geoid.max=geoid.min


		double f_16=f/16;
		double Bb=Aa-Aa*f;// Малая полуось 
		double b2 = Bb*Bb;

		double e_inv = (a*a-b2)/b2;
		double minDelta = 0.000000000000000001;
		U1 = Math.atan((1-f)*Math.tan(Math.toRadians(la1)));
		U2 = Math.atan((1-f)*Math.tan(Math.toRadians(la2)));
		double sinU1 = Math.sin(U1);
		double sinU2 = Math.sin(U2);
		double cosU1 = Math.cos(U1);
		double cosU2 = Math.cos(U2);
		L = Math.toRadians(lo2-lo1);
		double cos2SigmaM2;
		double lambda = L;
		double dLambda = 0;
		double sinAlpha;
		double cos2SigmaM;
		while(true) {
			double sinLambda = Math.sin(lambda);
			double cosLambda = Math.cos(lambda);
			double sin2Sigma = Math.pow(cosU2*sinLambda,2)+Math.pow(cosU1*sinU2-sinU1*cosU2*cosLambda,2);
			double sinSigma = Math.sqrt(sin2Sigma);
			double cosSigma = sinU1*sinU2+cosU1*cosU2*cosLambda;
			double sigma = Math.atan2(sinSigma,cosSigma);
				
			if (sinSigma !=0){ sinAlpha=cosU1*cosU2*sinLambda/sinSigma;}//проверка дел на ноль
			else{sinAlpha=0;};

			
			double cos2a = 1-sinAlpha*sinAlpha;
			
			if (cos2a !=0){ cos2SigmaM =cosSigma - 2*sinU1*sinU2/cos2a;}//проверка дел на ноль
			else{cos2SigmaM=0;};

			
			double C = f_16*cos2a*(4+f*(4-3*cos2a));
			double oldLambda = lambda;
			cos2SigmaM2 = cos2SigmaM*cos2SigmaM;
			lambda = L+(1-C)*f*sinAlpha*(sigma+C*sinSigma*(cos2SigmaM+C*cosSigma*(-1+2*cos2SigmaM2)));
			dLambda = lambda-oldLambda;
			if ( Math.abs(dLambda)<=minDelta ) {	
				double u2 = cos2a*e_inv;
				double A =1+ (u2/16384)*(4096+u2*(-768+u2*(320-175*u2)));
				double B =(u2/1024)*(256+u2*(-128+u2*(74-47*u2)));
				double dSigma = B*sinSigma*(cos2SigmaM+(B/4)*(cosSigma*(-1+2*cos2SigmaM2)-(B/6)*cos2SigmaM*(-3+4*sin2Sigma)*(-3+4*cos2SigmaM2)));
				 s = Bb*A*(sigma-dSigma);// судя запихнють правильный малый  радиус земли
				 cosLambda = Math.cos(lambda);
				 sinLambda = Math.sin(lambda);
				double angle1 = Math.toDegrees(Math.atan2( cosU2*sinLambda,cosU1*sinU2-sinU1*cosU2*cosLambda));
				double angle2 = Math.toDegrees(Math.atan2( cosU1*sinLambda,-sinU1*cosU2 + cosU1*sinU2*cosLambda));
				
				double []r = {s,angle1,angle2};
				 return r;}
		}

				}
			// По координате угле и расстоянию находим вторую точку на геоиде в географических координатах. 
			// прямая геодезическая задача на элепсоиде
			public static double[] VincentyII (double la1, double lo1, double a1,
					double s, double Aa, double Ea) {
			//	var ellipsoids = { "wgs84" : { "min":6356752.314, "max":6378137 }, "sk42" : { "min":6356863, "max":6378245 }, "sphere" : { "min":6378137, "max":6378137 } };

			//	var geoid = ellipsoids[ellipsoid];
				double f = Ea; // (geoid.max-geoid.min)/geoid.max;
				double f_16=f/16;
				// малая полуось b = (1 - ƒ) a
				double b = (1 - f) * Aa;
				double b2 = b*b;
						double e_inv = (Aa*Aa-b2)/b2;

				// Параметры эллипсоида:
						//double a = Aa;//6378245.0;
						 f = Ea;//1 / 298.3;
					//	double b = (1 - f) * a;
						double EPS = 0.5*Math.pow(10,-30);//0.5E-30;
						a1=Math.toRadians(a1);// точно ли угол в Радианах?
				 

				 double U1 = Math.atan((1-f)*Math.tan(Math.toRadians((la1))));
				 double sinU1 = Math.sin(U1);
				 double cosU1 = Math.cos(U1);
				 double sinAlpha = cosU1*Math.sin(a1);
				 double sinAlpha2 = sinAlpha*sinAlpha;
				 double cosAlpha2 = 1-sinAlpha2;
				 double u_2 = cosAlpha2*e_inv;
				 double A = 1+u_2/16384*(4096+u_2*(-768+u_2*(320-175*u_2)));
				 double B = u_2/1024*(256+u_2*(-128+u_2*(74-47*u_2)));
				 double sigma = s/(b*A);
				 double sigmaBase = sigma;
				 double cosa1 = Math.cos(a1);
				 double sina1 = Math.sin(a1);
				 double sigma1 = Math.atan2(Math.tan(U1),cosa1);
				
				 	while(true) {
					double twoSigmaM = 2*sigma1+sigma;
					double cos2SigmaM = Math.cos(twoSigmaM);
					double cos2SigmaM2 = cos2SigmaM*cos2SigmaM;
					double sinSigma = Math.sin(sigma);
					double cosSigma = Math.cos(sigma);
					double deltaSigma = B*sinSigma*( cos2SigmaM+1/4*B*(cosSigma*(-1+2*cos2SigmaM2)-1/6*B*cos2SigmaM*(-3+4*sinSigma*sinSigma)*(-3+4*cos2SigmaM2) ) );
					double oldSigma = sigma;
					sigma = sigmaBase+deltaSigma;
					double dSigma = Math.abs(sigma-oldSigma);
					
					if ( dSigma<EPS) {
						double [] res = {0,0,0};
						res[0] = Math.toDegrees(Math.atan2( sinU1*cosSigma+cosU1*sinSigma*cosa1,(1-f)*Math.sqrt(sinAlpha2+Math.pow((sinU1*sinSigma-cosU1*cosSigma*cosa1),2)) ));
						double lambda = Math.atan2( sinSigma*sina1,cosU1*cosSigma-sinU1*sinSigma*cosa1);
						double C = f_16 * cosAlpha2 * (4 + f * (4 - 3 * cosAlpha2));
						double L = lambda-(1-C)*f*sinAlpha*(sigma +C*sinSigma*(cos2SigmaM+C*cosSigma*(-1+ 2*cos2SigmaM2)));
						res[1] = lo1 + Math.toDegrees(L);
						res[2] = Math.atan2(sinAlpha, -sinU1 * sinSigma + cosU1 * cosSigma * cosa1);
						return res;
					}
				}
				}
		
			
			
			
			
			// прямая геодезическая задача на элепсоиде			
// По координате угле и расстоянию находим вторую точку на геоиде в географических координатах. 
		public static double[] vincentyII	 ( double la1, double lo1, double a1, double s, double Aa, double Ea) {
			double minDelta = 0.000000000000000001;
			a1=Math.toRadians(a1);
			double f_16=Ea/16;
			double Bb=Aa-Aa*Ea;// Малая полуось 
			double b2 = Bb*Bb;
			double U1 = Math.atan((1-Ea)*Math.tan(Math.toRadians((la1))));
			double sinU1 = Math.sin(U1);
			double cosU1 = Math.cos(U1);
			double sinAlpha = cosU1*Math.sin(a1);
			double sinAlpha2 = sinAlpha*sinAlpha;
			double cosAlpha2 = 1-sinAlpha2;
			double e_inv = (Aa*Aa-b2)/b2;
			
			double u_2 = cosAlpha2*e_inv;
			double A = 1+u_2/16384*(4096+u_2*(-768+u_2*(320-175*u_2)));
			double B = u_2/1024*(256+u_2*(-128+u_2*(74-47*u_2)));
			double sigma = s/(Bb*A);
			double sigmaBase = sigma;
			double cosa1 = Math.cos(a1);
			double sina1 = Math.sin(a1);
			double sigma1 = Math.atan2(Math.tan(U1),cosa1);
			while(true) {
				double twoSigmaM = 2*sigma1+sigma;
				double cos2SigmaM = Math.cos(twoSigmaM);
				double cos2SigmaM2 = cos2SigmaM*cos2SigmaM;
				double sinSigma = Math.sin(sigma);
				double cosSigma = Math.cos(sigma);
				double deltaSigma = B*sinSigma*( cos2SigmaM+1/4*B*(cosSigma*(-1+2*cos2SigmaM2)-1/6*B*cos2SigmaM*(-3+4*sinSigma*sinSigma)*(-3+4*cos2SigmaM2) ) );
				double oldSigma = sigma;
				sigma = sigmaBase+deltaSigma;
				double dSigma = Math.abs(sigma-oldSigma);
				if ( dSigma<minDelta) {
					double []res={0,0,0} ;
					res[0] = Math.toDegrees(Math.atan2( sinU1*cosSigma+cosU1*sinSigma*cosa1,(1-Ea)*Math.sqrt(sinAlpha2+Math.pow((sinU1*sinSigma-cosU1*cosSigma*cosa1),2)) ));
					double lambda = Math.atan2( sinSigma*sina1,cosU1*cosSigma-sinU1*sinSigma*cosa1);
					double C = f_16 * cosAlpha2 * (4 + Ea * (4 - 3 * cosAlpha2));
					double L = lambda-(1-C)*Ea*sinAlpha*(sigma +C*sinSigma*(cos2SigmaM+C*cosSigma*(-1+ 2*cos2SigmaM2)));
					res[1] = lo1 + Math.toDegrees(L);
					res[2] =Math.toDegrees( Math.atan2(sinAlpha, -sinU1 * sinSigma + cosU1 * cosSigma * cosa1));
					return res;
				}
			}
			}
}


	

 

ELITE
ELITE аватар
Offline
Зарегистрирован: 11.01.2018

купите нормальный мультисистемный приемник с хорошей антенной - погрешность +- 10см , тем более на открытой воде....

у меня китайский дешевый смартфон в железном боксе без прямой видимости берет десяток спутником и точность 3-5м

а на улице вообще более 40 спутников как жпс, так и глонас + китайские и японские системы... точность +-30см 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

ELITE пишет:

купите нормальный мультисистемный приемник с хорошей антенной - погрешность +- 10см , тем более на открытой воде....

у меня китайский дешевый смартфон в железном боксе без прямой видимости берет десяток спутником и точность 3-5м

а на улице вообще более 40 спутников как жпс, так и глонас + китайские и японские системы... точность +-30см 

так M8N тоже вроде 4-х системный, но одновременно вроде обрабатывает только 2, к примеру голонас+GPS, не???

маленький самопальный дроник возвращался в точку с точностью 1 метр с удаления 1 км

Logik
Offline
Зарегистрирован: 05.08.2014

ELITE пишет:

купите нормальный мультисистемный приемник с хорошей антенной - погрешность +- 10см , тем более на открытой воде....

у меня китайский дешевый смартфон в железном боксе без прямой видимости берет десяток спутником и точность 3-5м

а на улице вообще более 40 спутников как жпс, так и глонас + китайские и японские системы... точность +-30см 

А мужыки то и не знают!

s022.jpg

Заодно новую ионосферу куплю  и часы на спутники ;)

А то ведь.

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

Погрешность определения высоты GPS-навигатором в полтора раза выше горизонтальной погрешности

В данном случае длительность такого «выброса» свыше 40 метров не превысила 3 минут. Вероятная причина — неблагоприятное расположение спутников. 

Изучайте https://survival.com.ua/kolichestvennaya-otsenka-tochnosti-rabotyi-gps-navigatora-opredeleniyu-mestopolozheniya/

stepan_sotnikov
Offline
Зарегистрирован: 06.04.2019

ELITE пишет:

купите нормальный мультисистемный приемник с хорошей антенной - погрешность +- 10см , тем более на открытой воде....

у меня китайский дешевый смартфон в железном боксе без прямой видимости берет десяток спутником и точность 3-5м

а на улице вообще более 40 спутников как жпс, так и глонас + китайские и японские системы... точность +-30см 

Фига себе... а мы тут как дураки пилим подавление многолучевости, используем уточненые эфемериды, обработка тропосферной задержки, и смотрим прогнозы ионосферы... Пойду шефу скажу, что  на Али можно купить "мультисистемный приемник с хорошей антеной" и по домам =)))

Samid777
Offline
Зарегистрирован: 24.04.2019

Ua6em, дроник на свое место возвращается по той причине, что вот та коррекция по треку, она уже проведена (улетел и прилетел с одинковой ошибкой). Точку он запомнил, и ошибки, которые накапливаются, еще не повлияли на него, повлиял только шум. Может термины у меня не совсем те, которые приняты в геодезии, но я думаю, что понятно, о чем я. Если бы дрон вернулся обратно через неделю, то точность была бы не один метр. И если бы GPS стабильно бы врал на километр, но врал одинаково, то дрон вернулся бы обратно. 

 

Источник погрешности Среднеквадратичное
значение погрешности, м
Нестабильность работы генератора 6,5
Задержка в бортовой аппаратуре 1,0
Неопределённость пространственного положения спутника 2,0
Другие погрешности космического сегмента 1,0
Неточность эфемерид 8,2
Другие погрешности наземного сегмента 1,8
Ионосферная задержка 4,5
Тропосферная задержка 3,9
Шумовая ошибка приёмника 2,9
Многолучёвость 2,4
Другие ошибки сегмента пользователя 1,0
Суммарная погрешность 13,1

Думаю что этой таблице, взятой с википедии можно доверять, даже если цифры устарели, то суть дела она отражает.  И если с эфемеридами мы ничгео не поделаем, эта погрешность постоянно, (но компенсация не месте должна помочь) то все остальное будет меняться в зависимости от условий, ну Вам ли про это не знать. 

stepan_sotnikov
Offline
Зарегистрирован: 06.04.2019

 пойду скажу пацанам, что бы несли все это на помойку...
и обновления ПО уже не выйдет...
а то тут прорыв в технологиях =)))
Вот думаю. Хорошая это новость или плохая?
Что тайные знания раскрылись перед нами.
И погрешность без Дифпоправки то 10см.
А то у нас приемник по 5000$ а точность 
без поправок 3 метра... А то и больше... 

stepan_sotnikov
Offline
Зарегистрирован: 06.04.2019

Samid777 Не в бровь, а в глаз!!!  Именно так. Сейчас немного поточнее. Пиндосы поткрутили искуственные "помехи" в гражданские частоты... (вернее не частоты, а канал L1 несущей) подкрутили точность эфемирид, так что эта величина около 7м а не 13м как раньше

Logik
Offline
Зарегистрирован: 05.08.2014

Samid777 пишет:

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

Я тоже так думаю. Только надо еще понимать что эта цифра еще и с некоторой вероятностю. Может 95%, может 98.. Не суть важно сколько. Важно что в описаном мной личном опыте система непрерывно, всю ночь, мониторила координаты и "выла" в тех нескольких процентах когда вылетала за допуск. Так что надо учитывать что пару раз на сотню катер может и не доплыть до берега пару десятков метров. Или впилятся в берег на полном ходу.

Logik
Offline
Зарегистрирован: 05.08.2014

stepan_sotnikov пишет:

 Пиндосы поткрутили искуственные "помехи" в гражданские частоты... (вернее не частоты, а канал L1 несущей) 

это был режим SA, там в таблице выше с ним и без него результаты.

Samid777
Offline
Зарегистрирован: 24.04.2019

На картике вроде нивелирчик вижу скромненький, когда понесете на свалку, сообщите куда именно, думаю пригодится немного. Скромненький конечно, до ПАБ 2 ему далеко еще (игрался немного), но может получится им относительно точно антенны по азимуту выставлять. Правда с Владивостока далеко скорее всего ехать придется за ним, но думаю цену билета немного отобьет. 

stepan_sotnikov
Offline
Зарегистрирован: 06.04.2019

на фотки Тахеометр Leica TS06 5'', не дорогой 400к р. б/у можно купить за 150к р. Бусольки артелерийские можно дешевле найти... ;-) но если мы это все выбросим... то думаю, что можно и билет окупить, да и квартиру по прилету тут же купить однушку правда ибо как б/у пойдет =))) да и кому они нужны с таким прорывом в ГНСС? хрен продаш, так на луну смотреть... а с антен диодики подергать =)))

Samid777
Offline
Зарегистрирован: 24.04.2019

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

Но и по своей части было, показывает мне человек антенну для WIFI, у которой усиление 100 дБ, размером с тарелку чуть больше средней. Рассказываю, не может быть такого, что в подобных конструкциях... от 10 до 20, 20 это уже очень хорошо, и тарелка будет немалая. А такое усиление, тарелка должна быть просто огромной. Нет, не верит. Вот тут же написано, значит так и есть. Привожу пример антенны на 30 дб размером с человека, и на более высокую частоту, рассказывают что такое децибеллы.. нет, диванный специалист, не верит все равно. Так что две таких антенны, и можно работать хоть с отражением от луны на тысячи км, можно на неоднородностях тропо рассеивать. Только луна слишком большй объект для такой узконаправленной тарелки, нужно строго в одну точку направить, лучше отражаться от геостационара, используя его как пассивный ретранслятор... 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

100db это совсем круто, у меня маленькая тарелка, 1.8 метра, разве что пару десятков можно выдавить )))
Люди совершенно не представляют логарифмические величины

Samid777
Offline
Зарегистрирован: 24.04.2019

Stepan_sotnikov, в свое время у меня одна идея была.. как думаете, какая будет точность в данном случае. Имеется два приемника GPS. Во втором варианте,  приемник один, но с двумя антеннами, но его думаю упустим, такое найти не просто. Приемники находятся с левой и правой стороны антенны радиорелейной станции. Антенна имеет ширину около метра, ну и жпс приемники еще можно вынести на пол метра.  Информация с этих приемников приходит на одно устройтсво. По разнице в координатах между этими примниками мы можем вычислить относительно несложно истиный азимут, и повернуть антенну в соответствии с начальным азимитом на корреспондента. Однако подозреваю, что с базой около двух метров градусов 30 погрешности будет. А не помешала бы от 1 до 5 градусов... Что, конечно при наличинии двух жпс антенн на одном устройстве намного более реальным, но усложнит конструкцию приемника и вычисления. 
Если не ошибаюсь такая идея уже реализована, но какая точность, не знаю. Для огромных антенн получится приемлимая точность даже с простым приемником..

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

ELITE пишет:

купите нормальный мультисистемный приемник с хорошей антенной - погрешность +- 10см , тем более на открытой воде....

у меня китайский дешевый смартфон в железном боксе без прямой видимости берет десяток спутником и точность 3-5м

а на улице вообще более 40 спутников как жпс, так и глонас + китайские и японские системы... точность +-30см 

Так, понятное дело. Ты его на двадцати языках программируешь! А нам - грешным что делать?

stepan_sotnikov
Offline
Зарегистрирован: 06.04.2019

Я понял идею... надо подумать и прикинуть, что по цифрам получиться  в реальности. Ввыходные, я могу провести эксперемент на Sokkia это одночистотники... Здесь выгодная ситуация, что у нас есть база фиксированная... это может упростить математику. Вернее повысить точность. Точность наведения будит зависить только опред координат в паре... пока я не могу представить это в голове... но пара взаимно опредилитеься с точность между собой 70мм при благоприятных условиях. То есть пока прикидка такая 100мм на 1 метр (база разнесенные антены), это в угловых  6 градусов примерно... может имеет смысл по магнитометру высчитывать склонение от текущих координат, запрашивать у магнитной абсерватории склонение на сегодня (координаты магнитного полюса), с текущего положения считать дирекционный угол на магнитный полюсь, получать склонение) и получить большую точность? 

Samid777
Offline
Зарегистрирован: 24.04.2019

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

stepan_sotnikov
Offline
Зарегистрирован: 06.04.2019

Да подожид... не мудри... я просто ни разу на такие короткие расстояния не думал... для угловых измерений у нас есть другие методы и способы... то что ты предложил, это может оказатся интересным... хотя может быть и неожиданно не удачным...
Пока в мыслях установить базу она будит не подвижной. И набрать сырых данных второй воркуг нее. 
Это даст мне возможность. Вычислить в статики, эти же данные посчитать в режиме стоп и гоу, и сырые перевести в навигационные, так как бы мы получали от бытового приемника ГНСС...
Я даже не разу и не смотрел на такие данные, потому ,что двухчастотники вообще не желательно включать ближе 5 метров, там в них стоят мошниые радиомодем, которые не любят, что бы их держали рядом.
Но с магнитометром, это в разы проще. Если, что на палярную звезду отколиброваться ;-)  

stepan_sotnikov
Offline
Зарегистрирован: 06.04.2019

Итог. 
без анализа сырых данных. Основываясь только на одновременно полученных НавДанных, на плече 1м. Где одна антена находиться на месте, вторая вращаеться вокруг нее. При приведение НавКоординаты к точности GGMM.MMMM +-(0.0001) без корректировки на базис получен достоверный сектор дерекционного угла 61,93°
При выборки данных и приведению к базису. достижимый достоверный сектор 33,4° 
При использовании данных вида GGMM.MMMMM +-(0.00001) выборки из сырых данных одновеременнхы данных и достоверно полученных при решении с одних спутников с корректировкой на базис в 1м 6,7°. 

Выводы: получить рабочую систему для определения дирекционного угла парой ГНСС приемника без доступа к анализу сырых данных и полученных с точностью +-(0.0001)' возможно, с достоверной точностью 33,4° (эта точность из разряда, севре где то там...) 

Samid777
Offline
Зарегистрирован: 24.04.2019

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

stepan_sotnikov
Offline
Зарегистрирован: 06.04.2019

увеличиваеться но не пропорционально. Такая реализация измерения угла не рационально, есть иные способы получить угол... с большей точность, и стабильным результатом... Это примерно так же как задача Бюффона, определения числа Пи при помоши иглы, до 10000000 знака =))) можно, но есть формула Виета ;-) и др.

Samid777
Offline
Зарегистрирован: 24.04.2019

Вот вспомнить где я про такую систему читал.. Это могла быть либо инструкция к перуниту, либо к другой подобной системе. Но там две антенны ставились возможно к одному устройству. А тут... в общем при наличии деталей на 100 рублей, плюс приемника на нужную частоту, можно будет ориентироваться на несушку с точностью до градуса. Только не понятно будет, сзади она пришла, или спереди. И имея радиосигнал с двух антенн можно вычислить азимут на спутник с точностью до градуса. Но расстояние между антеннами должно быть соизмеримо с длиной волны. Но это уже совсем другое устройство,GPS приемник с функцией пеленгатора. 
Другие методы, это хорошо... но мало какой думаю позволит получить относительно точный азимут относительно быстро, при наличии вокруг кучи металла. Если только не испльзовать гирокомпас... но его тоже нужно предварительно раскрутить. 
PS. Так получилось, что я далек от математики, но при необходимости достаточно быстро разбираюсь в нужном разделе... Методом близким к бросанию игры можно имхо проверить работу генератора случайных чисел. Точно так же можно этим генератором моделировать координаты бросания иглы, и угол ее поворота. Если по результатам получится вычислить число пи, значит результат близок к случайному. С ПСП на сдвиговых регисторах такого результата быть не должно..

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Samid777 пишет:

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

Число пи будет использоваться непосредственно при моделировании бросания иглы. Т.е. получится, что мы вычисляем число пи, используя число пи.

Samid777
Offline
Зарегистрирован: 24.04.2019

Я бы не стал испльзовать число пи для модулирования по настоящему случайного процесса. Предпочел бы использовать шум стабалитрона, или СБМ-20, или шум эфира, водопада и т.д. 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Samid777 пишет:

Я бы не стал испльзовать число пи для модулирования по настоящему случайного процесса. Предпочел бы использовать шум стабалитрона, или СБМ-20, или шум эфира, водопада и т.д. 

Ну т.е. аппаратный ДСЧ вместо традичионного программного ДПСЧ.

Это логично.

Но объясните мне, как на основе аппаратного ДСЧ Вы собираетесь вычислять число пи?

stepan_sotnikov
Offline
Зарегистрирован: 06.04.2019

Я задачу Бюффона привел в качестве примера возможного теоретического решение поставленной задачи вычисления числа Пи, но если маделировать этот процесс и программно решать эту задачу, мы сталкиваемся с проблемами необходимость использовать в вычислениях само число. И рассказал, что есть более рациональные методы... Для того, что бы показать, что предложенный метод определения азимута, имеет право на существование, но нерационален. Но на трубоукладчиках плавучих платформах, такая система вспомогательная, но там приемные антены пишут сырые, и в режими РТК так же как и геодезических ГНСС систехах.
Для определения дирекционного угла, есть прицессия, магнитометры, антены на приводные маяки с угломерными устройствами, астронаблюдения. Ну или как Samid777 , но про точность я уже написал. Можно подумать как ее увеличить. Но это как лаптем пытаться мерить нанометры =))) 
При выборе из сырых данных хороших данных ипользовал данные полученные примерно 1 раз в 7 минут. При слепом выборе данных 2-3 минуты. Эта система еще и медленная... А для обработки сырых данных, используются задержки, и возможно вычислить почти по любой эпохи.

Samid777
Offline
Зарегистрирован: 24.04.2019

andriano пишет:

Но объясните мне, как на основе аппаратного ДСЧ Вы собираетесь вычислять число пи?


Бросаем так называемую иголку. Для этого случайно выбираем координату на плоскости. Это начало иголки. Случайно выбираем угол, под которым упадет иголка. Зная его и длину иголки можно вычислить вторую координату, и получить отрезок на нужной нам координатной плоскости. 
Ппроверяем, не пересекает ли отрезок, являющийся иголкой, другой отрезок, который мы провевели на нашей координатной плоскости.
Дальше просто решаем задачу Бюффона, при накоплении нужного коллчисества данных.
Более чем уверен, что если последоватеьлность далеко от случайной, то и число пи будет далеко от истины.

Stepan_sotnikov, я понял зачем была приведена задача, это аналогия, данным методом сам очень часто пользуюсь. Просто сама задача заинтересовала. Про возможность вычислить азимут предлагаемым способом тоеж понятно, что так практически не реально.
Подключил бытовой приемник на чипе SirfStar3, после часа работы снял лог, минут 15 примерно. Загрузил лог в гугл планета земля. То, что дом на картинке находится метров примерно так на 30 от того места, где я находился, это еще ничего. Но бросало меня по логу всему двору, и иногда на три пятиэтажки в сторону.