我正在使用Mavlink协议(protocol)(在c++中)与ArduPilotMega(2.6)进行通信的项目中工作。
我能够读取诸如ATTITUDE之类的消息。当前的消息速率(对于所有消息)为2Hz,我想提高此速率。
我发现我可能应该使用MAV_CMD_SET_MESSAGE_INTERVAL
设置MESSAGE_INTERVAL来进行更改。
所以我的问题是:
如何在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_system
,target_component
和sysid
和compid
之间的区别的信息。我为每个尝试了几个值,但没有任何效果。是否有任何ACK可以告诉我它是否得到了命令?
最佳答案
我想您错过了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;
}
关于c++ - 更改Mavlink邮件速率ArduPilotMega,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37383904/