Добрый день форумчане! Я получаю очень странные значения DMP с датчика MPU-6000 InvenSense. Я не уверен, что они верны, так как модель стоит на ровной поверхности и не двигается. Код: Код (Text): 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 Может кто сталкивался с подобным случаем. Подскажите где может быть проблема.
Хмм, параметры изменяются почти линейно. Может, в переменных накапливается значение? Код (Text): ins.quaternion.to_euler(&roll, &pitch, &yaw); roll = ToDeg(roll); pitch = ToDeg(pitch); yaw = ToDeg(yaw); Что делают эти строки?
Я точно не знаю что делают эти строки, но покапавшись в библиотеках я понял, что в данном фрагменте кода происходит получение кватернионов(http://habrahabr.ru/post/183908/) непосредственно из DMP и перевод их в углы Эйлера.
Попробуй каждый цикл обнулять переменные перед считыванием roll = 0; pitch = 0; yaw = 0; Если код из надёжного источника, то перепроверь подключение.
Обнуление переменных положительного результата не дало. Насчёт кода, все функции которые здесь используются есть в библиотеках Arduino, но сам код я взял из статьи одного заокеанского товарища(http://www.ghowen.me/build-your-own-quadcopter-autopilot/#toc0). У него данный фрагмент кода используется для системы стабилизации квадрокоптера. Кстати, такую же проблему я встречал на англоязычном форуме Arduino, правда там так и не дали ответ.