C++ 更改Mavlink消息速率ArduPilotMega

C++ 更改Mavlink消息速率ArduPilotMega,c++,robotics,dronekit,mavlink,C++,Robotics,Dronekit,Mavlink,我正在从事一个使用Mavlink协议(c++中)与ArduPilotMega(2.6)通信的项目。 例如,我能够阅读信息。当前消息速率(对于所有消息)为2Hz,我希望提高该速率。 我发现我应该使用MAV\u CMD\u set\u MESSAGE\u INTERVAL来设置它 所以我的问题是: 如何在C++中使用MavLink发送命令消息?< /P> 我试着用下面的代码来做,但没有成功。我想我必须使用上面提到的命令,但我不知道如何使用 mavlink_message_t command; mav

我正在从事一个使用Mavlink协议(c++中)与ArduPilotMega(2.6)通信的项目。
例如,我能够阅读信息。当前消息速率(对于所有消息)为2Hz,我希望提高该速率。
我发现我应该使用
MAV\u CMD\u set\u MESSAGE\u INTERVAL
来设置它

所以我的问题是:
如何在C++中使用MavLink发送命令消息?< /P> 我试着用下面的代码来做,但没有成功。我想我必须使用上面提到的命令,但我不知道如何使用

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\u system
target\u component
sysid
compid
之间的区别。我尝试了几个值,但都不起作用。
有没有ACK能告诉我它是否得到了命令

从答案来看

要更改消息速率,最简单的方法是使用更改SR.*参数值。最大频率为10Hz。
例如,为了将消息速率更改为10Hz,我只需将SR_extra 1参数更改为10


有关哪些参数更改每条消息的更多信息,请参阅直升机固件中的文件。

我猜您错过了开始\u停止字段。下面的示例正在运行

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