BNO055の使い方
BNO055は9軸センサとマイコンがセットになったもの。
加速度計やジャイロセンサ、地磁気センサの値を直接読んだり、センサフュージョンした結果を読んだりできる。
通信プロトコルはI2CとUARTに対応。
その他キャリブレーションや軸の変更、出力データの単位変更、オイラー角とクォータニオンの選択、センサの詳細な設定などに対応している。
datasheetはここ
Application Note
BNO055のdriverがあるらしい。
ヘッダで8000行
ソースで20000行ある
今回は使用しない。
今回はUARTでBNO055を使用する。
datasheetの93ページによると、115200bps、8N1で通信すればよい。
動作モードの設定などを行う場合、レジスタへの書き込み指令を送る。
センサのデータなどを読む場合、レジスタの読み込み指令を送る。
BNO055にはいくつかのOperation Modeがある。
起動時にはCONFIGMODEなので、センサの値を読みたければOperation Modesを変更する必要がある。
それぞれのモードについてはdatasheetに解説がある。
IMUモードの場合、加速度センサとジャイロセンサを用いて相対的な座標を計算する。
例えばOperation ModesをIMUモードにしたい場合、OPR_MODEレジスタにIMUモードを書き込む。
OPR_MODEレジスタは0x3D、IMUモードは0b1000なので、送信するデータは以下の通りとなる。
Start Byte | Write | Reg addr | Length | Data 1 |
---|---|---|---|---|
0xAA | 0x00 | 0x3D | 0x01 | 0x08 |
UNIT_SELレジスタに書き込むと出力データの単位を指定できる。
0b0000'0100とすれば、加速度[m/s^2]、角速度[deg/s]、オイラー角[rad]、温度[℃]で回転の向きが反時計回りのデータを得られる。
オイラー角のデータ表現について、レジスタの値はdegreeなら16倍、radianなら900倍されている。
1 degree = 16 LSB
1 radian = 900 LSB
実際に作成し、動作確認したソースコードがこちら。