Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту


 
Опции темы
Непрочитано 21.10.2017, 03:23  
DPANYTA
Прописка
 
Аватар для DPANYTA
 
Регистрация: 25.11.2008
Сообщений: 113
Сказал спасибо: 3
Сказали Спасибо 9 раз(а) в 9 сообщении(ях)
DPANYTA на пути к лучшему
По умолчанию Re: Поворот осей акселерометра

Сообщение от Easyrider83 Посмотреть сообщение
поворачивать координаты в одной плоскости на определенный угол. Без тяжелой тригонометрии!
А велик ли угол?
Если +-20гр, то тригонометрию - нафиг. Синус малого угла равен (почти ) самому углу.
А если все 360 - без тригонометрии, однако, никак.
Углы Эйлера, кватернионы... Кошмар... За этим - к Коптерам. Тут не встречал.
Реклама:
DPANYTA вне форума  
Непрочитано 21.10.2017, 09:58  
dgrishin
Почётный гражданин KAZUS.RU
 
Регистрация: 12.02.2013
Сообщений: 1,015
Сказал спасибо: 43
Сказали Спасибо 273 раз(а) в 214 сообщении(ях)
dgrishin на пути к лучшему
По умолчанию Re: Поворот осей акселерометра

Сообщение от Easyrider83 Посмотреть сообщение
Давайте коды. Будет хоть, чего обсуждать.
Давайте разрядность данных с акселерометра и угол поворота и будут коды
dgrishin вне форума  
Непрочитано 21.10.2017, 11:26  
clawham
Прописка
 
Регистрация: 06.09.2007
Сообщений: 132
Сказал спасибо: 6
Сказали Спасибо 43 раз(а) в 24 сообщении(ях)
clawham на пути к лучшему
По умолчанию Re: Поворот осей акселерометра

я как-то делал для кораблика ориентацию и там по акселерометру компенсировал углы поворота магнитомера. сути не меняет впринципе

Код:
        pitch = 0.0-atan2(ACC[1], ACC[2]);
	roll  =  atan2(ACC[0], ACC[2]);

    Xcal = MAGFilt[0]*1.0 - MAGOffset[0]*1.0;
    Ycal = MAGFilt[1]*1.0 - MAGOffset[1]*1.0;
    Zcal = MAGFilt[2]*1.0 - MAGOffset[2]*1.0; 
    
    Xcal2 = Xcal*cos(pitch) + Ycal*sin(roll)*sin(pitch) + Zcal*cos(roll)*sin(pitch);
    Ycal2 = Ycal*cos(roll) - Zcal*sin(roll);
pitch roll - поворот относительно горизонтальной плоскости в радианах
clawham вне форума  
Сказали "Спасибо" clawham
Easyrider83 (21.10.2017)
Непрочитано 21.10.2017, 11:41  
dgrishin
Почётный гражданин KAZUS.RU
 
Регистрация: 12.02.2013
Сообщений: 1,015
Сказал спасибо: 43
Сказали Спасибо 273 раз(а) в 214 сообщении(ях)
dgrishin на пути к лучшему
По умолчанию Re: Поворот осей акселерометра

Сообщение от clawham Посмотреть сообщение
поворот относительно горизонтальной плоскости
Как вы себе это представляете ??
Для задания поворота нужна некая ось, относительно которой выполняется поворот, но никак не плоскость...
dgrishin вне форума  
Непрочитано 21.10.2017, 12:32  
dkm
Вид на жительство
 
Регистрация: 10.04.2010
Сообщений: 301
Сказал спасибо: 25
Сказали Спасибо 136 раз(а) в 79 сообщении(ях)
dkm на пути к лучшему
По умолчанию Re: Поворот осей акселерометра

Сообщение от Easyrider83 Посмотреть сообщение
Форум теоретиков. Знаю я это все. Нашли кого учить
Давайте коды. Будет хоть, чего обсуждать.
Задали теоретический вопрос - получили такой же ответ. Давайте свой вариант кода, обсудим. Хотя повернуть некий 3д-вектор задача простая, если именно это вам нужно.
float вас не устраивает, надо что бы побыстрее было и т.п. , мы же не знаем все хотелки и даже проц на котором выполняется ваш код, как оптимизировать-то можем? Если память позволяет - все синусы-косинусы в таблицу и делов-то. Давно бы уже сами сделали.
dkm вне форума  
Непрочитано 21.10.2017, 13:00  
ampy
Гражданин KAZUS.RU
 
