Я работаю над проектом, который использует протокол Mavlink (в C++) для связи с ArduPilotMega (2.6).
Я могу читать сообщения, например ATTITUDE. Текущая скорость передачи сообщений (для всех сообщений) составляет 2 Гц, и я хотел бы увеличить эту скорость.
Я выяснил, что я должен, вероятно, установить MESSAGE_INTERVAL, используя MAV_CMD_SET_MESSAGE_INTERVAL
, чтобы его изменить.Изменение скорости сообщений Mavlink ArduPilotMega
Так что мой вопрос:
Как отправить это сообщение команды с помощью mavlink в C++?
Я попытался сделать это, используя следующий код, но он не сработал. Думаю, мне нужно использовать команду, о которой я упоминал выше, но я не знаю, как это сделать.
mavlink_message_t command;
mavlink_message_interval_t interval;
interval.interval_us = 100000;
interval.message_id = 30;
mavlink_msg_message_interval_encode(255, 200, &command, &interval);
p_sensorsPort->write_message(command);
Update: Я также попробовал этот код, приведенный ниже, может быть, я не даю ему право идентификатор системы или компонента идентификатор.
mavlink_message_t command;
mavlink_command_long_t interval;
interval.param1 = MAVLINK_MSG_ID_ATTITUDE;
interval.param2 = 100000;
interval.command = MAV_CMD_SET_MESSAGE_INTERVAL;
interval.target_system = 0;
interval.target_component = 0;
mavlink_msg_command_long_encode(255, 0, &command, &interval);
p_sensorsPort->write_message(command);
Может быть, я что-то отсутствует о разнице между target_system
, target_component
и sysid
, compid
. Я пробовал несколько значений для каждого, но ничего не работало.
Есть ли какой-нибудь ACK, который сможет мне сказать, даже если он получил команду?