*

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

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

どもです。
前回は、超音波センサから前方障害物との距離を取得し、それを元に安全状態を判断する、という内容について書きました。
今回は、前回の内容を踏まえて、モーターの出力値を制御する方法について記載します。

1.モーターの設定
モーターを設定、出力値(動作させたい値)を指定、あるいは動作値(現在の出力値)は、やっぱりEV3RTのAPIを使用します。詳細は、コチラに掲載されているので、このエントリーで詳細は記載しません。必要に応じて、参照して下さい。

モーターの特性については、コチラからダウンロードできる資料を参考にして下さい。
また、コチラのサイトも参考になるかも知れませんので、リンクを張っておきます。

2.モーターの目標出力値の指定
モーターを動かす/制御するに当たり、「目標となるモーターの出力値」を指定する必要があります。これは、前回までのエントリーで紹介してきた、Bluetooth通信を用いたコマンド処理により行います。
また、単にモーターの出力を指定するだけではなく、ステアリング比(こんな言葉があるのか?)もコマンドで指定するようにします。
モーターの出力値を指定するためのコマンドは、以下のように設計しました。
SetMotorPower_CmdFrmt
SetSteer_CmdFrmt

3.モーター出力値の算出
コマンドで目標モーター出力値を受信してから実際にモーターにその値を通知するまでは、下記のような順で処理を実行します。

SoftwareArchitecture_DriveMotor

この構成に従ったモーター制御の処理順の実装は、下記の通りです。

※MOTOR_TASK_INTERVALは、10msecを設定しています。

モーター出力確定では、フィードバック制御を用いて、最終的なモーター出力値を算出します。
とくに、フィードバック制御では、PID制御を適用します。
PID制御を適用した理由ですが、以前PID制御を用いたモーター制御について検討したことがあるためです。
<詳しくは、コチラの記事を参照>

具体的には、以下のようにPID制御を実装しています。

※他の処理(モーター出力の最大値の判定)の実装は、このエントリーでは割愛します。

4.Ev3の車に載せて動かしてみた
上記の通りに実装したアプリケーションを使用してEv3を動作させた際の様子が、以下の動画です。

…おかしいですね…。
期待した動きとしては、
「まっすぐ進んで、壁の直前で停止して、バックして、またまっすぐ進んで…」
という動きを繰り返すように動かしたつもりなんですが…。
ハンドル操作(?)を間違えたかな?
それとも、バグ!?
とりあえず、動きをロギングできていないので、原因は闇の中になってしまいました。

今回のエントリー/動画では、上記で実装したPID制御とそれによる車の制御を見せたかったのですが、何やら目的と違うエントリーになってしまいました。無念です。
あ。
前回のエントリーで書いた、超音波センサから取得した前方の障害物との距離から安全状態を判定する、という機能は正しく動作していることだけは確認できました。

次回は、もう少し、まともなエントリーにします。

ではっ!

関連記事

no image

C言語でEV3開発(4)

どもです。 今回のエントリーは、前回のエントリー内容/EclipseでEV3の実行ファイルをビルド

記事を読む

raspberry-pi

QtでRaspberryPi/GUI開発(1):ためしに時計を作ってみた

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

記事を読む

no image

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

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

記事を読む

eclipse-juno-logo

C言語でEV3開発(2)

どもです。 今回のエントリーの内容は、前回に引き続き「EV3の開発環境の構築」の追記です。

記事を読む

eclipse_oxygen

Linux/EclipseでRaspberryPiのクロス環境を構築してみた…がっ!

どもです。 前回のエントリでは、WindowsにRaspberryPi3のクロスコンパイル環境の構

記事を読む

google_test_top

C言語でEV3開発(5)

どもです。 今回のエントリーは、前回のエントリーでちくっと触れた、「単体テスト」について、です。

記事を読む

toppers

C言語でEV3開発(26)-EV3で機械学習(1)-QLearningをC#に委譲してみた

どもです。 前回の投稿では、Q-LearningをEV3本体に実装してみたら、メモリが足りなくて動

記事を読む

eclipse_4.3_kepler

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

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

記事を読む

RasPi_Qt

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

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

記事を読む

no image

C言語でEV3開発(13)-opOUTPUT_STEP_SPEEDコマンド

どもです。 今回のエントリーは、モーターを動かすコマンドである 「opOUTPUT_STEP_S

記事を読む

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

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

どもです。 前回のエントリーで、pigpioを使用したチャタリング対

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

どもです。 前回のエントリーで、pigpioを使用したボタンを使用し

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

どもです。 RaspberryPiを購入して、LEDも手に入れたので

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

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

raspberry-pi
RaspberryPi3対応のタッチスクリーンを買いました

どもです。 ついに、念願のRaspberryPi3対応のタッチスクリ

→もっと見る

PAGE TOP ↑