Регистрация: 22.07.2007
Адрес: Владивосток
Сообщений: 984
Сказал спасибо: 435
Сказали Спасибо 375 раз(а) в 197 сообщении(ях)
ampy на пути к лучшему
По умолчанию Re: Поворот осей акселерометра

Постоянно всё вращаю, но через матрицы.
Набросал такой компактный "скетч" без матриц.
К сожалению, чтобы коэффициенты были const пришлось перейти на C++, но это относится уже к используемому компилятору. Вопрос об использовании float тоже прикладной, думается, для ТС это не проблема.
Углы альфа, бета, гамма - углы Эйлера поворота объекта вокруг Z, X, и опять Z. см. Несмотря на то, что используются две оси, так можно повернуть что угодно и куда угодно (т.к. вторая Z уже относится к повернутому объекту). И почувствовать себя летчиком произнося при этом слова крен, тангаж, рыскание. В принципе, вектор (ускорения) можно вращать задавая всего 2 угла, т.к. направление вектора в трехмерном пространстве задается двумя углами. Чтобы оптимально задать оси вращения нужно бы побольше знать о задаче. Поэтому используем классический и наиболее общий способ с углами Эйлера, тем более Эйлер это даже почище Ландау был ум.
По идее, если в порядке калибровки ложить девайс (предположим он имеет форму прямоугольного параллелепипеда и мы находимся не в ваккууме космоса, но на планете с достаточной силой тяжести) с закрепленным в нем акселерометром на плоскости XY, YZ, ZX, полученные векторы ускорения (нормированные, чтобы их длины были 1) и будут составлять матрицу перехода к скорректированным векторам. Только надо сообразить, столбцами их ставить или строками. Но автор не хотит матриц...
Тогда если искать методом подбора, то в конце концов, можно занулить один из углов альфа или гамма и расчеты упростятся и перебор будет меньше.

PHP код:
#include "stdio.h"
#include "math.h"

int figure[] = {000,  10000,  1002000,  02000,  000,
                
00300,  1000300,  100200300,  0200300,  00300,   000,  -1};
const 
float pi =  3.1415927;
const 
float alpha 45*pi/180beta 20*pi/180gammma = -45*pi/180;
const 
float cosa cos(alpha), sina sin(alpha),
            
cosb cos(beta), sinb sin(beta),
            
cosg cos(gammma), sing sin(gammma);

int main(int args, const char argv[]) {
  
int i;
  for (
0figure[i] ›= 0i+=3) {
    
int x figure[i], figure[i+1], figure[i+2];
    
printf("%d %d %d\n"xyz);
  }
  for (
0figure[i] ›= 0i+=3) {
    
int x figure[i], figure[i+1], figure[i+2];
    
int newx * (cosa*cosg-sina*cosb*sing) - * (cosa*sing sina*cosb*cosg) + sina*sinb,
        
newy * (sina*cosg cosa*cosb*sing) + * (-sina*sing+cosa*cosb*cosg) - cosa*sinb,
        
newz sinb*sing sinb*cosg cosb;
    
printf("%d %d %d\n"newxnewynewz);
  }


Последний раз редактировалось ampy; 22.10.2017 в 08:46. Причина: прояснил чучуть
ampy вне форума  
Сказали "Спасибо" ampy
Easyrider83 (21.10.2017)
Непрочитано 21.10.2017, 22:47  
Easyrider83
Гуру портала
 
Аватар для Easyrider83
 
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 918
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию Re: Поворот осей акселерометра

Ну вот! На третьей странице форума балаболы затихают, появляется реальный код. Спасибо, читаем, думаем.
Easyrider83 вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как с помощью акселерометра замерять углы тангажа и крена? WindoЗavr Автоматика и аппаратура связи 33 06.03.2015 17:34
Получение инерционной ссылки с помощью акселерометра RDeniel Измерительное оборудование 19 22.10.2011 22:19
Поворот ввода проводника в шину al_dan KiCAD 5 14.03.2010 22:36
Микромощный БП для акселерометра astrut Поиск схем. Делимся схемами 0 08.07.2009 03:51


Часовой пояс GMT +4, время: 14:27.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot