狠狠撸

狠狠撸Share a Scribd company logo
マイクロマウスのための
MATLAB/Simulink講座
(1) MATLAB入門
Teng Tokoro
(@tokoro10g)
この講習会について
MATLAB/Simulink を使用して
 経験と勘 → データと解析 
への移行を目指します.
シミュレーションやデータの可視化を使いながら,楽しく
学びましょう.
講習会の構成
全5回を予定
1) MATLAB入門 (1/19) 
2) Simulink入門 (3/16)
3) 信号処理?システム同定(仮) (5月)
4) ログデータ可視化?解析(仮) (7月)
5) Simulinkからのコード生成(仮) (9月)
アジェンダ
今回の内容は以下の3つです.
1. 惭础罢尝础叠/厂颈尘耻濒颈苍办とは?
MATLAB/Simulinkがどのようにマイクロ
マウスの製作に役立つか説明します.
2. コマンドウィンドウで使う
まずは電卓としてMATLABを使って
みましょう.
3. スクリプト?関数を作る
本格的なプログラミングを行うための
基礎を学びます.
MATLAB/Simulinkが世界中の
およそ何人の技術者?研究者
に使われているか,知ってい
ますか?
A. 約300万人
世界中180カ国以上,およそ9万の機関?企業で利用されている
* https://www.mathworks.com/company/aboutus.html
MATLABを
使えると…
いいことがある(かも)
惭础罢尝础叠/厂颈尘耻濒颈苍办とは?
惭础罢尝础叠/厂颈尘耻濒颈苍办とは?
MATLAB
科学?技術計算に特化したプログラミング
言語?開発環境.
特徴
? 行列?ベクトル計算を標準装備
? 習得しやすい言語仕様
? 豊富な標準関数?ツールボックスで
本質的でない実装の手間を省ける
Simulink
ブロック線図をベースにしたシミュレー
ションソフト.
特徴
? ブロックをつないでプログラミング
? シミュレーションと実装を一括で開発
? C/C++のソースコードをブロック線図
から生成できる(コード生成)
マイクロマウスへの
MATLABの使用例
① 走行ログの可視化
MATLABならデータのプロット
や見た目の変更が楽々
>> plot(x, y);
約80行
マイクロマウスへの
MATLABの使用例
② 軌道生成
CやC++では面倒な配列の取り
回し(変形?反転など)が楽々
>> B = reshape(A, 3, 4);
>> B = fliplr(A);
約30行
マイクロマウスへの
MATLABの使用例
③ 迷路データの取り込み
画像処理などのツールボックス
が充実, 応用が簡単
>> IM = imread('1.jpg');
約60行
https://gist.github.com/tokoro10g/57d88b5aafd
8ab0e62bf56cf74e99373
マイクロマウスへの
MATLABの使用例
④ マウスタイマー(GUI)
GUIの作成も, App Designerを
使えば簡単!
シリアル通信でデバイスとの連
携も可能!
>> appdesigner
>> s = serial('COM3')
@Ryokeri14
マイクロマウスへの
Simulinkの使用例
① モータのシミュレーション
ブロックを組み合わせて微分方程
式を表現
物理パラメータを代入してシミュ
レーション
マイクロマウスへの
Simulinkの使用例
② 壁制御のシミュレーション
どのような制 御 則を実 装すれば
よいのか事前にシミュレーション
できる!
惭础罢尝础叠/厂颈尘耻濒颈苍办とは?
MATLAB
科学?技術計算に特化したプログラミング
言語?開発環境.
特徴
? 行列?ベクトル計算を標準装備
? 習得しやすい言語仕様
? 豊富な標準関数?ツールボックスで
本質的でない実装の手間を省ける
Simulink
ブロック線図をベースにしたシミュレー
ションソフト.
特徴
? ブロックをつないでプログラミング
? シミュレーションと実装を一括で開発
? C/C++のソースコードをブロック線図
から生成できる(コード生成)
↑ 今日はこっち
アジェンダ
今回の内容は以下の3つです.
1. 惭础罢尝础叠/厂颈尘耻濒颈苍办とは?
MATLAB/Simulinkがどのようにマイクロ
マウスの製作に役立つか説明します.
2. コマンドウィンドウで使う
まずは電卓としてMATLABを使って
みましょう.
3. スクリプト?関数を作る
本格的なプログラミングを行うための
基礎を学びます.
MATLABをコマンドウィンドウで使う
MATLABを起動してください!
MATLABを起動
※ 初回起動時はアクティベーションを求められ
ることがあります.
※ Windowsの場合, 初回のみ管理者権限が必要
なこともあります.
※ ブラウザで動くオンライン版もあります…
https://matlab.mathworks.com/
エクスプローラ コマンドウィンドウ ワークスペース
ファイルを操作
できる. OS付属の
エクスプローラ
とほぼ同じ.
対話的にMATLABコマンドを入力して実行できる.
動作チェックや, 簡易ヘルプの確認は, ここで行う
と便利.
作成した変数のリ
ストが表示され
る.
関数電卓として
使ってみる
コマンドウィンドウに数式を入力
して, 電卓として使ってみよう
MATLABで使用する演算子
基本はほとんどC言語と同様.
● 四則演算?累乗
+ - * / ^
● 代入
=
● 比較?論理演算
< > == ~= <= >= && || ~
Tip
MATLABの変数はデフォ
ルトではdouble型にな
る.
別の型で定義したいとき
には以下のようにする.
>> a = uint8(3)
MATLABで使用する数学関数
基本はほとんどC言語と同様.
● 三角関数
sin cos sind cosd atan2 pi ...
● 指数?対数
exp log log10 log2
● 複素数 (MATLABでは標準装備!!)
real imag abs angle i j
Tip
関数の使い方は helpコマ
ンド や docコマンド で
確認できる.
例)
>> help sind
>> doc cosd
ベクトル?行列
演算を行う
ここからが本番です
ベクトル?行列の書き方
● 行ベクトル
r = [1 2 3] または r = [1, 2, 3]
● 列ベクトル
c = [1; 2; 3]
● 行列
M = [1 2 3; 4 5 6; 7 8 9]
Tip
スペース or カンマで
列方向(横方向)への入力,
セミコロンで改行を意味
する.
特別なベクトル?行列
● 範囲ベクトル
1:10 または 1:2:10 または linspace関数
● 単位行列
eye(3)
● ゼロ行列
zeros(3) または zeros(4,2)
● 1で埋めた行列
ones(3) または ones(4,2)
● 乱数行列
rand(3) または rand(4,2)
Tip
カッコ内は行列の大きさ
魔法陣行列やハンケル行
列といった特殊な行列も
用意されている.
https://jp.mathworks.
com/help/matlab/cons
tants-and-test-matric
es.html
(例) 行列とベクトルの乗算
ベクトル?行列特有の演算子
● 要素ごとの乗算?除算?累乗
.* ./ .^
● 転置?共役転置
.' '
● 逆行列とベクトルの積 ( , )
Ab c/A
● 要素ごとの論理演算
& |
Tip
逆行列自体を計算したい
ときは, inv関数を使う.
例)
>> B = inv(A);
(例) 連立1次方程式の解
Tip
行末にセミコロンをつけ
ると, 実行結果を非表示
にできる.
行列の要素へのアクセス
取り出しも代入もできます
C言語の配列でいう a[0] は, MATLABでは a(1) です
● 行列の場合は, A(1,2) とすることで を指せる
● 範囲を取り出したいときは範囲ベクトルを使う
A(1:3, :) Aの1~3行目,全列(:)を取り出し
行番号
列番号
Tip
範囲ベクトルでなくても
OK. 指定した順番どおり
に取り出し/代入できる.
例)
>> A([1 3], [1 4])
行列の結合?加工
Tip
ブロック行列の感覚で,
行列やベクトルを結合
できる
Tip
clearコマンドで定義した
変数を全てクリアできる
行列の加工に使う関数の例
● repmat
行列を繰り返したものを作る
● fliplr, flipud
左右?上下反転
● sort
要素のソート
Tips [Coffee Break]
英語を読める方は, UI
とMathWorksのウェ
ブサイトを英語設定に
した方がわかりやすい
かも.
要素ごとの演算をうま
く利用することで高速
なコードを書ける.
http://blog.tokor.org/2017/12/17/rogy-Adv
ent-Calendar-2017-%E3%80%8C%E3%81%8
6%E3%82%8F%E3%81%A3%E2%80%A6%E3
%82%8F%E3%81%9F%E3%81%97%E3%81%
AEMATLAB%E3%82%B3%E3%83%BC%E3%83
%89%E3%80%81%E9%81%85%E3%81%99%
E3%81%8E%E2%80%A6%EF%BC%9F%E3%80
%8D/
コーディング用フォン
トをインストールする
と読みやすくなる.
おすすめ:
- Ricty Discord
- Cica
データをグラフに
プロットする
ほかの言語で数十行かかる処理が
1行で済みます
データのプロット
例)
>> x = 0:0.01:pi*2;
>> y = sin(x);
>> plot(x, y);
Tip
基本はplotコマンド!
使い方が複雑なのでヘル
プを読もう
"matlab plot"で
ググると出てくる
Tip
ドキュメンテーションは
ググるかdocコマンドで
表示する
ドキュメンテーションの読み方
取りうる引数の
パターン
それぞれの場合に
対する説明
ドキュメンテーションの読み方
この引数について詳しく知りたい???
クリック
ドキュメンテーションの読み方
詳細な情報(書式?型?サイズ
など)が確認できる!
例)
>> x = 0:0.01:pi*2;
>> y = sin(x);
>> plot(x, y, 'r--');
プロットの見た目の編集
コマンドを使用する場合
● グリッド
grid on grid off
● 軸の範囲?ラベル?目盛り
xlim xlabel xticks ylim ...
● 凡例
legend
● その他のプロパティの設定
set get
Tip
関連する関数のリストは
このページからカテゴリ
を選択すると見られる
https://mathworks.co
m/help/matlab/format
ting-and-annotation.h
tml
プロットの見た目の編集
プロパティエディタを使用する場合
コマンドを打つのは正直面倒なので???
プロットの見た目の再利用(コード生成)
関数として保存できる
MATLAB Plot Gallery
各種プロット関数の使用例とソー
スコードが公開されている
https://mathworks.com/product
s/matlab/plot-gallery.html
アジェンダ
今回の内容は以下の3つです.
1. 惭础罢尝础叠/厂颈尘耻濒颈苍办とは?
MATLAB/Simulinkがどのようにマイクロ
マウスの製作に役立つか説明します.
2. コマンドウィンドウで使う
まずは電卓としてMATLABを使って
みましょう.
3. スクリプト?関数を作る
本格的なプログラミングを行うための
基礎を学びます.
スクリプトを
作成する
「ホーム」タブの
「新規スクリプト」をクリック
スクリプトでよく使用するコマンド
初期化系のコマンドをファイル冒頭に書くことを推奨
● ワークスペース変数を消去する
clear
● プロットをすべて閉じる
close all
● コマンドウィンドウをクリアする
clc
Tip
MATLABでは,スクリプ
トの実行ごとに変数は初
期化されない.
基本的にはclearコマンド
で変数を消去してから処
理を開始することを推奨
する.
(例) プロット
さきほどのプロット処理をスクリプトに記述してみる
Tip
実行ボタンの代わりにF5
を押しても実行できる.
実行を中断するときは
,Ctrl+C.
コード片を選択してF9を
押すと,選択部分を実行
できる.
if文
Tip
any, all 関数を使うと,
ベクトルの要素の
any: 少なくとも1つ
all: すべて
が条件を満たしているか
を判定できる.
if 条件式
...
elseif 条件式
...
else
...
end
MATLABでは括弧の代わりにendを使う
for文
Tip
範囲ベクトル以外にも,
任意のベクトルを指定で
きる.
PHPやJavaScriptにある
foreachに近い感じ.
for カウンタ変数 = ベクトル
...
end
C言語等と流儀が大きく異なる
n = 0;
for k = 1:5
n = n + k^2;
end
例)
その他の制御構文
あとは大体C言語等と同じ
● while
● switch ~ case
● try ~ catch
● break, continue, return
実践してみる
ログの可視化を例にスクリプトを
作成してみよう
今回の目標
● x, y座標の時系列をそれぞれプロット
● xyプロット
● 目標値と推定値のxyプロットの比較
Step 1. データの読み込み
loadコマンドを使用してデータ
を読み込む
データのダウンロード:
https://drive.google.com/file/
d/12jh09-lfLfoem2iLbqcIjP3T
8QDzn8-k/view?usp=sharing
※Xiphosura開発時の実際のデータ
Step 1. データの読み込み
x, y, θ 目標値 x, y, θ 推定値
時間
Step 2. 必要な部分の取り出し?加工
(6~8行目)
各列を取り出して変数に代入
データはmm単位で10倍の値が保
存されているため,10で割って
mmに直す
(11行目)
x_refを試しにプロットしてみる
Step 2. 必要な部分の取り出し?加工
プロットを2枚出したい場合
figure(1)
Figure 1を表示(なければ作成)
Step 3. xyプロットの作成
(11行目)
x_ref, y_ref を使ってxyプロッ
ト
(12行目)
数値の縦横比を均等にする
Step 4. プロットを追加する
(13行目)
現在のグラフを保持
(これを実行しないと上書きされてしまう)
(14行目)
x_est, y_estについてもxyプロッ
トを作成
赤い線で新しいプロットが追加
される
Step 4. 見た目をいじる
プロパティエディタで好きなだけ
いじる
ファイル→コード生成をクリック
createfigure.m として保存
Step 4. 見た目をいじる
生成したcreatefigure.mを使用し
てプロットを作成するように,
コードを変更する
関数を作成する
MATLABでは,ファイルとして
関数を定義する
関数の書式
出力引数 入力引数関数名
出力引数がない例
アジェンダ
今回の内容は以下の3つです.
1. 惭础罢尝础叠/厂颈尘耻濒颈苍办とは?
MATLAB/Simulinkがどのようにマイクロ
マウスの製作に役立つか説明します.
2. コマンドウィンドウで使う
まずは電卓としてMATLABを使って
みましょう.
3. スクリプト?関数を作る
本格的なプログラミングを行うための
基礎を学びます.
オンライン
リソース
自学自習に役立つウェブサイトを
紹介
MATLAB Onramp
MATLABの基礎をブラウザ上で
学べるオンラインコース
約2~3時間で完了できる
(こちらで自習するとより身につくと
思います)
https://matlabacademy.math
works.com/jp
MATLAB Cody
MATLABを使ったオンラインの
プログラミング問題集.
簡単な入出力から高度なアルゴ
リズムまで,様々な問題が揃っ
ている.
日本語の問題もあり.
https://www.mathworks.com
/matlabcentral/cody
次回予告
Simulink入門
3/16(土)
惭础罢尝础叠/厂颈尘耻濒颈苍办とは?
MATLAB
科学?技術計算に特化したプログラミング
言語?開発環境.
特徴
? 行列?ベクトル計算を標準装備
? 習得しやすい言語仕様
? 豊富な標準関数?ツールボックスで
本質的でない実装の手間を省ける
Simulink
ブロック線図をベースにしたシミュレー
ションソフト.
特徴
? ブロックをつないでプログラミング
? シミュレーションと実装を一括で開発
? C/C++のソースコードをブロック線図
から生成できる(コード生成)
マイクロマウスへの
Simulinkの使用例
壁制御のシミュレーションを
題材に,Simulinkの基礎を
解説します

More Related Content

マイクロマウスのための MATLAB/Simulink 講座 第1回 - MATLAB入門