Smalltim OSD and autopilot (часть 2)

Ильвир
smalltim:

Нет, это именно аналоговые выходы (PWM с активными фильтрами Саллена-Ки 2го порядка). Но подключать к ним нечего, они отключены. Я решил не имитировать пирометры. Без коррекции центробежных ускорений нет никакого смысла в IMU, а коррекции центробежных ускорений не сделаешь без цифрового обмена данными с АП, с одним лишь аналогом.

Может их тогда вообще срезать? Или же когда-нибудь пригодятся?

smalltim
river3:

Тим, спасибо большое, сегодня облетали и настроили IMU с АП , всё как часики аж не вериться, что оно так может летать , я даволен.

Вам спасибо. За то, что не поставили на мне крест после пирометров 😃
Ну а я уж постараюсь и дальше оправдать доверие.
Теперь попробуйте чуть-чуть полихачить, резкие маневры, плотные круги (с запасом высоты) чтобы убедиться, что динамики IMU с запасом хватит и не нужно переходить на 2000 град/сек.

SkyWorker

А нет в планах сделать универсальную ИМУ?

smalltim
SkyWorker:

А нет в планах сделать универсальную ИМУ?

В каком смысле универсальную?

Ильвир:

Может их тогда вообще срезать? Или же когда-нибудь пригодятся?

Если не очень сильно напрягает, то пусть болтаются. Какие-нибудь функции впоследствии можно таки прикрутить на эти выходы.

SkyWorker
smalltim:

В каком смысле универсальную?

Которая бы работала независимо от автопилота смоллтим.

Pavel_K
smalltim:

Если не очень сильно напрягает, то пусть болтаются. Какие-нибудь функции впоследствии можно таки прикрутить на эти выходы.

Очень бы хотелось иметь возможность что-нибудь еще от ИМУ приводить в движение, например стабилизацию подвеса камеры, чтобы ее на маневрах не колбасило. Тут и разъем для имитации пирометров очень кстати будет 😃

OK-40
smalltim:

Андрей, для Вашего Ская настройки пирометров по стабилизации оказались сильно высокими при переходе на ИМУшку. Она быстрее и резче отрабатывает изменения в ориентации. Поставьте раза в 2 ниже чувствительность и демпфирование по крену и тангажу.

Если не секрет - какие настройки были? И какие рекомендуете?
Сегодня тоже полетал с ИМУ (настройками от пиро) на скае. На земле все было хорошо, горизонт работал отлично. В полете при работающем движке включил стабилизацию, в результате - резкий крен вправо. Успел перейти в ручной режим. (После полета посмотрел видеозапись - горизонт при работающем движке “живет сам по-себе”, хотя есть моменты, когда он отображается адекватно). При выключенном двигателе стабилизация работает отлично, хотя иногда скай “впадает” в резонанс и его начинает колбасить по горизонту - что и где убавлять?
Предполагаю, что причиной ухода горизонта в полете является работа движка (вибрация), хотя плата ИМУ расположена на днище ская под передней кромкой крыла (дальше не позволяет штатный шлеф). Как решить возникшую проблему? Может кто справился с ней?

smalltim
OK-40:

Если не секрет - какие настройки были? И какие рекомендуете?

Обычно для Ская можно начинать с чувствительности/демпфирования в 25/25 по крену и тангажу. Дальше, если в стабилизации отрабатывает команды стика лениво, то потихоньку увеличивать.

OK-40:

При выключенном двигателе стабилизация работает отлично, хотя иногда скай “впадает” в резонанс и его начинает колбасить по горизонту - что и где убавлять?

Как раз убавить до 25/25.

OK-40:

Предполагаю, что причиной ухода горизонта в полете является работа движка (вибрация), хотя плата ИМУ расположена на днище ская под передней кромкой крыла (дальше не позволяет штатный шлеф). Как решить возникшую проблему? Может кто справился с ней?

