如何在输出遥测中提高 pixhawk 的流率?

问题描述

我想通过 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 (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...