• 締切済み

simulinkとArduino

卒論でLQR制御を利用して慣性ローター型の倒立振子を作成しようとしています。 LQR制御で必要は状態フィードバックゲインKはリカッチ方程式を解いて導出しました。 あとはArduinoにLQR制御のプログラムを描けば完成なのですが、プログラムをどう描けばよいのかイマイチわかりません… ネットで調べているとsimulinkに直接Arduinoのプログラムを描き、シリアル通信を利用してArduinoを動かすというものもありました。 ・Arduinoに描くLQR制御のスケッチ ・LQR制御のsimulink がわかりません。お詳しい方、お手数おかけしますがご教授お願い致します。

みんなの回答

  • DCI4
  • ベストアンサー率29% (448/1540)
回答No.1

LQR制御のプログラムを描けば完成なのですが、プログラムをどう描けばよいのかイマイチわかりません… ★回答 simulinkには拡張機能がいっぱいある ざっくり回答すると Arduino 詳しくはない 使ったことはないが以下がわかる Simulink Support Package for Arduino Hardware を購入すれば中身はわかるはず 導入前に Matlab 日本販売代理店 に聞くのがベストと思う Matlab に 使用パッケージが追加される仕組み http://jp.mathworks.com/help/supportpkg/arduino/examples.html ArduinoRハードウェア用のSimulinkRサポートパッケージは、ArduinoのボードでSimulinkモデルを作成し、実行することができます。 サポートパッケージは、Arduinoのセンサ、アクチュエータ、および通信インタフェースを設定し、アクセスするためのSimulinkブロックのライブラリが含まれています。 また、あなたが対話的に、彼らはArduinoの上で実行すると、Simulinkで開発したアルゴリズムを監視し、調整することができます Getting Started with Matlab Simulink and Arduino: Simulink Support Package for Arduino Hardware http://jp.mathworks.com/help/supportpkg/arduino/index.html http://sti.tice.ac-orleans-tours.fr/spip2/IMG/pdf/working_with_arduino_hardware.pdf Arduinoハードウェアを、USBケーブルを使用してホストコンピュータに接続 付属のブロックセットで シムリンクで ブロックでソフトを作成 足りないブロックは 自分で作成と思われる 通常Cで書いてコンパイルして ブロック化すると思われる (他のハード TiなどDSPブロックセットなども同じ仕組み) おそらく付属のブロックセットの中身(プログラム)も見れると思うが? ArduinoRハードウェア用のSimulinkRサポートパッケージは すなわちハード ソフトは 作らんで ブロックセット(提供される)で 作れる 制御アルゴリズムを楽して ためせると言う仕組み ブロックセット 制御ブロック線図を作成して すませると 楽ですと言うこと

