*

C言語でEV3開発(15)-TOPPERS/HRP2 EV3 で PID制御

公開日: : マインドストーム/EV3, 開発

どもです。
今回のエントリーは、コレまでのエントリーから内容を変えて、モーターの動作の制御をします。
制御方法は、「PID制御」です。
ちなみに、今回のエントリーからは使用するOS/環境を

「TOPPERS/EV3RT」

に(一時的に)変更します。

1. 環境のセットアップ
省略します。
なぜなら、ここに詳細な手順が記載されています。
環境がWindowsでもMacでもOK!
上記のサイトを確認しながら、がんばってセットアップして下さい。

なお、当方の環境は、以下です。

OS:Windows7 Professional ServicePack 1(64bit)
CPU:Core i7-3770K
メモリ:16.0GB
TOPPERS/EV3RT:β6-2

2. 制御方法 – PID制御
今回は、「PID制御」によるモーターの制御を行います。
PID制御は、使用されることが非常に多い自動制御方法です。
この方法は、比例/積分/微分の組み合わせで制御を行う方法です。
比例/積分/微分のそれぞれに対して係数を設定・調整することで、細かな制御・スムーズな制御が可能になります。
なお、以下のサイトに係数の設定について記載されています。

http://www.picfun.com/motor05.html

まずは、このサイトに記載された方法で係数を算出、シミュレーションを行います。

3. シミュレーション
シミュレーションについては、多くのシミュレーションソフトがあります。
しかし、今回は手元にあり、かつ一番手っ取り早かった「Excel」を用いて、シミュレーションを行ってみます。
なお、MindStormではモーター入力の単位は「%」です。
なので、入力値は0~100の間で設定することが可能です。

さて。
シミュレーションしてみた結果は、以下の通りです。
このとき、目標値:40%/Kp=0.10/Ki=0.05/Kd=0.10 としています。
(※コレは、上記サイトの計算式に従って係数を算出、その後調整を行った後の結果です。)

シミュレーション結果

シミュレーション結果

グラフを見ると、出力地が徐々に目標値に近づき、目標値付近になると一定の値が継続していることが分かります。
従って、上記の係数を設定することで、目的のPID制御が実現できることがわかります。

4. 実装~実機動作
いきなりですが、実装は以下の通りです。

(モーターへの出力値算出)

処理周期は10msecに設定、同じ間隔でモーター出力値とモーター入力値(実際の動作値)を測定しました。
なお、実測の際は空転状態で行っています。

5. 実行結果
そして、その結果が以下。
右モーターと左モーターのモーター出力値と入力値、及びシミュレーション結果をそれぞれグラフにしています。

左モーター比較

シミュレーション/指令値/動作値比較(左)


右モーター比較

シミュレーション/指令値/動作値比較(右)

グラフを確認すると、シミュレーション結果に対して実測値は振動しているものの、目標値に近づいています。
従って、目標に合致した制御ができています。

以上、今回はMindStormのモーターのPID制御を行いました。
チューニングした結果、目的の制御ができていることが確認できました。

関連記事

no image

Objective-CからC++コードを呼び出す

どもどもです。 今回は、突然ながらMacに関係する投稿です。 ソフト関係のことを勉強していて

記事を読む

toppers

C言語でEV3開発(16)-TOPPERS/HRP2 EV3 で Bluetooth割込み

どもです。 今回は、EV3 の環境をTOPPERS/HRP2 EV3RT で作成したアプリをPC上

記事を読む

no image

C言語でEV3開発(9)-opOUTPUT_SPEEDコマンド

どもです。 今回のエントリーでは、前回に引き続きEV3のモーターを動かしていきます。 ただし、単

記事を読む

no image

C言語でEV3開発(8)-opOUTPUT_POWERコマンド

どもです。 今回のエントリーでは、EV3でモーターを動かします。 なお、今回のエントリーでも

記事を読む

eclipse_cdt_top_100

C言語でEV3開発(3)

どもです。 今回のエントリーの内容は、前回まででセットアップした環境で、実際にEV3上で動く実行フ

記事を読む

no image

C言語でEV3開発(10)-opOUTPUT_CLEAR_COUNTコマンド

どもです。 前回のエントリーのラストで、「モーターを動かすコマンド」と書きましたが、今回紹介するコ

記事を読む

no image

C言語でEV3開発(12)-opOUTPUT_TIME_POWERコマンド

どもです。 今回のエントリーでは、これまた前回に引き続き、モーターを動かすためのコマンドについて書

記事を読む

no image

C言語でEV3開発(7)

どもです。 今回のエントリーでは、いよいよEV3を動かしていきます。 新しい環境に対して、最もよ

記事を読む

google_test

C言語でEV3開発(6)

どもです。 今回のエントリーは、前回のエントリーの続き、google testでの単体テスト環境に

記事を読む

eclipse_4.3_kepler

elicpse/CDTでのgdbでのソースを追従したデバッグができない問題

どもです。 今回のエントリーは、Eclipse上でgdbを利用したデバッグ中に発生する問題について

記事を読む

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

PAGE TOP ↑