*

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制御を行いました。
チューニングした結果、目的の制御ができていることが確認できました。

関連記事

RasPi_Qt

QtでRaspberryPi/GUI開発(5):pigpioを使ってみた

どもです。 RaspberryPiを購入して、LEDも手に入れたのでコレをチカらせてみようと思いま

記事を読む

MindStormControl_SprachScreen

EV3開発サポートツール(2)-C#のユーザーコントロール開発(2つ目)

どもです。 前回に引き続き、今回もC#/WPFでの独自UI(ユーザーコントロール)の作成についての

記事を読む

RasPi_Qt

QtでRaspberryPi/GUI開発(12)-gpioの状態をGUIに反映する

どもです。 今回は、gpioピンの状態(HIGH/LOW)の変化を画面上に即座に反映する方法につい

記事を読む

OpenCvLogo

OpenCvによる画像サイズ変更

どもです。 最近、カメラの動画をOpenCvで加工する、ということに挑戦し始めました。 しか

記事を読む

RasPi_Qt

QtでRaspberryPi/GUI開発(8):pigpioを使用したチャタリング対策の問題の対策

どもです。 だいぶ、間が空いてしまいました。 久しぶりの更新です。 前回のエントリーで、「

記事を読む

source_trail_eye_catch

Sourcetrailを試してみました(2)-Eclipseと連携

どもです。 前回のエントリで、ソースコードを解析するオープンソース「Sourcetrail」を紹介

記事を読む

RasPi_Qt

QtでRaspberryPi/GUI開発(4):イベントハンドラの設定

どもです。 前回のエントリーで、「タッチスクリーンを買った」と書きました。 今回からは、このタッ

記事を読む

cygwin_my_image

cygwinでstartコマンド

どもです。 このエントリでは、cygwinでWindows/コマンドプロンプトの「start」

記事を読む

iot_at_home_eye_catch

IoT開発(3)-ESP-WROOM-02でデータを送信

どもです。 この記事は、IoT開発(1)-ESP-WROOM-02のセットアップ、IoT開発(

記事を読む

no image

RaspberryPiのOS:RaspbianをNOOBSでセットアップしてみた

どもです。 今回の内容は、「今更!?」ですがNOOBSでRaspbianをセットアップしたとい

記事を読む

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="">

c_sharp_eye_catch
セルに「取り消し線」が設定されているかを判定してみた

どもです。 前回、前々回と、エクセルのセル内の文字列から、「取り

c_sharp_eye_catch
セル内の「取り消し線で消された文字列」の削除を簡単にしてみた

どもです。 前回、C#/OpenXmlを用いて、エクセルのセル内

c_sharp_eye_catch
セル内の「取り消し線で消された文字列」を削除してみた

どもです。 今回は、C#/OpenXmlの組み合わせで、エクセル

c_sharp_eye_catch
C#でバッファの内容を表示する処理を実装してみた-
データ型に従って動的に書式を設定する

どもです。 最近、C#でバッファ/配列の値をコンソールに表示した

arduino_relay_switch_003_self_preservation_circuit_eye_catch
Arduinoでリレースイッチ(3)-自己保存回路

どもです。 前回の記事で、リレースイッチ「AE-G5V-DRV」

→もっと見る

PAGE TOP ↑