2016-05-23 18 views
0

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?

Antwort

0

Von Robotis Stack Exchange Antwort,

Um die Nachrichtenrate zu ändern, ist der einfachste Weg, mit Mission Planner die SR_ * Parameter Wert zu ändern. Die maximale Rate beträgt 10Hz.
Zum Beispiel, um die ATTITUDE Nachrichtenraten zu ändern, die ich habe 10Hz wurde nur die SR_EXTRA1 Parameter ändern 10.

Weitere Informationen zu sein, über die Parameter jede Nachricht in ArduCopter Firmware siehe GCS_Mavlink.cpp Datei ändern.

0

Ich denke, Sie haben start_stop Feld verpasst. Das folgende Beispiel funktioniert.

 final msg_request_data_stream msg = new msg_request_data_stream(); 
     msg.req_message_rate = rate; 
     msg.req_stream_id = (short) streamId; 
     msg.target_component = (short)compID; 
     msg.target_system = (short)sysID; 

     /* 
          GCS_COMMON.cpp contains code that sends when value =1 
          and stop when value = 0 
          that is it. 
     */ 

     if (rate > 0) { 
      msg.start_stop = 1; 
     } else { 
      msg.start_stop = 0; 
     }