我正在从事一个使用Mavlink协议(在c++中)与ArduPilotMega (2.6)通信的项目。
例如,我能够读取诸如态度之类的消息。当前的消息速率(对于所有消息)是2Hz,我想提高这个速率。
我发现我可能应该使用间隔期设置MAV_CMD_SET_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能够告诉我它是否得到了命令?
发布于 2016-05-25 13:38:28
根据机器人堆栈交换的答案,
为了更改消息速率,最简单的方法是使用SR_*参数值更改任务规划师。最大频率为10 The。
例如,为了将态度消息速率更改为10 10,我只需将SR_EXTRA1参数更改为10。
有关哪些参数更改的更多信息,请参见Mavlink.cpp固件中的ArduCopter文件。
发布于 2017-01-17 17:24:52
我猜你错过了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;
}https://stackoverflow.com/questions/37383904
复制相似问题