ロボットにおける高速計算を実現するための
FPGA/ASIC/GPU開発～実装ソリューション

MathWorks Japan
アプリケーションエンジニア部© 2023 The MathWorks, Inc.
1

自律ロボティクス開発ワークフロー
3Dシミュレーション

Simulink®
MATLAB®
システムエンジニアリング
System Composer™
連成

プラットフォーム設計

シーン・環境AI・自律系設計

オブジェクト・アクター

ロボットとの接続

ロボットモデル

認識・自己位置推定

制御

モーションプランニングテスト

ハードウェアへの実装

検証と妥当性確認
実装

Raspberry Pi™

ASIC, FPGANVIDIA® Jetson®

PLC

ROS Nodes

PX4 Autopilot

Speedgoat2

アルゴリズムがシミュレーション上では動くことは分かったけど…
GPU、FPGA、ASICは非常に優れたデバイスですが、実装にはハードルも…
準備のハードル ・ハードウェアのアクセスが大変実装のハードル・ハードウェアやインターフェイス周りの知識が必要
・ハンドコーディング時にバグが混入

・アルゴリズム開発環境と検証環境／言語が異なり、検証のハードル 性能検証するのが難しい

GPU

FPGA/ASIC
MATLAB／Simulinkを使うことでこれらのハードルを大きく下げ、“本質”に集中してGPU＆FPGAを開発しましょう！

3

Agenda・前半１５分：GPU開発のハードルを下げる

準備
実装
を活用
検証

・後半１５分：FPGA/ASIC開発のハードルを下げる
準備
実装
を活用

検証
4

Agenda・前半１５分：GPU開発のハードルを下げる

準備
実装
を活用
検証

・後半１５分：FPGA/ASIC開発のハードルを下げる
準備
実装
を活用

検証
5

デモ：点群処理での地面検出アルゴリズムをGPUへ実装▪

ゴール：– 点群処理での地面検出のアルゴリズムをGPU（NVIDIA Jetson Orin™）へ実装▪

ハードル：既存の開発方法▪

MATLABを活用する方法–
準備

ハードウェアへのアクセス– サポートパッケージでJetsonと連携–
実装

ハンドコーディング– 開発したアルゴリズムと等価なGPUコードを自動生成

検証–

開発環境と検証環境の相違– 同一環境上で性能検証

アイデアを具現化する “本質”に集中できる6コード生成・実行デモ

7

Agenda・前半１５分：GPU開発のハードルを下げる

準備– サポートパッケージでJetsonと連携

実装
検証

・後半１５分：FPGA/ASIC開発のハードルを下げる
準備実装

検証
8

サポートパッケージでJetsonと連携
お困りごと：ハードウェアへのアクセスが難しい

入力

サポートパッケージで連携環境構築支援

出力

サポートパッケージ

開発用PC

NVIDIA Jetson Orin™

ディスプレイ

サポートしているハードウェア

NVIDIA Jetson Orin™、NVIDIA Xavier™ NX、NVIDIA Jetson AGX Xavier
NVIDIA Jetson Nano、NVIDIA Jetson TX2、NVIDIA Jetson TX1、NVIDIA DRIVE PX2

簡単にハードウェアにアクセスでき、素早くラピットプロトタイピングに移れる

9

Agenda・前半１５分：GPU開発のハードルを下げる

準備– サポートパッケージでJetsonと連携実装– 開発したアルゴリズムと等価なGPUコードを自動生成

検証

・後半１５分：FPGA/ASIC開発のハードルを下げる
準備実装

検証
10

開発したアルゴリズムと等価なGPUコードを自動生成
GPUコード生成対象選択①起動方法>> gpucoder もしくは②GPUコード化する関数を選択

ビルドタイプ選択

生成したコード確認③生成先を選択・ソースコード・MEX(MATLABで実行するコード)
・スタティックライブラリ(.lib)
・ダイナミックライブラリ(.dll)
・実行可能ファイル(.exe)④生成したソースコードを確認

GUIベースのアプリで等価なGPUコード生成可能

11開発したアルゴリズムと等価なGPUコードを自動生成
MATLAB環境で開発することでハードを意識せず、抽象度高く記述

生成
MATLABコード

GPUコード(CUDA)

データ転送、メモリの確保等、インターフェイス周りやハードウェア周りをあまり意識せずに記述することが可能
アルゴリズム開発という本質部分に集中できる12

Agenda・前半１５分：GPU開発のハードルを下げる

準備– サポートパッケージでJetsonと連携