Место хорошее. Но, таки да, это как раз вибрация, видимо винт у Вас несбалансирован совсем. IMUшка легкая, поэтому ставить ее на вибропрокладку - не сильно поможет, всё равно будет култыхаться. Хороший вариант - примерно так, как делают вертолетчики: сначала толстый скотч на корпус Ская, потом на него что-нибудь тяжелое, типа свинцовой/алюминиевой/медной(короче, немагнитной) пластинки, а потом на нее сверху уже ИМУшку.
Еще вариант - поставить ИМУшку поближе к батарее, ее масса хорошо давит вибрации.

OK-40

Спасибо, Тим, за быстрый ответ. Буду задавливать чувствительность/демпфирование до рекомендуемых, а дальше - опытным путем. На счет винта: винт отбалансирован очень точно. ИМУ находится близко к аккам (3 см от торца 5000-ка). Попробую поставить ИМУ на свинцовую пластину как советуете. Вот думаю, а не влияет ли на ИМУ видеопередатчик (ИМУ как раз под ним находится?).

KBV

Сюды прикрутил, правда пришлось провод удлиннить. На крыле вибраций от двига поменьше.

smalltim
OK-40:

Вот думаю, а не влияет ли на ИМУ видеопередатчик (ИМУ как раз под ним находится?).

Не. Вы же сами пишете, что при выключенном моторе горизонт работает отлично.

smalltim

Андрей, я, скорее всего, не смогу сделать на IMU интерфейсы, совместимые со всеми подряд.
Но полностью открываю протокол общения с IMU, и готов в меру сил помочь разработчикам сторонних железок во введении поддержки IMU.

