Добрый день.
Я получаю очень странные значения 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
Может кто сталкивался с подобным случаем. Подскажите где может быть проблема.
привет.
1. прочитайте тут http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukommentarii
2. покажите ВАШ полный код, а не какие-то фрагменты
3. добавьте в вывод в строку "Gyro data" значение millis()
4. повторите эксперимент, вставьте сюда результат
5. повторите эксперимент, три разу стукните по столу, слабо, средне, сильно, заметьте соответствующие строки в результате. Вставьте результат сюда, прокомментируйте его.
удачи.
Код
#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
Результаты эксперемента(стоит на столе без движения)
Результаты эксперемента(с движением)
Стуком по столу ничего не добился
тут читали? http://playground.arduino.cc/Main/MPU-6050
> Добавить millis() не получилось, пишет error: 'millis' was not declared in this scope
э.. а у вас, вообще, ардуино ли? http://arduino.ru/Reference/Millis
Спасибо за ссылку, почитаем.
У меня не совсем Arduino, у меня полётный контроллер HKPilot Mega 2.7. Данный контроллер сконструирован на базе Arduino Mega 2560 со встроенным датчиком MPU 6000. Arduino IDE распознаёт его как Arduino Mega 2560.
тут читали? http://playground.arduino.cc/Main/MPU-6050
на той плате 6005 и протокол и2с, на его готовом шилде 6000 подключен по протоколу(сори интерфейсу) спи.
помоему так.