IMU-сенсор на 10 степеней свободы не подключается

Тема в разделе "Схемотехника, компоненты, модули", создана пользователем Blayzo, 12 фев 2017.

  1. Blayzo

    Blayzo Нуб

    подключил IMU-сенсор на 10 степеней свободы (Troyka-модуль) как сказано в статье про модуль через troyka shield. http://wiki.amperka.ru/продукты:troyka-imu-10-dof При использовании скетчей, например тех что есть в статье, выходит множество ошибок. Но главная проблема в том что не работает множество функций того же компаса. Что делать и как этим сенсором вообще пользоваться.
     
  2. Blayzo

    Blayzo Нуб

    Вот малая часть.
     

    Вложения:

    • 1problllll.jpg
      1problllll.jpg
      Размер файла:
      154,7 КБ
      Просмотров:
      622
  3. Blayzo

    Blayzo Нуб

    Весь лист это ошибки.
     
  4. Unixon

    Unixon Оракул Модератор

    Примеры из библиотеки тоже не компилируются? Возможно, в статье какие-то старые исходники остались.
     
  5. Blayzo

    Blayzo Нуб

    нет не компилируются.
     
  6. Blayzo

    Blayzo Нуб

    проблема в том, что в исходниках есть все функции, указанные в примерах, но программа их не видит, хотя связки есть.
     
  7. mcureenab

    mcureenab Гуру

    Судя по ругачке на двойной void loop(), ТС собрал в один свой скетч несколько чужих.

    Прицепите к теме что вы там пытаетесь компилировать и первые несколько сообщений об ошибках. Как правило первая ошибка является причиной всех остальных.
     
  8. Blayzo

    Blayzo Нуб

    Вот все ошибки.



    C:\Users\zyrik\Downloads\MadgwickProcessing9DOF\MadgwickProcessing9DOF.ino: In function 'void setup()':

    MadgwickProcessing9DOF:51: error: 'class Compass' has no member named 'calibrateMatrix'

    compass.calibrateMatrix(compassCalibrationMatrix, compassCalibrationBias);

    ^

    C:\Users\zyrik\Downloads\MadgwickProcessing9DOF\MadgwickProcessing9DOF.ino: In function 'void loop()':

    MadgwickProcessing9DOF:60: error: 'class Gyroscope' has no member named 'readDegPerSecX'

    Serial.print(gyro.readDegPerSecX());

    ^

    MadgwickProcessing9DOF:63: error: 'class Gyroscope' has no member named 'readDegPerSecY'

    Serial.print(gyro.readDegPerSecY());

    ^

    MadgwickProcessing9DOF:66: error: 'class Gyroscope' has no member named 'readDegPerSecZ'

    Serial.print(gyro.readDegPerSecZ());

    ^

    MadgwickProcessing9DOF:69: error: 'class Accelerometer' has no member named 'readAX'

    Serial.print(accel.readAX());

    ^

    MadgwickProcessing9DOF:72: error: 'class Accelerometer' has no member named 'readAY'

    Serial.print(accel.readAY());

    ^

    MadgwickProcessing9DOF:75: error: 'class Accelerometer' has no member named 'readAZ'

    Serial.print(accel.readAZ());

    ^

    MadgwickProcessing9DOF:78: error: 'class Compass' has no member named 'readAzimut'

    Serial.print(compass.readAzimut());

    ^

    In file included from C:\Users\zyrik\Downloads\MadgwickProcessing9DOF\accel.ino:4:0:

    C:\Users\zyrik\Documents\Arduino\libraries\Troyka-IMU-master/troyka-imu.h: At global scope:

    C:\Users\zyrik\Documents\Arduino\libraries\Troyka-IMU-master/troyka-imu.h:6:7: error: redefinition of 'class Accelerometer'

    class Accelerometer : public LIS331DLH_TWI

    ^

    In file included from C:\Users\zyrik\Downloads\MadgwickProcessing9DOF\MadgwickProcessing9DOF.ino:6:0:

    C:\Users\zyrik\Documents\Arduino\libraries\Troyka-IMU-master/troyka-imu.h:6:7: error: previous definition of 'class Accelerometer'

    class Accelerometer : public LIS331DLH_TWI

    ^

    In file included from C:\Users\zyrik\Downloads\MadgwickProcessing9DOF\accel.ino:4:0:

    C:\Users\zyrik\Documents\Arduino\libraries\Troyka-IMU-master/troyka-imu.h:11:7: error: redefinition of 'class Gyroscope'

    class Gyroscope : public L3G4200D_TWI

    ^

    In file included from C:\Users\zyrik\Downloads\MadgwickProcessing9DOF\MadgwickProcessing9DOF.ino:6:0:

    C:\Users\zyrik\Documents\Arduino\libraries\Troyka-IMU-master/troyka-imu.h:11:7: error: previous definition of 'class Gyroscope'

    class Gyroscope : public L3G4200D_TWI

    ^

    In file included from C:\Users\zyrik\Downloads\MadgwickProcessing9DOF\accel.ino:4:0:

    C:\Users\zyrik\Documents\Arduino\libraries\Troyka-IMU-master/troyka-imu.h:16:7: error: redefinition of 'class Compass'

    class Compass : public LIS3MDL_TWI

    ^

    In file included from C:\Users\zyrik\Downloads\MadgwickProcessing9DOF\MadgwickProcessing9DOF.ino:6:0:

    C:\Users\zyrik\Documents\Arduino\libraries\Troyka-IMU-master/troyka-imu.h:16:7: error: previous definition of 'class Compass'

    class Compass : public LIS3MDL_TWI

    ^

    In file included from C:\Users\zyrik\Downloads\MadgwickProcessing9DOF\accel.ino:4:0:

    C:\Users\zyrik\Documents\Arduino\libraries\Troyka-IMU-master/troyka-imu.h:21:7: error: redefinition of 'class Barometer'

    class Barometer : public LPS331

    ^

    In file included from C:\Users\zyrik\Downloads\MadgwickProcessing9DOF\MadgwickProcessing9DOF.ino:6:0:

    C:\Users\zyrik\Documents\Arduino\libraries\Troyka-IMU-master/troyka-imu.h:21:7: error: previous definition of 'class Barometer'

    class Barometer : public LPS331

    ^

    accel:7: error: redefinition of 'Accelerometer accel'

    Accelerometer accel;

    ^

    MadgwickProcessing9DOF:16: error: 'Accelerometer accel' previously declared here

    Accelerometer accel;

    ^

    C:\Users\zyrik\Downloads\MadgwickProcessing9DOF\accel.ino: In function 'void setup()':

    accel:9: error: redefinition of 'void setup()'

    void setup()

    ^

    MadgwickProcessing9DOF:36: error: 'void setup()' previously defined here

    void setup()

    ^

    accel:19: error: 'RANGE_2G' was not declared in this scope

    accel.setRange(RANGE_2G);

    ^

    C:\Users\zyrik\Downloads\MadgwickProcessing9DOF\accel.ino: In function 'void loop()':

    accel:24: error: redefinition of 'void loop()'

    void loop()

    ^

    MadgwickProcessing9DOF:57: error: 'void loop()' previously defined here

    void loop()

    ^

    accel:27: error: 'class Accelerometer' has no member named 'readAX'

    Serial.print(accel.readAX());

    ^

    accel:30: error: 'class Accelerometer' has no member named 'readAY'

    Serial.print(accel.readAY());

    ^

    accel:33: error: 'class Accelerometer' has no member named 'readAZ'

    Serial.print(accel.readAZ());

    ^

    Используем библиотеку Troyka-IMU-master в папке: C:\Users\zyrik\Documents\Arduino\libraries\Troyka-IMU-master (legacy)
    Используем библиотеку Wire версии 1.0 из папки: C:\Users\zyrik\AppData\Local\Temp\Rar$EXa0.487\arduino-1.6.9\hardware\arduino\avr\libraries\Wire
    exit status 1
    'class Compass' has no member named 'calibrateMatrix'
     
  9. Blayzo

    Blayzo Нуб

    И программа.




    #include <GOST4401_81.h>
    #include <l3g4200d.h>
    #include <lis331dlh.h>
    #include <lis3mdl.h>
    #include <LPS331.h>
    #include <troyka-imu.h>

    // библиотека для работы I²C
    #include <Wire.h>
    // библиотека для работы с модулями IMU


    // создаём объект для работы с гироскопом
    Gyroscope gyro;
    // создаём объект для работы с акселерометром
    Accelerometer accel;
    // создаём объект для работы с компасом
    Compass compass;
    // создаём объект для работы с барометром
    Barometer barometer;

    // калибровочные значения компаса
    // полученные в калибровочной матрице из примера «compassCalibrateMatrix»
    const double compassCalibrationBias[3] = {
    524.21,
    3352.214,
    -1402.236
    };

    const double compassCalibrationMatrix[3][3] = {
    {1.757, 0.04, -0.028},
    {0.008, 1.767, -0.016},
    {-0.018, 0.077, 1.782}
    };

    void setup()
    {
    // открываем последовательный порт
    Serial.begin(115200);
    // выводим сообщение о начале инициализации
    Serial.println("Begin init...");
    // инициализация гироскопа
    gyro.begin();
    // инициализация акселерометра
    accel.begin();
    // инициализация компаса
    compass.begin();
    // инициализация барометра
    barometer.begin();
    // калибровка компаса
    compass.calibrateMatrix(compassCalibrationMatrix, compassCalibrationBias);
    // выводим сообщение об удачной инициализации
    Serial.println("Initialization completed");
    Serial.println("Gyroscope\t\t\tAccelerometer\t\t\tCompass\t\tBarometer");
    }

    void loop()
    {
    // вывод угловой скорости в градусах в секунду относительно оси X
    Serial.print(gyro.readDegPerSecX());
    Serial.print("\t");
    // вывод угловой скорости в градусах в секунду относительно оси Y
    Serial.print(gyro.readDegPerSecY());
    Serial.print("\t");
    // вывод угловой скорости в градусах в секунду относительно оси Z
    Serial.print(gyro.readDegPerSecZ());
    Serial.print("\t\t");
    // вывод направления и величины ускорения в м/с² по оси X
    Serial.print(accel.readAX());
    Serial.print("\t");
    // вывод направления и величины ускорения в м/с² по оси Y
    Serial.print(accel.readAY());
    Serial.print("\t");
    // вывод направления и величины ускорения в м/с² по оси Z
    Serial.print(accel.readAZ());
    Serial.print("\t\t");
    // выводим азимут относительно оси Z
    Serial.print(compass.readAzimut());
    Serial.print(" Degrees\t");
    // вывод значения абсолютного давления
    Serial.print(barometer.readPressureMillibars());
    Serial.print("\t");
    // вывод значения температуры окружающей среды
    Serial.print(barometer.readTemperatureC());
    Serial.print("\t");
    Serial.println("");
    delay(100);
    }
     
  10. mcureenab

    mcureenab Гуру

    У программы название должно быть. Компилятор на два ino файла ругается:

    C:\Users\zyrik\Downloads\MadgwickProcessing9DOF\MadgwickProcessing9DOF.ino
    и
    C:\Users\zyrik\Downloads\MadgwickProcessing9DOF\accel.ino

    Как можно догадаться какой из скетчей вы тут нарисовали?

    Похоже файл MadgwickProcessing9DOF.ino включен в accel.ino. Отсюда ошибки "previously defined " и "redefinition of "
     
  11. Blayzo

    Blayzo Нуб

    acel.ino второпях добавил. Удалив его, были те же ошибки.
     
  12. mcureenab

    mcureenab Гуру

    Те, да не те. Кому охота разбираться в том, чего не было?
    Сделайте пример без торопей.
     
  13. Blayzo

    Blayzo Нуб

    Пример тот же, просто нужно было уходить, и я случаянно закинул acel.ino, которую впоследствии просто удалил.
     
  14. Blayzo

    Blayzo Нуб

    Ошибки и программа без ecel.ino
    C:\Users\zyrik\AppData\Local\Temp\arduino_modified_sketch_670855\sketch_feb14a.ino: In function 'void setup()':

    sketch_feb14a:51: error: 'class Compass' has no member named 'calibrateMatrix'

    compass.calibrateMatrix(compassCalibrationMatrix, compassCalibrationBias);

    ^

    C:\Users\zyrik\AppData\Local\Temp\arduino_modified_sketch_670855\sketch_feb14a.ino: In function 'void loop()':

    sketch_feb14a:60: error: 'class Gyroscope' has no member named 'readDegPerSecX'

    Serial.print(gyro.readDegPerSecX());

    ^

    sketch_feb14a:63: error: 'class Gyroscope' has no member named 'readDegPerSecY'

    Serial.print(gyro.readDegPerSecY());

    ^

    sketch_feb14a:66: error: 'class Gyroscope' has no member named 'readDegPerSecZ'

    Serial.print(gyro.readDegPerSecZ());

    ^

    sketch_feb14a:69: error: 'class Accelerometer' has no member named 'readAX'

    Serial.print(accel.readAX());

    ^

    sketch_feb14a:72: error: 'class Accelerometer' has no member named 'readAY'

    Serial.print(accel.readAY());

    ^

    sketch_feb14a:75: error: 'class Accelerometer' has no member named 'readAZ'

    Serial.print(accel.readAZ());

    ^

    sketch_feb14a:78: error: 'class Compass' has no member named 'readAzimut'

    Serial.print(compass.readAzimut());

    ^

    Используем библиотеку Troyka-IMU-master в папке: C:\Users\zyrik\Documents\Arduino\libraries\Troyka-IMU-master (legacy)
    Используем библиотеку Wire версии 1.0 из папки: C:\Users\zyrik\AppData\Local\Temp\Rar$EXa0.487\arduino-1.6.9\hardware\arduino\avr\libraries\Wire
    exit status 1
    'class Compass' has no member named 'calibrateMatrix'
     
  15. Blayzo

    Blayzo Нуб

    #include <GOST4401_81.h>
    #include <l3g4200d.h>
    #include <lis331dlh.h>
    #include <lis3mdl.h>
    #include <LPS331.h>
    #include <troyka-imu.h>

    // библиотека для работы I²C
    #include <Wire.h>
    // библиотека для работы с модулями IMU


    // создаём объект для работы с гироскопом
    Gyroscope gyro;
    // создаём объект для работы с акселерометром
    Accelerometer accel;
    // создаём объект для работы с компасом
    Compass compass;
    // создаём объект для работы с барометром
    Barometer barometer;

    // калибровочные значения компаса
    // полученные в калибровочной матрице из примера «compassCalibrateMatrix»
    const double compassCalibrationBias[3] = {
    524.21,
    3352.214,
    -1402.236
    };

    const double compassCalibrationMatrix[3][3] = {
    {1.757, 0.04, -0.028},
    {0.008, 1.767, -0.016},
    {-0.018, 0.077, 1.782}
    };

    void setup()
    {
    // открываем последовательный порт
    Serial.begin(115200);
    // выводим сообщение о начале инициализации
    Serial.println("Begin init...");
    // инициализация гироскопа
    gyro.begin();
    // инициализация акселерометра
    accel.begin();
    // инициализация компаса
    compass.begin();
    // инициализация барометра
    barometer.begin();
    // калибровка компаса
    compass.calibrateMatrix(compassCalibrationMatrix, compassCalibrationBias);
    // выводим сообщение об удачной инициализации
    Serial.println("Initialization completed");
    Serial.println("Gyroscope\t\t\tAccelerometer\t\t\tCompass\t\tBarometer");
    }

    void loop()
    {
    // вывод угловой скорости в градусах в секунду относительно оси X
    Serial.print(gyro.readDegPerSecX());
    Serial.print("\t");
    // вывод угловой скорости в градусах в секунду относительно оси Y
    Serial.print(gyro.readDegPerSecY());
    Serial.print("\t");
    // вывод угловой скорости в градусах в секунду относительно оси Z
    Serial.print(gyro.readDegPerSecZ());
    Serial.print("\t\t");
    // вывод направления и величины ускорения в м/с² по оси X
    Serial.print(accel.readAX());
    Serial.print("\t");
    // вывод направления и величины ускорения в м/с² по оси Y
    Serial.print(accel.readAY());
    Serial.print("\t");
    // вывод направления и величины ускорения в м/с² по оси Z
    Serial.print(accel.readAZ());
    Serial.print("\t\t");
    // выводим азимут относительно оси Z
    Serial.print(compass.readAzimut());
    Serial.print(" Degrees\t");
    // вывод значения абсолютного давления
    Serial.print(barometer.readPressureMillibars());
    Serial.print("\t");
    // вывод значения температуры окружающей среды
    Serial.print(barometer.readTemperatureC());
    Serial.print("\t");
    Serial.println("");
    delay(100);
    }
     
  16. mcureenab

    mcureenab Гуру

    https://github.com/amperka/Troyka-IMU/blob/master/troyka-imu.h

    Код (C++):
    #warning "Deprecated: use TroykaIMU.h"
    Исправьте свой код:

    Код (C++):
    // #include <GOST4401_81.h>
    // #include <l3g4200d.h>
    // #include <lis331dlh.h>
    // #include <lis3mdl.h>
    // #include <LPS331.h>
    // #include <troyka-imu.h>

    #include <TroykaIMU.h>

    // // библиотека для работы I²C
    // #include <Wire.h>
    // библиотека для работы с модулями IMU


    // создаём объект для работы с гироскопом
    Gyroscope gyro;
    // создаём объект для работы с акселерометром

    ...
     
    Если не поможет, обновите библиотеку отсюда https://github.com/amperka/Troyka-IMU
     
  17. Blayzo

    Blayzo Нуб

    C:\Users\zyrik\Downloads\MadgwickProcessing9DOF\MadgwickProcessing9DOF.ino:8:23: fatal error: TroykaIMU.h: No such file or directory

    #include <TroykaIMU.h>
     
  18. mcureenab

    mcureenab Гуру

    Бибилиотека установлена? https://www.arduino.cc/en/Guide/Libraries
     
  19. Blayzo

    Blayzo Нуб

    Установил библеотеку (интересно то, что я ее установил тогда же когда и написал первое сообщение), удалив старую версию с корнем. Все работает замечательно. Спасибо огромное.
     
  20. Blayzo

    Blayzo Нуб

    Только вот барометр не хочет выводить информацию, просто молчит.