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

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% рабочий парсер протокола со всеми нужными запросами

Sir_Alex
SovGVD:

но просто так отдавать не будет данные, надо какой то запрос отправлять сперва, тогда отдаст всё что надо…

Можно сделать так, что бы параметры отдавались после подачи питания, это уже много где описывалось, в разрезе minimOSD. Надо крутить параметры SR3_XXX

По сути, в MAVlink - вы подписываетесь на пакеты информации. Скажем вы можете сказать, присылать мне пакет с позицией коптера (GPS) с частотой 5Гц. А данные положения INS - с частотой 1Гц. Именно поэтому (потому что никто не сделал запрос данных) - и ничего не работает по умолчанию. Только Heartbeat будет присутствовать на Serial3.

masteryoda

Ага! Щас курю код minimosd-extra. А на какой скорости работает Serial3? Я не могу с помощью FTDI+Arduino’вского монитора порта увидеть heartbeat. Мусор сыпется.

Sir_Alex
masteryoda:

heartbeat

Он и выглядит мусором, т.к. протокол бинарный. Скорость по умолчанию 57600.

masteryoda

Мда, посмотрел коды, почитал сайт по MAVlink`у, вещь конечно, сильная, но для моих целей черезчур сложная (см. код выше). А в 3.0.1 RemzibiOSD поддерживается? Там свой протокол, я его переделывал под свои нужды.

Shuricus

А в V3.0.1 R1 НЕТУ #define BOOTLOADER_BUGFIX "234fs34567hf ???
Или я не туда смотрю?

Sir_Alex

нету
Есть только в R2, но если почитать тему выше, то я описывал как эбойти этот баг ))

Shuricus

Перезалил бутлоадер из arduino 1.0.5. Больше проблем нет.

masteryoda

Похоже моя задачка останется без решения… Тогда такой вариант, отключить передачу МАВлинка на Сериал3 и писать туда свою строчку. Такое можно реализовать?
И может кто-нибудь ссылочкой поделиться на ресурс по МАВлинку где разжевывается все по полочкам, не могу найти кроме qgroundcontrol.org.

Sir_Alex
masteryoda:

Похоже моя задачка останется без решения… Тогда такой вариант, отключить передачу МАВлинка на Сериал3 и писать туда свою строчку.

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