flybrain. передатчик + приемник + автопилот. powered by stm32

AlexSneg
Drinker:

Начальные углы по акселю задавайте. Гиры - по нулям

Ну не получится так. Если я плату изначально криво в самолет пихаю, откуда она узнает где какие стороны света относительно самолета?

msv

Алекс, можно узнать полный формат пакета RFM-ки ( сколько байт преамбула итп.)?
Какую девиацию используете и из каких соображений?

Drinker
AlexSneg:

Ну не получится так. Если я плату изначально криво в самолет пихаю, откуда она узнает где какие стороны света относительно самолета?

Стоп. А нахрена её криво в самолет пихать? Трудно ровно поставить типа ось x вдоль самолета, ось y - поперёк, z-вверх…
Начальные ролл и питч по акселю определяем, яв - по магнетометру.
В чем великая проблема?

vic2rus
Drinker:

Стоп. А нахрена её криво в самолет пихать?

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

baychi
AlexSneg:

Как задавать начальное референсное значение платформы.

В существующих проектах предпологается неизменяемая установка платы, с возможностью ручного задания углов установки. Точное тримирование акселей делается по команде пользователя: модель должна стоять ровно. Гиры при инициализации (явной или неявной - при подаче питания) калибруют свои нули. Процедура инициализации, как и тримирования, обычно занимает секунд 15-30.

AlexSneg
baychi:

В существующих проектах предпологается неизменяемая установка платы

А если у меня плата встает только боком, или только с наклоном градусов 30? Все пропало?
Не ну я понимаю, текущие решения не умеют референс ресетить на старте. Но я то хочу, чтобы было максимально гибкое решение.
Сейчас в голову приходит такой вариант начальной установки:

  1. Держим кнопку, подаем питание. Плата спустя пару секунд переходит в режим каллибровки. моргает светодиодами.
  2. Ставит руль высоты на максимум вниз, типа просит самолет носом наклонить к земле и держать. дает на установку наклона 5 сек, затем собирает статистику
  3. Ставит руль высоты вверх, просит поставить самоль носом вверх
  4. Элероны влево, наклоняем самоль влево
  5. Элероны вправо, наклоняем вправо.
  6. Машет всеми рулями, просит зависнуть точно в горизонте, это будет начальным референсным положением с нулевыми рулями.
  7. Еще раз машет всеми рулями, просит наклонить самолет так, чтобы придать правильное триммерное положение рулям. в этот момент рули отслеживают наклоны и повторяют углы. Пользователь смотрит, где достаточно. Затем нажимает кнопку. Плата запоминает положение наклонных триммеров.
  8. Выход из режима каллибровки.

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

Drinker
AlexSneg:

А если у меня плата встает только боком, или только с наклоном градусов 30? Все пропало?

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

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

AlexSneg
Drinker:

Вот например у мну, можно девайс хоть как поставить.

Что значит как угодно? Можно задом наперед поставить? Как она узнает, где направление вперед?

Drinker
AlexSneg:

Что значит как угодно? М

В разумных пределах по крену и тангажу

AlexSneg
Drinker:

В разумных пределах по крену и тангажу

ну вот, а я хочу в неразумных пределах. Поставить задом наперед, вверх ногами. Ну или ось YAW с Roll поменять, например.

Drinker

Рассказываю. Задаем т.н. референсный фрейм. В нормальном положении по акселю x=0g y=0g z=1g. Хотите перевернуть девайс z=-1g.
И крутитесь вокруг этого фрейма.
С магнето тоже самое.

baychi
AlexSneg:

если у меня плата встает только боком, или только с наклоном градусов 30?

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

AlexSneg
Drinker:

В нормальном положении по акселю x=0g y=0g z=1g.

кто-то из нас тормозит 😃
И что для платы, которая знает только, что z=1g будет означать y>0 в этом случае? Это будет лево или право по отношению к самолету?
Дайте мне ссылку на инструкцию к FY-XX, я прочитаю что там пишут, а то вы все тут меня совсем запутали.

Drinker
AlexSneg:

Это будет лево или право по отношению к самолету?

Вот жеж эти электронщики-теоретики…
при z=1g y>0 быть не может, увы. Это чё, там где вы находитесь g какоето другое?

serj

Т.к расположение акселерометров относительно гироскопов неизменно, можно не наклонять, а попросить один раз повернуть на 1 оборот блинчиком и один раз - сделать “петлю” ( носом от горизонта вверх), потом поставить в покое в горизонте. Этих данных должно быть достаточно для калибровки направлений осей и горизонта.

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

AlexSneg
Drinker:

Вот жеж эти электронщики-теоретики

хорошо, мы такие. А вы, практики, никак объяснить не можете.
z=1
y=-0.789E-4
x=+0.45215

Как из этого понять где у самолета левый борт, а где правый?

Я вот о чем талдычу? Сама плата конечно знает, где у нее право, а где лево. Но, плата не знает, совпадает ли направление ее осей, с осями самолета (reference body frame). Если мы договариваемся, что плата может быть внутри самоля ориентирована по любому, то нужно учить плату ориентации внутри самолета и только после этого учить самолет горизонту.

serj:

Хотя, кажется, достаточно

неа, не будет этого достаточно.
Я вот сейчас подумал. должно быть так:

  1. поставить в горизонт, зсечь вектор тяжести.
  2. Наклонить влево, пауза
  3. Наклонить вперед, пауза
  4. Поставить в горизонт

Вот теперь все. Тогда направление pitch и roll будет известно, а yaw уже векторным прозведением можно расчитать да и GPS будет, если что откорректирует на ходу

Drinker
AlexSneg:

хорошо, мы такие. А вы, практики, никак объяснить не можете. z=1 y=-0.789E-4 x=+0.45215

Этого в покое быть НЕ МОЖЕТ!
Суммарный вектор = 1, а тут уже только по z единица!
Такое может быть если z вертикально вниз смотрит, а по оси x дёрнули плату.

Ну или сдвинули по всем осям

Да, и еще такое может выть если оси у вас не перпендикулярны. Но это уже совсем сложный случай. 😃

Frr
AlexSneg:

Найти середину - это вариант,

И второе действие: “выровнять оси” - не забудьте,
иначе не сойдется с гирой.

Лога с сырыми датчиками посмотреть еще нет?
(время отсчета и три оси, по трем датчикам: аксель,гира,маг. ;
минут пять покрутить, чтобы конец маг-а заполнил(зачертил) сферу)

AlexSneg
Frr:

Лога с сырыми датчиками посмотреть еще нет?

да я чо-то как-то в основную работу погрузился. Платку пока отложил. До субботы буду занят на основной работе. Прежде чем с компасом ковыряться хочу еще сингулярность на pitch угле запатчить. Надо как-то вырубить искусственно установку этого угла точно в 90 градусов. Я все не решу на каком этапе алгоритма это получше сделать.

Я кстати реализовал кватернионы, только чо-то пака не уверен, что ошибок нет. Они субъективно хуже горизонт на перегрузках держат. Может ошибся где, надо еще покопаться получше в этой теме.

А какой толк на сырые данные смотреть? Тебе компас интересен или все в куче? Могу дать лог, только какой с него толк?

Drinker:

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

Ну я ж условно, для примера. Ясен пень, что не может.

serj

Алекс, это какой-то фейк. Кватернионы не могут держать или не держать горизонт, что это за выдумка такая? Они просто описывают поворот.