【虚拟架子鼓——鼓点识别的想法】
ST Open.Mems提供的osxMotionFX库实能够实现姿态数据输出
对应的输出结构体osxMFX_output中的rotation_9X包含yaw(偏航), pitch(俯仰) and roll(横滚)三个数据
在百度百科找到的解释是
yaw(偏航):机体坐标系xb轴在水平面上投影与地面坐标系xg轴(在水平面上,指向目标为正)之间的夹角,由xg轴逆时针转至机体xb的投影线时,偏航角为正,即机头右偏航为正,反之为负。
pitch(俯仰):机体坐标系X轴与水平面的夹角。当X轴的正半轴位于过坐标原点的水平面之上(抬头)时,俯仰角为正,否则为负。
roll(横滚):机体坐标系zb轴与通过机体xb轴的铅垂面间的夹角,机体向右滚为正,反之为负。
要利用姿态数据实现鼓棒方向检测就相当于把飞机的鸡翅膀、鸡屁股都去掉
把机体拉长,拉细,一架飞机秒变鼓棒
如果使用者是手握机尾,用机头来敲鼓的话
这时以使用者为圆心机头由左向右顺时针转动正好对应yaw(偏航)数据rotation_9X[0]的输出为0~360
如果以使用者为圆心机头由下向上抬起对应pitch(俯仰))数据rotation_9X[2]的输出为-90~+90
剩下一个roll(横滚)rotation_9X[1]对应鼓棒自向的转动
实际使用时不需要此数据
[C] 纯文本查看 复制代码
?
1[/size][/font][/color][/align][align=left][color=rgb(0, 0, 0)][font=Calibri, sans-serif][size=10.5pt]typedef struct[/size][/font][/color][/align][align=left][color=rgb(0, 0, 0)][font=Calibri, sans-serif][size=10.5pt]{[/size][/font][/color][/align][align=left][color=rgb(0, 0, 0)][font=Calibri, sans-serif][size=10.5pt] float rotation_9X[NUM_AXES]; /* 9 axes yaw, pitch and roll */[/size][/font][/color][/align][align=left][color=rgb(0, 0, 0)][font=Calibri, sans-serif][size=10.5pt] float quaternion_9X[QNUM_AXES]; /* 9 axes quaternion */[/size][/font][/color][/align][align=left][color=rgb(0, 0, 0)][font=Calibri, sans-serif][size=10.5pt] float gravity_9X[NUM_AXES]; /* 9 axes device frame gravity */[/size][/font][/color][/align][align=left][color=rgb(0, 0, 0)][font=Calibri, sans-serif][size=10.5pt] float linear_acceleration_9X[NUM_AXES]; /* 9 axes device frame linear acceleration */[/size][/font][/color][/align][align=left][color=rgb(0, 0, 0)][font=Calibri, sans-serif][size=10.5pt] float heading_9X; /* 9 axes heading */[/size][/font][/color][/align][align=left][color=rgb(0, 0, 0)][font=Calibri, sans-serif][size=10.5pt] float rotation_6X[NUM_AXES]; /* 6 axes yaw, pitch and roll */[/size][/font][/color][/align][align=left][color=rgb(0, 0, 0)][font=Calibri, sans-serif][size=10.5pt] float quaternion_6X[QNUM_AXES]; /* 6 axes quaternion */[/size][/font][/color][/align][align=left][color=rgb(0, 0, 0)][font=Calibri, sans-serif][size=10.5pt] float gravity_6X[NUM_AXES]; /* 6 axes device frame gravity */[/size][/font][/color][/align][align=left][color=rgb(0, 0, 0)][font=Calibri, sans-serif][size=10.5pt] float linear_acceleration_6X[NUM_AXES]; /* 6 axes device frame linear acceleration */[/size][/font][/color][/align][align=left][color=rgb(0, 0, 0)][font=Calibri, sans-serif][size=10.5pt] float heading_6X; /* 6 axes heading */[/size][/font][/color][/align][align=left][color=rgb(0, 0, 0)][font=Calibri, sans-serif][size=10.5pt]} osxMFX_output;[/size][/font][/color][/align][align=left][color=rgb(0, 0, 0)][font=Calibri, sans-serif][size=10.5pt]
将ABCDEFG这7个鼓镲在脑袋里分别按左中右,上中下位置放置
然后通过yaw(偏航)和pitch(俯仰)数据就能知道鼓棒指向了哪只鼓
实际使用中因为没有真实的鼓镲存在,使用者在敲打的过程中也容易把位置记错
所以鼓镲的数量需要根据使用者的熟练程度去设置,比如新手一根鼓棒对应左右上下4个鼓镲,敲错的几率就会降低很多
转载请注明:徐自远的乱七八糟小站 » 【虚拟架子鼓——鼓点识别的想法】