From a63e8cc1498e79c634f3d8d0d1ef7261e18263d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beat=20K=C3=BCng?= Date: Fri, 27 Nov 2020 08:48:29 +0100 Subject: [PATCH] fix mavlink: ensure vehicle_command topic exists If the first publisher publishes multiple commands right after each other (e.g. on 'commander takeoff'), mavlink would miss the first and print an error like 'vehicle_command lost, generation 0 -> 2'. This is due to a recent uORB behavior change. --- src/modules/mavlink/mavlink_main.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/modules/mavlink/mavlink_main.cpp b/src/modules/mavlink/mavlink_main.cpp index c3dbb1aa62..837930bc04 100644 --- a/src/modules/mavlink/mavlink_main.cpp +++ b/src/modules/mavlink/mavlink_main.cpp @@ -2146,6 +2146,9 @@ Mavlink::task_main(int argc, char *argv[]) uORB::Subscription parameter_update_sub{ORB_ID(parameter_update)}; uORB::Subscription cmd_sub{ORB_ID(vehicle_command)}; + // ensure topic exists, otherwise we might lose first queued commands (leading to printf error's below) + orb_advertise_queue(ORB_ID(vehicle_command), nullptr, vehicle_command_s::ORB_QUEUE_LENGTH); + cmd_sub.subscribe(); uORB::Subscription status_sub{ORB_ID(vehicle_status)}; uORB::Subscription ack_sub{ORB_ID(vehicle_command_ack)};