И всё же, рыскание

Modsley
Offline
Зарегистрирован: 14.01.2018

Приветствую.

И всё же, есть ли какой-то способ получать стабильное показание угла рыскания хотя бы в интервале 5 секунд?

6050 попробовал, BMX055 попробовал... 

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

Я понимаю, что вектор гравитации направлен перпендикулярно плоскости рыскания и привязаться не к чему... но компас тоже в моём случае не подходит,  всё в железах.

А нужно повернуть именно на заданный угол...

 

Спасибо.

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

водку пробывал, самогон пробывал ....

а можно мне еще 150, шоб я понял о чем речь ?

Modsley
Offline
Зарегистрирован: 14.01.2018

По рысканию как я понял можно получить только показания угловой скорости. 

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

Насколько я помню и если правильно помню (давно я учился), нужно проинтегрировать эту самую скорость по времени. 

Но как это реализовать программно... 

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

Шаговики и пр. не подходят, т.к. изделие с опорой жестко не связано. 

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

Как определить, с какого угла относительно оси изделия доносится звук я сделал. 

Осталось повернуть на этот угол. Думал тут уж просто. Но в плоскости земли оказалось не так уж просто. 

Модули гироскоп/акселерометр уверенно дают угол только по крену и тангажу. 

А по рысканию - нет. 

Буду благодарен за любую помощь. Особенно за наводки что и где почитать.

 

Спасибо. 

 

PS. Настораживает одно. Если этот угол можно посчитать, почему библиотеки для 6050 и BMX055 этого не делают...

 

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

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

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

kost82
Offline
Зарегистрирован: 30.11.2015

Modsley пишет:

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

Как определить, с какого угла относительно оси изделия доносится звук я сделал.

Осталось повернуть на этот угол. Думал тут уж просто. Но в плоскости земли оказалось не так уж просто.

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

Если постоянно с одинаковой громкостью, то может проще поворачивать эту "хрень на гусеницах" до тех пор пока амплитуда улавливаемого звука не будет максимальной?

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

Гироскоп?

Modsley
Offline
Зарегистрирован: 14.01.2018

Да гироскоп-то хорошо, но только по оси Z от него никаких внятных углов получить не получается, в этом-то и проблема.

Нашел я библиотеку, которая правильно показывает угол по Z, но там вот... печаль... 

float timeStep = 0.01;

void loop()
{
  timer = millis();

  // Read normalized values
  Vector norm = mpu.readNormalizeGyro();

  // Calculate Pitch, Roll and Yaw
  pitch = pitch + norm.YAxis * timeStep;
  roll = roll + norm.XAxis * timeStep;
  yaw = yaw + norm.ZAxis * timeStep;

  // Output raw
  Serial.print(" Pitch = ");
  Serial.print(pitch);
  Serial.print(" Roll = ");
  Serial.print(roll);  
  Serial.print(" Yaw = ");
  Serial.println(yaw);

  // Wait to full timeStep period
  delay((timeStep*1000) - (millis() - timer));
}

Можно сделать на основе библиотеки MPU6050, которая входит в I2Cdev, но тогда вот... 

Program:   16402 bytes (50.1% Full)
Data:        647 bytes (31.6% Full)
 
Как-то многовато на то, чтобы опросить датчик.... 
 
brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

Где конкретно печаль? Мысли мы читать не умеем.

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

Где печаль-то?

Modsley
Offline
Зарегистрирован: 14.01.2018

  delay((timeStep*1000) - (millis() - timer));

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

Если его убрать, то всё перестаёт работать... 

 

Delay этот в итоге составляет 7-8 за цикл. 

А так отлично работает. Ось Z даже не плывёт. 

Библиотека вот https://github.com/jarzebski/Arduino-MPU6050

Мне-то в моих целях всё равно, плывёт она или нет, но может кому-то пригодится. 

 

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

Modsley, спроси на паркфлаере или другом профильном сайте, хотя бы за железо... ну и глянь за ardupilot APM2.8

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

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

Modsley
Offline
Зарегистрирован: 14.01.2018

Да все летающие штуки курс по компасу держат... если держат. 

Точку держат по GPS. 

 

Спасибо всем. Сделал. Даже без библиотеки MPU6050. Ось плывёт, но не сильно. Для поворотов не принципиально

Смущает, конечно, только 

Program:    7554 bytes (23.1% Full)
Data:        462 bytes (22.6% Full)