12
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

MATLAB/SimulinkAdvent Calendar 2023

Day 10

MATLAB Workshop ~ライントレースのシミュレーション~ イベントレポート

Last updated at Posted at 2023-12-09

MATLAB/Simulink Advent Calendar 2023(シリーズ1)10日目の記事です. この記事では, 2023年に筑波大学と電気通信大学で行われた, MATLAB Student AmbassadorによるMATLAB Workshopのイベント内容を紹介します.

line_follower_video2.gif

イベントで使用したファイルと実行環境について

イベントで使用したファイルはこちら(GitHub)

本コンテンツは, 以下の環境で実行できることを確認しています.

  • MATLAB R2021a以降(R2021a~R2023b, 2023年11月27日現在)

また, 以下のToolbox及びSupport Packageが必要になります.

本コンテンツは日本語と英語に対応しています.
This content supports English and Japanese.

MATLAB AI Robotics Workshopとの出会い

本記事を読んでくださっている皆様, こんにちは!私はMATLAB Student Ambassadorとして活動させていただいている電気通信大学大学院修士課程2年生です. 私は, 電気通信大学内外にてMATLABを普及するための活動を2年程してきました. そして, 3年目に突入した2023年4月, MATLAB EXPO 2023にてMATLAB Student Ambassadorsがブース展示のお手伝いをするために準備をしている際のことでした. MathWorks Japanのエンジニアの方から, こんなお言葉を頂きました.

プログラミング初心者向けにMATLAB入門イベントを行うのもだいぶ慣れてきたみたいだし, 今度はMATLAB経験者向けに発展的なコンテンツを扱うイベントをやってみたら?

そして, 紹介していただいたコンテンツがMATLAB AI Robotics Workshopでした. これは, Deep Learningやロボットのシミュレーションといった興味深い内容をMATLABの様々な機能を使って行っていくコンテンツです. 他大学で既に利用された実績があり, 紹介していただいた時には, コンテンツとしてほぼ完成していました.

そこで, MATLAB Student AmbassadorのMATLAB普及活動の一環として, MATLAB AI Robotics Workshopを使ったイベントを行うことにしました.

MATLAB AI Robotics Workshopの内容

MATLAB AI Robotics Workshopは, ロボットのライントレースのシミュレーションを行うコンテンツとなっています. しかし, 普通のライントレースと違う点が一点あります. それは, ロボットに搭載されているカメラによって得られる前方の画像から, 転移学習により作成される回帰ネットワークによって制御を行うという点です. これを行うために, 以下のような作業をMATLAB&Simulinkで行っていきます.

1. 学習用の動画を作成

まずは, Simulink 3D Animationで再現された仮想のコースにロボットがいると仮定して, 学習を行うための画像を取得します. 取得された画像はビデオとして1つのファイルにまとめて保存しておきます.
genCourseTraj.png

2. 動画のラベリング

次に, MATLABのVideo Labelerアプリを用いて, 学習用のデータセットを作成していきます. 学習用に作成した動画の各フレームが入力された際に, ロボットが向かうべき方向を指定していきます.
annotateVideo.png

3. 回帰ネットワークの構築と学習

作成した学習用のデータセットを用いて転移学習を行い, ライントレースにおいてロボットが向かうべき方向を推定する回帰ネットワークを作成します. まず, 学習を行うためにデータセットの水増し(Augmentation)を行います. その後, 事前学習済ネットワークであるResNet-18の入出力に対して, ディープネットワークデザイナーを用いて変更を加えて, 回帰ネットワークにします. このネットワークと作成した学習用のデータセットを用いて転移学習を行います.
trainWhiteLine.png
私自身がMATLABでのDeep Learningに関する知識を多く有しているわけではなかったので, ディープラーニング入門MATLABによるディープラーニングに取り組みました. そして, datastore等, コンテンツを理解するのに必要な知識を勉強しました.

4. システムシミュレーション

最後に, 作成した回帰ネットワークを制御器として組み込んで, Simulinkでシミュレーションを行います. このシミュレーションは転移学習により作成された回帰ネットワークが制御器に組み込まれることで, 自分で作った学習用のデータセットに基づいて走るロボットがどの程度正確に白線をたどるかを確認します.
line_follwer.png

