Ich arbeite an einem Projekt, das das Mavlink-Protokoll (in C++) verwendet, um mit dem ArduPilotMega (2.6) zu kommunizieren.
Ich kann Nachrichten wie ATTITUDE zum Beispiel lesen. Die aktuelle Nachrichtenrate (für alle Nachrichten) ist 2Hz und ich möchte diese Rate erhöhen.
Ich fand heraus, dass ich wahrscheinlich MESSAGE_INTERVAL mit MAV_CMD_SET_MESSAGE_INTERVAL
setzen sollte, um es zu ändern.Ändern der Mavlink-Nachrichtenrate ArduPilotMega
Also meine Frage ist:
Wie sende ich diese Befehlsnachricht mit mavlink in C++?
Ich habe versucht, es mit dem Code unten, aber es hat nicht funktioniert. Ich denke, ich muss den oben erwähnten Befehl verwenden, aber ich weiß nicht wie.
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: Ich habe auch versucht, diesen Code unten, vielleicht bin ich es nicht das richtige System-ID oder Komponenten-ID geben.
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);
Vielleicht bin ich etwas fehlt, über den Unterschied zwischen target_system
, target_component
und sysid
, compid
. Ich probierte einige Werte für jeden, aber nichts funktionierte.
Gibt es eine ACK, die mir sagen kann, ob sie überhaupt den Befehl erhalten hat?