Использование модуля акселерометра/гироскопа MPU6050

Я тестирую свой модуль MPU6050 с Arduino Мега. Я обнаружил, что Джефф Роуберг написал для этого библиотеку. Я попытался использовать данный пример от него. Но Arduino IDE выдает большое количество ошибок при попытке проверки скетча.

Я уже установил библиотеку Джеффа. (на следующем изображении показано содержимое библиотеки)

введите здесь описание изображения

Это ошибка, которую я получаю:

In file included from C:\Users\LordXaX\Documents\Arduino\libraries\MPU6050/MPU6050_6Axis_MotionApps20.h:42,
                 from sketch_dec08a.cpp:50:
C:\Users\LordXaX\Documents\Arduino\libraries\MPU6050/MPU6050.h:792: warning: only initialized variables can be placed into program memory area
In file included from sketch_dec08a.cpp:50:
C:\Users\LordXaX\Documents\Arduino\libraries\MPU6050/MPU6050_6Axis_MotionApps20.h:89: warning: only initialized variables can be placed into program memory area
C:\Users\LordXaX\Documents\Arduino\libraries\MPU6050/MPU6050_6Axis_MotionApps20.h:89: error: conflicting declaration 'const prog_uchar dmpMemory [1929]'
C:\Users\LordXaX\Documents\Arduino\libraries\MPU6050/MPU6050.h:792: error: 'dmpMemory' has a previous declaration as 'prog_uchar dmpMemory [1929]'
C:\Users\LordXaX\Documents\Arduino\libraries\MPU6050/MPU6050_6Axis_MotionApps20.h:229: warning: only initialized variables can be placed into program memory area
C:\Users\LordXaX\Documents\Arduino\libraries\MPU6050/MPU6050_6Axis_MotionApps20.h:271: warning: only initialized variables can be placed into program memory area
C:\Users\LordXaX\Documents\Arduino\libraries\MPU6050/MPU6050_6Axis_MotionApps20.h:271: error: conflicting declaration 'const prog_uchar dmpUpdates [47]'
C:\Users\LordXaX\Documents\Arduino\libraries\MPU6050/MPU6050.h:931: error: 'dmpUpdates' has a previous declaration as 'uint8_t dmpUpdates [29][9]'
C:\Users\LordXaX\Documents\Arduino\libraries\MPU6050/MPU6050_6Axis_MotionApps20.h:281: error: no 'uint8_t MPU6050::dmpInitialize()' member function declared in class 'MPU6050'
C:\Users\LordXaX\Documents\Arduino\libraries\MPU6050/MPU6050_6Axis_MotionApps20.h:506: error: no 'bool MPU6050::dmpPacketAvailable()' member function declared in class 'MPU6050'
C:\Users\LordXaX\Documents\Arduino\libraries\MPU6050/MPU6050_6Axis_MotionApps20.h:533: error: no 'uint8_t MPU6050::dmpGetAccel(int32_t*, const uint8_t*)' member function declared in class 'MPU6050'
C:\Users\LordXaX\Documents\Arduino\libraries\MPU6050/MPU6050_6Axis_MotionApps20.h:541: error: no 'uint8_t MPU6050::dmpGetAccel(int16_t*, const uint8_t*)' member function declared in class 'MPU6050'
C:\Users\LordXaX\Documents\Arduino\libraries\MPU6050/MPU6050_6Axis_MotionApps20.h:549: error: no 'uint8_t MPU6050::dmpGetAccel(VectorInt16*, const uint8_t*)' member function declared in class 'MPU6050'
C:\Users\LordXaX\Documents\Arduino\libraries\MPU6050/MPU6050_6Axis_MotionApps20.h:557: error: no 'uint8_t MPU6050::dmpGetQuaternion(int32_t*, const uint8_t*)' member function declared in class 'MPU6050'
C:\Users\LordXaX\Documents\Arduino\libraries\MPU6050/MPU6050_6Axis_MotionApps20.h:566: error: no 'uint8_t MPU6050::dmpGetQuaternion(int16_t*, const uint8_t*)' member function declared in class 'MPU6050'
C:\Users\LordXaX\Documents\Arduino\libraries\MPU6050/MPU6050_6Axis_MotionApps20.h:575: error: no 'uint8_t MPU6050::dmpGetQuaternion(Quaternion*, const uint8_t*)' member function declared in class 'MPU6050'
C:\Users\LordXaX\Documents\Arduino\libraries\MPU6050/MPU6050_6Axis_MotionApps20.h:590: error: no 'uint8_t MPU6050::dmpGetGyro(int32_t*, const uint8_t*)' member function declared in class 'MPU6050'
C:\Users\LordXaX\Documents\Arduino\libraries\MPU6050/MPU6050_6Axis_MotionApps20.h:598: error: no 'uint8_t MPU6050::dmpGetGyro(int16_t*, const uint8_t*)' member function declared in class 'MPU6050'
C:\Users\LordXaX\Documents\Arduino\libraries\MPU6050/MPU6050_6Axis_MotionApps20.h:608: error: no 'uint8_t MPU6050::dmpGetLinearAccel(VectorInt16*, VectorInt16*, VectorFloat*)' member function declared in class 'MPU6050'
C:\Users\LordXaX\Documents\Arduino\libraries\MPU6050/MPU6050_6Axis_MotionApps20.h:616: error: no 'uint8_t MPU6050::dmpGetLinearAccelInWorld(VectorInt16*, VectorInt16*, Quaternion*)' member function declared in class 'MPU6050'
C:\Users\LordXaX\Documents\Arduino\libraries\MPU6050/MPU6050_6Axis_MotionApps20.h:628: error: no 'uint8_t MPU6050::dmpGetGravity(VectorFloat*, Quaternion*)' member function declared in class 'MPU6050'
C:\Users\LordXaX\Documents\Arduino\libraries\MPU6050/MPU6050_6Axis_MotionApps20.h:639: error: no 'uint8_t MPU6050::dmpGetEuler(float*, Quaternion*)' member function declared in class 'MPU6050'
C:\Users\LordXaX\Documents\Arduino\libraries\MPU6050/MPU6050_6Axis_MotionApps20.h:645: error: no 'uint8_t MPU6050::dmpGetYawPitchRoll(float*, Quaternion*, VectorFloat*)' member function declared in class 'MPU6050'
C:\Users\LordXaX\Documents\Arduino\libraries\MPU6050/MPU6050_6Axis_MotionApps20.h:658: error: no 'uint8_t MPU6050::dmpProcessFIFOPacket(const unsigned char*)' member function declared in class 'MPU6050'
C:\Users\LordXaX\Documents\Arduino\libraries\MPU6050/MPU6050_6Axis_MotionApps20.h:668: error: no 'uint8_t MPU6050::dmpReadAndProcessFIFOPacket(uint8_t, uint8_t*)' member function declared in class 'MPU6050'
C:\Users\LordXaX\Documents\Arduino\libraries\MPU6050/MPU6050_6Axis_MotionApps20.h:693: error: no 'uint16_t MPU6050::dmpGetFIFOPacketSize()' member function declared in class 'MPU6050'
sketch_dec08a.cpp: In function 'void setup()':
sketch_dec08a.cpp:177: warning: only initialized variables can be placed into program memory area
sketch_dec08a.cpp:181: warning: only initialized variables can be placed into program memory area
sketch_dec08a.cpp:182: warning: only initialized variables can be placed into program memory area
sketch_dec08a.cpp:182: warning: only initialized variables can be placed into program memory area
sketch_dec08a.cpp:185: warning: only initialized variables can be placed into program memory area
sketch_dec08a.cpp:191: warning: only initialized variables can be placed into program memory area
sketch_dec08a:187: error: 'class MPU6050' has no member named 'dmpInitialize'
sketch_dec08a.cpp:197: warning: only initialized variables can be placed into program memory area
sketch_dec08a.cpp:201: warning: only initialized variables can be placed into program memory area
sketch_dec08a:198: error: 'class MPU6050' has no member named 'getIntStatus'
sketch_dec08a.cpp:206: warning: only initialized variables can be placed into program memory area
sketch_dec08a:205: error: 'class MPU6050' has no member named 'dmpGetFIFOPacketSize'
sketch_dec08a.cpp:216: warning: only initialized variables can be placed into program memory area
sketch_dec08a.cpp:218: warning: only initialized variables can be placed into program memory area
sketch_dec08a.cpp: In function 'void loop()':
sketch_dec08a:246: error: 'class MPU6050' has no member named 'getIntStatus'
sketch_dec08a.cpp:260: warning: only initialized variables can be placed into program memory area
sketch_dec08a:263: error: 'class MPU6050' has no member named 'getFIFOBytes'

