コンテンツへスキップ

MATLABの使い方を個人的にメモします。 ボード線図と時間応答。ごく簡単な部分だけです。

本家様

MATLAB 入門 -MathWorks

目次

  • MATLABとは
  • simlinkとは
  • 構成
  • 使い方

MATLABとは

技術計算のための有料ソフトで、基本的な機能の他はさらに課金する必要があります。その拡張機能によって様々な場面で使用されており、企業で使用されるケースも多々あります。学生は研究室で使えたりします。個人で購入する場合でも学割があり、生協でかなり安く買えるそうです。

行列と配列の数学を直接表現するプログラム言語と反復的に実施する分析、設計プロセスに適したデスクトップ環境がセットになっています。

基本的には3つのウインドウをつかう。Simlinkは拡張機能のようなもの。

  • コマンドウィンドウ
  • m-fileウィンドウ
  • Simlinkウィンドウ

MATLAB -MathWorks

simlinkとは

Simlinkウインドウを使用すると、グラフィカルにブロック図を書けばコードに変換してくれます。制御工学とかと相性が良いですね。

Simlink -MathWorks

構成

コマンドウィンドウ

会話的で、すぐに結果が出ます。

>> a = [1 2 3; 4 5 6; 7 8 9]
a =
        1 2 3
        4 5 6
        6 7 8
コマンドウィンドウ

こんな感じ。関数も使えます。範囲で指定する方法がわからなかったので直接配列を書きました。

>> x = [0 pi*1/6 pi*1/3 pi*2/3 pi*5/6 pi pi*4/3 pi*3/2 pi*5/3 2*pi]
>> plot(x,sin(x))
sin(x)

linespce(始点、終点、点数)を使えば楽ですが、研究室に合ったやつには入っていない関数らしい。

関数を定義する事も出来ますが、とくに使う予定がないので省略します。

m-fikeウィンドウ

shellみたいなものだと思います。上とほとんど同じです。

>> x = [0 pi*1/6 pi*1/3 pi*2/3 pi*5/6 pi pi*4/3 pi*3/2 pi*5/3 2*pi]
>> plot(x,cos(x))

保存するとき、名前がモデルと完全に同じだとエラーを吐くらしいので、微妙に変えておくと無難です(user/tutorial01_p.mにしました)。メニューバーのデバッグ/実行で実行します。この時たぶん、カレントディレクトリにありません、などエラーを吐いたら、コマンドウィンドウ上の方のカレントディレクトリを変更します。

デバック/実行か実行アイコンから実行するとこんな感じ。

cos(x)

Simlinkウィンドウ

ドラッグアンドドロップでブロック線図を作成します。割愛。

ちなみに、m-fileのエディタでmdlファイルを開くとめちゃくちゃいろいろ書いてます。

使い方

簡単な周波数解析

MATLABを起動し、メニューバーにあるSimlinkアイコン(ごちゃついたヤツ)からSimlinkを起動します。

Simlink

Simlinkを起動すると、自動的にlibrary Browserが開くと思います。

Simlinkのファイル/新規作成/モデルをクリックして、出てきたウィンドウを保存(user/tutorial01.mdlにしました)。

Simlink library Browser には関数やinputなどが入っていて、libraryからmodelへドラッグアンドドロップすることでブロック線図を完成させます。

ひとまずこのような図を作ります。

  • Continuousには1次遅れ系の伝達関数っぽいブロック(Transfer Fcn)などが入っています。
  • Sinksにはoutput(Out1)やオシロスコープ的なもの(Scope)などが入っています。
  • SoucesにはInput(In1)や時間測定器(Clock)
continuous
sink
souces

ブロックの端に「>」というのがありますので、それをドラッグして他のブロックに接続します。

開ループ

これでひとまず開ループの完成。矢印上で右クリック・ドラッグすると→を分岐できます。 Math Operatioのsumと合わせて使用して閉ループを作ることもできます。

関数をバブルクリックするとパラメータを変えるウィンドウが出てきますので、適宜変えていきます。

閉ループ

Numeratorを[1]、Denominator[2 3] にすると、

$ \frac{1}{2s+3}$

$$ \frac{1}{2s+3}$$

