2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

matlabで9軸IMUのWT901のオイラー角を得る

Last updated at Posted at 2023-03-24

 アマゾンで購入できる9軸IMUのWT901ボードをPCにつないで、オイラー角を得ます。
  データシート

UART接続のIMU WT901

 IMUボードは、アマゾンで入手しました。

  WITMOTION WT901 高精度 9 アクシス AHRS MPU9250 TTL 加速度 センサー、ジャイロ + 加速度計 + 磁力計(最大 200HZ)電子 コンパス 振動 傾斜計 モジュール Arduino とプロジェクト など 用

 PCとCOMポートで接続するためにUSB-シリアル変換ボードもアマゾンで入手しました。

  HiLetgo 2個セット CP2102 マイクロ USB転UART TTL モジュール 6ピン シリアル コンバーター STC FT232を置換でき 並行輸入品

接続

 上記のボードを接続します。UART信号のTXとRXはクロスします。電源電圧は3.3~5Vで、5Vにつなぎました。
wt901.png

ユーティリティを使ってオイラー角の出力を有効にする

 デフォルトでは、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が得られるので、たぶんあっていると思います。
 真ん中の図の動きを見ても、それっぽいです。

w101.png

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

 実行例です。
w102.png

simulinkで接続

  Instrument Control ToolBoxを使っています。
 全体です。真ん中の六つのデータが、読み込んだ生データです。
 右下が、オイラー角のデータ出力です。

w103.png
 それぞれのプロパティです。

w104.png

w105.png

w106.png

 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]
2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?