Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.

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

1.848 Aufrufe

Veröffentlicht am

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

Veröffentlicht in: Software
  • Als Erste(r) kommentieren

マイクロマウスのための 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の基礎を 解説します

×