ラズパイ日記...21日目...倒立振子立ち上がるのか

一通りの配線確認を行い、それなりにセンサーの値を読み取り、モーターも正転、逆転できるところまではきました。

本体を組み立てていきます。

まずは、ギヤボックス。ネジ位置が板とあわないので、カッターでちょっと切り欠きます。後ろにプラスチックの板でユニバーサルプレートをネジで挟んで両側止めます。ここがグラグラすると全体に波及するので、プラスドライバーとラジオペンチでしっかりとめます。

真ん中と上部に基板を引っ掛けるL字金具を取り付けます。基板は幅広ゴムで止めます。

微妙に配線がきついですが、何とかなりました。
 全体はこんな感じです。

上部は、ESP32と9軸センサーです。
 
DCモーターコントローラー。LEDは、PWM出力を明るさで確認できます。
ギヤボックス

背面はモーター駆動用の電池をゴムで取り付けます。
なんとか、全体的な形になりました。
再度配線を確認して、これまで個別のプログラムを 引っ付けて、センサーとモーターの動きを制御したいと思います。

さて、GW中に倒立するのか。

15 件のコメント:

  1. なぜか片方のモーターが動かなくなりました。コントローラは壊れてないし、配線もおかしくないし。地道にテスターで配線を確認中です。

    返信削除
  2. できるだけ軽く、重心が低い方が制御への負担が軽くなるような印象です。

    返信削除
    返信
    1. アドバイスありがとうございます。
      昨日から配線確認してますが、モーターが片方しか動かない状況継続です。ただいま、DCコントローラの基板入れ替えて、再度配線中です。事前確認しっかりしても、組み合わせるといろいろとあります。重心は、低めを目指します。

      削除
    2. 両モーター動くようになり、全体組立てと動作確認OKとなりました。
      pythonコードもそれなりに書いて、動かしてみました。
      https://youtu.be/KxeUnTHbbns
      これは、いつになったら立ち上がるのでしょうか? センサー値とパラメータの調整頑張ってみます。

      削除
    3. 結構、座高が高いのでアルゴリズムとパラメーター値の選び方に大きな影響を受けそうな気がします。カーペット上では、なんとか自立したバージョン:https://m.youtube.com/watch?v=0F1cNDqROBQ

      削除
    4. パラメータ調整2hほど休み休みやりました。ちょっとは大人しくなりましたが、倒立する気がしません。リフレッシュして、また明日頑張ります。今日はここまでです。
      https://youtu.be/3xS6EIGuFdI

      削除
    5. パラメータ調整頑張ってみましたが、高重心は一旦休憩します。重心を落として低重心版で再度トライしてみます。

      削除
  3. 重心の位置に加えて、私の環境では「十分余裕を持った電源」が必須のようです。エネループやモバイルバッテリーを昇圧し、6VでESP32とモータを駆動していますが、あまり長い時間は持たない印象です。電源が十分でないと制御が不安定になって、自立しません。

    返信削除
    返信
    1. ESP32はUSB給電、モーターはエネループ×3です。エネループは、毎日充電してます。確かにどこかのblogでモーター電池は、劣化すると制御不安定になると読んだことあります。誠意低重心版、パラメータ調整中です。

      削除
  4. バッテリーとステップアップコンバータを仮搭載してみました。https://youtu.be/NMLnAi5Pjzo
    無謀な操作(?)をすると倒れたり、ハンチングのような動作を繰り返したり、面白い動きをします。
    独自バージョンは、今のところカーペット上なら自立しますが、硬い床では直ぐに倒れる状態です。動画のバージョンの元ネタは https://www.jjrobots.com/much-more-than-a-self-balancing-robot/ で、使っているモータは異なりますが、元ネタのほぼデッドコピーです。元ネタは、パラメータ(4種類)設定もスマホから可能で、それぞれのパラメータの影響を確認しながら、独自の実装へ取り込みたいと思っていますが、はたして、、、、

    返信削除
  5. パラメータ決まると、静止するんですね(笑)。低重心版も、静止する感じがしません。元ネタページ楽しいですね。パーツにArduinoスケッチ、3Dプリントのデータとすべて揃ってます。GW残り少ないですが、低重心版の安定化頑張ります。 パラメータ外部入力できたらなと、昨日思いつきましたが、動かしながら値を入力する方法を探しきれませんでした。

    返信削除
  6. 制御プログラムはどんな構成でしょうか? いろいろな記事を参照すると、メインループの中でセンサーの情報などからモータ駆動の値をグローバル変数へ書き込み、実際のモータ駆動は、メインループとは別に、タイマー割り込みでグローバル変数の値に従ってモータの回転を制御しているようですね。私の元ネタも、そのような構成になっています。

    返信削除
    返信
    1. 初期設定でジャイロ調整→main loop→chk_power()→forward() or back()→main loop
      が大きな流れで,chk_power()でセンサー値を読んで処理して、モーター出力を返します。モーター動かすところは、モーター出力値と前進か後進を指示して一定時間(300ms)sleepです。
      モーター出力は、割り込み処理にしたほうがいいのですかね。
      「半日で倒立振子」https://www.instructables.com/id/Another-Easier-Inverted-Pendulum-in-Japanese/を参考にのデジタル版arduinoスケッチをほぼそのままmicropythonに書き換えました。

      削除
  7. その記事は私も見ています。どの記事にも、パラメータ値の設定方法が見当たらないので苦労しますね。WiFiで制御できるようになったバージョンも、最初は自立せずに何が原因か悩みました。一旦自立すると、ネタ元のパラメータの値はデフォルトのままでも自立するようになりました。今になって思うと、最初に自立しなかった原因は、機械的なバランスとモータ駆動の電源の2点が問題だったような気がします。

    返信削除
    返信
    1. そうなんですよ。パラメータは、環境に依存するのと、結構組み合わせがシビアなようです。低重心版、重心の調整とタイマー割込によるモーター駆動を頑張ってみます。

      削除

ラズパイ日記...esp32(arduino)+mpu6050

# esp32で6軸センサー読み出し esp32で6軸センサーを読み出し、値をグラフ表示して動作を確認します。 ## 準備 ハード的な接続は、センサーが3.3V駆動できるので、3.3VとGNDの2線で電源供給します。I2C用にSDAとSCLのデータ線が必要ですが、esp...