Ардупилот на платах OpenPilot Revolution / RevoMini (записей: 472)

  • Аватар профиля Night_Ghost Night_Ghost196 пунктов в 7 мес., 3 нед. назад

    Давным-давно, еще во времена АрдуКоптера 3.0, кем-то был написан HAL для Ardupilot для платформы OpenPilot Revolution. К сожалению, этот код не поддерживался в течение многих лет и поэтому безнадежно устарел.

    Некоторое время назад, я привел этот код к текущему состоянию Ardupilot и сделал PR на GitHub-е, дабы включить этот HAL в официальный репозиторий.

    С тех пор прошло 2 версии ArduCopter-а, но это PR до сих пор висит.

    По сравнению с исходным HAL:

    • Примерно половина кода полностью переписана
    • Добавлена ​​проверка для всех входных параметров функций - нет более HardFault при установке  неправильных значений параметров
    • Внешняя шина I2C переехала с FlexiPort на драйвер Soft_I2C, поэтому есть по крайней мере 3 UARTа
    • Добавлен еще 1 полнофункциональный UART (только для квадрокоптеров) и 1 только RX UART для DSM сателлита на разъеме Oplink
    • В отличие от многих других плат, полностью реализованны вызововы  семейства registerPeriodicCallback
    • Реализован вызов register_io_process с помощью простой кооперативной многозадачности
    • Добавлена ​​поддержка пищалки (требуется дополнительный транзистор)
    • стек перемещен в CCM память
    • PPM и PWM входы работает через обработчики драйвера таймера - устранены все конфликты
    • Добавлена возможность принимать DSM и SBUS на входе PPM 
    • Высокочастотный (8kHz) продвинутый планировщик, общий для всех нужд, умеющий использовать семафоры и учитывать (опционально) статистику производительности
    • Все таблицы описания аппаратуры  теперь константные и размещаются во флеше, а не в оперативке
    • Более надежный сброс зависаний шины I2C
    • Все драйверы поддерживают вызов set_retries ()
    • Все задержки - даже микросекунды - очень точные, реализуются с помощью аппаратных часов (счетчик DWT_CYCCNT) в автономном режиме
    • Разделенных порты USB и драйверы UART
    • Новый SoftwareSerial драйвер на основе аппнота от ST
    • используется вывод  DRDY MPU6000
    • Устранены предупреждения компилятора
    • Портирован и слегка доработан загрузчик для поддержки пришивки, размещаемой по адресам 8010000 и 8020000 (2 нижние 16k страницы флэш-памяти используются для эмуляции EEPROM)
    • Эмуляция EEPROM доработана для обеспечения надежности хранения данных при сбоях питания
    • Оптимизировано использование EEPROM путем изменения размера записи с 1 байта до 2 байт
    • Все внутренние вызовы используют статические приватные методы - нет оверхеда на обращения к членам класса
    • Удален многие неиспользуемые файлы
    • функция micros() использует 32-bit аппаратный таймер вместо сложной, тяжелой и глючной systick_micros()
    • добавлена поддержка параметров HAL
    • OneShot работает! При этом добавлен слой трансляции из режимов коптера в режимы HAL
    • добавлены дескрипторы всего набортного оборудования
    • добавлена поддержка перезагрузки в режим аппаратного DFU  (через MP "force PX4 bootloader" )
    • после любого HardFault или Panic() происходит автоматическая загрузка в режим аппаратного DFU
    • Поддержка режима diversity в RC_Input! Можно подключать два (даже разных!) приемника RC
    • отменены идиотские изменения из апстрима в интерфейсе Periodic
    • все используемые драйверы адаптированы для использования возможности HAL "reschedule me"
    • добавлена возможность использования вывода компаса DataReady 
    • унифицирована обработка всех исключений
    • добавлена возможность бинда Спектрумовских сателлитов без управляемого стабилизатора 3.3в (требует кратковременного отключения питания)
    • Добавлена ​​поддержка последовательности сброса Arduino32 - спад DTR на 1200 бод или пакет «1eaf» с высоким DTR
    • Исправлено зависание при сбое флеш-памяти
    • Соединение с USB идет без потери символов и  без зависания при отключении
    • Добавлена сработка FailSafe при зависании приемника - если ни один канал не меняется за 60 секунд
    • Добавлена ​​поддержка параметров HAL
    • Проект доработан для упрощения поддержки немного разных плат - например. AirbotF4
    • Полная поддержка AirbotF4 (отдельные двоичные файлы)
    • Добавлена ​​поддержка сервоприводов на неиспользуемых входных пинах
    • Добавлена ​​обработка битов ошибок FLASH_SR, включая автоматическую очистку защиты от записи
    • Добавил Arduino-подобную поддержку реле на произвольном выводе
    • Упрощен драйвер UART, буферизация теперь используется даже в неблокирующем режиме
    • Эмуляция EEPROM блокирует флеш после каждой записи с прерыванием в случае недопустимой записи
    • Обработка ошибок EEPROM
    • Исправлено похищение Ардупилотом Сервоприводов, даже если они отмечены как «Неиспользованные»,
    • Добавлена ​​дата и время компиляции для вывода в консоль
    • Добавлен вход SBUS через USART1, например на платах Airbot
    • Добавлены файлы read_me.md для каждой платы
    • Режим DMA для больших передач SPI
    • Виртуальный COM-порт USB может быть подключен к любому UART - например. Для настройки модемов OSD или 3DR
    • Любой UART может быть подключен к ESC для 4-way интерфейса
    • Поддержка логов на SD-карте для платы AirbotV2
    • Время ожидания I2C ограничено 0,3 с - больше не зависает навечно от ошибок внешнего компаса
    • FlexiPort может быть переключен между UART и I2C согласно параметрам
    • Модуль RCoutput полностью переписан.
    • для выходов PWM скомпенсирована ошибка в настройке частоты таймера
    • Добавлен параметр для установки режима PWM
    • Добавлена ​​информация о используемой памяти
    • Добавлена ​​отчетность об ошибках I2C
    • Реализовано малопотребляющее состояние бездействия с WFE, TIMER6 используется для генерации событий рас в 1uS
    • Добавлен параметр HAL_RC_INPUT, позволяющий принудительно назначить модуль ввода RC
    • Добавлена ​статистика об использовании памяти и стека
    • Добавлено создание файла .DFU
    • Долгие операции перемещены с уровня прерывания на уровень ввода-вывода с минимально возможным приоритетом - теперь не теряются пакеты SBUS во время обработки
    • Добавлена ​​поддержка системы безопасности задающего генератора - если HSE (кварц) отказал в воздухе, контроллер станет использовать HSI вместо него
    • Добавлен EmergencyHandler, который будет вызвана при любой ошибке или вызове Panic() перед остановкой - например, Выпустить парашют
    • Индивидуальная раскладка моторов для каждой платы
    • Индивидуальное назначение консоли для каждой платы
    • HAL переведен на новый DMA API с прерываниями завершения обмена, и драйвер SD этим пользуется
    • Плата AirbotV2 полностью поддерживается  - SD-карта и OSD (OSD не тестировался, просто компилируется)
    • Добавлена ​​поддержка чтения с SD-карты через USB, что позволяет использовать USB MassStorаge (задается через параметр HAL)
    • Добавлена ​​проверка переполнения стека для фоновых задач
    • Все платы могут форматировать внутренний флеш-чип в FAT и обеспечить доступ через USB
    • Добавлено автораспознавание SPI Flash
    • Добавлена ​​поддержка команды TRIM для Dataflash, форматированного в FAT
    • Исправлена ​​ошибка в аппаратном драйвере I2C, который портит запись на I2C2
    • Переписана библиотека SD для поддержки «errno» и раннего различения файла и каталога
    • Обработка компаса (4027uS) и обработка барометра (1271uS) перенесены с уровня прерывания к низкоприоритетному уровню, поскольку  их время исполнения портит цикл (500 Гц = 2000uS для всех)
    • Добавлено переформатирование DataFlash в случае жестких ошибок файловой системы, что устраняет ошибку FatFs, когда не освобождается место после переполнения файлов, а затем его удаления
    • Добавлено автоопределение для всех известных типов баронов на внешней шине I2C
    • Добавлено автоопределение для всех известных типов соединений на внешней шине I2C
    • Добавлена ​​проверка на I2C_Mgr для повторного создания устройства на одной шине с тем же адресом - для предотвращения ложного автоопределения, например MS5611 (уже инициализированного) как BMP_085
    • Добавлен параметр HAL "TIME_SHIFT" - разница времени между GMT и местным временем
    • Добавлена синхронизация времени между временем платы и временем GPS - так что в журналах теперь будет отображаться реальные локальные даты и время
    • ...
    • Множество мелких улучшений

    Так что если кого-нибудь интересует ArduPlane / ArduCopter на контроллере  весом 5 грамм (с корпусом), а не только на огромном и тяжелом PixHawk - код и бинарники тут.  Описание подключения

    Проверено, летает!

    При этом обеспечиваются многие возможности, отсутствующие у официальной прошивки!

    • USB порт может быть подсоединен к любому UART, например к ОСД для настройки.
    • Любой УАРТ может быть подключен к ESC для их программирования
    • SD карта может быть подключена к USB в режиме MassStorage - нет необходимости вынимать ее из корпуса для чтения логов

    Вышеприведенные пункты позволяют разместить контроллер в корпусе и не разбирать его для настройки/чтения логов. А также:

    • автодетект компасов и барометров на внешней шине I2C позволяет подключить любую платку сенсоров для Ардуины серии GY-
    • процессор ~65% времени проводит во сне - что значительно снизило потребление и нагрев
    • есть FailSafe при зависании приемника, если ни один канал не меняется за 60 секунд - теперь это не вызовет улета
    • возможность подключения 2х приемников - либо одновременно LRS и 2.4, либо как Diversity. Также это заметно увеличивает надежность
    • используется система безопасности кварца - контроллер не зависает при его отказе

    Вся коптерная электроника кучей - 15 грамм.

     

    А вот вся электроника на коптере

    UPD. Добавлена поддержка барометра на внешней I2C.  Теперь можно взять такой контроллер на Ф4 за 15 баксов, к нему такой  или такой модуль - и вот у нас полный контроллер для Ардупилота за $23 или даже $19

    UPD2. Протестирована работа всей перефирии на SoftI2C и SoftSPI - теперь любые 2 ноги контроллера могут быть назначены как внешняя шина I2С, и любые 4 ноги - как внешняя шина SPI. Что, помимо наличия выведенной наружу SPI3, позволяет подключить произвольное оборудование в практически произвольном количестве.

    UPD3. Добавлена возможность легко добавлять произвольные платы на похожих процессорах, отличающиеся только назначением выводов

    ПРОШИВКА.

    OPBL образы не поддерживаются, ибо бинарник должен жить на другом адресе, поэтому для перепрошивки нужно перевести проц в режим DFU - для этого замкнуть выыодв платы BOOT и включить USB. А затем выполнить команду

    dfu-util -a 0 --dfuse-address 0x08000000 -D /path/to/firmware.bin 

    где firmware.bin это прошивка для вашей платы.

     

  • Аватар профиля macrokernel macrokernel в 7 мес., 3 нед. назад

    Круто! На каких платах работает? Барометр, компас, GPS поддерживаются? Было бы интересно запустить на чём-нибудь типа этого: http://www.banggood.com/F3-EVO-Cleanflight-10DOF-Flight-Controller-Oem-Version-for-Multirotor-Racing-with-4G-MicroSD-p-1064058.html

  • Аватар профиля Night_Ghost Night_Ghost196 пунктов в 7 мес., 3 нед. назад

    На F4 , ведущих  родословную от OpenPilot Revoluton - то есть на ней самой,  RevoMini (на фото, самая перспективная), Airbot F4 (с внешней платой барометра и магнитометра, придется пересобирать). Ни на каких F3 работать не будет просто по определению - принципиально разное железо в камне.

    Поддерживается все что поддерживает Ардупилот

    UPD. Пересобиранть не придется, барометр на внешней шине I2C поддерживается "из коробки"

  • Аватар профиля kozin Алексей Козин в 7 мес., 3 нед. назад

    Приветствую, удивительная работа! Есть ли планы присоединить и поддерживать проект в официальном репозитории арду?

  • Аватар профиля Night_Ghost Night_Ghost196 пунктов в 7 мес., 3 нед. назад
    [2016-12-31 11:11:33] kozin писал(а): Есть ли планы присоединить и поддерживать проект в официальном репозитории арду?

    Присоединить - да, делалось уже 3 ПР на гитхабе, результат в точности как у вас.

    Поддерживать - нет, ибо в отличие от вас нет личной заинтересованности, и какая мне разница где поддерживать - свой форк или официальный?

  • Аватар профиля kozin Алексей Козин в 7 мес., 2 нед. назад

    сделанные вами изменения крайне интересны, я давно пытался убедить коллег в необходимости использования вывода  DRDY MPU6000
    тем более что аппаратно он у нас уже заведен
    если вам будет интересно поэкспериментировать я бы мог вам бесплатно выслать экземпляр актуальной версии нашего контроллера.
    получение этого контроллера не будет отягощено какими либо обязательствами с вашей стороны
    связаться со мной можно kozin@mail.ru

     

     

  • Аватар профиля Night_Ghost Night_Ghost196 пунктов в 7 мес., 2 нед. назад
    [2017-01-01 07:47:14] kozin писал(а): я давно пытался убедить коллег в необходимости использования вывода  DRDY MPU6000тем более что аппаратно он у нас уже заведен

    сейчас драйвер Invensense поддерживает использование вывода DRDY, достаточно определить "#define INVENSENSE_DRDY_PIN где_он_там"

    [2017-01-01 07:47:14] kozin писал(а): если вам будет интересно поэкспериментировать я бы мог вам бесплатно выслать экземпляр актуальной версии нашего контроллера.

    Спасибо за предложение, но я пока не вижу смысла. У вас ХАЛ для него давно отлажен и работает,  а камень у вас имеет 2МБ флеша и оттого не нуждается в "кроилове" и отказе от ОС на борту.

    У меня же основная задача была - заставить Ардушный код работать на самом мелком (4 грамма без корпуса) и самом дешевом ($34 в розницу), но при этом полноценном F4 контроллере, который к тому же хорошо оттестирован на всяческих Бета/Клин/зеленыйсыр-флаях и зарекоменовал себя весьма надежным. 

  • Аватар профиля Night_Ghost Night_Ghost196 пунктов в 7 мес., 2 нед. назад

    Видео первого полета где-то в Италии

  • Аватар профиля kozin Алексей Козин в 7 мес., 2 нед. назад

    спасибо, нашел

    https://github.com/night-ghost/ardupilot/blob/master/libraries/AP_HAL/board/revomini.h#L26

     

     

     

  • Аватар профиля kozin Алексей Козин в 7 мес., 2 нед. назад

    ИМХО  не критики ради а от непонимания,

    несколько странно написана обработка пина  DRDY в драйвере.

    - тупо чтение состояния пина - вместо того чтобы поставить внешнее прерывание на ногу и вызывать считывание регистров, а затем осуществлять перезапуск цикла вычисления .

    при необходимости из внешнего контролирующего цикла следить за таймаутом процесса

  • Аватар профиля Night_Ghost Night_Ghost196 пунктов в 7 мес., 2 нед. назад

    Это не  я, я только ХАЛ пилю :)

  • Аватар профиля kozin Алексей Козин в 7 мес., 2 нед. назад

    а хал то великолепный вышел! ни субмодулей, ни натикса, ни слоя драйверов. Это в разы облегчает процесс адаптации нового контроллера.
    С точки зрения использования - наличие натикса - врядли дает какое то преимущество, другое дело если бы под ос юзер сам бы выбирал какие приложения он будет запускать, по сути если использовать ваш хал для f4by нужно создать конфиг платы, выбрать проц и расставить датчики по пинам? теоретически ваш хал может вернуть возможность вернуть проект в изначальное "арду" русло, когда широкий круг лиц мало мальски знакомых с С++ мог дополнить проект своим функционалом

     

     

  • Аватар профиля Night_Ghost Night_Ghost196 пунктов в 7 мес., 2 нед. назад
    [2017-01-02 06:58:56] kozin писал(а): по сути если использовать ваш хал для f4by нужно создать конфиг платы, выбрать проц и расставить датчики по пинам?

    Именно. Свой файл платы (или #if) в AP_HAL/board и своя папка платы в AP_HAL_REVOMINI/wirish/boards с распиновкой камня. 

    [2017-01-02 06:58:56] kozin писал(а): еоретически ваш хал может вернуть возможность вернуть проект в изначальное "арду" русло, когда широкий круг лиц мало мальски знакомых с С++ мог дополнить проект своим функционалом

    Я как раз старался именно это и получить. Возврат к истокам, так сказать - ибо мне непонятно, зачем на борту нужен интерпретатор командной строки... 

    Проект начинался с Ардуины - и самым логичным развитием был бы переход на платформу Ардуино32. Вот только ээээ... слегка извращенная структура контроллера PX4, на коий и был первый 32-бит порт, оставила свой отпечаток на всем проекте. Более поздние ХАЛ, например Линукс, уже гораздо проще идеологически. Да и практически все датчики для PX4 являются особым случаем - AP_InertialSensor_PX4 вместо AP_InertialSensor_Invensense, и так далее.

    Единственное что пока есть один косяк - все работает при (не)оптимизации -O0,  а даже -Og ломает опрос MPU6000 :( Сейчас вроде выловил пострадавшие файлы, по мере свободного времени постараюсь поймать.

     

  • Аватар профиля kozin Алексей Козин в 7 мес., 2 нед. назад

    наверное пременные не объявлены volatile а обработка в прерываниях. лично мне других причин не приходит в голову

    шедулер на прерываниях?

  • Аватар профиля Night_Ghost Night_Ghost196 пунктов в 7 мес., 2 нед. назад

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

    6 файлов, требующих -O0 чтобы все работало, я сегодня выделил в TODO, но убей Бог лаптем не могу понять связь SPI и таймеров..

     

    [2017-01-02 12:23:43] kozin писал(а): шедулер на прерываниях?

    Естественно, прерывания от 7 таймера 8КГц, но все проходится по шагам и вроде правильно, в том числе и все интервалы - а из MPU читается мусор или нули.

← Форум группы   Все форумы К последней записи
Постов на странице:

Вы автоматически вступите в эту группу, когда ответите в теме.

Добавить ответ:

-
Рейтинг@Mail.ru