HomeMadeGarbage Loading

ロボット犬『Mini Pupperミニぷぱ』を BNO055で姿勢制御

ホーム
電子工作
Raspberry Pi
IOT
音楽
Home > 電子工作 > ロボット犬『Mini Pupperミニぷぱ』を BNO055で姿勢制御

前回まではラズパイ4でミニぷぱを楽しみました。

ロボット犬『Mini Pupperミニぷぱ』Pythonでモーション記述

ここではまたマイコンによる制御に立ち戻って新たなIMUセンサを楽しみます。

 

 

BNO055

以前はコントロールにATOM Matrixを用いて、内蔵のIMUセンサ MPU6886を用いて姿勢制御も楽しみました。

重力方向軸の回転角度 Yaw角を検出して床を回転させても常に同じ方向に旋回する制御も実施したかったのですが、MPU6886ではYaw角のドリフトがかなり大きく断念しました。

ここでは違うIMUセンサを採用してYaw角旋回制御を目指します。

6軸IMUのMPU6886がYaw角がとれないことはしょうがないのですが、同じ6軸でもMPU6050ではオフセット校正を施すと割とドリフトの小さいYaw角を得ることができます。

MPU6050を使用しても良かったのですがここでは9軸IMUセンサ BNO055を使ってみようと思います。

BNO055は正直内部でどういった処理をしているのか不明なのですが、正確な姿勢角を得ることができます。

以下のサンプルコードで校正や補正なしですぐに姿勢角を得ることができます。
 https://github.com/adafruit/Adafruit_BNO055/blob/master/examples/rawdata/rawdata.ino

 

 

以下でIMUセンサを各種比較してますのでよろしければどうぞ

モーションセンサ比較 - MPU6050 vs MPU9250 vs BNO055 –

 

BNO055をミニぷぱに導入

以前のATOM Matrixの機構にBNO055を追加しても良かったのですが、MPU6886を搭載したATOM Matrixに更にIMUを追加するのが冗長でどうしても許せなかったのでコントローラにはATOM Liteを採用しました。

 

注意点

BNO055とはI2Cで通信するのですが、M5Stack ArduinoのM5Atom.hではI2Cピンを指定してAdafruit_BNO055ライブラリでのBNO055との通信ができませんでした。

 

そこでここではM5Stack Arduinoライブラリは使用せずESP32 ArduinoライブラリでATOM Liteを使用することにしました。ESP32 ArduinoライブラリではI2Cピンを自由に指定してもBNO055と通信が問題なくできました。

ここではBNO055との通信はWire.begin(25, 21)で実施し、
サーボドライバ PCA9685とはWire1 .begin(22, 19)で実施しました。
これで問題なく動作を確認できました。

 

宴会芸

BNO055導入によって、正確な姿勢角を得ることが可能となりました。

ここではカルマンフィルタなど使用せず姿勢角の生データをそのまま使用しました。
BNO055が優秀で非常に楽です。

 

Yaw角を検出して旋回動作させて一方方向を保持する動作をさせてみました。

いい感じ!!

 

以前仕込んだ動作も問題なくできています。

床を傾けた時の足の高さでの平行制御もBNO055の姿勢角のみのP制御ですがスムーズに実現できています。

 

おわりに

ここでは9軸 IMUセンサ BNO055を用いてミニぷぱ制御を楽しみました。

BNO055が有能すぎて夢だったミニぷぱ宴会芸も実現できました!!

ミニぷぱがドンドン賢くなってくので大変嬉しいです!
引き続き勉強進めます!

Related Posts

コメントはこちらから

メールアドレスが公開されることはありません。コメントのみでもOKです。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください