DMP с датчика MPU-6000

DrZ91
Offline
Зарегистрирован: 10.10.2014
Добрый день.

Я получаю очень странные значения DMP с датчика MPU-6000 InvenSense. Я не уверен, что они верны, так как модель стоит на ровной поверхности и не двигается. Код:

Public variable:
Code:

// MPU6050 accel/gyro chip
AP_InertialSensor_MPU6000 ins;

In setup():
Code:

  // initialise sensor fusion on MPU6050 chip (aka DigitalMotionProcessing/DMP)
  hal.console->printf("\n%.1f%%: Initialize MPU6050\n", 5.f*100.f/5.f);
  hal.scheduler->suspend_timer_procs();  // stop bus collisions
  ins.dmp_init();
  hal.scheduler->resume_timer_procs();

In loop():
Code:

ins.update();

float roll, pitch, yaw;
ins.quaternion.to_euler(&roll, &pitch, &yaw);
roll = ToDeg(roll);
pitch = ToDeg(pitch);
yaw = ToDeg(yaw);

 // DEBUGGING 
hal.console->printf("Gyro data. Pitch: %.3f, roll: %.3f, yaw: %.3f\n", pitch, roll, yaw);
hal.scheduler->delay(500); 

Результат:
 

Gyro data. Pitch: 0.867, roll: 0.028, yaw: 0.007
Gyro data. Pitch: -0.230, roll: -0.308, yaw: 0.217
Gyro data. Pitch: -1.145, roll: -0.592, yaw: 0.433
Gyro data. Pitch: -1.905, roll: -0.829, yaw: 0.657
Gyro data. Pitch: -2.524, roll: -1.027, yaw: 0.890
Gyro data. Pitch: -3.038, roll: -1.198, yaw: 1.116
Gyro data. Pitch: -3.461, roll: -1.329, yaw: 1.356
Gyro data. Pitch: -3.807, roll: -1.446, yaw: 1.588
Gyro data. Pitch: -4.097, roll: -1.542, yaw: 1.819
Gyro data. Pitch: -4.330, roll: -1.625, yaw: 2.049
Gyro data. Pitch: -4.529, roll: -1.693, yaw: 2.279
Gyro data. Pitch: -4.678, roll: -1.755, yaw: 2.515
Gyro data. Pitch: -4.807, roll: -1.796, yaw: 2.757
Gyro data. Pitch: -4.922, roll: -1.830, yaw: 2.992
Gyro data. Pitch: -5.008, roll: -1.864, yaw: 3.233
Gyro data. Pitch: -5.088, roll: -1.884, yaw: 3.473
Gyro data. Pitch: -5.140, roll: -1.911, yaw: 3.713
Gyro data. Pitch: -5.192, roll: -1.930, yaw: 3.939

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

toc
Offline
Зарегистрирован: 09.02.2013

привет.

1. прочитайте тут http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukommentarii

2. покажите ВАШ полный код, а не какие-то фрагменты

3. добавьте в вывод в строку "Gyro data" значение millis()

4. повторите эксперимент, вставьте сюда результат

5. повторите эксперимент, три разу стукните по столу, слабо, средне, сильно, заметьте соответствующие строки в результате. Вставьте результат сюда, прокомментируйте его.

удачи.

 

DrZ91
Offline
Зарегистрирован: 10.10.2014

Код
 


#include <stdarg.h>
#include <AP_Common.h>
#include <AP_Progmem.h>
#include <AP_HAL.h>
#include <AP_HAL_AVR.h>
#include <AP_HAL_AVR_SITL.h>
#include <AP_HAL_Empty.h>
#include <AP_Math.h>
#include <AP_Param.h>
#include <AP_ADC.h>
#include <AP_InertialSensor.h>

const AP_HAL::HAL& hal = AP_HAL_BOARD_DRIVER;
AP_InertialSensor_MPU6000 ins;

void setup()
{
    ins.init(AP_InertialSensor::COLD_START, 
			 AP_InertialSensor::RATE_100HZ,
			 NULL);

    // initialise sensor fusion on MPU6050 chip (aka DigitalMotionProcessing/DMP)
    hal.scheduler->suspend_timer_procs();  // stop bus collisions
    ins.dmp_init();
    hal.scheduler->resume_timer_procs();
}

void loop()
{ 
    // Ask MPU6050 for orientation
    ins.update();
    float roll = 0, pitch = 0, yaw = 0;  
    ins.quaternion.to_euler(&roll, &pitch, &yaw);
    roll = ToDeg(roll);
    pitch = ToDeg(pitch);
    yaw = ToDeg(yaw);
    
    hal.console->printf("Gyro data. Pitch: %.3f, roll: %.3f, yaw: %.3f\n", pitch, roll, yaw);
    hal.scheduler->delay(500);
}