Numeratorを[1]、Denominator[2 -3 4] にすると、

$$ \frac{1}{2s^2-3s+4}$$

になります。ブロック図ができたらプロットのためのプログラムを組みます。

m-fileを作成します。

コマンドウィンドウから、新規作成/M-fineで、M-fileウィンドウを開きます。

T = 1
[num, den]= linemod('tutorial01') 
w=logspace(-3,3,100); 
figure 
bode(tf(num,den), w) 
grid on 

これで、実行すると、ボード線図が描画されます。このfigureで保存すると、画像を保存できます。

bode線図

簡単な時間解析

時間情報をグラフに書き込むときは、出力情報に紐づけられた時間の配列を変数に格納してplot(t,y)などを実行することになります。

同様にモデルを作成します。

  • Sourceからステップ信号(Step) 、時間(Clock)
  • Continuousから伝達関数(Transfer Fcn)
  • Sinkから「外部へ」(simout)

ブロック線図を作成したら、simoutをダブルクリックして、Clockとつながっている方は変数名をt、保存フォーマットをArray(配列)に、transfer Fcnとつながっている方は変数名をy、保存フォーマットをArray(配列)に変更します。

シミュレーションパラメータ

メニューバーのシミュレーション/シミュレーションパラメータから開始時間を0、終了時間を10*T、ソルバオプションのタイプを固定ステップ、ode1(Euler) ステップサイズをT/10に変更したら、メニューバーの下の△で実行。

コマンドウィンドウで、

>>figure
>>pot(t,y)
>>xlabel('Time[s]'),ylabel('Output')

とすると、こんな感じ。

時間解析

これを、m-fileのコマンドでやると以下のようになります。

T = 1;
figure
plot(t,y)
xlabel('Time[s]'),ylabel('Output')
grid on

以上です。あとはその都度組み合わせて使っていきましょう。

ラズパイ上でruby on Railsをやるのが楽なのでは?と思って環境構築したときに詰まったことを書きます。

IoT的なシステムを作る上で、センサ情報をラズパイが取得し、webアプリへ送信するものを作るならラズパイ上でruby on Railsをやるのが楽なのでは?と思って環境構築したときに詰まったことを書きます。

目次

  • 目的
  • 環境構築
  • 参考

目的

ラズパイ上でRuby on Rails環境を作ります。現在の環境は以下。

  • raspberry pi 3 B +
  • ubuntu MATE

Railsとは

Ruby on RailsはRubyで書かれたwebアプリケーションフレームワークであり、webアプリケーションを他のフレームワークよりも少ないコードでかけるように設計されています。 Model View Controllerアーキテクチャに基づいて構築されています。


Model View Controller
  • model:処理
  • view:画面表示部分
  • controller:modelとviewをつなぐ処理 modelとviewへの命令に変換する

modelとviewの中間処理をcontrollerに書く、というような思想がModel View Controllerです。図はwikipediaを参考にしました。

環境構築

普段通りアップデートを確認した後、以下のコマンドを打っていきます。先にnode.jsをインストールしているのは、これがないとjavascriptがないと怒られるからだそうです。

$sudo apt-get install nodejs 

次に参考で見たのでは以下のようにやっていましたが、rbenv install -listで入れたいバージョンが出てこないエラーが発生しました。

$sudo apt-get install rbenv ruby-build 

理由についていろいろと調べたところ、知人によってsudoでrbenvを入れたせいでroot権限が付与されたのではないかと指摘されますた。 ですので、試行錯誤の結果、gitからcloneでインストールしたら成功しました。APPはお好きな名前に変更してください。

$sudo rm -rf ~/.rbenv
$git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
$git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build //続いているので注意
$rbenv install -l 
$rbenv install 2.5.0
$rbenv rehash
$sudo reboot
$gem install bundler
$gem install rails
$ sudo apt-get install libsqlite3-dev
$ sudo reboot
$ mkdir rails
$ cd rails
$ rails new APP —skip-bundle //APPアプリを作成。
$ cd APP

ここで、ラズパイと相性が悪い部分があるので、エラー回避のため、config/boot.rbの以下を削除(コメントアウト)します。