Как мне преодолеть это?

Я очень старался использовать это устройство для получения значений ускорения/гироскопа. Но все равно безуспешно.


ИЗМЕНИТЬ

Это то, что я получаю при попытке скомпилировать (проверить).

введите здесь описание изображения


person Sumudu    schedule 08.12.2012    source источник
comment
Похоже на проблему с компилятором. Можете ли вы попробовать это и вернуться? Я использовал mpu6050 и код Джеффа Роуберга, было много проблем, но не эта...   -  person Steve Heim    schedule 09.12.2012
comment
@lifesayko Ну, как вы и просили, я удалил всю библиотеку и заново создал ее из файлов здесь. Тот же пример идет в качестве примера библиотеки. Я загрузил и попробовал. Но все равно проверка не проходит. Я не знаю, что делать. В нем говорится, что "класс MPU6050" не имеет члена с именем "dmpInitialize". Я тоже загрузил скриншот. Пожалуйста, смотрите в отредактированном сообщении. Спасибо!   -  person Sumudu    schedule 09.12.2012
comment
Глядя на ссылку, которую вы разместили, там нет dmpInitialize, есть инициализация, однако, возможно, попробуйте это. Я не знаком с этим модулем, но, возможно, префикс «dmp» является своего рода отладочной версией в другой библиотеке. Извините, я вижу дополнительную версию в файле .h, но похоже, что это зависит от конкретных условных определений.   -  person PeterJ    schedule 09.12.2012
comment
Спасибо за предложение. Только что попробовал, тоже не работает. Но я думаю, что первоначальный призыв правильный. Джефф сам написал код. (Кстати, dmp не для отладки, это означает Цифровой процессор движения)   -  person Sumudu    schedule 09.12.2012
comment
Хорошо, тогда похоже, что вам не хватает некоторых DEF. По сути, в библиотеке Джеффа есть некоторые дополнительные части, которые могут вам понадобиться или не понадобиться (например, вы можете получить все необработанные данные без dmp). Убедитесь, что вы включили все необходимые заголовки и объявили нужные DEF (включая MPU6050_6Axis_MotionApps20.h).   -  person Steve Heim    schedule 11.12.2012
comment
@lifesayko Из двух примеров работает пример, который дает необработанные значения (MPU6050_raw). Но мне нужны осмысленные значения. Вот почему я пытаюсь заставить работать другой пример (тот, о котором мы говорим, MPU6050_DMP6), надеясь, что он предоставит значимые значения. Если у вас есть код, который дает значимые значения, можете ли вы опубликовать его? Я новичок в этих цифровых модулях гироскопа / акселерометра (и немного в Arduino: D). Мне нужно получить эти значения для использования с воздушным роботом. Необработанные значения действительно неудобны. Тем более не представляю, как получить показания гироскопа (угол) из сырых..   -  person Sumudu    schedule 11.12.2012