IMU smalltim/SwiftAI.
Информация для разработчиков.

   - Электрические характеристики платы IMU:
      - Напряжение питания: от 4 до 6В.
      - Максимальный потребляемый ток: 60мА.

   - Электрические характеристики интерфейса I2C IMU:
      - Номинальная тактовая частота I2C: 100 кГц, допускается работа на произвольной частоте от 0 до 400 кГц.
      - Подтяжка 4.7кОм к +3.3В (питание на линиях SCL и SDA на плате IMU.
      - Резисторы 1кОм последовательно в линиях SCL и SDA для защиты от КЗ.
      - Совместимость с 3.3 В и 5В уровнями сигнала.

   - Характеристики программного обеспечения IMU:
      - Частота опроса датчиков магнитного поля: 75 Гц.
      - Частота опроса датчиков угловых скоростей: 400 Гц.
      - Частота опроса датчиков ускорения: 400 Гц.
      - Диапазон измерения величины магнитного поля: 1.9 Гс
      - Диапазон измерения угловых скоростей: 500/2000 град/c
      - Диапазон измерения угловых скоростей: 8 G
      - Номинальный шаг интегрирования: 0.004 сек (250Гц)
      - Номинальная скорость обновления данных (углы, угловые скорости, и т.д.) на интерфейсе I2C: 250 Гц.
      - I2C тип и адрес устройства IMU: Slave, 0x15 (HEX).
      - Проверка корректности данных на интерфейсе I2C: CRC16-CCITT

   - Система координат IMU:
      - Ось X соответствует продольной оси самолета, положительное направление – вперед
      - Ось Y соответствует поперечной оси самолета, положительное направление – от левого крыла к правому крылу
      - Ось Z соответствует вертикальной оси самолета, положительное направление – вниз
      - Нулевое значение крена соответствует горизонтальной ориентации по крену, положительное значение крена соответствует левому крену
      - Нулевое значение тангажа соответствует горизонтальной ориентации по тангажу, положительное значение тангажа соответствует подъему носа модели вверх
      - Нулевое значение рыскания соответствует повороту модели на восток, положительное значение соответствует повороту в сторону севера.
      - Положительное значение угловой скорости по крену соответствует вращению против часовой стрелки вокруг продольной оси модели при взгляде сзади
      - Положительное значение угловой скорости по тангажу соответствует вращению против часовой стрелки вокруг поперечной оси модели при взгляде справа
      - Положительное значение угловой скорости по рысканию соответствует вращению против часовой стрелки вокруг вертикальной оси модели при взгляде сверху

   - Протокол  обмена данными с IMU по I2C, общий принцип:
      - Чтение данных из IMU:
         - Master посылает START
         - Master посылает адрес устройства Slave c командой записи в Slave: 0x15
         - Master посылает байт-идентификатор типа требуемых данных: 0x01, 0x02, 0x03, 0x04 или 0x05
         - Master посылает STOP
         - Master посылает START
         - Master посылает адрес устройства Slave c командой чтения из Slave: (0x15<<1) + 1
         - Master читает из Slave некоторое число байт, определяемое типом данных
         - Master посылает NACK
         - Master посылает STOP
      - Запись данных в IMU:
         - Master посылает START
         - Master посылает адрес устройства Slave c командой записи в Slave: 0x15
         - Master посылает байт-идентификатор типа записываемых данных: 0xAA, 0xAB или 0xAC
         - Master посылает STOP.


   - Типы данных, читаемых из IMU:

      - Углы ориентации и угловые скорости:
         - Идентификатор типа данных: 0x01
         - Содержание сообщения:
            - Master: START
            - Master: 0x15
            - Master: 0x01
            - Master: STOP
            - Master: START
            - Master: (0x15<<1) + 1
            - Slave: 0x01
            - Slave: Roll_low_byte
            - Slave: Roll_high_byte
            - Slave: Pitch_low_byte
            - Slave: Pitch_high_byte
            - Slave: Yaw_low_byte
            - Slave: Yaw_high_byte
            - Slave: Roll_Rate_low_byte
            - Slave: Roll_Rate_high_byte
            - Slave: Pitch_Rate_low_byte
            - Slave: Pitch_Rate_high_byte
            - Slave: Yaw_Rate_low_byte
            - Slave: Yaw_Rate_high_byte
            - Slave: CRC16_low_byte
            - Slave: CRC16_high_byte
            - Master: NACK
            - Master: STOP
         - Примечания:
            - Крен (Roll) передается в радианах как 2-байтовое целое знаковое число, младший бит = 0.001 радиан
               - Roll (radians) =  (float)((Int16)(Roll_low_byte + Roll_high_byte*256))/1000.0f
               - Нулевое значение Roll соответствует горизонтальной ориентации по крену, положительное значение Roll соответствует левому крену
            - Тангаж (Pitch) передается в радианах как 2-байтовое целое знаковое число, младший бит = 0.001 радиан
               - Pitch (radians) =  (float)((Int16)(Pitch_low_byte + Pitch_high_byte*256))/1000.0f
               - Нулевое значение Pitch соответствует горизонтальной ориентации по тангажу, положительное значение Pitch соответствует подъему носа модели вверх
            - Рыскание (Yaw) передается в радианах как 2-байтовое целое знаковое число, младший бит = 0.001 радиан
               - Yaw (radians) =  (float)((Int16)(Yaw_low_byte + Yaw_high_byte*256))/1000.0f
               - Нулевое значение Yaw соответствует повороту модели на восток, положительное значение соответствует повороту в сторону севера.
            - Угловая скорость по крену (Roll Rate) передается в радианах в секунду как 2-байтовое целое знаковое число, младший бит = 0.001 радиан в секунду
               - Roll Rate (radians/sec) =  (float)((Int16)(Roll_Rate_low_byte + Roll_Rate_high_byte*256))/1000.0f
               - Положительное значение Roll Rate соответствует вращению против часовой стрелки вокруг продольной оси модели при взгляде сзади
            - Угловая скорость по тангажу (Pitch Rate) передается в радианах как 2-байтовое целое знаковое число, младший бит = 0.001 радиан
               - Pitch Rate (radians/sec) =  (float)((Int16)(Pitch_Rate_low_byte + Pitch_Rate_high_byte*256))/1000.0f
               - Положительное значение Pitch Rate соответствует вращению против часовой стрелки вокруг поперечной оси модели при взгляде справа
            - Угловая скрость по рысканию (Yaw Rate) передается в радианах в секунду как 2-байтовое целое знаковое число, младший бит = 0.001 радиан в секунду
               - Yaw Rate (radians/sec) =  (float)((Int16)(Yaw_Rate_low_byte + Yaw_Rate_high_byte*256))/1000.0f
               - Положительное значение Yaw Rate соответствует вращению против часовой стрелки вокруг вертикальной оси модели при взгляде сверху
            - CRC16 считается для всего набора данных из 13 байт (байт 0x01, являющийся идентификатором типа данных, и 12 байт данных)

      - Позиция в пространстве, линейные скорости и ускорения:
         - Идентификатор типа данных: 0x02
            - Не реализовано в самолетном варианте

      - Небработанные данные с датчиков:
         - Идентификатор типа данных: 0x03
         - Содержание сообщения:
            - Master: START
            - Master: 0x15
            - Master: 0x03
            - Master: STOP
            - Master: START
            - Master: (0x15<<1) + 1
            - Slave: 0x03
            - Slave: Acceleration_X_low_byte
            - Slave: Acceleration_X_high_byte
            - Slave: Acceleration_Y_low_byte
            - Slave: Acceleration_Y_high_byte
            - Slave: Acceleration_Z_low_byte
            - Slave: Acceleration_Z_high_byte
            - Slave: AngularRate_X_low_byte
            - Slave: AngularRate_X_high_byte
            - Slave: AngularRate_Y_low_byte
            - Slave: AngularRate_Y_high_byte
            - Slave: AngularRate_Z_low_byte
            - Slave: AngularRate_Z_high_byte
            - Slave: MagneticField_X_low_byte
            - Slave: MagneticField_X_high_byte
            - Slave: MagneticField_Y_low_byte
            - Slave: MagneticField_Y_high_byte
            - Slave: MagneticField_Z_low_byte
            - Slave: MagneticField_Z_high_byte
            - Slave: MagneticField_X_CALIBRATED_MIN_low_byte
            - Slave: MagneticField_X_CALIBRATED_MIN_high_byte
            - Slave: MagneticField_X_CALIBRATED_MAX_low_byte
            - Slave: MagneticField_X_CALIBRATED_MAX_high_byte
            - Slave: MagneticField_Y_CALIBRATED_MIN_low_byte
            - Slave: MagneticField_Y_CALIBRATED_MIN_high_byte
            - Slave: MagneticField_Y_CALIBRATED_MAX_low_byte
            - Slave: MagneticField_Y_CALIBRATED_MAX_high_byte
            - Slave: MagneticField_Z_CALIBRATED_MIN_low_byte
            - Slave: MagneticField_Z_CALIBRATED_MIN_high_byte
            - Slave: MagneticField_Z_CALIBRATED_MAX_low_byte
            - Slave: MagneticField_Z_CALIBRATED_MAX_high_byte
            - Slave: CRC16_low_byte
            - Slave: CRC16_high_byte
            - Master: NACK
            - Master: STOP
         - Примечания:
            - Данные датчиков передаются в том виде, в каком они читаются с датчиков: 2-байтовое целое знаковое число
            - Ось X соответствует продольной оси самолета, положительное направление – вперед
            - Ось Y соответствует поперечной оси самолета, положительное направление – от левого крыла к правому крылу
            - Ось Z соответствует вертикальной оси самолета, положительное направление – вниз
            - CRC16 считается для всего набора данных из 31 байт (байт 0x03, являющийся идентификатором типа данных, и 30 байт данных)

      - Шум/вибрации с датчиков:
         - Идентификатор типа данных: 0x04
         - Содержание сообщения:
            - Master: START
            - Master: 0x15
            - Master: 0x04
            - Master: STOP
            - Master: START
            - Master: (0x15<<1) + 1
            - Slave: 0x04
            - Slave: Acceleration_Noise_X_low_byte
            - Slave: Acceleration_Noise_X_high_byte
            - Slave: Acceleration_Noise_Y_low_byte
            - Slave: Acceleration_Noise_Y_high_byte
            - Slave: Acceleration_Noise_Z_low_byte
            - Slave: Acceleration_Noise_Z_high_byte
            - Slave: AngularRate_Noise_X_low_byte
            - Slave: AngularRate_Noise_X_high_byte
            - Slave: AngularRate_Noise_Y_low_byte
            - Slave: AngularRate_Noise_Y_high_byte
            - Slave: AngularRate_Noise_Z_low_byte
            - Slave: AngularRate_Noise_Z_high_byte
            - Slave: CRC16_low_byte
            - Slave: CRC16_high_byte
            - Master: NACK
            - Master: STOP
         - Примечания:
            - Данные представляют собой 1/64 от суммы абсолютных значений разницы между текущим значением данных с датчика и средним значением, подсчитанным в окне шириной 64 сэмпла,
            и передаются как 2-байтовое целое число без знака
            - CRC16 считается для всего набора данных из 13 байт (байт 0x04, являющийся идентификатором типа данных, и 12 байт данных)

      - Внутренние счетчики IMU:
         - Идентификатор типа данных: 0x05
         - Содержание сообщения:
            - Master: START
            - Master: 0x15
            - Master: 0x05
            - Master: STOP
            - Master: START
            - Master: (0x15<<1) + 1
            - Slave: 0x05
            - Slave: MainCyclesPerSecond_low_byte
            - Slave: MainCyclesPerSecond_high_byte
            - Slave: SensorPollingTicks_low_byte
            - Slave: SensorPollingTicks_high_byte
            - Slave: MathTicks_low_byte
            - Slave: MathTicks_high_byte
            - Slave: FusionTicks_low_byte
            - Slave: FusionTicks_high_byte
            - Slave: FullCycleTicks_low_byte
            - Slave: FullCycleTicks_high_byte
            - Slave: Second_low_byte
            - Slave: Second_high_byte
            - Slave: 0x00
            - Slave: 0x00
            - Slave: CRC16_low_byte
            - Slave: CRC16_high_byte
            - Master: NACK
            - Master: STOP
         - Примечания:
            - Данные представляют собой 2-байтовое целое число без знака
            - MainCyclesPerSecond – текущее число циклов интегрирования в секунду
            - SensorPollingTicks – время, затраченное на опрос датчиков, младший бит = 0.00001 сек (10 мксек)
            - MathTicks – время, затраченное на обработку данных от датчиков, младший бит = 0.00001 сек (10 мксек)
            - FusionTicks – время, затраченное непосредственно на алгоритм интегрирования/слияния данных датчиков, младший бит = 0.00001 сек (10 мксек)
            - FullCycleTicks – время главного цикла программы, , младший бит = 0.00001 сек (10 мксек)
            - Second – время с помента подачи питания и включения IMU, в секундах, по внутреннему таймеру IMU
            - CRC16 считается для всего набора данных из 13 байт (байт 0x05, являющийся идентификатором типа данных, и 12 байт данных)


   - Типы данных, записываемых в IMU:

      - Результаты калибровки компаса:
         - Идентификатор типа данных: 0xAA
         - Содержание сообщения:
            - Master: START
            - Master: 0x15
            - Master: 0xAA
            - Master: MagneticField_X_CALIBRATED_MIN_low_byte
            - Master: MagneticField_X_CALIBRATED_MIN_high_byte
            - Master: MagneticField_X_CALIBRATED_MAX_low_byte
            - Master: MagneticField_X_CALIBRATED_MAX_high_byte
            - Master: MagneticField_Y_CALIBRATED_MIN_low_byte
            - Master: MagneticField_Y_CALIBRATED_MIN_high_byte
            - Master: MagneticField_Y_CALIBRATED_MAX_low_byte
            - Master: MagneticField_Y_CALIBRATED_MAX_high_byte
            - Master: MagneticField_Z_CALIBRATED_MIN_low_byte
            - Master: MagneticField_Z_CALIBRATED_MIN_high_byte
            - Master: MagneticField_Z_CALIBRATED_MAX_low_byte
            - Master: MagneticField_Z_CALIBRATED_MAX_high_byte
            - Master: CRC16_low_byte
            - Master: CRC16_high_byte
            - Master: STOP
         - Примечания:
            - Данные передаются в том же виде, в каком читаются с датчиков магнитного поля и читаются из IMU в пакете данных с типом 0х03 : 2-байтовое целое знаковое число
            - По факту успешного получения этих данных IMU записывает данные калибровки компаса в энергонезависимую память.
            - CRC16 считается для всего набора данных из 13 байт (байт 0xAA, являющийся идентификатором типа данных, и 12 байт данных)

      - Коррекция центробежных ускорений:
         - Идентификатор типа данных: 0xAB
         - Содержание сообщения:
            - Master: START
            - Master: 0x15
            - Master: 0xAB
            - Master: CentripetalCorrectionMode (0x00,0x01 или 0x02)
            - Master: AirSpeed_low_byte
            - Master: AirSpeed_high_byte
            - Master: GPSCentrifugalAcceleration_low_byte
            - Master: GPSCentrifugalAcceleration_high_byte
            - Master: CRC16_low_byte
            - Master: CRC16_high_byte
            - Master: STOP
         - Примечания:
            - CentripetalCorrectionMode – тип коррекции центробежных ускорений:
            - 0x00 – не использовать коррекцию центробежных ускорений.
            - 0х01 – использовать коррекцию центробежных ускорений по GPS.
            - 0x02 – использовать коррекцию центробежных ускорений по данным о скорости модели в воздухе и угловым скоростям модели.
            - Начальное состоание IMU после старта: коррекция центробежных ускорений не используется.
            - AirSpeed – скорость модели в воздухе, двухбайтовое целое число без знака, младший бит равен 0.01 м/сек.
            - GPSCentrifugalAcceleration – центробежное ускорение, подсчитанное по данным GPS, в системе координат, связанной с моделью, т.е. горизонтальная скорость по GPS * угловая скорость в плоскости Земли по GPS. Положительное значение соответствует центробежному ускорению, направленному в положительном направлении оси Y системы координат IMU, т.е. от левого крыла к правому крылу. Двухбайтовое целое число без знака, младший бит равен 0.01 м/сек^2
            - CRC16 считается для всего набора данных из 6 байт (байт 0xAB, являющийся идентификатором типа данных, и 5 байт данных)

      - Коррекция параметров IMU:
         - Идентификатор типа данных: 0xAС
         - Содержание сообщения:
            - Master: START
            - Master: 0x15
            - Master: 0xAС
            - Master: Use_2000_DPS (0x00 или 0x01)
            - Master: MARG_Beta (от 0x00 до 0xFF)
            - Master: CRC16_low_byte
            - Master: CRC16_high_byte
            - Master: STOP
         - Примечания:
            - Use_2000_DPS – Выбор диапазона измеряемых угловых скоростей для датчиков угловых скоростей:
            - 0x00 – Использовать диапазон 500 град/сек.
            - 0х01 – Использовать диапазон 2000 град/сек.
            - Начальное состояние IMU после старта: используется диапазон 500 град/сек
            - MARG_Beta – параметр Beta алгоритма MARG, используемого в IMU. Беззнаковое число, байт. Младший бит MARG_Beta соответствует значению Beta 0.01, т.е., доступно изменение Beta от 0 до 2.25.
            - Начальное состояние IMU после старта и инициализации: используется Beta = 0.15.
            - CRC16 считается для всего набора данных из 3 байт (байт 0xAС, являющийся идентификатором типа данных, и 2 байта данных)

Процедура подсчета CRC16:
U16 Crc16_direct(U8 *pcBlock, U16 len)
{
    U16 crc = 0xFFFF;
    U8 i;
    while (len--)
    {
        crc ^= *pcBlock++ << 8;

        for (i = 0; i < 8; i++)
            crc = crc & 0x8000 ? (crc << 1) ^ 0x1021 : crc << 1;
    }
    return crc;
}
Пример записи данных в IMU:
void IMU_send_compass_calibration_data(void)
{
   U16 crc;
   U8 i2c_imu_tx_data[15];
   i2c_imu_tx_data[0]=0xAA;
   i2c_imu_tx_data[1]=LSB0(compass_min[0]);
   i2c_imu_tx_data[2]=LSB1(compass_min[0]);
   i2c_imu_tx_data[3]=LSB0(compass_max[0]);
   i2c_imu_tx_data[4]=LSB1(compass_max[0]);
   i2c_imu_tx_data[5]=LSB0(compass_min[1]);
   i2c_imu_tx_data[6]=LSB1(compass_min[1]);
   i2c_imu_tx_data[7]=LSB0(compass_max[1]);
   i2c_imu_tx_data[8]=LSB1(compass_max[1]);
   i2c_imu_tx_data[9]=LSB0(compass_min[2]);
   i2c_imu_tx_data[10]=LSB1(compass_min[2]);
   i2c_imu_tx_data[11]=LSB0(compass_max[2]);
   i2c_imu_tx_data[12]=LSB1(compass_max[2]);
   crc =  Crc16_direct((U8 *)&i2c_imu_tx_data[0], 13);
   i2c_imu_tx_data[13]=LSB0(crc);
   i2c_imu_tx_data[14]=LSB1(crc);
   i2c_send(0x15, 15, i2c_imu_tx_data);
}
Пример чтения данных из IMU:
void IMU_get_angles(void)
{
   U16 crc;
   U8 i2c_imu_tx_data[1];
   U8 i2c_imu_rx_data[15];
   float imu_roll, imu_pitch,imu_yaw;
   float imu_d_roll, imu_d_pitch,imu_d_yaw;
   i2c_imu_tx_data[0]=1;
   i2c_send(0x15, 1, i2c_imu_tx_data);
   i2c_receive(0x15, 15, i2c_imu_rx_data);
   crc = Crc16_direct((U8 *)&i2c_imu_rx_data[0], 13);
   if((crc == ((U16)i2c_imu_rx_data[13] + (U16) i2c_imu_rx_data[14]*256)) && (i2c_imu_rx_data[0]==0x01))
   {
      imu_roll = ((float)(S16)(U16)(i2c_imu_rx_data[1] + i2c_imu_rx_data[2]*256))/1000.0f;
      imu_pitch = ((float)(S16)(U16)(i2c_imu_rx_data[3] + i2c_imu_rx_data[4]*256))/1000.0f;
      imu_yaw = ((float)(S16)(U16)(i2c_imu_rx_data[5] + i2c_imu_rx_data[6]*256))/1000.0f;
      imu_d_roll = ((float)(S16)(U16)(i2c_imu_rx_data[7] + i2c_imu_rx_data[8]*256))/1000.0f;
      imu_d_pitch = ((float)(S16)(U16)(i2c_imu_rx_data[9] + i2c_imu_rx_data[10]*256))/1000.0f;
      imu_d_yaw = ((float)(S16)(U16)(i2c_imu_rx_data[11] + i2c_imu_rx_data[12]*256))/1000.0f;
      // using roll, pitch, and yaw angles and rates
      . . .
      . . .
      . . .
      . . .
   }
}
Creator991
smalltim:

Должно быть 5В, если сильно в сторону

проверил напряжение на плату ИМУ, ЖПС идет 4,99 В. Настройки в КП все сделал, погода даст и внебо!!!

KBV

Тим, УРА, самолетик полетел 😎 И RTH и по точкам. Пока еще не совсем так, как хотелось бы, но я по-ходу понял почему 😃

С утра ветер стих и стало хорошо видно, что с самолетом делает АП, а что ветер. А главное меня стало меньше глючить на холоде на ветру))
В общем причина сложностей с настройкой RTH оказалась в запаздывании реакции авиагоризонта на крен на ~3секунды. АП соответственно считает, что летит в крене и ждет пока самоль повернет на базу. Через некоторое время авиагоризонт выравнивается и о-блин, надо ж поворачивать))
Интересно, что всегда именно 3секунды (специально считал). А почему не 1с или не 10? Есть предположение, что это коррекция ускорений при помощи GPS (с запаздыванием), а коррекция с компаса работает как то не так.
Это возможно? Проверил на земле - все работает отлично и мгновенно, ни видео передатчик, ни двигатель на горизонт не влияют вообще никак.

  1. ну и до кучи )) Почему-то АП перебирает контрольные точки в произвольном порядке, а не последовательно. В момент переключения он быстро мелькает номерами КТ (на OSD видно как меняются) и останавливается на произвольной.
