简单的IMU测量关节角度的方法(单自由度)

这里写自定义目录标题


IMU可以用来求解人体关节角度,最近想用来简单测试一下角度,由于膝关节运动特殊性(可以认为只有一个自由度),其测量比较简单,用一个IMU就可以了。
PS:此方法只适用于单自由度关节的测量,并且毫无精度可言,需要谨慎适用
基本思路就是根据IMU测得的欧拉角解算旋转矩阵;可以任意选择基准,我为了方便用起始时刻作为基准,计算每一个时刻旋转矩阵和起始时刻变换矩阵之间的旋转变换,再反算等效转角和等效转轴就可以了。
代码如下:

%计算初始旋转矩阵
R0=eul2rotm([K(1,3) K(1,2) K(1,1)]/180*pi );

for i=1:length(K)
    R=eul2rotm([K(i,3) K(i,2) K(i,1)]/180*pi);%计算每一时刻的旋转矩阵
    T=R0'*R;%计算当前时刻相对于初始时刻的旋转变换
    %由旋转变换得到相应的等效转轴和等效转角
    V(i,1:3)=rotationMatrixToVector(T)/norm(rotationMatrixToVector(T));
    V(i,4)=norm(rotationMatrixToVector(T));
end

这里用了两个Matlab自带的函数,分别是eul2rotm 和 rotationMatrixToVector,功能是由欧拉角(默认是ZYX,输入向量的顺序也是ZYX,单位是弧度)生成旋转矩阵和由旋转矩阵得到相应的等效转轴(函数返回的向量的方向是转轴方向,模是转角大小)
PS:这里弄了很久还以为函数错了,结果是单位有错,MATLAB里面单位都是默认的弧度
结果 :转轴和转角的变化。
解算过程非常简单也十分粗糙,但是对于简单测量角度、不追求精度情况下,这种方法还是可以的。其实是把IMU的转轴与人体关节转轴重合情况下,这种方法精度会提高一些。
简单的IMU测量关节角度的方法(单自由度)_第1张图片
简单的IMU测量关节角度的方法(单自由度)_第2张图片

你可能感兴趣的:(matlab)