#require ‘bootsnap/setup’

ラズパイの接続状況を調べて、以下のように書きます。右上の有線・無線マークの接続情報から見られます。

$ rails s -b (ラズパイの現在のPIアドレス) -d

これにて成功です。http://(ラズパイのIPアドレス):3000 を開いて確認します。

Railsのhello

成功ではありますが、chromium-driver-helperがサポート終了するらしいので、webdriberに移行して欲しいというメッセージが現れます。

+--------------------------------------------------------------------+
 |                                                                    |
 |  NOTICE: chromedriver-helper is deprecated after 2019-03-31.       |
 |                                                                    |
 |  Please update to use the 'webdrivers' gem instead.                |
 |  See https://github.com/flavorjones/chromedriver-helper/issues/83  |
 |                                                                    |
 +--------------------------------------------------------------------+

rails/Gemfileを以下のように変更して、

group :test do
 # Adds support for Capybara system testing and selenium driver
 gem 'capybara', '>= 2.15'
 gem 'selenium-webdriver'
 # Easy installation and use of chromedriver to run system tests with Chrome
 gem 'chromedriver-helper' => gem 'webdrivers'  //ここ
end
$bundle install

同様にサーバーを立てて動作を確認しましょう。 アプリケーションを作るたびにこの設定をした方がいいと思います。このときもconfig/boot.rbの設定変更を忘れずに。

雑記

以前windowsに入れたときにめちゃくちゃ大変だった記憶があります。rubyのバージョンが合わないとすぐエラー!要注意。

参考

私はC++でROSのコードを書いているんですが、補完機能が使えないとdebugが大変。以前ROSを入れたラズパイに入れようとしたもののROSが入ってないと補完出来ないため、ひとまず仮想マシン上でやることにしました。

目次

  • 目的とROSに関して
  • Ubuntu
  • VMware
  • ROSのインストール
  • VScode
  • 雑記
  • 参考

目的とROSに関して

ROSはロボットソフトウェアプラットホームで、ロボットのプログラムをやる場合にメリットがたくさん。ROSを利用するには別にOSを用意する必要があり、一般的にUbuntuやLinuxが利用されています。

=>過去記事[Raspberry Pi 3 B+ + Ubuntu MATE + ROSのセットアップ]

私はコードはwindows上のVScodeで書いていますが、これではTabで補完できないのですべてのコード自分で書かなくてはならず、タイプミスがかなり多くて困っています。そこでエディタをパワーアップしたいんですが、補完機能を使用するにはROSが必要であり、windowsと相性が悪いとよく言われます。

この記事の目的はROSのコードを補完してくれるエディタを用意することです。

windows10, intel CORE i5 2.3GHz 2.40GHz 実装RAM 4.00GBです。VScodeをインストールして以降、デュアルディスプレイで作業すると重いかも知れませんのでご注意ください。

Ubuntu

Ubuntu is 何 =>
過去記事[Raspberry Pi 3 B+ + Ubuntu MATE + ROSのセットアップ]

Ubuntu は、Linuxベースで無償で提供されており日本人コミュニティのサポートが厚いOSです。 本来はラズパイに合わせてubuntu 16シリーズを入れるべきでしたが、間違って ubuntu 18.04を入れてしまいました。 参考のQiitaによると、ROSのバージョンはubuntuのバージョンが対応していないと動かないらしいので、注意してください。

最新の長期保証版はUbuntu 18.04で、過去の記事で入れたUbuntu MATEは16.04という扱いです。 以下からIOSファイルをダウンロードしてください。

ROSUbuntu
Kinetic16.04
Melodic18.04

VMware

仮想環境を構築します。仮想技術とは、ソフトウェアを活用してハードウェアを再現することで、限りある計算資源がジ歳以上にあるように見せる技術です。

要するに、本当はない架空のPCを用意するようなものです。

VMwareさんの「VMware Workstation Player 15」を使用します。ダウンロード/無償製品のダウンロードからVMware Workstation Playerのfor windowsをインストールします。

Windows または Linux PC 上での仮想マシンの実行に最適な製品です。管理対象の企業デスクトップの配信、教育機関での学習やトレーニングなどの用途に使用できます。

