该项目旨在为医疗保健等不同用途创建一种创新的运动跟踪设备,RSL10 EVK 板通过提供可立即使用的完整解决方案带来新的可能性,从而简化开发。重点是跟踪运动,一种是医疗保健提供者感兴趣的步态分析。如果最终产品未实现,则该产品的工作证明是可行的,并且是可替代现有商业产品的低成本解决方案。
个人的步行表现会有所不同,医生已经注意到某些疾病或状况会改变它,例如帕金森、中风、骨科和老年人。有许多关于步态分析的研究及其与这些条件的关联,即有研究表明老年人的步态速度与生存率之间存在关联(Studenski et al., 2011 )
一个非常典型的步态测试是在走廊中进行的,距离可能会因个人或医疗保健提供者的需要而异。
RSL10 SENSE EVK 具有应用程序所需的所有传感器,实际上它比实际需要的传感器多一些,这在某些应用程序中可能是有益的。
以下是一些板载传感器的简要介绍。
RSL10 SENSE EVK 带有一个纽扣电池连接器,非常适合便携式应用。
EVK 板很小,而且由于每个电子设备都很脆弱,并且对不正确处理造成的损坏很敏感,为了最大限度地减少测试过程中可能造成的损坏,我们使用了一个小型 3D 容器。
例如,借助钩环紧固件,3d 外壳可以安装到人鞋中,但其他身体部位也是可能的。
该设备可以很容易地商业化,但需要在定制软件上进行艰苦的工作,这不是该项目的目标。这里的目的是利用ON和博世公司的最新技术加快步态分析的发展和帮助研究。对于软件,我决定使用MATLAB ,因为它可以轻松连接并具有所有后处理工具来分析它。
使用的固件是 SDK 示例中提供的自定义服务协议固件,即sense_ics_firmware 。
MATLAB有一个使用非常方便的蓝牙低功耗通信库,你的电脑必须有一个4.0 BLE适配器,你可以通过以下方式连接BLE设备
b = ble(Address);
其中地址是您的 BLE RSL10 地址。就我而言,我通过之前运行blelist命令找到了该地址
使用ble命令连接后,可以知道特征
也可以显示特征
为了从传感器查询和接收数据,我们使用上面看到的两个自定义特征,我们通过这样做来设置
rxc = characteristic(b, "E093F3B5-00A3-A9E5-9ECA-40016E0EDC24", "E093F3B6-00A3-A9E5-9ECA-40026E0EDC24");
txc = characteristic(b, "E093F3B5-00A3-A9E5-9ECA-40016E0EDC24", "E093F3B7-00A3-A9E5-9ECA-40036E0EDC24");
我们没有修改固件,真正的产品需要修改,默认配置足以每秒获取 5 个样本,此时可以。
但是为了在 Matlab 中接收数据,实现了一个回调函数,这将在后台运行以处理接收到的数据。我们可以通过这样做来安装回调
subscribe(rxc);
rxc.DataAvailableFcn = @displayCharacteristicData;
其中displayCharacteristicData是函数
function displayCharacteristicData(src,evt)
global i;
global dv;
global gv;
[data,timestamp] = read(src,'oldest');
c = char(data);
cs = split(c, '/');
packet = char(cs(1));
switch packet
case 'A'
acc = split(cs(2), ',');
dv(i, 1) = str2double(acc(1));
dv(i, 2) = str2double(acc(2));
dv(i, 3) = str2double(acc(3));
dv(i, 4) = i;
case 'G'
gyro = split(cs(2), ',');
gv(i, 1) = str2double(gyro(1));
gv(i, 2) = str2double(gyro(2));
gv(i, 3) = str2double(gyro(3));
gv(i, 4) = i;
otherwise
disp('not implemented response-reception');
end
end
如果不了解数据是如何查询和接收的,就很难理解上述switch case的原因。
我之前设置了一个 segger RT 查看器控制台来查看调试语句的输出,然后运行 android 演示应用程序,其想法是了解查询和解析是如何完成的。
在下面的代码中可以看到加速度计和陀螺仪命令解析是如何实现的。变量是 4 行的数组,前三行包含加速度和陀螺仪的 X、Y 和 Z 分量,最后一个只是跟踪接收到的样本的索引。
编写示例代码以允许在给定时间段内进行采样,然后停止,在这种情况下,每 200 毫秒请求一次采样。
record_length = 60;
sample_rate = 5; %samples per second.
rsamples = record_length*sample_rate;
i = 1;
dv = zeros(10,4);
gv = zeros(10,4);
disp('start acquisition loop');
% request data every sampling period
while true
write(txc, 'A/AO/A'); % accel data
% write(txc, 'G/AO/AR'); % gyro data
if(i > rsamples)
return;
else
pause(1/sample_rate);
i = i + 1;
end
end
为了加快采样速度,需要对固件进行修改,因为传感器已经配置为每 1/5 秒中断一次。其摘录如下所示,位于文件 CSN_AO.c 中
retval += BHI160_NDOF_EnableSensor(BHI160_NDOF_S_LINEAR_ACCELERATION,
CSN_AO_SensorCallback, 5);
在这种情况下,5 是每秒的采样率。增加采样率是必要的,但也有必要在不影响数据的情况下测试它的速度,在这种情况下,我们每 200 毫秒向自定义特征发送一个 BLE 查询,但随着速度的加快,这可能会带来一些问题。因此,更好的方法可能是重写自定义特征以在缓冲区中保存一些样本并每 200 毫秒传输一次。在这种情况下,回调函数CSN_AO_SensorCallback是开始修改的关键。
但回到我们的测试,在使用 60 秒运行捕获后,我们得到了一个包含 4 行的数组,每行有 300 个样本。
在绘制了一些运动的加速度计数据后,我用手臂在 RSL10 板上做了一些动作。
数据以样本计数而非物理量表示。我尝试使用以下公式转换为 m/s2。
dvmod = (dv/32768)*4*9.80665/3.2808;
似乎必须进一步缩放原始值才能获得 m/s2,不是 100% 肯定,但如果该值以 ft/s2 为单位,则这些值更有意义。上式中,数字 4 为动态范围。
以类似的方式进行了一次小步行以捕获加速度计和陀螺仪数据。
该项目展示了拥有一个低成本平台来研究步态模式和人体一般运动的可行性。它可以移植,SDK 示例是进一步修改的良好起点。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
全部0条评论
快来发表一下你的评论吧 !