Edward_tlt
Creator991:

Подключать тот, что с желтым проводом вместо Z пирометра.

Тимофей, а к АП не мини куда подключать???

smalltim
KBV:

Тим, УРА, самолетик полетел 😎 И RTH и по точкам. Пока еще не совсем так, как хотелось бы, но я по-ходу понял почему 😃

С утра ветер стих и стало хорошо видно, что с самолетом делает АП, а что ветер. А главное меня стало меньше глючить на холоде на ветру))
В общем причина сложностей с настройкой RTH оказалась в запаздывании реакции авиагоризонта на крен на ~3секунды. АП соответственно считает, что летит в крене и ждет пока самоль повернет на базу. Через некоторое время авиагоризонт выравнивается и о-блин, надо ж поворачивать))
Интересно, что всегда именно 3секунды (специально считал). А почему не 1с или не 10? Есть предположение, что это коррекция ускорений при помощи GPS (с запаздыванием), а коррекция с компаса работает как то не так.
Это возможно? Проверил на земле - все работает отлично и мгновенно, ни видео передатчик, ни двигатель на горизонт не влияют вообще никак.

  1. ну и до кучи )) Почему-то АП перебирает контрольные точки в произвольном порядке, а не последовательно. В момент переключения он быстро мелькает номерами КТ (на OSD видно как меняются) и останавливается на произвольной.