これらのコンテンツがMATLABのプロジェクトとしてまとめられており, 必要なToolboxのインストール等を行えば, 各ファイルのPATHを気にすることなく, すぐに実行することが可能です.

MATLAB AI Robotics Workshopへのコンテンツの追加

ここまで紹介した通り, MATLAB AI Robotics Workshopは, MathWorksのエンジニアの方によって, コンテンツとして既に完成されていました. しかし, MATLAB Student Ambassadorがこのコンテンツを用いてイベントを行うためには, もう少し工夫をする必要がありました.

事前準備の案内

本コンテンツはMATLABの様々な機能を使うため, 必要なToolboxの数も多くなっています.

このToolboxやSupport Packageのインストール方法を参加者全員に説明するのは, 週5時間勤務のStudent Ambassadorにとっては非常に多くの労力を割かなければならない作業です. そこで, 参加者の事前準備作業をお手伝いするスクリプトを組み込みました. これにより, 参加者は自分のMATLAB環境でワークショップが行えるかを確認できます. また, もしワークショップに必要なアドオン製品のインストールが出来ていない場合, どの製品をインストールする必要があるのかを知ることもできます.

参加者の事前準備作業をお手伝いするスクリプト

ここに記載するスクリプトはこちらのcheck_addons_jp.mlxにあります.

  • MATLABのバージョン確認
src/000_help/check_addons_jp.mlx
MATLAB_VER_FLAG = false;
matlab_ver = ['R' version('-release')];
if (isMATLABReleaseOlderThan("R2021a"))
    fprintf("MATLAB version: %s\n",matlab_ver);
    warning("このMATLABはワークショップで行う作業に対応していません.");
else
    MATLAB_VER_FLAG = true;
    fprintf("MATLAB version: %s\n",matlab_ver);
    disp("このMATLABはワークショップの作業に対応しています.");
end
  • Toolboxの確認
src/000_help/check_addons_jp.mlx
TOOLBOX_FLAG = false;
necessary_toolbox_list = [
    "Simulink";
    "Image Processing Toolbox";
    "Computer Vision Toolbox";
    "Deep Learning Toolbox";
    "Robotics System Toolbox";
    "Simulink 3D Animation"
    ];

% Create Installed toolbox list
toolboxes = ver;
installed_toolbox_list = string(zeros(length(toolboxes),1));
for ii = 1:length(toolboxes)
    installed_toolbox_list(ii) = string(toolboxes(ii).Name);
end

% Check
check_result = false(length(necessary_toolbox_list),1);
for ii = 1:length(necessary_toolbox_list)
    check_result(ii) = any( ...
        installed_toolbox_list == necessary_toolbox_list(ii) ...
    );
end

% Show result
if (all(check_result))
    TOOLBOX_FLAG = true;
    fprintf("ワークショップに必要なToolboxは既にインストール済みです.\n");
else
    warning("以下のToolboxがインストールされていません.\n")
    for ii = 1:length(check_result)
        if (~check_result(ii))
            fprintf("* %s\n",necessary_toolbox_list(ii));
        end
    end
end
  • サポートパッケージの確認
src/000_help/check_addons_jp.mlx
try
    net = resnet18;
    fprintf("ResNet18は既にインストールされています.");
    SUPPORT_PACKAGE_FLAG = true;
catch
    warning("Deep Learning Toolbox Model for ResNet-18 Networkのインストールが必要です!!");
    SUPPORT_PACKAGE_FLAG = false;
end
  • 事前準備の確認
    最後に, ここまでの確認の結果, 対応が必要な事項をリストアップします.
src/000_help/check_addons_jp.mlx
READY = true;
if (~MATLAB_VER_FLAG)
    READY = false;
    fprintf("MATLAB version: %s\n",matlab_ver);
    warning("MATLABのバージョンについて確認が必要です.");
end
if (~TOOLBOX_FLAG)
    READY = false;
    warning("まだインストールされていないToolboxがあります.");
    for ii = 1:length(check_result)
        if (~check_result(ii))
            fprintf("* %s\n",necessary_toolbox_list(ii));
        end
    end
