问题描述
我想通过 arduino 从 pixhawk (telem1) 获取遥测 RAW_IMU 和 ATTITUDE。在任务规划器或 QGC 中,我可以将流率设置为 0 到 10 Hz 的间隔。实际上,我可以从 Telem1 获得 5-8 Hz。我希望提高流率。我尝试通过 arduino 函数 mavlink_msg_request_data_stream_pack(...,uint16_t req_message_rate,...) 来提高数据速率。该函数改变了任务规划器列表中的速率值,但实际值没有改变。
#include <mavlink.h>
#include <SoftwareSerial.h>
SoftwareSerial _MavLinkSerial(10,11);
// Mavlink variables
unsigned long prevIoUsMillisMAVLink = 0; // will store last time MAVLink was transmitted and listened
unsigned long next_interval_MAVLink = 1000; // next interval to count
const int num_hbs = 60; // # of heartbeats to wait before activating STREAMS from Pixhawk. 60 = one minute.
int num_hbs_pasados = num_hbs;
void Mav_Request_Data()
{
mavlink_message_t msg;
uint8_t buf[MAVLINK_MAX_PACKET_LEN];
// To be setup according to the needed information to be requested from the Pixhawk
const int maxStreams = 1;
const uint8_t MAVStreams[maxStreams] = {MAV_DATA_STREAM_ALL};
const uint16_t MAVRates[maxStreams] = {100};
for (int i = 0; i < maxStreams; i++) {
mavlink_msg_request_data_stream_pack(6,200,&msg,1,MAVStreams[i],MAVRates[i],1);
uint16_t len = mavlink_msg_to_send_buffer(buf,&msg);
_MavLinkSerial.write(buf,len);
}
}
receive_imu()
{
mavlink_message_t msg;
mavlink_status_t status;
while (_MavLinkSerial.available() > 0)
{
Serial.println(msg.msgid);
float c = _MavLinkSerial.read();
if (mavlink_parse_char(MAVLINK_COMM_0,c,&status))
{
/* if(msg.msgid==30) // #30: ATTITUDE
{
mavlink_attitude_t attitude;
mavlink_msg_attitude_decode(&msg,&attitude);
}
*/
if(msg.msgid==27) // #27: MAVLINK_MSG_ID_RAW_IMU
{
mavlink_raw_imu_t raw_imu;
mavlink_msg_raw_imu_decode(&msg,&raw_imu);
Serial.println(raw_imu.zacc);
}
}
}
}
void setup() {
_MavLinkSerial.begin(57600);
Serial.begin(57600);
Mav_Request_Data();
}
void loop() {
receive_imu();
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)