UdonLibrary 1.0.0
機械システム研究部 C++ ライブラリ
読み取り中…
検索中…
一致する文字列を見つけられません
BNO055

BNO055は 9軸ジャイロセンサーです。

地磁気センサーを使用することで、積算誤差による角度のズレをかなり正確に補正できます。

下にジャイロセンサのヨー角を取得する例を示します。ロボットにセンサーを水平に設置した場合、ヨー角がロボットの旋回角となります。

コンストラクタには、センサーと接続されている I2C 端子と対応する TwoWire オブジェクトを指定します。

#include <Udon.hpp>
static Udon::BNO055 gyro{ Wire };
void setup()
{
Serial.begin(115200);
gyro.begin();
}
void loop()
{
gyro.update();
const double yaw = gyro.getYaw();
Serial.println(yaw);
}

ヨー角以外の角度を取得する

ヨー角以外の角度を取得する場合は、クオータニオンを取得後、各角度へ変換します。

Unity などに姿勢を送る際は、クオータニオンを送信します。(一般的な3Dゲームエンジンは計算量などの観点からクオータニオンを用いて姿勢を管理しています)

const Udon::Quaternion quaternion = gyro.getQuaternion();
const double yaw = quaternion.toYaw();
const double pitch = quaternion.toPitch();
const double roll = quaternion.toRoll();
クオータニオン
Definition Quaternion.hpp:30
double toPitch() const noexcept
ピッチ角を取得
Definition Quaternion.hpp:189
double toYaw() const noexcept
ヨー角を取得
Definition Quaternion.hpp:183
double toRoll() const noexcept
ロール角を取得
Definition Quaternion.hpp:195

オイラー角から取得することもできますが、単一の角 (ピッチ角など) のみを使用する場合、クオータニオンから求める方がパフォーマンス的に良いです。(内部的にクオータニオンを用いており、オイラー角に変換する段階で不要な他の角を求めてしまうため)

// 非推奨
const double pitch = gyro.getEuler().pitch;