VMware Workstation Player の試用 -VMware より引用

インストーラを起動し、さっきダウンロードしたubuntuをVMにインストールをして、今回私はメモリが残り少ないのでFドライブを指定しました。ここまで10分くらい。

この後結構かかります。途中キーボードを聞かれましたが、私はgeneric101でした。しばらくすると終了してホーム画面がでます。

この時、横でメモ用にwindowsのVScodeを開いていたらだいぶ遅かったです。仮想環境のコア数を設定します。VMware上でPlayer(P)/設定/フリプロセッサを4にすます。動きが多少スムーズになりました。

ROSのインストール

ROS merodicを入れました。Ubuntu18をVMにインストールしてしまったが故の過ち。以下は入れるバージョンによってmerodicの部分を適宜kineticに変換してください。 下記コードを実行します。詳細は過去記事へ。

$sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
$sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-key 421C365BD9FF1F717815A3895523BAEEB01FA116
$sudo apt update
$sudo apt install ros-melodic-desktop-full 
$sudo rosdep init
$rosdep update
$echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc //毎回sourceが読み込まれるように設定
$source ~/.bashrc
$roscore //テスト用に実行

このsourceでは、ROSをインストールしたディレクトリに自動で環境変数を登録してくれるスクリプトファイルを読み込んでいます。

以下のように表示されればOK。

作業ファイルの初期化をします。ROSでは専用ビルドシステムcatkinをcatkin_ws上でおこないます。 catkin_wsを作成、初期化

$mkdir -p catkin_ws/src
$cd catkin_ws/src 
$catkin_init_workspace  
$cd ~/catkin_ws 
$catkin_make

ROSでは今後catkin_ws上で作業することになります。ウィキペディアによれば「catkin」という名前は開発したウィローガレージ社のウィロー(Willow = ヤナギ)の木にみられる尾状花序に由来するそうです。

VScode

VScodeを入れます。ページからダウンロードして使用します。

Download Visual Studio Code

Ubuntu上でDebian、Ubuntu用の.debファイルをダウンロードしてインストールします。コマンドからやる場合は以下を入力します。

$cd ~/ダウンロード
$sudo dpkg -i code_*.deb

インストールができたら拡張機能をいじって行きます。まずは下記コマンドまたはVScodeアイコンをクリックして開きます。

$code

左上の縦に並んだアイコンのうち一番下の四角マーク「拡張機能」を選択して、検索バーを使ってインストールしたい拡張機能を入力していきます 。インストールしたのは「Japanese Language Pack for Visual Studio Code」「C/C++」「Python」「ROS」「CMake Tools」「CMake」です。 インストールしたらVScodeを再起動して、ファイル/フォルダーをワークスペースに追加 からcatkin_wsを追加します。

するとcatkin_ws/.vscodeディレクトリに設定ファイル c_cpp_properties が作成されているので、これを編集します。

c_cpp_properties.jsonの変更点

"includePath": [
        "/opt/ros/melodic/include",
        "$HOME/catkin_ws/devel/include",//ここ
        "/usr/include"
      ],

以降はこれで作成したコードを使用します。

ここでROSの設定に戻って、自動でソースを読み込むようにしつつ、コマンドを加えておきます。

$code ~/.bashrc 
# Set ROS melodic
source /opt/ros/melodic/setup.bash //ここはすでに書き込んであります。
source ~/catkin_ws/devel/setup.bash

# Set alias command
alias cw='cd ~/catkin_ws'
alias cs='cd ~/catkin_ws/src'
alias cm='cd ~/catkin_ws && catkin_make'
$source ~/.bashrc //読み込み

ここで試しに下記を実行してみます。

$cs

~/catkin_ws/srcに移動していたらOKです。 次回起動するときはVMwareで△マークでパワーオンします。

雑記

kineticのが場合はmelodicの部分を書きかえばOKのはずです。しばらく使ってみて、ROSのバージョンの違いでどんな違いが出るかわかったら追記しようと思います。 少なくとも今週やっていた参考本の Scamperによる ROS & Raspberry Pi製作入門 の「topic」「service」「param」の章では記法に変化は見つかりませんでした。

参考