end
if (~SUPPORT_PACKAGE_FLAG)
    READY = false;
    warning("Deep Learning Toolbox Model for ResNet-18 Networkのインストールが必要です!!");
end
if (READY)
    fprintf("おめでとうございます!\n");
    fprintf("事前準備は完了です!\n");
    spy
else
    fprintf("まだ, 事前準備が完了していません.\n");
end

コンテンツ理解の促進のためのセクション実行時の補足説明の表示

本コンテンツは, MathWorksエンジニアによって既に必要なスクリプトが記載されたライブスクリプトを配布します. そして, 参加者がライブスクリプトのセクションを順番に実行していくことでシミュレーションを行っていきます. もちろん, ライブスクリプトにはシミュレーションや転移学習に必要な知識を示すための説明があります. しかし, 参加者にとってはセクションを実行していくだけの作業になりかねません. せっかく貴重な時間を割いてワークショップに参加して頂くのに, ただMATLABスクリプトを実行するだけで終わってしまったらもったいない...

そこで, 各セクションを実行した後に, そのセクションのスクリプトで何をしているのかを説明するテキストを表示させるようにしました. これはRPGから着想を得たもので, 自分が行動を起こした後にその説明を読むことで, スクリプトで行っている作業内容の理解を促すことを目的としています.
output_message_video2.gif

こちらは, MathWorksの方に

自分が何をしているのか俯瞰できていいと思う

というお言葉をもらうことができたこともあり, ワークショップのコンテンツとして採用しました.

MATLAB経験によるコンテンツを進める速度の違いへの対策

発展的なコンテンツを用いたイベントを行う際に気を付けなければならないのが, 参加者ごとにコンテンツを進める速度に違いがあることです. 参加者の中には, MATLABを研究で毎日使用している方もいれば, つい最近MATLABを使い始めた方もいらっしゃいます. 当然, MATLABを普段から使いこなしている方は本コンテンツも素早く理解して進めていくことができます. 反対に, MATLABを最近使い始めた方にとっては, ライブスクリプトを見るのも初めてかもしれません.

そこで, できるだけ多くの参加者に満足していただくために, いくつかの追加コンテンツを用意しました.

  • MATLAB初心者向けコンテンツ
    • MATLABにおけるToolboxのインストール方法を説明したライブスクリプト
    • MATLABライブスクリプトの実行方法を説明したライブスクリプト
      how_to_use_livescript.png
    • MATLABにおいてアニメーションを作成する方法を説明したライブスクリプト
  • MATLAB経験者向けコンテンツ
    • シミュレーション結果からアニメーションを作成するライブスクリプト
      evaluate_result_video.gif
    • 転移学習で作成したネットワークに対してGrad-CAMを用いた予測の理解を行うライブスクリプト
      check_annotation_result.png
    • MATLAB Report Generatorを用いて, シミュレーション結果に関するレポートの自動作成を行うライブスクリプト
      generate_report.png

英語対応

もちろん参加者の中には留学生の方もいらっしゃいました. また, MathWorksエンジニアが作成されたMATLAB AI Robotics Workshopも英語対応がされていたことから, 私がオリジナルで追加したファイルについても, できる限り, 英語対応を行いました.

MATLAB Workshopの開催

MathWorksの方に協力していただき, 2023年12月1日に電通大にてMATLAB Workshopを開催しました. また, MathWorksの方からお誘いを受け, 2023年11月30日に行った筑波大でのMATLAB Workshopにおいても同じイベントに講師として参加しました.

2023/12/1 AI+Simulation Workshop @ 電気通信大学

電気通信大学のイベントでは「普段使っているMATLABが社会ではどのように使われるのかについて, その一端を体験してみよう!」ということで, MATLAB&Simulinkでのシミュレーションを行うことを目的としたイベントを行いました.

最初にMathWorksのエンジニアの方に「これまでのキャリアの中でどのようにMATLABを使用してきたか」についてご講演をしていただきました. その後, Workshopのコンテンツに取り組んでいきました.

電気通信大学でのイベントの詳細