Борис, надо бы видео посмотреть. У Вас есть возможность выложить?

По контрольным точкам: а какой радиус контрольной точки поставлен и какое расстояние между ними?

Edward_tlt:

Тимофей, а к АП не мини куда подключать???

Туда же, где и на мини, в пиро Z.

Edward_tlt
smalltim:

Туда же, где и на мини, в пиро Z.

На сколько я понимаю, на плате не мини, разводка другая… - ср.т. Z +

smalltim

Эдуард, надо перетасовать разъемы в 4-контактном кабелечке IMU для подключения к старому АП.

Получается так:

для нового АП:
черный (земля)
желтый (питание)
белый 1
белый 2

Для старого АП на зеленой плате:
черный (земля)
белый 1
белый 2
желтый (питание)

Видео сегодняшнего полета от Ильвир а, первый вылет с IMU. Ветер такой, что уносит ДВСные модели, но охота пуще неволи.

Обратите внимание, при полете модели против ветра, т.е. при маленькой скорости модели относительно земли, но большой скорости в воздухе, качество коррекции центробежных ускорений снижается и, даже несмотря на то, что АП учитывает снос ветром при коррекции, IMU немного кривит горизонт.

Ну и, конечно, насколько четко отображается курс на базу по компасу в такой сильный ветер. Курс на базу по GPS, когда модель смотрит носом к базе по компасу и по видео, зачастую не показывает что-то даже близкое к правде - ветер сносит модель от базы быстрее, чем модель может ему сопротивляться, и курс по GPS, т.е., направление полета относительно земли, показывает полет в сторону от базы.

В итоге модель пришлось плавненько посадить в километре от базы - просто не выгребает против ветра 😦

Creator991
smalltim:

пришлось плавненько посадить в километре от базы - просто не выгребает против ветра

так вроде мотор неработал? по показаниям ток больше 10ампер не поднимался а последние 40секунд вобще был 00,5ампер?!

serpantins

Решил полетать с телеметрией без ап, прошил последней прошивкой с сайта и циферки стали дергаться чуть вправо- чуть влево относительно вертикальной линии…может подскажите, какую версию прошивки залить для телеметрии без бародатчиков?

Ильвир
Creator991:

так вроде мотор неработал? по показаниям ток больше 10ампер не поднимался а последние 40секунд вобще был 00,5ампер?!

Нее, мотор работал нормально, слушал по микрофону. Проблема была в зажатых настройках стабилизации. Перенастроил дома, и Скай полетел как надо.