2016-05-23 8 views
0

Я работаю над проектом, который использует протокол 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, который сможет мне сказать, даже если он получил команду?

ответ

0

От Robotis Stack Exchange ответа

Для того, чтобы изменить скорость сообщения, самый простой способ, чтобы изменить значение SR_ * параметров с помощью Mission Planner. Максимальная скорость составляет 10 Гц.
Например, для того, чтобы изменить скорость 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; 
     }