電気通信大学でのイベントのポスター
Dec2023_SimulationWorkshop_poster_latest_SNS.jpg

電気通信大学でのイベントのアジェンダ
担当: MATLAB Student Ambassador 1名

時間 コンテンツ
16:30~16:35 事前準備(MATLABやToolboxのインストール)の確認
16:35~17:00 MathWorksエンジニアによる「MATLAB×キャリア」オンライン講演
17:00~17:15 ワークショップ内容の解説
17:15~18:50 ワークショップ
18:50~19:00 振り返り, アンケート, ギフト配布

電気通信大学でのイベントで生じたトラブル

  • Video Labelerディープネットワークデザイナーといったアプリがフリーズしてしまう.
    → MATLABを再起動して作業を再開.
  • 画像へのPATHの作成に不具合が生じてしまい, 正しく画像を抽出することができなくなってしまった.
    → 代替PCを用いて作業を続行
  • Simulinkを開くのに長大な時間を要してしまう
    → 他の参加者にお願いをして, 2人で1台のPCを使用していただいた.
  • ai_robotics_workshop.prjを実行してもメニューが現れない.
    → ファイル破損が原因と推測したため, 新しくワークショップに必要なファイルをダウンロードしていただき再開

2023/11/30 AI+Robotics Workshop @ 筑波大学

筑波大学でのイベントでは「AIや画像処理といった最新技術をMATLABを用いて経験していく」ことを目的として, MATLABによる深層学習を組み込んだワークショップイベントの講師を務めさせていただきました.

筑波大学は電気通信大学とは異なり, 学生数が多い総合大学であることから, ワークショップの前日に筑波大学のMATLAB Student AmbassadorによるMATLAB入門イベントを開催していただきました. そして, ワークショップ当日は, MathWorksエンジニアによるロボットのライントレースのデモを行っていただいた後にワークショップを行っていきました.

IMG_3374.JPG

筑波大学でのイベントの詳細

筑波大学でのイベントのポスター
F9avXxmbYAAiRkL.jpg
筑波大学のMATLAB Student Ambassadorがポスターを作成されました. 電気通信大学でのイベントのポスターはこちらのデザインを真似して作らせていただきました.

筑波大学でのイベントのアジェンダ
担当: MATLAB Student Ambassador 2名, MathWorks Japan エンジニア 2名

時間 コンテンツ
14:00~14:15 MathWorksエンジニアによるロボットのライントレースのデモ
14:15~14:30 ワークショップ内容の解説
14:30~16:50 ワークショップ
16:50~17:00 振り返り, アンケート, ギフト配布

筑波大学でのイベントで生じたトラブル

  • Video Labelerディープネットワークデザイナーといったアプリがフリーズしてしまう.
    → MATLABを再起動して作業を再開.
  • Add-on explorerが開かず, インストールが行えない
    → 用意していた代替PCにより作業を開始
  • ラベリングしたデータ(exportedLabels.mat)をMATLABで読み込めない
    Video Labelerを使った作業の最後に「保存」ではなく「エクスポート」をしていただくことで解決

まとめ

今回は, 2023年に筑波大学と電気通信大学で開催したMATLAB Workshopについて紹介しました.

ワークショップではMathWorksのエンジニアの方が作成されたMATLAB AI Robotics WorkshopをMATLAB Student Ambassadorが開催するイベント用に変更したファイルを用いて, Deep Learningにより作成された制御器によるロボットのライントレースのシミュレーションを実施しました.

両方のイベントにおいて, 全ての参加者がSimulinkでシミュレーションを実行できました. 中には, 用意されたSimulinkのブロックをいじって, 高速な走行でも正確に白線をたどるシステムを作成されている方もいらっしゃいました. イベントを開催する側の一員として, 参加者の皆さんが思い思いに楽しんでいただけているようでほっとしました!

課題としては, 社会人を経験していない学生が本イベントを行うと, Interface2023年8月号やMATLAB EXPOで仕入れたMBD等の知識はあっても「シミュレーションがどれだけ重要な技術であるか」に関する説得力のある説明を行うのは難しいと感じました. もし次回があれば, どんどんMathWorksのエンジニアを頼っていこうと考えています.

12
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?