関連するQ&A

  • Arduinoスケッチがリセットしないと動作しない

    Arduino UNO R3とArduino Nano互換機でI2Cで動く液晶を、標準Wireライブラリーでコントロールするスケッチをプログラミングしました。 しかしながら、Arduino IDEでスケッチを描き込んだ直後は動作するのですが、電源を入れ直すと電源ランプが点灯するだけで、プログラムが実行されなくなります。 一方で、この状態でリセットボタンを押すと、意図したとおりにプログラムが動作するので、おそらく一度はリセットしないと、正しく動かないようです。 ArduinoのFAQではブートローダーによるシリアル通信の関係で、RXを10kΩの抵抗を介してGNDにつなげるか、RXとTXをショートさせると良いとあったのですが、この方法では解決しませんでした。 Arduino単体(パソコンにつなげずに電源のみの供給)で、スケッチを正しく起動させるにはどうしたらよいでしょうか。

  • Arduinoとモータドライバのつなぎ方...

    卒論でDCブラシレスモータをArduinoで制御することにしました。 ArduinoとDCブラシレスモータ、モータドライバは以下のものを購入しています。 プログラムについてまだまだ勉強不足で申し訳ないのですが、Arduinoとモータドライバのつなぎ方をどのようにしてよいかイマイチよくわかっていません... 申し訳ありませんが、お詳しい方教えてください。 ・ArduinoMega2560 ・EC45flatΦ42.8mm ブラシレス50Watt(DCブラシレスモータ) ・DECModule50/5(モータドライバ)

  • 倒立振子をPIDで

    倒立振子のような制御を行なうにはPID制御は向いていないのはなぜですか? 自分で考えたのは「PIDを含めたフィードバック制御の場合、外乱が発生するとその影響がプロセス値に現れてから初めて制御が動き出す後追い制御のため,外乱の影響は避けられない。」ですがこれは適当でしょうか?補足があれば教えていただきたいです。

  • 回転型倒立振子のPID制御

    回転型倒立振子のPID制御をしているのですが、振り子はなんとか安定化できたものの、アームがずっと低速で回転し続けます。 アームの動きをぴたっと止めるには、PIDパラメータのうち、(今の状態から)どのゲインを上げてどのゲインを下げるべきでしょうか?

  • リアルタイム制御のためのPCスペック

    回転型倒立振子の安定化制御を最適制御(LQR)でしようと思っています。エンコーダを使ってDCモーターをフィードバック制御します。使用する環境は、PCとPCI ExpressのIOボード、エンコーダカウンタとで構成される環境と、Arduinoおよびカウンタ搭載の制御基盤とで構成される環境で、それぞれで実験をする予定です。後者の環境の構築方法はわかったのですが、前者、つまりPCとIOボード、エンコーダカウンタで構成する環境をするために、PCのスペックはどれくらいのものが良いでしょうか?CPU、メモリはどれが良いでしょうか?(Core i5、8GBで十分?)また、ワークステーションにするべきでしょうか?OSはDebianの予定です。どうぞよろしくお願いします。

  • 制御を電子工作で学びたい(初心者です)

    私は大学で古典制御,現代制御まで学びましたが,その理論と実際の使い方がつながっていないというよりわかっていません.そこで,電子工作して,以下のようなことをして実際にものを制御することを学んでみたいです. ・PID制御 ・フィードバック制御 ・最適制御 ・オブサーバー などなど,デジタル制御なども学んでみたいです.例えば倒立振子を現代制御するなど 電子工作がど素人でも実際に工作して制御の基礎を学べる本や教材などがありましたらどうか教えてください. お願いします.ちなみにC言語はわかりますが,マイコンに書かれている特殊な文はわかりません.

  • 極配置法に関すること

    現在、倒立振子に関する研究をしているのですが、極配置法に関してわからないところがあります。閉ループシステムの固有値を安定した値にするために、所望の極を決める必要があるのですが、「試行錯誤的に考えてこうなった」とか「この値を使ってください」と既に書かれていたり、または決めるための注意点などは書いてあるのですが具体的な求める方法が書いていないので何か手順のようなものを知っている方教えてください。 所望の極の求め方を知りたいのであって、その所望の極に配置するためのフィードバックゲインを計算したいわけではありません。

  • openFrameworks-複数台Arduino間のシリアル通信

    openFrameworks-複数台Arduino間のシリアル通信 皆様,初めまして. 私は現在,複数台のArduinoとopenFrameworksとでシリアル通信を実現しようとしていますが, そこで一つ問題が生じました. シリアル通信に関してはofSerialクラスを利用しようと考えていましたが,下記の例のように, ofSerialクラスのインスタンスを複数作ろうとしただけで,プログラム実行のどこかでエラーが出てしまいます. (例) class testApp : public ofBaseApp{ ofSerial serialA; ofSerial serialB; } openFrameworksのHPを観ると,ofSerialクラスのドキュメントには ”the ofSerial class can attempt to communicate with the first available device it finds.” とありますが,これはofSerialクラスでは一つのデバイスとしかシリアル通信が出来ない, という意味なのでしょうか? また,もしそうならば,openFrameworks上から複数台のシリアルデバイスと通信する方法はあるのでしょうか? プログラミング初心者で誠に恐縮ですが,皆様のお力をお借りしたく思います. よろしくお願いいたします.

  • ArduinoとXbee、通信によるラグ、遅延

    ArduinoとXbeeによる無線通信を利用して複数の散水ポンプを遠隔操作でON/OFFしようとしていますがラグ(遅延時間)が生じて困っています。 構成としてArduinoとXbee間でシリアル通信を行い、それを二つ使って無線通信をしています。 ([Arduino←シリアル通信→Xbee]←無線通信→[Xbee←シリアル通信→Arduino]) 使用機器等 AVRマイコンはATmega168Pを使用し、互換性のある回路で動作させています。 XbeeRFモジュールはProではありません。 現状として思い通りに通信できているのは 送信側:シリアル通信で「h」,「j」を3秒経つ毎に繰り返し送信 受信側:「h」の時赤色LED出力、「j」の時黄色LED出力 この時はLEDが交互にラグもなく光ってくれます。 しかし、 送信側:デジタル入力でタクトスイッチのON/OFFを検出し、タクトスイッチを押した時にシリアル通信で「h」を、それ以外の場合(押していない時)は「j」を送信 受信側:「h」の時赤色LED出力、「j」の時黄色LED出力(変更なし) とした時、タクトスイッチを押したり離したりしてLEDで確認をするのですが、3回程押すと通信が途切れてしまうのかLEDが光っていたなら光ったまま数秒から十秒程固まってしまいます。 上記の送信側スケッチ例(プログラム) int button = 13; void setup() { Serial.begin(9600); pinMode(button, INPUT); } void loop() { if (digitalRead(button) == HIGH) { Serial.print('h'); } else { Serial.print('j'); } delay(1000); } 規則的な値を送信し、受信できているといった症状から問題は送信側のスケッチ(プログラム)だと思い、ダメもとでif else文ではなくswitch case文で書きましたが症状は変わりませんでした。 反応速度を上げて使用したいと考えておりdelay(100)等にするとラグが大きくなりました。 また、Xbeeの送信側をパソコンに繋ぎ 送信側:パソコンにXbeeを接続してXbeeの設定ソフトX-CTUのterminalから 「h」,「j」を交互に適当な間隔で送信 受信側:「h」の時赤色LED出力、「j」の時黄色LED出力(変更なし) とした時も同様にラグが発生しています さらに、 送信側:[ArduinoとXbee]アナログ入力に可変抵抗を繋ぎその値をシリアル通信で1秒毎に送信 受信側:パソコンにXbeeを接続してX-CTUのterminalでシリアル通信をモニタリング とした場合 シリアル通信で送ってきた値を1秒毎に表示→数秒後に値の表示が停止→数秒後、止まっていた間の値がまとめて表示→シリアル通信で送ってきた値を1秒毎に表示 の繰り返しです。 検索サイトで調べましたが、同様の症状が出でいる方が居られますが解決にまで至っていませんでした。また、同じような構成でラジコンを製作している方の動画ではラグも無く、ボタンやセンサーにすばやく反応している様でしたので何か設定などがあるのかと思い試していますがうまくいきません 何か解決策はないのでしょうか? お願いします。

  • PCに挿したIOボードを制御するためのプログラム

    IOボード(AD/DAボード)を使ってPCで入出力制御(例えばモーターのフィードバック制御)をしたいと思っているのですが、ボードにアクセスするためのプログラムや、信号を入出力するためのプログラムをどのように書いたら良いかわかりません。おそらくデータシート?に書いていると思うのですが、知識不足で読み解くことができません。(いままでArduino IDEでArduinoの制御をしたことしかありません。普通にC言語でAVRマイコンをプログラムして制御することはできません。C言語の基礎知識はあります。) そこで質問なのですが、PCから(例えばPCIスロットに挿した)IOボード(AD/DAボード)を制御するための知識は、どのようにして習得できますでしょうか?参考になる本やサイトが見つかりません。PICやAVRなどのマイコンであれば本が色々出ているようなのですが、そのようなマイコンを使えるようになれば、PCからIOボードを制御できる基礎知識は付きますでしょうか?