実装– 開発したアルゴリズムと等価なGPUコードを自動生成

検証– 同一環境上で性能検証

・後半１５分：FPGA/ASIC開発のハードルを下げる
準備
実装

検証
13

Processor-in-the-Loop機能を用いたJetsonへの実装
Software-in-the-Loop

Processor-in-the-Loop開発用PC上でコード実行

GPUコード化対象部分のみ実行

実機検証

実機上でコード実行

MATLAB環境上で効率的に動作検証
14

GPU Performance Analyzerを用いた性能検証と最適化▪

コード実行割合の可視化と最適化
部分の特定によるチューニング– GPUとCPUの時系列の実行内訳を可視化し、時系列順に表示– 生成されたGPUコードのパフォーマ
ンスを分析し最適化可能– MATLAB環境上からGUIで確認

MATLAB環境上で性能検証と最適化が可能

15

武蔵精密工業株式会社
武蔵精密工業は、自動車部品ベベルギアの検査工程へのディープラーニングを用いた自動化を目指し、MATLAB®を用いたプロトタイピングを行いました。精度/速度の検証を経て、2018年5月からは製造現場での実証実験に取り組んでいます。今後、130万個/月の目視検査によって生じている作業負荷とコストの低減が期待されます。

“

カメラ接続や前処理、様々な学習済みモデルを簡単に利用でき、ワークフロー全体に取り組むことができました。
コンサルティングとの議論を通じ、課題解決に多くのヒントを得られ、担当エンジニアの成長にもつながりました。

“

武蔵精密工業、自動車部品の外観検査にディープラーニングを活用

本プロジェクトではMathWorksのコンサルタントと協力し、画像の撮影手法の検討から前処理、App Designerを用いたアノテーションツールの作成、モデルの精度改善に取り組み、成果を上げました。出来上がったモデルはGPU Coder™ の自動コード生成機能を用いNVIDIA® Jetson™に実装し、ディープラーニングの判定結果をPLCと連携させています。

MATLAB利用のメリット:••••

画像撮影から組み込みGPUへの実装まで一貫した開発ワークフロー
Class Activation Mappingによる判定要因の可視化
ラベリング作業効率化のためのGUIツール作成
MATLABの機能を効率よく活用するためのコンサルティングサービス

MATLABで始めるディープラーニング

ディープラーニング：製造現場で使える画像による異常検知
ビデオを見る (4:33)
16

すぐにお試しいただける製品例題

17

GPUパートまとめ・前半１５分：
GPU開発のハードルを下げる

準備– サポートパッケージでJetsonと連携実装– 開発したアルゴリズムと等価なGPUコードを自動生成検証– 同一環境上で性能検証

・後半１５分：FPGA/ASIC開発のハードルを下げる
準備
実装を活用

検証
18

Agenda・前半１５分：GPU開発のハードルを下げる

準備
実装を活用
検証

・後半１５分：FPGA/ASIC開発のハードルを下げる
準備実装を活用検証19

デモ：簡単な点群処理アルゴリズムをFPGAへ実装▪

ゴール：– 簡単な点群処理アルゴリズムをFPGA（Xilinx Zynq®）へ実装

開発用PC
▪

ハードル：既存の開発方法

Xilinx Zynq ZC702▪

LiDAR(Velodyne VLP-16)

Simulinkを活用する方法

ハードウェアへのアクセス– サポートパッケージでXilinx Zynq開発環境構築–実装

ハンドコーディング– 開発したアルゴリズムと等価なHDLコードを自動生成–検証

開発環境と検証環境の相違– 同一環境上で性能検証–準備

アルゴリズム開発という“本質”に集中することが出来る

20

FPGAへのLiDAR実装デモ21

Agenda・前半１５分：GPU開発のハードルを下げる

準備実装
検証・後半１５分：
FPGA/ASIC開発のハードルを下げる
準備– サポートパッケージでXilinx Zynq開発環境構築

実装

検証
22

サポートパッケージでXilinx Zynq開発環境構築
お困りごと：ハードウェアへのアクセスが難しい・・・
入力

サポートパッケージで環境構築支援

出力

サポートパッケージ

開発用PC

Xilinx Zynq ZC702

LiDAR(Velodyne VLP-16)

HDL Coder Support Package for Xilinx Zynq Platformでサポートしているハードウェア・デバイスファミリ
ZedBoard、Xilinx Zynq ZC702、Xilinx Zynq ZC706、Xilinx Zynq UltraScale+、
MPSoC ZCU102、Xilinx Versal AI Core Series VCK190