AP_HAL_MAIN();

Добавить millis() не получилось, пишет error: 'millis' was not declared in this scope

Результаты эксперемента(стоит на столе без движения)

Init Gyro***Gyro data. Pitch: 0.000, roll: 0.000, yaw: 0.000
Gyro data. Pitch: 0.070, roll: -0.315, yaw: 0.203
Gyro data. Pitch: -0.613, roll: -0.611, yaw: 0.416
Gyro data. Pitch: -1.184, roll: -0.860, yaw: 0.631
Gyro data. Pitch: -1.643, roll: -1.062, yaw: 0.855
Gyro data. Pitch: -2.024, roll: -1.229, yaw: 1.078
Gyro data. Pitch: -2.342, roll: -1.363, yaw: 1.301
Gyro data. Pitch: -2.604, roll: -1.490, yaw: 1.524
Gyro data. Pitch: -2.823, roll: -1.597, yaw: 1.754
Gyro data. Pitch: -3.001, roll: -1.668, yaw: 1.982
Gyro data. Pitch: -3.143, roll: -1.733, yaw: 2.210
Gyro data. Pitch: -3.265, roll: -1.784, yaw: 2.437
Gyro data. Pitch: -3.365, roll: -1.835, yaw: 2.671
Gyro data. Pitch: -3.452, roll: -1.872, yaw: 2.898
Gyro data. Pitch: -3.524, roll: -1.902, yaw: 3.124
Gyro data. Pitch: -3.590, roll: -1.932, yaw: 3.350
Gyro data. Pitch: -3.642, roll: -1.955, yaw: 3.576
Gyro data. Pitch: -3.679, roll: -1.985, yaw: 3.802
Gyro data. Pitch: -3.710, roll: -2.000, yaw: 4.027

Результаты эксперемента(с движением)

Init Gyro**Gyro data. Pitch: 0.000, roll: 0.000, yaw: 0.000
Gyro data. Pitch: 0.036, roll: -0.315, yaw: 0.210
Gyro data. Pitch: -0.662, roll: -0.611, yaw: 0.423
Gyro data. Pitch: -1.120, roll: -0.994, yaw: 0.744
Gyro data. Pitch: 2.633, roll: -0.712, yaw: 1.607 - резко поднял
Gyro data. Pitch: -2.840, roll: -5.146, yaw: 2.565
Gyro data. Pitch: -3.257, roll: -6.398, yaw: 2.411
Gyro data. Pitch: -3.674, roll: -6.640, yaw: 2.870  - резко опустил
Gyro data. Pitch: -3.269, roll: -8.050, yaw: 2.994
Gyro data. Pitch: -0.761, roll: -5.913, yaw: 2.077
Gyro data. Pitch: -0.639, roll: -4.080, yaw: 2.703 - резко поднял
Gyro data. Pitch: -1.555, roll: -4.432, yaw: 3.232
Gyro data. Pitch: -1.497, roll: -4.247, yaw: 3.633
Gyro data. Pitch: -4.658, roll: -9.880, yaw: 5.231
Gyro data. Pitch: -4.897, roll: -11.072, yaw: 7.393
Gyro data. Pitch: -4.773, roll: -12.057, yaw: 7.675
Gyro data. Pitch: -5.615, roll: -8.168, yaw: 8.115 - резко опустил
Gyro data. Pitch: -1.753, roll: -5.491, yaw: 7.772
Gyro data. Pitch: -1.996, roll: -4.345, yaw: 8.217
Gyro data. Pitch: -2.027, roll: -3.968, yaw: 8.540
Gyro data. Pitch: -3.099, roll: -2.389, yaw: 10.373

Стуком по столу ничего не добился

toc
Offline
Зарегистрирован: 09.02.2013

тут читали? http://playground.arduino.cc/Main/MPU-6050

> Добавить millis() не получилось, пишет error: 'millis' was not declared in this scope

э.. а у вас, вообще, ардуино ли? http://arduino.ru/Reference/Millis

 

DrZ91
Offline
Зарегистрирован: 10.10.2014

Спасибо за ссылку, почитаем. 
У меня не совсем Arduino, у меня полётный контроллер HKPilot Mega 2.7. Данный контроллер сконструирован на базе Arduino Mega 2560 со встроенным датчиком MPU 6000. Arduino IDE распознаёт его как Arduino Mega 2560. 

MacSim
Offline
Зарегистрирован: 28.11.2012

toc пишет:

тут читали? http://playground.arduino.cc/Main/MPU-6050

 

на той плате 6005 и протокол и2с, на его готовом шилде 6000 подключен по протоколу(сори интерфейсу) спи.

помоему так.