ArduCopter Mega: порт на обычную Arduino (тестим)

Sir_Alex

Все больше возникает вопросов с модификациями прошивки под разные платы и датчики.

У кого есть идеи как сделать прошивальщик плат, в котором можно будет выбрать параметры, например PPM_SUM или PWM, выбрать тип платы, включить/отключить COPTER_LED и т.п., нажать кнопку, получить прошивку с сервера и залить ее в плату.

Как я это вижу:

  1. Человек запускает программу (вероятно на Java)
  2. Выбирает тип платы и другие параметры, сохраняет конфигурацию под каким нибудь именем (что бы потом заново не выбирать)
  3. Отправляется запрос серверу, сервер смотрит есть ли такая прошивка (по набору параметров). Если есть, отдает готовый hex, если нет, запускает компиляцию.
  4. Полученный Hex заливается в плату и сохраняется локально для последующей прошивки.

З.Ы. Если кто то хочет реализовать такую программу, милости просим ))

SergDoc

а я вижу добавление этих функций в cli или как там оно у вас называется - изменяемые параметры через терминал 😃

Sir_Alex
SergDoc:

а я вижу добавление этих функций в cli или как там оно у вас называется - изменяемые параметры через терминал

Не все так просто, тянуть все вариации в коде невозможно - просто тупо нет памяти. Поэтому фичи надо дефайнами включать/отключать, а с этим у людей проблемы возникают. Ну и кроме того, в этом случае можно обойтись без Arduino-IDE.

SovGVD:

Имя Google Chrome/Chromium можно без java кроссплатформенно заливать habrahabr.ru/company/apps4all/blog/193876/

Там даже из Firefox можно. Но это немного не то, тем более, сейчас используется немного модифицированный Arduino IDE…

ООО… У них исходники в открытом доступе, надо поковырятся )))

SergDoc
Sir_Alex:

просто тупо нет памяти.

ну мне есть где размахнуться 😃

SovGVD

Почему не то? На сайте выбирать что надо, собирать на стороне сервера (при необходимости) и тут же через плагин с сайта заливать в ардуинку hex. Это в общих чертах, наверняка будут подводные камни.
Вообще с тех пор как появилась работа с serial в браузере (по ссылке там плагин, хз чего именно он делает и как), можно и mission planner сделать 100% кроссплатформеным (т.е. везде где запускается браузер, там будет работать и прошивальщик и конфигуратор)… где то даже видел такую штуку и имхо в этой же ветке.

Sir_Alex

Меня больше интересует вопрос, как организовать компиляцию на сервере. Например в указанном выше CodeBender.cc, вся работа ведется из PHP, т.е. эмулируется (ну или делается то же самое) MAKE. Так вот, делать так же или тупо менять параметры в конфиге и запускать make…???

SovGVD

в сорцах ардукоптера есть человеческая сборка через make, имхо для каждого запроса просто конфиг создавать и компилить (ну и складировать уже готовые сборки)

Ну и я всетаки предлагаю после релиза сразу собирать все варианты коптерные, а не по запросу.

Sir_Alex
SovGVD:

в сорцах ардукоптера есть человеческая сборка через make, имхо для каждого запроса просто конфиг создавать и компилить (ну и складировать уже готовые сборки) Ну и я всетаки предлагаю после релиза сразу собирать все варианты коптерные, а не по запросу.

Да, конечно, я в курсе что есть make, товарищь Paku его под винду даже запилил, тока оно никому не надо в общем то.

Просто я боюсь что будет очень много вариаций прошивок… лвдно, вечерком подумаю, как лучше сделать.

SovGVD

А в оригинальном ардукоптере как сделано? Там mission planner собирает прошивки? Или уже готовые собранные (вариантов конечно поменьше, только различные рамы и всякие rover/heli).

kren-DEL
Sir_Alex:

Меня больше интересует вопрос, как организовать компиляцию на сервере.

