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

SovGVD
TRAHOMOTO:

Ничего не нужно

писали давно, что чето нужно, иначе данные пропадают периодически, да и к rx можно будет не подключать
мне всё лень было, но при полетах периодически “картинка” OSD пропадает и написано о том что ждет данных, при этом значек “сердцебиения” протокола мыргает стабильно
прошивка дефолтная, ибо extra упорно не хочет работать у меня почему то

DVE
Mark_Kharkov:

P.S. Это как раз тот случай, когда “обчинка не стоит выделки” и пытаться изобретать велосипед - неблагодарное занятие. На своих коптерах всегда взял за правило не ближе 10см силовая проводка от магнитометра мозгов коптера при токах до 30А (на 1н регуль/двиг) и не ближе 15см при токах в 100 и более ампер. Пока-что нормально и глюков не наблюдалось.

+100.

Сколько ни возился с проводкой, скруткой и пр, эффект минимален, возня того не стоит. Контроллер выносим вверх на стойках, и все, никаких проблем, дешево и сердито.

Sir_Alex
masteryoda:

Вопрос по 3.0.1, как сейчас в UserCode использовать Serial1? Суть в том, что мне нужно на Serial1 выводить определенную строку с частотой 10Гц. Как я понимаю в инициализации раньше достаточно было написать Serial1.begin(38400). Сейчас ошибка: error: ‘Serial1’ was not declared in this scope Как быть?

