IMU WT901からUARTでデータ取得⑤9軸の情報の取得
前回まで、WT901からクオータニオン出力を取り込みました。ここでは、もともとのIMUセンサの出力である加速度Acceleration、角速度Velocity、地磁気Magnetismを取り出します。
●設定の変更
設定ソフトMiniMU.exeを起動し、メニューのconfigをクリックします。Quaternionのチェックを外し、Acceleration、Velocity、Magnetismにチェックを入れます。
◆Accelerationのデータ形式
TL/THは温度、SUMはチェックサムなので無視します。
0x55 | 0x51 | AxL | AxH | AyL | AyH | AzL | AzH | TL | TH | SUM |
◆Velocityのデータ形式
TL/THは温度、SUMはチェックサムなので無視します。
0x55 | 0x52 | wxL | wxH | wyL | wyH | wzL | wzH | TL | TH | SUM |
◆Magnetismのデータ形式
TL/THは温度、SUMはチェックサムなので無視します。
0x55 | 0x54 | HxL | HxH | HyL | HyH | HzL | HzH | TL | TH | SUM |
●simulinkで処理
シリアル入力の部分です。Accelerationの0x55と0x51をHeaderに入れ、30個のデータを取り込みます。
simulinkの各種ブロックを使って個々のデータを取り出そうとしたのですが、うまく実現できませんでした。その部分をfunctionで記述します。
functionの内容です。
function [Accel,Gyro,Mag] = fcn(u)
y=zeros(1,9);
y(1) = cast(u(2),'uint16')*256 + cast(u(1), 'uint16');
y(2) = cast(u(4),'uint16')*256 + cast(u(3), 'uint16');
y(3) = cast(u(6),'uint16')*256 + cast(u(5), 'uint16');
y(4) = cast(u(14),'uint16')*256 + cast(u(13), 'uint16');
y(5) = cast(u(16),'uint16')*256 + cast(u(15), 'uint16');
y(6) = cast(u(18),'uint16')*256 + cast(u(17), 'uint16');
y(7) = cast(u(24),'uint16')*256 + cast(u(23), 'uint16');
y(8) = cast(u(26),'uint16')*256 + cast(u(25), 'uint16');
y(9) = cast(u(28),'uint16')*256 + cast(u(27), 'uint16');
Accel = [y(1) y(2) y(3)];
Gyro = [y(4) y(5) y(6)];
Mag = [y(7) y(8) y(9)];
functionの出力には、AHRSブロックをつなぎました。デフォルトではクオータニオンの出力と角速度の出力が得られます。
ノイズの情報はデフォルトのままです。センサによってパラメータを設定するようですが、わかりません。基準座標系はセンサの表裏などを設定するようですが、ここでは、デフォルトのままです。したがって、プログラムは動いていますが、正しいクオータニオンの出力かは検証できていません。