*

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

関連記事

Arduino_Logo

1台のarduinno nanoで割込みとSPIの同時使用

どもです。 先日手に入れたArduino nano(中華)で遊んでいます。 今回、この1台のAr

記事を読む

RasPi_Qt

Rasbianの新しいバージョンが出たので、クロス環境を更新してみた。(その後)

どもです。 前回、Linux/RaspberryPiでのQt(QtCreator)のクロス開発

記事を読む

Rasp_DHT11

温度(湿度)センサを使ってみた(2)-RaspberryPi/pigpioでDHT11

どもです。 前回は、DHT11をAdrudinoにつないで温度/湿度を測定してみました。 そこで

記事を読む

c_sharp_eye_catch

Windowsでのカバレッジ測定-OpenCoverageを使ってみた

どもです。 以前、OpenCppCoverageを使用してWindows上でカバレッジ測定する方法

記事を読む

iot_at_home_eye_catch

IoT開発(4)-ESP-WROOM-02を電池で駆動

どもです。 この記事は、以下の記事の続きです。 IoT開発(1)-ESP-WROOM-02の

記事を読む

no image

C言語でEV3開発(21)-モーター出力の制御

どもです。 前回は、超音波センサから前方障害物との距離を取得し、それを元に安全状態を判断する、とい

記事を読む

RasPi_Qt

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

どもです。 前回のエントリーで、pigpioを使用したボタンを使用したLEDの点灯/消灯について書

記事を読む

eclipse-juno-logo

C言語でEV3開発(1)

どもです。 2回目の投稿。 本格的な投稿としては、初めての投稿になります。 内容は、LEG

記事を読む

no image

C言語でEV3開発(17)-コマンドによるTOPPERS/HRP2 EV3RT アプリケーションの制御(コントロール)

どもです。 今回は、TOPPERS/HRP2 EV3RT で作成したアプリをPC上から操作するため

記事を読む

no image

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

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

記事を読む

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 ↑