ドローン制御第4回 慣性センサ
2024.07.23
YouTube でも紹介しています。画像をクリックすると再生できます。

ドローン制御第1回テスト環境構築では、フライトコントローラとして、Nano 33 IoT を用いました。
当初、Nano 33 IoT搭載の慣性計測ユニット(IMU)を用いてドローン制御を行うと考えていたのですが、搭載されている6軸のIMU、LSM6DS3では絶対方位を取得できず、
またIMUのハードウェアに依存するデータ補正処理は複雑ですので、容易に慣性データを扱えるIMUモジュールBNO055に変更しました。
MPU-6050などの6軸センサーでは相対方位になりますが、BNO055は9軸なので、絶対方位を取得することができます。
●Adafruit BNO055 + BMP280 BFF Add-On for QT Py
9DoF(9 degree-of-freedom)モーションセンサBNO055と気圧/高度センサBMP280を搭載したQT Py/Xiao用アドオンボードです。
この9-DOFセンサーは、モジュール内部でセンサー フュージョンを独自に実行するため、カルマンフィルタなどの相補フィルタをコードに組込む必要はありません。
I2C経由でセンサーデータを読み取るだけの簡潔な処理です。

Adafruit BNO055 + BMP280 BFF Add-On for QT Py
BNO055はセンサフュージョンにより以下のデータを出力する9 DoFセンサです。
・絶対方位(オイラーベクトル、100 Hz)
360度球面を基準とした3軸方位データ
・絶対方位(クォータニオン、100 Hz)
より正確なデータ操作用の4点クォータニオン出力
・角速度ベクトル(100 Hz)
3軸の回転速度(単位 rad/s)
・加速度ベクトル (100 Hz)
3軸の加速度(重力+直線運動)(単位 m/s2)
・磁界強度ベクトル(20 Hz)
3軸の磁界検出(単位 μT)
・直線加速度ベクトル (100 Hz)
3軸の直線加速度データ(加速度 - 重力)(単位 m/s2)
・重力ベクトル (100 Hz)
3軸の重力加速度 (単位 m/s2)
・温度(1 Hz)
周辺温度(単位 ℃)
BMP280は大気圧を絶対精度±1 hPa、気温を精度±1.0°Cで計測するセンサです。気圧から高度を取得できるので、±1 mの精度で高度を計測することができます。
補足:センサフュージョン - ドローンの状態推定
理論上はジャイロセンサ(角速度センサ)の値を積分することで機体の姿勢は求まります。
しかし、ジャイロセンサにはドリフト(ジャイロが静止している状態での出力のズレ)やノイズなどの影響を受け出力値に誤差が生じます。
そこで、このドリフトを補正するために加速度センサを使用します.加速度センサは重力加速度すなわち地球の重力を測定することができます.
地球の重力は常に下向きなので、ジャイロセンサのドリフトを打ち消すことができます。
しかし、ドローンの飛行中は横方向や縦方向、斜め方向に加速度が働くため.加速度センサが正確に重力の方向を測定することができません。
このため、ジャイロセンサの値をハイパスフィルタに通し、加速度センサの値をローパスフィルタに通すことで、精度の高いデータに補正します。
このように、複数のセンサを組み合わせて使うことをセンサフュージョンと言います。
【ARDUINO自作ドローン】NO.4 状態推定(姿勢角)
上述のセンサーは、Add-On for QT Py なので、ベースとなるオードには下記を使用しました。
●Adafruit QT Py ESP32-S2 WiFi Dev Board with STEMMA QT
・ESP32-S2 240MHz
・4 MB Flash & 2 MB PSRAM
・2.4 GHz Wi-Fi (SoC)
・Two I2C ports
・Hardware UART
・Hardware SPI
・Hardware I2S on any pins
・3.3V regulator with 600mA peak output
Ref.Adafruit QT Py ESP32-S2
◇Qt Py ESP32-S2 Pinout
↑クリックで拡大、再クリックで元に戻ります。
センサーは最終的には、QT Pyに被せるのですが、暫定的に使用できるように、FlexyPin Adapter を用います。
●FlexyPin Adapter - Xiao/QTPy

FlexyPin Adapter は、Xiao や QT Pyシリーズのマイコンボードにヘッダーピンをはんだ付けせず、ピンに挟み込んで間接的にブレッドボードに接続するための道具です。
これらのマイコンボードを簡単に交換して使用できます。

