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

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

    Давным-давно, еще во времена АрдуКоптера 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в (требует кратковременного отключения питания)
    • ...
    • Множество мелких улучшений

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

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

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

     

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

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

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

  • Аватар профиля macrokernel macrokernel в 4 мес., 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_Ghost185 пунктов в 4 мес., 3 нед. назад

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

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

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

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

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

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

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

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

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

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

     

     

  • Аватар профиля Night_Ghost Night_Ghost185 пунктов в 4 мес., 3 нед. назад
    [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_Ghost185 пунктов в 4 мес., 3 нед. назад

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

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

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

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

     

     

     

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

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

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

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

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

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

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

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

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

     

     

  • Аватар профиля Night_Ghost Night_Ghost185 пунктов в 4 мес., 3 нед. назад
    [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 Алексей Козин в 4 мес., 3 нед. назад

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

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

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

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

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

     

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

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

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

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

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

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