0
Answered

Компас

Виктор 12 months ago in Tips and Tricks • updated by Vladimir Ovchinnikov 12 months ago 17

День добрый! 

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

GOOD, I'M SATISFIED
Satisfaction mark by Виктор 12 months ago

хотелось бы привести к углу поворота айтема, но не пойму, что поаказывают датчики. И так и эдак кручу, сделал обертку, чтобы видеть данные - ничего(


Kompas.irpz


Under review

Добрый день.

Здесь смотрели?

Здравствуйте, Владимир! Если бы вы открыли проект, то увидели бы там, что я все свойства из этого раздела вывел на экран, чтобы понять, как их интерпретировать) А рядом приложение компас с айфона открыл и крутил туда сюда, но как разобраться и верно эти сведения перевести - не понял(

Проект мы видели. Если вам нужен только компас, то выведите на графический элемент истинный север (или магнитный север). Данные приходят в градусах, от 0 до 360. Соответственно, юг по азимуту будет на 180 градусов. На вашем устройстве должен существовать датчик, измеряющий намагниченность. На iPad или iPhone он есть. На ПК его нет, поэтому возвращаться будут нули.

Это я понимаю) я конечно проект запускал на смартфоне. На галакси с7 эдж. А рядом приложил айфон с приложением компас. И не смог ни один из параметров логически привязать к направлению. 

Не во всех Андроидах есть датчик, измеряющий намагниченность. На Galaxy S7 Edge есть такой датчик, но считываются только X, Y, Z:

System.Magnetic.X

System.Magnetic.Y

System.Magnetic.Z


Полученные данные приходят в μT. Это индукция магнитного поля по трём осям. Для получения магнитного севера нужно обработать данные через JS.

Спасибо за наводку! Не знал где искать источник информации. Буду разбираться.

Коллеги, если кто-нибудь занимался такими преобразованиями, подскажите, получилось ли? Там не так все просто, потому и компас калибруется, и похоже надо матрицы перемножать.. т.е. так сходу показания датчиков не умножить на коэф и не получить градус к северу. Найти вектор исходя из трех координат задачка уже из высшей математики(( Датчик показывает синусоиду с нижней и верхней полуволной, полный период на эти 360 градусов. Т.о. одному значению показания датчика соотв. два значения градусов угла поворота. А еще эти значение будут зависеть от георафического положения наблюдателя) Если географию можно калибровкой поправить (покрутишь и получишь экстремумы в текущем положении, то вот с этой синусоидой что делать - ума не приложу. Получается датчик есть, а толку нет)




Добрый день.

Там действительно всё не так просто, как может показаться сначала.

Возможно вам будет полезен этот проект:

Circular_level_compass.irpz
Нужна версия Иридиум не ниже 1.2.12.

Пояснения по проекту:

1) Верхний Item будет показывать только в iOS, т. к. используется System.Magnetic.Heading.

2) Нижний Item - это попытка из одних только X, Y, Z создать что-то напоминающее System.Magnetic.Heading

Добрый!

попробовал на андроиде и iOs. Кстати, классный айтем, изучу. На андроиде только в двух квадрантах стрелка перемещается, что логично. На iOs пытается догнать верхнюю, да, не простая задача. Я пока что решил, если такая задача и поступит, написать на андроид приложение компас (их есть в примерах на просторах) и прописать в него транспорт клиент сервер и иридием данные подтягивать. Ну а приложение посмотрю как запускать, скорее всего сервисом.. Но я посмотрю как иридий будет сервис запускать, будут ли окна вываливаться какие или еще что, ведь надо тихо.. в фоне, так сказать.. Ну и пропишу команду в своем "протоколе", чтобы на неё сервис самоликвидировался. Надеюсь, такая задача не поступит) Но если поступит буду решать))
Спасибо большое за участие, обязательно сохраню ваш пример.
Раз уж затронули вопрос.. Скажите, как лучше на андроиде построить обмен данными со сторонним запущенным приложением(сервисом)? Я вот придумал только TCP сервер-клиент, но еще не пробовал. Может, есть более удобные интерфейсы?

Добрый день!

Со сторонним сервисом/примером может быть затрудненно общение, т.к. Андроид фоновые приложения "душит" по любому поводу. Проще из примеров взять математику расчета, т.к. опираться будут они на показания тех же сенсоров, что и Иридиум.

Добрый день.

Если сторонний сервис доступен по TCP, то можете использовать в Иридиум клиенте драйвер AV & Custom Systems (TCP). Это позволит отправить в драйвер произвольную команду.

Если стороннее приложение может только делать запросы по TCP, то в Иридиум можно создать Custom TCP сервер. Это позволит получать произвольную команду по TCP.

Здавствуйте! Владимир, отлично, я так и думал.Спасибо, но никогда еще с приложением "на борту" не связывался. А так TCP сервер и клиент постоянно используются.
Александр, я понимаю, но вот вроде как сервис (это типо службы на W) не должен дохнуть. Я еще почти никак в андроиде не разбираюсь, чтобы проверить это, разберусь.
А в примерах я лично не видел математику. Там использовались классы в андроиде, которые работали с датчиками и на выходе разраб. получал уже угол в рад. Я понимаю, что все-равно этот класс работает с датчиками, но вот так сходу я не нашел внутренних алгоритмов. Я еще не знаю где там исходники и потроха классов)

У вас есть ещё вопросы по вашему обращению?

С компасом пока все понятно, можно еще раз закрывать, больше писать не буду)