- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试解析带有 LSM6DSL 芯片(陀螺仪和加速度传感器)的设备给出的值,但我很难正确解析定位和角度数据。
我从供应商那里收到的信息是,该装置的陀螺仪分辨率为 2000,acc 分辨率为 8g。
我收到以字节为单位的数据,这些数据由以下转换为短裤;
public int[] BufferToMotionData(byte[] buffer, int segments = 2)
{
int[] motionDataArray = new int[segments * 3];
int offset = Constants.BufferSizeImage + Constants.CommandLength;
for (int i = 0; i < 6; i++)
{
motionDataArray[i] = BitConverter.ToInt16(buffer, offset + (i * 2));
if (motionDataArray[i] >= Int16.MaxValue)
motionDataArray[i] -= 65535;
}
return motionDataArray;
}
(编辑;清理版本)
这将返回(示例)961、-16223、-1635、664、-269、-597 范围内的值。
根据规范表,我应该将每个向量与其对应的值相乘。* 陀螺仪为 70f,acc 为 .448f。
根据文档,我了解到 G 力的单位是 milliG,而陀螺仪的单位是毫度每秒?
// Gyro X,Y,Z
gx = Mathf.Deg2Rad * (motionData[0] * 70f / 1000f);
gy = Mathf.Deg2Rad * (motionData[1] * 70f / 1000f);
gz = Mathf.Deg2Rad * (motionData[2] * 70f / 1000f);
// Acc X,Y,Z
ax = motionData[3] * 0.488f / 1000f;
ay = motionData[4] * 0.488f / 1000f;
az = motionData[5] * 0.488f / 1000f;
Update(gx, gy, gz, ax, ay, az);
Update(..) 是 Madgwick 的四元数公式,尽管对于速度我使用加速度向量。
我计算后此时得到的G力值;
X 0.047824 Y -0.320128 Z 0.006344
X 0.07076 Y -0.2562 Z 0.020008
X 0.099552 Y -0.063928 Z -0.13664
这些看起来非常低,如果作为速度应用,它只会在给定的方向上运行,我知道我错过了一个正确的重力,但不完全确定如何应用它。
我假设我不需要对我的速度矢量施加阻力,因为值应该被接收到的加速度值取反?
任何对此类芯片有经验并实际将值应用于偏航/俯仰/滚动(或四元数)并将 G 力作为线性加速度应用的人。
最佳答案
通过查看 existing code on GitHub ,看起来 8g 的灵敏度系数是 244 µg/digit
而不是您编码的 488 µg/digit
。
此外,原始值看起来也发生了偏移,并且位于 [-r/2,r/2]
而不是 [0, r]
中。因此,您必须向其中添加 500µg
或 500µdps
。 (但也许它与 uint/int 问题有关,无论如何你确定字节顺序吗?)
参见 here for acc data和 here for gyro data .
基于此,代码应如下所示:
// Gyro X,Y,Z (in rad/s)
gx = Mathf.Deg2Rad * (motionData[0] * 70000f + 500) / 1000000;
gy = Mathf.Deg2Rad * (motionData[1] * 70000f + 500) / 1000000;
gz = Mathf.Deg2Rad * (motionData[2] * 70000f + 500) / 1000000;
// Acc X,Y,Z (in g)
ax = (motionData[3] * 244f + 500) / 1000000;
ay = (motionData[4] * 244f + 500) / 1000000;
az = (motionData[5] * 244f + 500) / 1000000;
Update(gx, gy, gz, ax, ay, az);
关于c# - 解析 LSM6DSL 原始值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56687031/
在Designing Data Intensive Applications , Martin 介绍了一种称为 LSM-trees 的数据结构。 主要有 3 个部分:内存中的内存表(通常是红黑树)、内
对于简单的搜索查询(比如查询单个 WHERE 子句),日志结构合并树中最坏情况下的时间复杂度是多少? 是 O(log N) 吗? O(N*Log N)?还有别的吗? 多查询怎么样,比如在键值数据库中搜
前言 LSM-Tree 是很多 NoSQL 数据库引擎的底层实现,例如 LevelDB,Hbase 等。本文基于《数据密集型应用系统设计》中对 LSM-Tree 数
最近在研究数据库中常用的索引结构,比如B+树、LSM。我对 point reads/writes/deletes/compaction 如何在 LSM 中工作有很好的把握。 例如(在 RocksDB/
这两个术语可以互换使用吗? 我已经阅读了关于 SSTable 是如何工作的,通常,文章只是开始提到 LSM 树。 然而,它们似乎是同一回事。 我什么时候应该使用一个术语而不是另一个? 最佳答案 在 L
我对日志结构化合并树(LSM 树)的理解是,它利用了追加到磁盘的速度非常快(因为它不需要查找)这一事实,只需将更新追加到预写日志并返回到客户端。 我的理解是,这仍然提供即时持久性,同时仍然非常快。 R
我们可以使用WiredTiger引擎和type=lsm创建一个集合,但是MongoDB文档中没有提到这个功能: db.createCollection( "test", { stora
我们可以使用WiredTiger引擎和type=lsm创建一个集合,但是MongoDB文档中没有提到这个功能: db.createCollection( "test", { stora
出于安全原因,从 2.6.24 版开始,内核停止以可加载内核模块(Linux Kernel Module,LKM)的形式导出编写安全模块所需的字符。 同样出于安全原因,您不能导出 sys_call_t
我是一名优秀的程序员,十分优秀!