2016-05-23 65 views
0

我正在使用Mavlink協議(使用C++)與ArduPilotMega(2.6)進行通信的項目。
例如,我可以讀取消息,例如ATTITUDE。目前的消息速率(所有消息)是2Hz,我想提高這個速度。
我發現我應該設置MESSAGE_INTERVAL使用MAV_CMD_SET_MESSAGE_INTERVAL爲了改變它。更改Mavlink消息速率ArduPilotMega

所以我的問題是:
如何使用C++中的mavlink發送此命令消息?

我嘗試使用下面的代碼,但它沒有奏效。我想我必須使用上面提到的命令,但我不知道如何。

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); 

更新:我也試過下面這段代碼,也許我不會給它正確的系統ID或組件ID。

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_systemtarget_componentsysidcompid之間的差異。我嘗試了幾個值,但沒有任何工作。
是否有任何確認能夠告訴我它是否得到了命令?

回答

0

Robotis Stack Exchange答案,

爲了更改消息率,最簡單的方法是改變使用Mission PlannerSR_ *參數值。最大速率是10Hz。
例如,在爲了改變ATTITUDE消息速率來爲10Hz我不得不改變SR_EXTRA1參數爲10。

有關哪些參數改變的更多信息的每個消息看到GCS_Mavlink.cpp文件中ArduCopter固件。

0

我想你錯過了start_stop字段。下面的示例正在工作。

 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; 
     }