【发布时间】: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 - 即使这样,如果您以精确的定期间隔进行采样,时间也是隐含的。我不确定您是否对卡尔曼滤波器的数学感到满意,但这让您感到困惑。