むハード部分が完成したので今回からソフトウェア(Arduinoスケッチ)の作成に取り掛かっていきます。概要Arduinoでいろいろと多くの処理を行うのですが、今回から少しずつ切り分けて順に処理内容を見ていきたいと思います。倒立振子の目的は倒れないようにすること。簡単にいうと倒れそうな方向にタイヤ(モーター)を廻して倒立状態を維持する感じです。その「倒れそうな方向」を推定する一つに6軸センサーから取得する情報(自分の姿勢)があります。姿勢角度をビジュアル化してます。倒立振子では1軸の回転角度を把握すればいいのですが、せっかく6軸センサーを使用しているので3軸回転の姿勢角度算出をしてます。概要ですが今回行ったことは以下です。6軸センサーから値を取得まずはArduinoから6軸センサーの値を取得します。使用するセンサーは「MPU6050」のモジュール品で3軸加速度と3軸角速度が取得できるものです。(ArduinoとMPU6050の使い方(通信方法)はこちら)で取得した加速度と角速度から姿勢を推定(計算)します。姿勢角度の算出方法はこちらで詳しく説明してます。リンク先のやり方が少しいいかげんというか、ベクトル合わせが無理やりなので、今回はきちんと?姿勢角度を算出します。手順としては、センサーよりジャイロ(角速度)値を取得。「ジャイロ値からの推定加速度ベクトル」を「加速度センサー値」から補正。繰り返し更新して姿勢を計算してます。「補正」の方法はリンク先の方法と同様に相補フィルターを使ってます。リンク先とは違って、加速度ベクトルはきちんと回転行列使っ計算してます。四元数も理解したかったのですが、少しとっつきにくかったのでまたの機会にチャレンジしてみたいと思います。角度換算をいちいち行っていると時間がかかってしまうため、更新(補正)は加速度ベクトルで行って、欲しいときに角度換算するようにしてます。おおざっぱですがこんな感じ。マニアック内容なのとややこしいので細かい説明は割愛です・・・・。要望があれば解説したいと思います。今回は、姿勢角度の算出(Arduinoで行う処理)よりも、「無線での情報のやり取り」、「リアルタイムでリアルな3D描写」を実現する方が結構大変でした・・・・・・。コメントをキャンセルメールアドレスが公開されることはありません。