есть вариант по крону(планировщику) запускать сборку из дериктории, например, затем присылать юзверю ссылку на готовую прошивку, хранить её на сервере неделю, а затем удалять, есть наработки, только использовал для управления vlc сервером, кодировал потоки видео с камер наблюдения и был сделан web интерфейс для рестарта процесса перекодировки, если вдруг всё заткнулось, если чего - пишите - могу переделать, есть свой физ. сервер с фряхой, можем поэксперементировать:)

blind_oracle

Всё таки собрать сразу все таргеты будет лучше, чем компилсять на сервере по запросу, это еще и намёк на ДДОС.
Сделать несколько make-таргетов, обернуть в конфиге #ifdef-ами нужные параметры и вроде всё.
Сами таргеты можно генерировать вложенными циклами и именовать соответственно, не так уж и много там вариантов.
По какому-нибудь make all будет собирать все таргеты, как в simonk 😃

По сабжу:
Алексей, спасибо за прошивку, сегодня решил попробовать перейти с 2.8.
Всё вроде откалибровал, смущает только что при калибровке компаса оффсет по X большой получается, в диапазоне 140-160.
По другим осям не более 10.
Это у меня какие-то проблемы с компасом или и так сойдёт? Арду советует отклонения не более 150.

Компассмот при этом выдает 36% при полном газе.

Sir_Alex
blind_oracle:

Всё таки собрать сразу все таргеты будет лучше, чем компилсять на сервере по запросу, это еще и намёк на ДДОС. Сделать несколько make-таргетов, обернуть в конфиге #ifdef-ами нужные параметры и вроде всё. Сами таргеты можно генерировать вложенными циклами и именовать соответственно, не так уж и много там вариантов. По какому-нибудь make all будет собирать все таргеты, как в simonk

Такой вариант уже работает. Проблема в том, что если собирать все вариации, будет очень много прошивок. Смотрите, берем только одну плату, криус v2. Получается 7 типов рам(квад, три, окта… и т.п.). Плюс три варианта PPM SUM (PL1, A8, PWM). Плюс микс каналов управления, еще штук 6. Итого: 7*3*6 = 126 вариантов. Тоже самое под Crius v1 - но уже без логирования. Уже 252 варианта. И это только для двух плат!

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

blind_oracle

В таком случае удобнее наверное будет сделать сборку по крону, как выше советовали.

  1. Человек заходит на сайт по логину-паролю
  2. Крыжиками и дропдаун-боксами выбирает нужные ему фичи и жмет кнопку
  3. Скрипт, запускающийся раз в 5 минут, глядит в какую-нибудь табличку, куда складываются задания на сборку с параметрами, и выполняет билд.
  4. Хекс с прошивкой уходит на почту юзеру

Попробую сегодня набросать пример.

blind_oracle

Кстати, а тип рамы имеет смысл выбирать при сборке? Он же меняется в планнере без проблем.

SovGVD
blind_oracle:

Он же меняется в планнере без проблем.

меняется только X/+/v/h, а вот quad/hex/octa и т.д. в оригинале так же выбираются из списка

blind_oracle
blind_oracle:

Попробую сегодня набросать пример.

Так, в первом приближении что-то получилось: artek.novg.net/mpng/
Оно на домашнем сервере, так что не сильно его мучить если что 😃

Что делает:

  1. Данные из формы кладёт в mysql-базу
  2. Скрипт запускается раз в 2 минуты, берёт еще не собранный заказ из базы, запускает make с параметрами соответственно запросу в таблице
  3. Если сборка прошла успешно, то присылает билд лог и .hex в аттаче. Если ошибки, то присылает просто билд лог без файла
  4. Помечает заказ в базе как выполненый ОК или с ошибкой, второй раз к нему не возвращается

Для сборки MPNG под линуксом понадобилось подправить несколько мэйкфайлов чтобы добавить туда таргет mpng с его HALом и передачу дефайнов в сборку.
Ну и сами файлы с настройками тоже конечно (APM_Config.h, RCInput_MPNG.cpp).

Алексей, если так подходит, то я скину все изменённые файлы и скрипты.

ЗЫ:
Саму прошивку я еще не проверял, но собирается вроде без проблем особых.

SovGVD
ReM:

И вот что получилось…

вполне точно получилось =)