前段时间有一个需求给到了这边,我是写算法的,大概就是做生物学实验的时候,动物的运动能力太强了,会让信号线缠绕。原理很简单就是监测动物的旋转量驱动线材同步转。有三个方案,一种是基于外力牵引的,看着是非常不靠谱的一种,还有基于 IMU 和图像处理的。
我这边就选择了基于 IMU 的,肯定不是自己原创的做了,就找了找相关的算法,其实我自己写了一个来着,但是算起来很复杂,现在研究完了开源的组件,发现是我搞复杂了。直接 IMU融合 解算出 4 元数,求出相对于 XOY 的旋转角就完事了。
但是文章没有特别详细的写这个算法,项目结了再写。但是是要分享一下这个采集系统的,很棒!有空一定复现。
首先是给小老鼠头上的这个采集系统,集成度很高,原件也很密集,有着采集,刺激,转换,姿态解算等很多功能。
而且也用了 8 层板
然后是通过了一个 TI 的串转并的 chip 转换成差分将所有的信号传出去
这个方案很有意思,值得学习
就一根线就水灵灵的出去了
这个是板子的一些参数,可以看到还有 LED,那是给定义使用的
信号就通过这样的一根细线出去了
详细的样子,还是密度很高
然后小老鼠下面是一个板对板的接口,给把脑电信号传出去
示意图
组件图
BNO055 9 轴 IMU,用于实时 3D 方向跟踪,里面解算是用的这一刻,为了体积考虑,这颗 IMU 非常的厉害, 有磁测量,可以给出绝对位置。
看特性
以及还是一个 SIP 系统,里面有一个 MCU
可以通过窗口通讯
IIC
还带有一个高精度的晶振
其实也没有什么算法,就是一些函数
我把控制寄存器的写出来了
Calibration
: 校准状态字节 (byte)
SystemCalibrated
: 系统校准标志 (bool)
AccelerometerCalibrated
: 加速度计校准标志 (bool)
GyroscopeCalibrated
: 陀螺仪校准标志 (bool)
MagnitometerCalibrated
: 磁力计校准标志 (bool)
Temperature
: 温度值 (byte)
Quaternion
: 四元数姿态 (Mat)
LinearAcceleration
: 线性加速度 (Mat)
GravityVector
: 重力向量 (Mat)
Euler
: 欧拉角 (Mat)
GetEuler(ushort[] sample, int begin)
:
从原始数据帧中提取欧拉角数据。
将原始数据按比例转换为角度值。
返回包含欧拉角数据的 Mat
对象。
GetAcceleration(ushort[] sample, int begin)
:
从原始数据帧中提取加速度数据。
将原始数据按比例转换为加速度值。
返回包含加速度数据的 Mat
对象。
GetQuat(ushort[] sample, int begin)
:
从原始数据帧中提取四元数数据。
将原始数据按比例转换为四元数。
返回包含四元数数据的 Mat
对象。
这段就是对设备的注册
很简单
采集是使用的 FPGA 和 PCI-E
现成的板子
组件图
高速的采集器
使用 FMC 接口,做了一个载板
就是上面这样子
这个是接口
可以看到很漂亮,我圈住的地方是来做同步的
使用这个协议来多个子设备同步时间
还有控制的按键
这个是特性,输出是 DAC 搞刺激的恒流源
同样也是 8 层
在接收的时候就是后面芯片了,串转并
原理图也说了这一点
看,解码的信号线,很多 12bit 的
这个是里面的 DAC
系统集成度很高,围绕 intan64 这个芯片辅以多个传感器设计出了一个强大的采集平台,在传输过程中使用了抗干扰的串并转方案,后端也是为了灵活性使用了自己设计 PIC-E 协议,又灵活又搞笑,扩展性也好。
https://www.cf-hw.org/harp
https://github.com/open-ephys/onix-fmc-host
https://www.iwavesystems.com/product/fmc-loopback-test-module/
https://numato.com/product/nereid-kintex-7-pci-express-fpga-development-board/
https://numato.com/docs/nereid-kintex-7-pci-express-development-board/
https://github.com/open-ephys/onix-headstage-64
https://numato.com/help/wp-content/uploads/2018/01/Nereid4.2.1Sch.pdf