Ответы (4)


Пример MPU6050_DMP6, предоставленный Джеффом, у меня работает. Судя по вашей ошибке компиляции, вы включили MPU6050.h вместо MPU6050_6Axis_MotionApps20.h. Убедитесь, что вы включили правильный.

Если вы посмотрите на код библиотеки, вы обратите внимание, что методы .dmp___ реализованы не в файле MPU6050.cpp, а в файле MPU6050_6Axis_MotionApps20.h. Если это не решит проблему, опубликуйте свой код.

person Steve Heim    schedule 12.12.2012

попробуйте поместить файлы jeffs i2c .cpp и .h в ту же папку, что и файлы библиотеки mpu6050, я обнаружил, что это сработало для меня, извините, если это немного поздно, но, надеюсь, полезно: P

person Chris    schedule 01.02.2013
comment
Проблема была решена после обновления arduino ide до последней версии. Спасибо, в любом случае.. - person Sumudu; 07.02.2013
comment
^ Следует опубликовать ваше решение как ответ - person Derrick; 12.02.2013

У меня была та же проблема, и оказалось, что я включил и MPU6050.h, и MPU6050_6Axis_MotionApps20.h. Я закомментировал MPU6050.h, и теперь он компилируется нормально. Кажется, что первое превалировало над вторым.

person Alea    schedule 07.03.2013

Я решил проблему компиляции, поместив I2Cdev.cpp и I2C.h в папку библиотеки MPU6050. (Внимание: это файлы dev). Это библиотеки Джеффа, их можно найти на GitHub.

person andere    schedule 27.12.2014