PIXHAWK PX4 Autopilot еще одна летающая железка

SovGVD

Слил 3.3.2 сорцы и поправил код под NMEA GPS/ГЛОНАСС. Если кому надо - выложу сборку под вашу раму, собирать всё (tri,quad,hexa,y6 и прочее) и под все контроллеры (pix* и px4*) пока лениво (хотя надо бы скрипт написать на досуге, чую это на долго).

Алексей, а вы оформляли патч или еще чего, чтобы фиксы для NMEA в ветку вставили?

alexeykozin
SovGVD:

Алексей, а вы оформляли патч или еще чего, чтобы фиксы для NMEA в ветку вставили?

да. и меня вежливо но послали. походу нехотят поддерживать глонасс.
сейчас пишу свою версию ардукоптера (под старый добрый апм) выкинул все протоколы кроме нмеа. сделал переинициализацию бауда жпс на 115200
тоесть жпсу на скорости 38400 посылается команда на смену бауда. затем апм переходит на 115200 и включет обновление с частотой 10 гц. за счет этого уменьшается запаздывание жпс данных и (пока визуально) вроде бы есть весьма позитвные сдвиги.

попутно пытаемся решить проблему воронки при ошибке компаса…
про наши опыты тут …apmcopter.ru/…/sozdanie-sobstvennoj-proshivki-ard…

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

SovGVD
alexeykozin:

да. и меня вежливо но послали. походу нехотят поддерживать глонасс.

Фигово… Каждый раз пересобирать прошивку так себе увлечение =) Да еще если Olli со storm32 скажет что надо код дописывать - вообще неведомое нечто будет.

Кстати залил в свой пикслайт 3.3.2 патченую: 9 спутников на окне, горизонт крутится, т.е. видимо работает.

Zodiak-vesi
SovGVD:

Понятия не имею, если там есть AUX выходы, то можно через PWM, если у вас контроллер alexmos (код есть, тестов не видел) или storm32 (работает 100%), то через любой доступный Serial управление можно сделать.

Спасибо! Я только начал собирать гексу на раме tarot 690, сейчас выбираю контроллер, не совсем ещё разобрался со всеми тонкостями(((. Подвес смотрю в сторону Tarot 2D или им подобные. Может подскажите связку контроллер + подвес?

alexeykozin

и еще случилась совсем невероятная фиговина. удалось “с места сдвинуть скалу”.
раньше сервис медиатека максимум мог скомпилить прошивку только с измененными настроками по дефолту.
ругался с ними что нет команды исключить из решения спутники низкого восхождения. изза неравномерности атмосферы именно они мешают точной навигации.
непрошло и полгода мне прислали на тест прошиву которая новой пмтк командой позволяет определить угол ниже которого спутники не принимат в решение.
немного потестил дома. команда вроде работает. но есть и косяки например если задать 60 градусов то пишет что в решении 1 спутник и есть 3д фикс…
отписался им, но пока без ответа

SovGVD
Zodiak-vesi:

Может подскажите связку контроллер + подвес?

ну pixhawk + storm32 (например на goodluckbuy за примерно 70$ 3х осевой как раз со storm32)
из плюшек - можно будет заливать скрипты, например чтобы делать панораму в воздухе автоматически, делать слежение камеры за трекеров и в будущем (крайне надеюсь) рулить шутером для камер Sony, Panasonic, Nikon, Canon

Zodiak-vesi
SovGVD:

ну pixhawk + storm32 (например на goodluckbuy за примерно 70$ 3х осевой как раз со storm32)
из плюшек - можно будет заливать скрипты, например чтобы делать панораму в воздухе автоматически, делать слежение камеры за трекеров и в будущем (крайне надеюсь) рулить шутером для камер Sony, Panasonic, Nikon, Canon

Ткните в ссылочку на 3х осевой со storm32!? Типа такого ru.aliexpress.com/item/…/32364090619.html ? Сам в сторону PIXHAWK смотрю, мозможности поражают)))

SovGVD
Zodiak-vesi:

Ткните в ссылочку на 3х осевой со storm32!?

на сайте goodluckbuy вбейте в поиск “3-Axis Brushless Gimbal Camera Mount with 32bit Storm32 Controller for Gopro 3 4 FPV Black” он там будет за 70.49
ссылу не дам - меня чето за ссылки банить любят на разных сайта =)

Zodiak-vesi
SovGVD:

на сайте goodluckbuy вбейте в поиск “3-Axis Brushless Gimbal Camera Mount with 32bit Storm32 Controller for Gopro 3 4 FPV Black” он там будет за 70.49
ссылу не дам - меня чето за ссылки банить любят на разных сайта =)

Спасибо огромное!

lokanaft
alexeykozin:

они мешают точной навигации

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

alexeykozin
lokanaft:

Чем 25 метров измерить от веток деревьев?

заказал себе лидар - изучу - отпишусь

lokanaft

Забыл сразу про юсб модуль px4lite:

Его корпус весит как обе платы вместе)

ions

Так он тоже алюминиевый? Николай, вы его пробовали подключать к компьютеру? Еще интересует, сколько весит этот комплект реально?

SovGVD

Взываю ковыряющих код.
Задача: заставить контроллер подвеса Storm32 не только крутить “головой”, но и активировать спукс его штатными средствами при подключении к PixHawk через UART. (copter.ardupilot.com/wiki/common-storm32-gimbal/)
Возможности: Storm32 понимает 2 MAVLink команды на спуск (MAVLINK_MSG_ID_DIGICAM_CONTROL и MAV_CMD_DO_DIGICAM_CONTROL, котовую должен кидать контроллер при любой активации спуска)
Тесты: используем скрипт, который крутит головой и нажимает спуск для создания панорамы, скрипт загужаем через Mission Planner из соотвествующей ветки

  1. контроллер подвеса подключен через UART и FTDI адаптер к ПК. Скрипт выполняется, спуск активируется, фотографии делаются.
  2. контроллер подвеса подключен через UART к Pixhawk с прошивкой 3.3.2, в планере вылезает окошко с выбором MAVLink устройства, выбирают hexacopter-1. Скрипт выполняется, спуск не активируется, фотографии соотвественно не делаются.
  3. контроллер подвеса подключен через UART к Pixhawk с прошивкой 3.3.2, в планере вылезает окошко с выбором MAVLink устройства, выбираю gimbal. Скрипт выполняется, спуск активируется, фотографии делаются.

OlliW пишет что косяк в ArduCopter, Ренди пишет что OlliW разбирается со storm32, но похоже все заняты другими делами =)

(далее могу путаться в терминах ардукоптеровых, времени нет разбираться и тестить, прошу понять и исправить)
Код работы со спуском (github.com/diydrones/ardupilot/…/AP_Camera.cpp) отправляет верную команду MAV_CMD_DO_DIGICAM_CONTROL на выполнение всем mavlink устройствам в роутинге: GCS_MAVLINK::send_to_components(). Затем в github.com/diydrones/…/MAVLink_routing.cpp всё это добро проходит почти на все устройсва из массива route:

void MAVLink_routing::send_to_components(const mavlink_message_t* msg)
{
    bool sent_to_chan[MAVLINK_COMM_NUM_BUFFERS];
    memset(sent_to_chan, 0, sizeof(sent_to_chan));

    // check learned routes
    for (uint8_t i=0; i<num_routes; i++) {
        if ((routes[i].sysid == mavlink_system.sysid) && !sent_to_chan[routes[i].channel]) {
            if (comm_get_txspace(routes[i].channel) >= ((uint16_t)msg->len) + MAVLINK_NUM_NON_PAYLOAD_BYTES) {
...
                _mavlink_resend_uart(routes[i].channel, msg);
                sent_to_chan[routes[i].channel] = true;
            }
        }
    }
}

Предполагаю что где то в условиях не проходит проверка подвеса по условиям и ему MAV_CMD_DO_DIGICAM_CONTROL не уходит.

Что посоветуют ковыряющие код?