簡単にペリフェラル周りにアクセスし、素早くラピットプロトタイピングに移れる

23

Agenda・前半１５分：GPU開発のハードルを下げる

準備
実装
検証

・後半１５分：FPGA/ASIC開発のハードルを下げる
準備– サポートパッケージでXilinx Zynq開発環境構築

実装– 開発したアルゴリズムと等価なHDLコードを自動生成検証24開発したアルゴリズムと等価なHDLコードを自動生成
ターゲットFPGA選択

ハードへのマッピングを選択①生成先を選択HDLコード生成のみ or Vivado/Quartus等の開発環境と連携するかを選択③インターフェイス指定
入出力ポート数、通信I/F(AXI等)、デー
タサイズ・型を確認②実装対象のボードを選択
サポートパッケージでサポートしているボードをデフォルトで用意④ターゲット周波数指定⑤生成言語指定
VerilogHDL、VHDL

実装先選択⑥コード生成HDLコード、Vivado/Quartus等のプロジェ
クトファイル生成⑦ビットストリーム生成⑧FPGAに書き込みGUIベースのアプリでSoC FPGAシステム生成し、実装可能

25

階層構造やロジックにフォーカスした設計が可能▪

ハンドコーディングでRTLの設計▪

遅延を意識せず階層構造やロジックにフォーカスした設計が可能– 同期設計が難しい– 高い抽象度での接続– タイミング意識せず、シミュレーションと等価な動作をするHDLを生成– I/Oピンのアサインが手間– SoCビルダー／ワークフローアドバイ
ザー等による対話的なハードウェア割付

ハードウェア実装の細かいノウハウ習得より先に、すぐにアイデアを実現性検討出来る

26

Agenda・前半１５分：GPU開発のハードルを下げる

準備
実装
検証

・後半１５分：FPGA/ASIC開発のハードルを下げる
準備– サポートパッケージでXilinx Zynq開発環境構築

実装– 開発したアルゴリズムと等価なHDLコードを自動生成

検証– 同一環境上で性能検証

27

ロジックアナライザを用いたSimulink上からの検証
お困りごと：FPGAの性能改善・デバッグのためロジックの動作検証したい
ロジックアナライザを用いて信号線の時系列データを確認
信号の取得箇所選択

信号の値を確認

FPGAの動作をロジックアナライザにて検証可能

28

Simulinkと連携した動作中の実機パラメータ調整▪

実機動作中にレジスタ値を調整可能– 実機でのデバッグ作業時間を削減– 実環境での調整時間を削減– 問題の切り分けが容易

例：FPGAと通信し、色範囲設定レジスタを更新

実機実装を加速

実機実装後の実環境へのリファインも容易29

Simulink上からの実機実行時の動作検証▪

AXI Managerを使った動作検証

MATLAB Simulink
Ethernet/JTAG/PCIe– MATLAB/Simulink環境からオンボードメモリへのアクセス– 動作時のメモリ／IPのレジスタの値を読み出し・書き込み

MATLAB
AXI Manager IP
AXI4

AXIレジスタを持つIP

実装後の動作検証も強力にサポート

メモリ
コントローラ

I/O

DDR
メモリ

30

すぐにお試しいただける製品例題

FPGA 用のプログラム可能な FIR フィルター

FPGAを用いたレーン検知

FPGAを用いたLiDARデータからの地面検知

ビデオカメラ入力のエッジ強調処理
31

FPGAパートまとめ
・前半１５分：GPU開発のハードルを下げる

準備
実装
検証

・後半１５分：FPGA/ASIC開発のハードルを下げる
準備– サポートパッケージでXilinx Zynq開発環境構築

実装– 開発したアルゴリズムと等価なHDLコードを自動生成

検証– 同一環境上で性能検証

32

全体のまとめ
準備のハードルを活用することで・ハードウェアへのアクセスが大変・サポートパッケージでJetsonと連携／Xilinx Zynq開発環境構築

・ハードウェアやインターフェイス周りの知識が必要
実装のハードル ・ハンドコーディング時にバグが混入・開発したアルゴリズムと等価なGPU／HDLコードを自動生成

・アルゴリズム開発環境と検証環境／
検証のハードル言語が異なり、性能検証するのが難しい

・同一環境上で性能検証

GPU

FPGA/ASIC

MATLAB／Simulinkを用いることで“本質”に集中し、ラピットプロトタイピングが可能！

33

技術トレーニングコース（FPGA）▪

