Se ha denunciado esta presentación.
Utilizamos tu perfil de LinkedIn y tus datos de actividad para personalizar los anuncios y mostrarte publicidad más relevante. Puedes cambiar tus preferencias de publicidad en cualquier momento.

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

2.026 visualizaciones

Publicado el

2019/1/19に開催したマイクロマウスのためのMATLAB/Simulink講座の第1回資料です.MATLABの基本操作と,ログデータ可視化のためのプロットを主に扱っています.

Publicado en: Software
  • Sé el primero en comentar

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

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

×