С сериал1 есть небольшая трудность. Дело в том, что HAL прячет от нас реализацию Сериал порта. Т.е. вся работа должна идти через hal. Но Ардукоптеровцы предусмотрели только три порта 0, 2, 3 ((

Я посмотрю, можно ли добавить еще один сериал в HAL…

Shuricus:

А все таки как можно выводить расход батареи в mah а не в процентах в минимОСД?

Ну по идее, AC рассчитывает mAh, но понимает ли это OSD - я не в курсе, у мну пока нет OSD. Возможно надо например обновить прошивку или через программу настройки, сказать показывать не % а ток…

Shuricus

Спасибо Алекс. Удалил пост, потому что нашел - в пререлизе это теперь переключается в закладке Конфиг!

TRAHOMOTO
SovGVD:

писали давно, что чето нужно, иначе данные пропадают периодически, да и к rx можно будет не подключать
мне всё лень было, но при полетах периодически “картинка” OSD пропадает и написано о том что ждет данных, при этом значек “сердцебиения” протокола мыргает стабильно
прошивка дефолтная, ибо extra упорно не хочет работать у меня почему то

Месяца три назад перечитывал эту тему с первой страницы 2 дня и если честно не припоминаю (может и упустил) ничего похожего. Я свой ОСД брал на dx.com (v 0.1), запаял перемычки для питания от 5В, прошивал minimosd-extra через донгл на чипе CP2103 нажимая перед прошивкой Reset пальцем 😃. Далее залил шрифты, немного подвигал показания и потом подключил так как описал, игрался денек другой … показания не пропадали 😃. НО! вполне возможно что мне повезло.

SovGVD

Вот extra у меня никак не захотела работать почему то, заливал тоже в 0.1 с запаянными перемычками (брал на али), залил шрифты, настроил, подключил, но никакие показания не менялись на экране (например наклон коптера никак не отражался на авиагоризонте)… и заливал через arduino ide, мне надо было скорость порта поменять.
Забил, влил обычную версию, до сих пор работает, но со сбоями, уже даже привык и не напрягает =) Скоро ардуфлаер будет, попробую с ним, хотя на 99.9% уверен что проблема в OSD где то, т.к. пират то mavlink стабильно отдает, да и куча версий уже поменялась, а osd всё так же тупит.
А тут где то проскакивала толи ссылка, то ли еще чего, на описание того что надо в настройках прописывать, для гарантированной работы.

masteryoda
Sir_Alex:

С сериал1 есть небольшая трудность. Дело в том, что HAL прячет от нас реализацию Сериал порта. Т.е. вся работа должна идти через hal. Но Ардукоптеровцы предусмотрели только три порта 0, 2, 3 ((

Я посмотрю, можно ли добавить еще один сериал в HAL…

Тогда, как реализовать задачу иным путем. В принципе порт можно использовать и другой, например 3, второй занят GPS. На 2.8 я на основе кода для Ремзиби ОСД решал проблему. Сейчас все стало сложнее для меня. Ткните пальцем, плиз.

limon_spb
pilot01:

На хабре статья была. Там парень сигналы обычной логики на 40м отправлял и успешно принимал. А здесь (General Purpose Logic - ведь оно?) отмечено всего пол метра…

TRAHOMOTO:

…Я сделал так же.

Спасибо!

Sir_Alex
masteryoda:

Тогда, как реализовать задачу иным путем. В принципе порт можно использовать и другой, например 3, второй занят GPS. На 2.8 я на основе кода для Ремзиби ОСД решал проблему. Сейчас все стало сложнее для меня. Ткните пальцем, плиз.

Скиньте мне свой код, я посмотрю как его прикрутить.

masteryoda

Ничего заумного, просто строка о состоянии коптера:

void userhook_init()
{
    // put your initialisation code here
    // this will be called once at start-up
    Serial1.begin(38400);
}

void userhook_MediumLoop()
{
    // put your 10Hz code here
  Serial1.print("$LED,");
  Serial1.print(current_loc.alt/100,DEC);
  Serial1.print(",");
  Serial1.print(control_mode);
  Serial1.print(",");
  Serial1.print(ahrs.roll_sensor/100,DEC);
  Serial1.print(",");
  Serial1.print(ahrs.pitch_sensor/100,DEC);
  Serial1.print(",");
  Serial1.print(motors.armed());
  Serial1.println("#");
}
pilot01
SovGVD:

Вот extra у меня никак не захотела работать почему то, заливал тоже в 0.1 с запаянными перемычками (брал на али), залил шрифты, настроил, подключил, но никакие показания не менялись на экране (например наклон коптера никак не отражался на авиагоризонте)… и заливал через arduino ide, мне надо было скорость порта поменять.
Забил, влил обычную версию, до сих пор работает, но со сбоями, уже даже привык и не напрягает =) Скоро ардуфлаер будет, попробую с ним, хотя на 99.9% уверен что проблема в OSD где то, т.к. пират то mavlink стабильно отдает, да и куча версий уже поменялась, а osd всё так же тупит.
А тут где то проскакивала толи ссылка, то ли еще чего, на описание того что надо в настройках прописывать, для гарантированной работы.

Такая же фигня была пока где-то в опциях планера (Enable OSD) не выбрал и сразу все заработало (нашел вроде тут MissionPlanner -> Hardware Options кнопка “Enable Telemetry”)

limon_spb:

На хабре статья была. Там парень сигналы обычной логики на 40м отправлял и успешно принимал. А здесь (General Purpose Logic - ведь оно?) отмечено всего пол метра…

Спасибо!

Не думаю что тот парень со скоростью 10 Мбит в сек кнопки нажимал =) тут важна частота (скорость обращения) и характеристики кабеля (pF/m пикофарад на метр).

Sir_Alex:

С сериал1 есть небольшая трудность. Дело в том, что HAL прячет от нас реализацию Сериал порта. Т.е. вся работа должна идти через hal. Но Ардукоптеровцы предусмотрели только три порта 0, 2, 3 ((

Я посмотрю, можно ли добавить еще один сериал в HAL…

Ну по идее, AC рассчитывает mAh, но понимает ли это OSD - я не в курсе, у мну пока нет OSD. Возможно надо например обновить прошивку или через программу настройки, сказать показывать не % а ток…

Можно

Летаю на версии MinimOSD-Extra_Copter_Pre-release_2.4_r682.hex в настройках OSD (CT Tool for MinimOSD Extra 2.3.0.8 Pre Release r676.zip) есть опция выбора % или mah.
Правда MinimOSD v 1.1 c 3drobotics незнаю как с остальными дела

SergDoc
Sir_Alex:

Но Ардукоптеровцы предусмотрели только три порта 0, 2, 3 ((

это тоже эфемерные названия, где-то есть настройка, какой из портов 0, какой 2, а какой 3, это из-за px4 там первый порт занят осью, а остальные так же настраиваемые в зависимости от конфига там и usart5 может быть 2-м или 3-м…

Sir_Alex
SergDoc:

это тоже эфемерные названия, где-то есть настройка, какой из портов 0, какой 2, а какой 3, это из-за px4 там первый порт занят осью, а остальные так же настраиваемые в зависимости от конфига там и usart5 может быть 2-м или 3-м…

Да я в курсе, но вопрос в том, как завести 4й порт ))) Базовый класс HAL подразумевает только 3 порта.

SergDoc

не тут?

#ifndef __AP_HAL_HAL_H__
#define __AP_HAL_HAL_H__

#include "AP_HAL_Namespace.h"

#include "../AP_HAL/UARTDriver.h"
#include "../AP_HAL/SPIDriver.h"
#include "../AP_HAL/AnalogIn.h"
#include "../AP_HAL/Storage.h"
#include "../AP_HAL/Console.h"
#include "../AP_HAL/GPIO.h"
#include "../AP_HAL/RCInput.h"
#include "../AP_HAL/RCOutput.h"

class AP_HAL::HAL {
public:
    HAL(AP_HAL::UARTDriver* _uartA,
        AP_HAL::UARTDriver* _uartB,
        AP_HAL::UARTDriver* _uartC,
        AP_HAL::I2CDriver*  _i2c,
        AP_HAL::SPIDeviceManager* _spi,
        AP_HAL::AnalogIn*   _analogin,
        AP_HAL::Storage*    _storage,
        AP_HAL::ConsoleDriver* _console,
        AP_HAL::GPIO*       _gpio,
        AP_HAL::RCInput*    _rcin,
        AP_HAL::RCOutput*   _rcout,
        AP_HAL::Scheduler*  _scheduler,
        AP_HAL::Util*       _util)
        :
        uartA(_uartA),
        uartB(_uartB),
        uartC(_uartC),
        i2c(_i2c),
        spi(_spi),
        analogin(_analogin),
        storage(_storage),
        console(_console),
        gpio(_gpio),
        rcin(_rcin),
        rcout(_rcout),
        scheduler(_scheduler),
        util(_util)
    {}

    virtual void init(int argc, char * const argv[]) const = 0;

    AP_HAL::UARTDriver* uartA;
    AP_HAL::UARTDriver* uartB;
    AP_HAL::UARTDriver* uartC;
    AP_HAL::I2CDriver*  i2c;
    AP_HAL::SPIDeviceManager* spi;
    AP_HAL::AnalogIn*   analogin;
    AP_HAL::Storage*    storage;
    AP_HAL::ConsoleDriver* console;
    AP_HAL::GPIO*       gpio;
    AP_HAL::RCInput*    rcin;
    AP_HAL::RCOutput*   rcout;
    AP_HAL::Scheduler*  scheduler;
    AP_HAL::Util*       util;
};

#endif // __AP_HAL_HAL_H__

    AP_HAL::UARTDriver* uartA;
    AP_HAL::UARTDriver* uartB;
    AP_HAL::UARTDriver* uartC;
    AP_HAL::UARTDriver* uartD;

до самого арду ещё не долез, у нас пока с nuttx напряги 😦

kren-DEL
kren-DEL:

пробовал повторить сбой FS

Что скажите, Sir Alex? Это нормальная работа FS?

Sir_Alex
kren-DEL:

Что скажите, Sir Alex? Это нормальная работа FS?

Да, это нормально. Отключить RTL после сбоя можно только передернув режим (как бы мы говорим что все ОК, я у руля). А то что потом сработал дизарм - то же правильно. На земле, срабатывает LAND и тут же дизарм, т.к. коптер уже на земле. Короче, все как и задумано в ArduCopter, ну можно еще почитать у них на сайте, про ньюансы FS.

masteryoda

Sir Alex, как дела с портами? Есть ли идеи? Мне 1 порт не принципиален, можно и 3. Только в какую сторону копать?

SovGVD
masteryoda:

Только в какую сторону копать?

А нельзя брать данные из MAVlink протокола?

Sir_Alex
masteryoda:

Sir Alex, как дела с портами? Есть ли идеи? Мне 1 порт не принципиален, можно и 3. Только в какую сторону копать?

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

masteryoda
Sir_Alex:

Вечером сегодня попробую.

Спасибо. Буду ждать результата.

SovGVD:

А нельзя брать данные из MAVlink протокола?

Не могу прочитать порт. 1 порт молчит. 3 порт на нестандартной скорости, похоже, работает. А скорость в коде найти не могу. 2 порт занят GPS. Я в новом коде вообще заблудился.

SovGVD

на 0 порту будет MAVlink на 115xxx, на 3 тот же MAVlink должен быть на 57600
но просто так отдавать не будет данные, надо какой то запрос отправлять сперва, тогда отдаст всё что надо… не разбирался в MAVlink, но можете глянуть код minimOSD, там 100% рабочий парсер протокола со всеми нужными запросами