先述の慣性センサーをFlexy Pin アダプタに挟み込みます、
| QT Py ESP32-S2 | - | BNO055 + BMP280 |
| SDA | - | SDA |
| SCL | - | SCL |
| 3V | - | 3V |
| GND | - | G |
●Calibration Dance
BNo055 センサーキャリブレーション
電源投入直後、センサーのオフセット・レジスタはゼロに初期化されており、各種センサーは調整されていない状態です。
例えばセンサーを机に置いて電源を入れると、そのセンサーモジュールの向いている方向が北になります。
そのままにしておくと、内部のバックグラウンド調整ルーチンがセンサーの動きを監視し、センサーは最終的に調整されますが時間を要することがあります。
そこで、電源投入直後にキャリブレーション(調整)ダンスを実行して、センサーのオフセット・レジスタをプリセットします。
特に。磁力計をプリセットすることは重要です。磁力計が磁北に対する地理的位置を認識しることで、絶対的な位置を正確に決定できるからです。
ジャイロスコープと加速度計のレジスタをプリセットすることはそれほど重要ではありません。
磁力計を較正するには、 センサーモジュールを 8の字を描くようにゆっくりと振ります。

加速度計のキャリブレーションは、数秒間、正面を向いた状態で保持し、時計回りに 90 度回転させて待機し、これを合計 4 つの位置で繰り返します。次に、平らな面に上向きで置き、数秒間そのまま保持します。最後に、下向きにして保持し、加速度計のキャリブレーションを完了します。
ジャイロスコープを上向きの状態で数秒間静止させるだけです。
●センサーテスト
adafruit/Adafruit_Learning_System_Guides
ビルドの環境には、PlatformIOを使用しています。
→ Ref.Arduino開発環境構築 PlatformIO

方位磁石を隣に置いて、モジュールの向きを北に合わせてみました。

Orient欄の x がyaw、y がroll、z がpitchに相当します。
Orient(EULER/degree):絶対方位(オイラーベクトル、100 Hz)- 360度球面を基準とした3軸方位データ
Gyro(rad/s) :角速度ベクトル(100 Hz)- 3軸の回転速度(単位 rad/s)
Linear(m/s^2) :直線加速度ベクトル (100 Hz)- 3軸の直線加速度データ(加速度 - 重力)(単位 m/s2)
Mag(uT) :磁界強度ベクトル(20 Hz)- 3軸の磁界検出(単位 μT)
Accl(m/s^2) :加速度ベクトル (100 Hz)- 3軸の加速度(重力+直線運動)(単位 m/s2)
Gravity(m/s^2) :重力ベクトル (100 Hz)- 3軸の重力加速度 (単位 m/s2)
●DFROBOT 2x1.2A DC Motor Driver (TB6612FNG)
スピードコントローラーには、DFROBOT (DRI0044) TB6612FNG モータコントローラを使います。

・VCC Operating Voltage: 2.7V~5.5V
・VM Input Power: 2.5V~12V
・Output Current: 1.2A (single-channel continuous drive current)
・Start / Peak Current: 2A (continuous pulse) / 3.2A (single pulse)
・Dimension: 0.79 x 0.77(in) / 20 x 19.50(mm)
DFROBOT 2x1.2A DC Motor Driver (TB6612FNG)
●テストモジュールの組立て
ジャンクのミニドローンから制御基板を取り除いて、モーターからの配線を引き出したものをモーターコントローラーに繋いでいます。

