【问题标题】:Need help for reading gyroscope data读取陀螺仪数据需要帮助
【发布时间】:2021-03-30 17:41:18
【问题描述】:

我正在使用 Arduino SAMD21 Cortex M0 上的 LSM6DSO32。因此,在阅读数据表后,我对原始数据进行了一些询问。所以对于我阅读的陀螺仪

我想将我的陀螺仪与FS = ±500 dps 一起使用。 为了读取原始数据,我这样做了(寄存器数据表中的第 79 页),此代码的灵感来自st cource code here

Wire.beginTransmission(DSO_ADDRESS); 
Wire.write(0x20);                                      
Wire.endTransmission();   
Wire.requestFrom(DSO_ADDRESS, 14);

static int16_t data_raw_angular_rate[3];
uint8_t buff[14];    
Wire.readBytes(buff, 14);

//some codes here for temperature

//get raw data from gyro
data_raw_angular_rate[0] = (int16_t)buff[1];
data_raw_angular_rate[0] = (val[0] * 256) + (int16_t)buff[0];
data_raw_angular_rate[1] = (int16_t)buff[3];
data_raw_angular_rate[1] = (val[1] * 256) + (int16_t)buff[2];
data_raw_angular_rate[2] = (int16_t)buff[5];
data_raw_angular_rate[2] = (val[2] * 256) + (int16_t)buff[4];

//convert data 17.5 comes from the datasheet for FS = ±500 dps
float_t gyro_x = ((float_t)data_raw_angular_rate[0]) * 17.5f;
float_t gyro_y = ((float_t)data_raw_angular_rate[1]) * 17.5f;
float_t gyro_z = ((float_t)data_raw_angular_rate[2]) * 17.5f;

那么在这段代码之后,如果我都理解了数据表(我不确定...),在这段代码之后,我是否得到了以度为单位的值?因为我的代码的最终目标是使用互补滤波器或卡尔曼滤波器,并且该滤波器需要以度/秒为单位的陀螺仪值

【问题讨论】:

  • 我不明白你的问题是什么。我可以看到一个“?”但据我所知,它并没有标记问题。
  • @Yunnosch 我不确定在我的代码之后,我的数据是否以秒为单位?获取原始数据后我不确定我的数学
  • 再次,您使用“?”我看不到问题的地方。
  • @Clifford 好的,所以我真的不明白如何获得以度为单位的值,我应该在两个度量之间使用时间吗?
  • @simon。否,该值已经以 s^-1 为单位 - 已经考虑了时间。您只需要考虑时间是您正在整合结果以获得 delta-degrees - 即使这样,如果您以精确的定期间隔进行采样,时间也是隐含的。我不确定您是否对卡尔曼滤波器的数学感到满意,但这让您感到困惑。

标签: c arduino gyroscope


【解决方案1】:

G_So 以 mdps(每秒毫秒数)定义。这意味着在 ±500 dps 时,值 1 对应于每秒 0.0175 度。所以:

float_t gyro_x = ((float_t)data_raw_angular_rate[0]) * 0.0175f;
float_t gyro_y = ((float_t)data_raw_angular_rate[1]) * 0.0175f;
float_t gyro_z = ((float_t)data_raw_angular_rate[2]) * 0.0175f;

【讨论】:

  • 好的,所以只是为了确定我是否理解所有内容,当我完成 float_t gyro_x = ((float_t)data_raw_angular_rate[0]) * 17.5f; 时,值在 mdps 中,对吗?
  • 是的。如果将所有内容都保存在 mdps 中,则可能不需要浮点开销。你可以有。 int gyro_x = (data_raw_angular_rate[0]) * 37) / 2 ;。老实说,我会质疑是否需要转换任何东西——你的卡尔曼滤波器不应该担心特定的单位——你可能只需要 20571 = 360 度。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-10
  • 2023-03-05
  • 1970-01-01
相关资源
最近更新 更多