UPD: Что такое routes[i].sysid == mavlink_system.sysid - это то что выбирает MissionPlanner?

alexeykozin
SovGVD:

в планере вылезает окошко с выбором MAVLink устройства, выбирают hexacopter-1.

вы посылаете мавлинк команду не гимбалу а коптеру. коптеру пофиг. он ведь не гимбал, зачем ему читать из сети чужие пакеты

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

SovGVD

логично =( тогда совершенно не понятно как например в миссии задать каманду именно гимбалу и почему команда не шлется гимбалу при шутере от пульта (когда servo или relay), хотя там как раз продкастная рассылка по идее идет на все устройва из массива routed.

У меня предположение что строка routes[i].sysid == mavlink_system.sysid как раз и не пропускает команду дальше коптера, похоже надо искать как это всё дебажить… или ftdi в разрыв провода на гимбал ставить и слушать какие команды лезут.

А вообще в AP_Mount… идет рассылка конкретно подвесу, вот как бы это всё сделать внутри кода шутера или рассылки, чтобы определенная команда улетала любой ценой в гимбал.

Попробую завтра дописать что-то вроде:

if ((routes[i].sysid == mavlink_system.sysid || (routes[i].mavtype ==MAV_TYPE_GIMBAL && msg->command==MAV_CMD_DO_DIGICAM_CONTROL)) && !sent_to_chan[routes[i].channel]) {

чтобы игорировалось условие, если гимбал и шутер

alexeykozin

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

SovGVD

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

// create command long mavlink message
        mavlink_command_long_t cmd_msg;
        memset(&cmd_msg, 0, sizeof(cmd_msg));
        cmd_msg.command = MAV_CMD_DO_DIGICAM_CONTROL;
        cmd_msg.param5 = 1;
        // create message
        mavlink_message_t msg;
        mavlink_msg_command_long_encode(0, 0, &msg, &cmd_msg);

        // forward to all components
        GCS_MAVLINK::send_to_components(&msg);

вся суть в cmd_msg, но не пойму как оно переходить в msg и переходит ли вообще? mavlink_msg_command_long_encode в переменную по ссылке (в сях & по ссылке? или что-то другое?) ничего не пихает, только делает return, т.е. вроде как вывод mavlink_msg_command_long_encode надо чему то присваивать?

UPD: там какая то магиня с копированием памяти, команды cmd_msg перетекают в msg… похоже на какогое наследие старого кода, чтобы не ломать совместимость

SovGVD

Ладно, всё фигня, одни неведомые и неработающие догадки…

Костыль за который должно быть стыдно, но работает:

AP_Camera.h в private секцию:

    bool _gimbalcam_search;              // try to search gimbal
    bool _gimbalcam_initialised;              // true once the driver has been initialised
    uint8_t _gimbalcam_sysid;                 // sysid of gimbal
    uint8_t _gimbalcam_compid;                // component id of gimbal
    mavlink_channel_t _gimbalcam_chan;        // mavlink channel used to communicate with gimbal.

AP_Camera.cpp в trigger_pic после GCS_MAVLINK::send_to_components(&msg);:

    if (!_gimbalcam_search) {
        _gimbalcam_search=true;
        if (GCS_MAVLINK::find_by_mavtype(MAV_TYPE_GIMBAL, _gimbalcam_sysid, _gimbalcam_compid, _gimbalcam_chan)) {
            _gimbalcam_initialised=true;
        }
    }

    if (_gimbalcam_initialised) {
        mavlink_msg_command_long_send(_gimbalcam_chan,
                                  _gimbalcam_sysid,
                                  _gimbalcam_compid,
                                  MAV_CMD_DO_DIGICAM_CONTROL,
                                  0,
                                  0,
                                  0,
                                  0,
                                  0, 1, 0,
                                  0);
    }
Конструктор

Всем добрый день!

Не могу скачать логи с карточки при подключенной телеметрии.

Смотрю логи вынимая карточку из контроллера.

Как можно скачать логи по телеметрии на комп?