Pull to refresh
11
0
Мишка Рогачёв @mrogachev

Программист C++

Send message
Гарантия доставок для команд сделана на базе квитанций: mavlink.io/en/services/command.html. Но сама логика реализуется на стороне НСУ, мавлинк тут никаких ограничений не накладывает. В моём проекте вроде было 5 попыток доставить команду с ожиданием в 1 секунду.
И для заданий есть чуть более сложный механизм с подтверждениями: mavlink.io/en/services/mission.html
Я использую cmake, потому что большинство библиотек и инструментов, которыми я пользуюсь используют именно эту систему сборки. А касательно qmake, я не до конца понимаю чем он может быть удобнее. Qt Creator так же может открывать cmake проекты.
Qt Location по-умолчанию показывает копирайты OSM, просто скриншоты для статьи я обрезал.
Картинка


Спасибо за уточнения, если мой APM правда съест версию 2.0, вторую часть напишу на ней. Про генераторы подправил в статье. C++11 генератор интересно, можно посмотреть где-нибудь?)
Спасибо за советы, в следующей статье постараюсь учесть замечания.
В конечной архитектуре у меня есть класс Vehicle, который является моделью дрона, но наполнение его происходит всё равно через наследников AbstractHandler. Это упрощённый вариант паттерна цепочка обязанностей, реализованный через механизм сигналов и слотов Qt. Его я ввёл, чтобы избавиться от switch(message.msgid). Heartbeat тогда бы выглядел так:
void HeartbeatHandler::processMessage(const mavlink_message_t& message)
{
    if (message.msgid != MAVLINK_MSG_ID_HEARTBEAT) return;

    Vehicle* vehicle = m_vehicleService->requestVehicle(message.sysid);

    mavlink_heartbeat_t heartbeat;
    mavlink_msg_heartbeat_decode(&message, &heartbeat);

    vehicle->setType(::vehicleTypeFromMavLinkType(heartbeat.type));
    vehicle->setState(::vehicleStateFromMavLinkSystemStatus(heartbeat.system_status));
    // ...
}

К тому же, при такой реализации Vehicle не завязан на типы MAVLink, и в будущем можно добавить другой протокол. В следующей статье, как приведу код в порядок, нарисую диаграмму классов.

QMap использовал т.к. на прогнозируемым количестве элементов он должен быть быстрее QHash. Основывался на этой статье.
По ссылке главная страница, на сайте MAVLink нет биндинга к заголовкам. Но я добавил ссылки в конце статьи
Спасибо, поправил. На практике собираю самосборку в корпусе Skywalker X8 с Raspbery Pi3 * NAVIO2.
Видео полёта в ручном режиме

Information

Rating
Does not participate
Location
Зеленоград, Москва и Московская обл., Россия
Date of birth
Registered
Activity