みなさん,こんにちは
おかしょです.
前回の記事では二輪型倒立振子の作成方法について解説しました.
ロボットの作成ができて動作確認を行い,車輪の回転やセンサーからのデータが問題なく取得できることが確認できました.
この機体を使って,まずはPID制御で倒立状態の維持をやっていきたいと思います.
(PID制御について詳しく知りたい方はこちらから)
しかし,PID制御ではゲインの調整が非常に大切です.
このゲインの調整を行うたびにマイコンにプログラムを書きこみなおすのは非常に面倒です.
そこで,Processingを使ってキーボード操作でゲインを書き換えられるようにしたいと思います.ついでに,機体の状態を表示できるアニメーションの作成をしたいと思います.
今回は,そのアニメーションの構成を考えたので紹介したいと思います.
この記事を読むと以下のようなことがわかる・できるようになります.
- Processingのアニメーション構想
- 二輪型倒立振子の作成過程
この記事を読む前に
この記事は以下の記事の続きとなっています.
以下の記事では二輪型倒立振子の作成方法を解説しています.興味のある方は読んでみてください.
制御をするうえで必要な調整
まずは,マイコンに何度も書き込みなおす必要がないように調整が必要となりそうなものを書きだしていきます.
PID制御のゲイン
二輪型倒立振子ロボットには,とりあえずPID制御を実装しようと考えています.
今後はいろいろな制御器を試してみたいですが,今回はPIDでやります.
PID制御器の場合,調整するパラメータはP,I,Dの三つのゲインです.
これをキーボード操作で設定できるようにします.
キーボードでの設定方法としては,以下のような流れを考えています.
- ゲイン設定の開始を知らせるキー「g」を押す
- 設定したいゲイン「p」「i」「d」のどれかを押す
- ゲインを数値で記入する
- 「ENTER」でゲインの確定
- 続けて,他のゲインを調整したい場合は再度2~4を行う
- ゲインの設定が終了したら,設定終了を知らせる「f」を押す
姿勢角のトリム
トリムというのはロボットが安定となる状態のことを言います.
今回の二輪型倒立振子の場合は,倒立状態を維持できる姿勢角のことを言います.
つまり,制御の目標値のことです.
このトリムが正しく設定されていない場合,いくら制御器が正常に動作しても目標値が間違っているので倒立状態を維持することができません.
なので,このトリム値は非常に重要な役割を持っています.
よく倒立振子の目標値は0°で良いと思われる方がいますが,それは間違いです.
実際の機体は重心が中心からずれているため,0°では倒立状態を維持することができません.
また,重心だけが原因ではなくセンサーの搭載する位置も重要です.
姿勢角は搭載するセンサーによって求められます.このセンサーが重心からずれた位置の搭載されていた場合でも0°では倒立状態を維持できなくなります.
そのため,作成したロボットに応じてトリムの値を設定する必要があります.
そこで,このトリムの調整もキーボードで調整できるようにします.
流れとしては以下のようにします.
- トリム設定の開始を知らせるキー「t」を押す
- トリムを数値で記入する
- 「ENTER」でトリムの確定
- トリムの設定が終了したら,設定終了を知らせる「r」を押す
とは言っても,このトリムの値は先ほどの制御ゲインのように何度も調整が必要なものではなく,一度決めてしまえば調整する必要はありません.
手動と自動の切り替え
これは調整とは違いますが,調整をしている時は自動操縦ではなく手動操縦に切り替える必要があります.
設定している最中も自動操縦となってしまうと,設定中も車輪が回転をしてしまい機体が壊れてしまう恐れがあるからです.
手動と自動の切り替えは,キーボードの「a」を押したら自動,「m」を押したら手動となるようにします.
自動と手動の切り替えを行うので,手動操縦時は車輪の回転をキーボードでできるようにします.
操作方法は以下のようにします.
- 操作はすべてテンキーで行う
- 「1, 4, 7」で左の車輪,「3, 6, 9」で右の車輪,「2, 5, 8」で両輪を同時に操作する
- 一番数字の大きいキーを押し続けると,回転速度が増加する
- 真ん中のキーを押すと回転が止まる
- 一番数字の小さいキーを押し続けると,回転速度が減少する
表示したいデータ
次に,アニメーションで表示したいデータを考えていきます.
姿勢角の時系列グラフ
これは絶対に必要です.
制御の目標が倒立振子を倒立状態で維持することなので,ゲインの調整をする際に制御目標がどの程度達成できているのかを見る必要があります.
この時系列グラフの作成方法は以前公開した以下の記事で解説しています.これを基にして,今回のアニメーションに加えたいと思います.
Processingでリアルタイムでグラフを作成する方法
入力の時系列グラフ
入力も先程の姿勢角と同じくらい重要です.
制御器によってどのような入力が与えられて,どのような応答(姿勢角)を示すのかを見ることで,制御ゲインの調整がよりしやすくなります.
入力に関しても時系列グラフを以前の記事を基にして作成します.
3Dアニメーション
時系列グラフだけではロボットの姿勢が直感的にわかりにくいです.
そのような場合,ロボットを3Dで表示して姿勢角を表現できれば直感的に姿勢角などの状態がわかりやすくなります.
ロボットを3Dで表示するには,CADソフトで設計したデータをProcessingに取り込む必要があります.
ロボットの3D表示については以下の記事で解説をしていて,そこで公開しているプログラムを使用します.
3D CADで作ったデータをProcessingで表示する方法
動画
最後に動画も表示します.
このアニメーションを作成する目的の一つとして「学会などの場でも出せるようにする」というものがあります.
そのような場では,実験の説得力を出すために実験から得られたデータだけではなく,実際のロボットの動きも見せることが大切です.
以前,Twitterでもつぶやきましたがwebカメラを購入したので,それを利用して実際のロボットを撮影してリアルタイムで表示します.
webカメラが先程届きました.Processingでカメラの映像を表示できるようにしたいと思います.これをすれば,プロジェクトが一つ終了にできます.https://t.co/LfNK8oGeka pic.twitter.com/kuVBtc4qUK
— おかしょ (@okasho_engineer) July 17, 2020
おまけ
以上のような情報だけで十分だと思いますが,これだけではパッとしないアニメーションとなってしまいそうなので,特に意味はありませんが空白を埋めるために以下のようなものをアニメーションに加えようと思います.
アニメーションの構想図
以上のようなものを表示するアニメーションを作成します.
最後に,作成しようと思っているアニメーションの構想図を以下に示します.
私がこれまで作ってきたアニメーションの中で最も大変なプログラムになると思いますが,これから頑張って作っていきたいと思います.
まとめ
この記事では二輪型倒立振子ロボットのアニメーションの構想を説明しました.
この構想とこれまでに作ったプログラムを利用して,アニメーションを作っていきたいと思います.
続けて読む
以下の記事では先程作成した構想の1部の紹介をしています.
これだけでも結構時間がかかったので読んでもらえると,努力が報われます.
Twitterでは記事の更新情報や活動の進捗などをつぶやいているので気が向いたらフォローしてください.
それでは最後まで読んでいただきありがとうございました.
コメント