最終的にはドローンに搭載するのですが、コードのテスト用にブレッドボード上に配置しています。
| ESP32-S2 | - | Motor Driver 1 | - | DRONE |
| 5(TX) | - | PWM1 | | |
| | | M1+ | ---- | Motor-LF(白) |
| | | M1- | ---- | Motor-LF(黒) |
| A1 | - | PWM2 | ---- | |
| | | M2+ | ---- | Motor-RR(白) |
| | | M2- | ---- | Motor-RR(黒) |
| GND | - | DIR1&DIR2 | | |
| 3.3V | - | VCC | | |
| GND | - | GND | | |
| | | | Battery | |
| | | GND | GND | |
| | | VM | 3.7V | |
| | | Motor Driver 2 | | |
| A2 | - | PWM1 | ---- | |
| | | M1+ | ---- | Motor-RF(青) |
| | | M1- | ---- | Motor-RF(赤) |
| A3 | - | PWM2 | ---- | |
| | | M2+ | ---- | Motor-LR(赤) |
| | | M2- | ---- | Motor-LR(青) |
| GND | - | DIR1&DIR2 | | |
| 3.3V | - | VCC | | |
| GND | - | GND | | |
| | | | Battery | |
| | | GND | GND | |
| | | VM | 3.7V | |
姿勢制御用のテストコードはまだ開発途中ですので、現段階では公開していません。
AdafruitのBNO055側でセンサー フュージョンを実装しているので、慣性データの補正にカルマンフィルターのロジックをコードに組み込む必要もなく、
また、推力も筐体も小さいドローンでは外部環境の影響が大きいため、通常のPID姿勢制御は使わず独自のロジックを組むことにしました。
補足:PID制御
【ARDUINO自作ドローン】NO.5 PID制御プログラムの作成
P制御(Proportional /比例)
目標値と現在値の差に比例した出力をします。
このP制御では,目標値に近くにつれて出力が弱くなっていきます.すなわち,目標値には近づきますが,目標値に到達することは100%ありません.この差を定常偏差と言います.
このP制御では,ゲインによっては出力が振動(発振)してしまいます.
I制御(Integral/積分)
P制御の特徴である”目標値に到達しない”という現象をカバーしてくれるのが,このI制御です.
P制御で到達しなかった”差”を積分(積み重ねる)ことで,大きな操作量になります.
これによって,目標値に到達させることができます.
D制御(Derivative/微分)
D制御の特徴として,変化に対抗するような動きを見せます.
例として,車で運転中に最短時間で60km/hまで速度を上げたいとします.
しかし,60km/h以上を出すと違反なので,オーバーしないように加速しないといけません.
この場合,加速初期はアクセルを踏みますが,50km/hに到達したあたりでアクセルを緩め始めなければなりません.
この緩めるという動作がD制御の役割です.
すなわち,P制御で生じた振動は,D制御で打ち消すことが可能です.
adafruit/Adafruit_BNO055
adafruit/Adafruit_BMP280_Library
|
Raspberry Pi(ラズベリー パイ)は、ARMプロセッサを搭載したシングルボードコンピュータ。イギリスのラズベリーパイ財団によって開発されている。
たいていのことは100日あれば、うまくいく。長田英知著
「時間がなくて、なかなか自分のやりたいことができない」
「一念発起して何かを始めても、いつも三日坊主で終わってしまう」
「色んなことを先延ばしにしたまま、時間だけが過ぎていく」
そこで本書では、そんな著者が独自に開発した、
まったく新しい目標達成メソッド「100日デザイン」について、
その知識と技術を、余すところなくご紹介します。
まんがで納得ナポレオン・ヒル 思考は現実化する
OLとして雑務をこなす日々に飽き足らず、科学者だった父が残した薬品を商品化すべく、起業を決意した内山麻由(27)。彼女はセミナーで知り合った謎の女性からサポートを得ながら、彼女と二人三脚でナポレオン・ヒルの成功哲学を実践し、さまざまな問題を乗り越えていく。
ヒル博士の<ゴールデンルール>に従い、仕事に、恋に全力疾走する彼女の、成功への物語。
今日は人生最悪で最高の日 1秒で世界を変えるたったひとつの方法 ひすいこたろう著
偉人の伝記を読むと、最悪な日は、不幸な日ではなく、新しい自分が始まる日であることがわかります。最悪な出来事は、自分の人生が、想像を超えて面白くなる兆しなのです。偉人伝を読むことで、このときの不幸があったおかげで、未来にこういう幸せがくるのかと、人生を俯瞰する視線が立ち上がるのです。
ご飯は私を裏切らない heisoku著
辛い現実から目を背けて食べるご飯は、いつも美味しく幸せを届けてくれる。
29歳、中卒、恋人いない歴イコール年齢。バイト以外の職歴もなく、短期バイトを転々とする日々。ぐるぐると思索に耽るけど、ご飯を食べると幸せになれる。奇才の新鋭・heisokuが贈るリアル労働グルメ物語!
【最新版Gemini 3に対応!】できるGemini (できるシリーズ)
Geminiを「最強の知的生産パートナー」として使いこなすための、実践的なノウハウを凝縮した一冊です。
基本的な操作方法から、具体的なビジネスシーンでの活用、日々の業務を自動化するGoogle Workspaceとの連携、さらには自分だけのオリジナルAIを作成する方法まで余すところなく解説します。
Rustプログラミング完全ガイド 他言語との比較で違いが分かる!
Rustの各手法や考え方を幅広く解説!
500以上のサンプルを掲載。実行結果も確認。
全24章の包括的なチュートリアル。
ポチらせる文章術
販売サイト・ネット広告・メルマガ・ブログ・ホームページ・SNS…
全WEB媒体で効果バツグン!
カリスマコピーライターが教える「見てもらう」「買ってもらう」「共感してもらう」すべてに効くネット文章術
小型で便利な Type-C アダプター USB C オス - USB3.1 オスアダプター
Type-C端子のマイコンボードをこのアダプタを介して直接Raspberry Piに挿すことができます。ケーブルなしで便利なツールです。
Divoom Ditoo Pro ワイヤレススピーカー
15W高音質重低音/青軸キーボード/Bluetooth5.3/ピクセルアート 専用アプリ/USB接続/microSDカード
電源供給USBケーブル スリム 【5本セット】
USB電源ケーブル 5V DC電源供給ケーブル スリム 【5本セット】 電源供給 バッテリー 修理 自作 DIY 電子工作 (100cm)
|