MathWorks技術トレーニングコース– パブリックコース（東京、名古屋、大阪）、オンサイトコース、オンライン▪

トレーニングコース受講のメリット– 短期間で豊富な機能を効率的に習得– 実用的な演習問題により、理解度向上

▪

関連コース
– HDL CoderによるHDLコード生成– MATLABとSimulinkによるXilinx Zynq SoCプログラミング（ZedBoard付き）
https://jp.mathworks.com/services/training/index.html
GPU／FPGA開発に向けた立ち上がりを強力にサポート

34

技術コンサルティングサービスのご紹介▪

MathWorksの技術コンサルティングとは？
– お客様の要求にあわせ、習熟度向上を目的としたアドバイザリーサービス▪

弊社製品をご利用頂く方の悩み（例：FPGA）– 手書きHDLでFPGA実装の経験はあるが、モデル記述に慣れない– Simulinkの経験はあるが、FPGAのことが良くわからない– SimulinkもFPGAも初めてで、何から始めればよいかわからない▪

コンサルティングサービスの内容– お客様のスキルレベル、開発フェーズにあわせた効果的な技術習得の計画立案– 短期集中型トレーニングパッケージのご提供と、フォローアップサポート
プロジェクトの早期立ち上げが可能に!
35

サポートの紹介▪

MathWorksのサポートエンジニア– お客様の環境への導入支援– 技術的な成立性確認をサポート▪

詰まりがちなポイントをサポート可能– お客様の開発環境構築– お客様で解決が難しいエラー– 弊社製品についての技術的ご相談

専門のエンジニアによる的確なサポート36

© 2023 The MathWorks, Inc. MATLAB and Simulink are registered trademarks of The
MathWorks, Inc. See www.mathworks.com/trademarks for a list of additional trademarks.
Other product or brand names may be trademarks or registered trademarks of theirrespective holders.
37

GPU Coderに必須となります

GPU Coder関連製品

Deep Learning Toolbox▪ ニューラルネットワークの構築、学習▪ データフィッティング▪ クラスタリング▪ パターン認識▪ 深層学習▪ GPUによる計算の高速化▪ MATLAB上で、アルゴリズム開発から実装までフローを統合

i terate▪ MATLABプログラムからC/C++コードを生成

verify/a ccelerateParallel Computing Toolbox▪ MATLAB & Simulink と連携した並列処理▪ 対話的な並列計算実行▪ GPGPU による高速演算▪ ジョブおよびタスクの制御コンピュータ
ローカルMean Squared Error (mse)

MATLAB Coder™

100Best Validation Performance is 0.01227 at epoch 26
Train
Validation
Test
Best

10-1

10-2

10-30

510152025

30

32 Epochs

Embedded Coder®
▪ MATLABプログラム/Simulinkモデル
から組込み用C/C++コードを自動生成

MATLAB
デスクトップ38

GPU Coder関連製品 : 画像処理・コンピュータービジョン
Image Processing Toolbox™
▪ コーナー、円検出▪ 幾何学的変換▪ 各種画像フィルタ処理▪ レジストレーション（位置合せ）▪ セグメンテーション（領域分割）▪ 画像の領域の定量評価
Image Acquisition Toolbox™
▪ デバイスから画像、動画直接取り込み
フレームグラバボード▪ DCAM, Camera Link®
▪ GigE Vision®, Webカメラ▪ Microsoft® Kinect® for Windows®
▪

Computer Vision System Toolbox™
▪ カメラキャリブレーション▪ 特徴点・特徴量抽出▪ 機械学習による物体認識▪ 動画ストリーミング処理▪ トラッキング▪ ステレオビジョン・３D表示
Statistics and Machine Learning Toolbox™
▪ 機械学習▪ 多変量統計▪ 確率分布▪ 回帰と分散分析▪ 実験計画▪ 統計的工程管理
39

PILによる検証とプロファイリング

PIL実行にはEmbedded Coderが必要です

Webcamハードウェア接続用オブジェクトの定義

hwobj = jetson('192.168.2.101', 'nvidia', 'nvidia');

コード生成用コンフィグレーション(PIL利用時は静的ライブラリ選択)

cfg = coder.gpuConfig('lib', 'ecoder', true);

プロファイリングの有効化とPILによる検証選択

cfg.CodeExecutionProfiling = true;
cfg.VerificationMode = 'PIL';

ホスト上での実行結果

ターゲット上(Jetson)での実行結果

Host PC

User

Target Hardware

結果差分確認
プロファイリングレポートで実行時間を確認

40