アマゾンで購入できる9軸IMUのWT901ボードをPCにつないで、オイラー角を得ます。
データシート
UART接続のIMU WT901
IMUボードは、アマゾンで入手しました。
PCとCOMポートで接続するためにUSB-シリアル変換ボードもアマゾンで入手しました。
HiLetgo 2個セット CP2102 マイクロ USB転UART TTL モジュール 6ピン シリアル コンバーター STC FT232を置換でき 並行輸入品
接続
上記のボードを接続します。UART信号のTXとRXはクロスします。電源電圧は3.3~5Vで、5Vにつなぎました。
ユーティリティを使ってオイラー角の出力を有効にする
デフォルトでは、ACCELERATION、MAGNETIC FILED(uT)、PRESSURE(Temprature)、Angleの値が送られています。Windowsのソフト「Standard Software for Windows PC」をダウンロードし、設定を変更します。
GitHub https://github.com/WITMOTION/WT901
Googleドライブ https://drive.google.com/drive/folders/1dWvJU2Ug7MpcwTPWoARw2KJI8oYbuVEW
Contentの設定で、全部のチェックを外し、Angleだけにチェックを入れます。
下の画面ではUARTと通信速度が115200ですが、実験なので、9600bpsに変更しました。
Angleがオイラー角であるとはどこにも書かれていないのですが、ユーティリティをうごかしてRoll、Pitch、Yawが得られるので、たぶんあっていると思います。
真ん中の図の動きを見ても、それっぽいです。
matlabで接続
Angleのデータ/・フォーマットは、データシートから、次の形式になっています。
0x55がデータの始まりを表し、次の0x53でAngleのデータが送られてきたことを判別できます。
0x55 | 0x53 | RollL | RollH | PitchL | PitchH | YawL | YawH |
---|
matlabはR2022b update5です。Windows10 Pro 22H2の環境です。
clear
close all;
wt901 = serialport('COM3', 9600) ; %115200);
Angle=[0 0 0 0 0 0];
while (1)
Head = read(wt901,2,'uint8');
if (Head(1)~=uint8(0x55))
continue;
end
if (Head(2) == uint8(0x53))
Angle = (read(wt901,6,'uint8'))
Roll = (Angle(2)*256 +Angle(1)) / 32768*180
Pitch = (Angle(4)*256 +Angle(3)) / 32768*180
Yaw = (Angle(6)*256 +Angle(5)) / 32768*180
pause(0.1);
end
end
simulinkで接続
Instrument Control ToolBoxを使っています。
全体です。真ん中の六つのデータが、読み込んだ生データです。
右下が、オイラー角のデータ出力です。
Functionの内容です。
function Angle = fcn(data)
Angle = zeros(1,3);
Roll = (data(2)*256 +data(1)) / 32768*180;
Pitch = (data(4)*256 +data(3)) / 32768*180;
Yaw = (data(6)*256 +data(5)) / 32768*180;
Angle = [Roll,Pitch,Yaw]