@takasehideki
FPGAをロボット(ROS)で
「やわらかく」使うには
~IFTD 2020 拡張版~
第7回ロボティクス勉強会
2020/12/18
⾃⼰紹介
@takasehideki
­ 京都⼤学 情報学研究科 准教授
­ JSTさきがけ 兼任研究者
­ 理研R-CCS 客員研究員
­ SWEST ステアリング委員
­ IPSJ-SIGEMB 運営幹事
­ TOPPERSプロジェクト 運営委員/箱庭WG
­ IoT ALGYAN 関⻄⽀部⻑代⾏補佐
­ Elixir: NervesJP kyoto.ex
­ ROS Japan Users Group
ü 関⻄勉強会 主催
ü ROSCon JP 実⾏委員
主なROS関係の研究開発プロジェクト
­ mROS: 組込み向けROS軽量実⾏環境
­ ZytleBot: ROSxFPGA統合プラットフォーム
­ Rclex: ROS 2 Client Lib for Elixir 2
Cockatrice
箱 庭
ロボットシステムと取り巻く課題
3
様々な状況に
対応する
複雑な制御
AI/ML処理の
ための処理性能
多品種少量⽣産の
展開への対応
限定された
計算資源と電⼒量
実世界との
膨⼤なデータの
やりとり
厳しい品質要求
への対応
ロボットの開発の進め⽅
• 開発の加速化のためには,,,
­モジュールの再利⽤性の促進
ü便利なものは使い回したい
ü⾞輪の再発明は避けたい
­プロセス間通信の効率的な管理
ü部品ごとに開発・保守したい
ü組み合わせを簡単に試したい
­サービスの向上に注⼒したい
4
統⼀的な開発フレームワークによる
設計開発の加速化に期待
ROS(Robot Operating System) とは︖
5
http://www.ros.org/about-ros/
ROS is not just framework,
but design platform for robots!!
• Plumbing: 出版購読型の通信モデルとミドルウェア
• Tools: プロジェクト管理,デバッグ,可視化,等
• Capabilities: 膨⼤なライブラリ・パッケージ
• Ecosystem: 世界規模の強⼒なOSSコミュニティ
Plumbing: 通信ミドルウェア
• Publish / Subscribe messaging infrastructure
­ROSノード︓ロボットシステムを構成する機能単位
­基本はTopicを介した出版購読型︓⾮同期の疎な通信⽅式
üノードの登録・変更・削除・配置が容易に実現できる
ü障害時にはプロセス/ノード単位で再起動ができる
6
node1
node2
node3
node4
Topic1
Topic2
node5
出版(Publish) 購読(Subscribe)
msg
msg
msg
msg
• その他の通信⽅式
­ Service: 同期式
­ Action: 同期と⾮同期の組合せ
­ Parameter: 多変量辞書
Tools: 開発促進のためのツール群
• catkin_tools: プロジェクト構成/ビルドシステム
• rqt: Qtベースのデバッグフレームワーク
• gazebo: 3D物理シミュレーションツール
• rviz: 可視化ツール
­他にもroslaunch, rosbagなど,,,
7
Capabilities: 再利⽤性の⾼い⾞輪
• ROSパッケージ︓有⽤な機能がまとめられたライブラリの集合
­2,000以上のパッケージが公開されている
ühttps://index.ros.org/packages/
­利点︓既存資産として活⽤できる
üコンポーネント指向開発を実現できる
8
パッケージ名 内容
tf ロボットの3次元座標と連鎖関係,時間の管理
teleop ロボットの移動⽅向の操作
usb_cam USBカメラの画像の取り込み
Navigation 地図ベースの⾃⼰位置推定と経路計画のアルゴリズム
MoveIt マニピュレーションの制御アルゴリズム
Ecosystem: 世界規模のコミュニティ
• オンライン
­ROS Wiki: パッケージ・⽂書の公開
­ROS Answers: Q&Aページ
­ROS Discourse: リリースやイベントの告⽰
üTSC, SIG-WGsの議事録も全て公開
• オフライン
­ROSCon: 世界規模の開発者会議
ü最近はlocal conf.も
­SIG meetups, workshop,
local events, etc.,,,
9
ROSの変遷
10
• 単体ロボット
• WS級の計算資源
• ⾮リアルタイムな制御
• 理想的なNW環境
• Ubuntu/amd64のみ
• 主に研究⽤途
• 複数ロボット(協調動作)
• 組込み規模での動作要求
• リアルタイム制御
• 不安定なNW環境への対応
• Win/Macでもarm64でも
• 実製品への適⽤
http://www.ros.org/news/
2017/11/ros-turns-10.html
ROS 2の新機能
• DDS (Data Distribution Service)
• Quality of service
• Lifecycle state machine
• Actions
• Intra-process communication
• ros1bridge
• colcon build tool
• Python launch system
• Multi platform support
11
https://www.slideshare.net/takasehideki/
robot-operating-system-236990359/22
https://shop.cqpub.co.jp/hanbai/books/MTR/MTR202009.html
ROS 2のソフトウェア階層構造
12
node.cpp
rclcpp
node.py
rclpy
RCL(ROS Client Library)
RMW(ROS MiddleWare)
DDS A
Operating System
node.ex
rclex
・・・
• 出版購読通信を提供
• ノード⾃動検出 など
DDSはOMG標準仕様として規定
• 共通の基盤機能
• 実装はC⾔語
• 各⾔語から呼び出すことで
ライブラリを開発可能
DDS B ・・・
• DDSの通信機能を抽象化するAPI層
• 複数のDDS実装から選択可能
13
http://4c281b16296b2ab02a4e0b2e3f75446d.cdn
ext.stream.ne.jp/randc/mirai/2-3_ros2_LP.pdf
ROS 1 vs. ROS 2
• ROS 2はまだまだ発展途上 Foxyでほぼほぼ決定版︖
• 既存パッケージを使いたいならROS 1
これからスクラッチ開発で今後の強みとするならROS 2
• 使いたい機能が熟れてきているならROS 2移⾏すべき
­MoveIt,リアルタイム制御,セキュリティ,,,
­むしろ積極的なcontributionを︕︕
• ROS 1の寿命はあと1~2年と⾔って差し⽀えない︖
­Python 2/3問題も考慮すべき (MelodicはPython 2)
­最終版のNoeticでも少なくとも2025年5⽉でEOFを迎える
14
そんなことより,,,
15
FPGA
まるで
わからん
16
IOB
SB
CB LB
IOB
IOB
SB
IOB LB
SB
CB CB
SB
CB
SB SB
CB CBLB IOBIOB LB
SB SB SB
IOB IOB
CB
CB
CB
CB
CB
CB
⼊出⼒ブロック
コネクションブロック
LB 論理ブロック
IOB
SB スイッチブロック
CB
プロセッサ
通信バス
FPGA
HW
SW
SW
FPGA (Field Programmable Gate Array)
• ハードウェアを⾃由に形成可能なLSI
• GPUよりも電⼒効率に優れる
• 最近の組込み分野ではプロセッサ
と密結合されたSoCが主流に
­並列性のある⾼負荷処理はHWで
FPGAの⽤途
• ASICの設計・検証⽤LSIに
­ASICの機能を製造前に検証できる
­HWの完成前からSWの開発が始められる
• 最終製品に組み込むLSIとして
1. (独⾃仕様な) 通信I/Fの⾼応答化
2. ⾼負荷処理のオフロード ⾼速化と低電⼒化
ü⾦融市場取引,ロボット,データセンター,機械学習,...
­出荷後のデータ書換え機能を持たせることもできる
17
⾦融市場取引
• 株式相場の値動きを解析して⾼速に売買取引
­⾼頻度取引(HFT)の⾃動売買では超⾼速応答が必須
18出典︓井上, FPGAによる⾦融業務アクセラレーション­複合イベント処理を題材に­, 情報処理, 2012.
W. Wang, “Black-Scholes in hardware,” Overload Journal, 2012.
ロボット
• Phenox: FPGA搭載ドローン
(Xilinx Zynq XC7Z010)
­FPGAは主に信号処理を担う
19
• LOVOT
出典︓本郷⾶⾏機株式会社 - Phenoxプロジェクト http://phenoxlab.com/phenox2.html
テクノロジー | LOVOT[らぼっと] https://lovot.life/technology/
データセンター
• Microsoft Catapult
20出典︓A. Putnam, et al., A Reconfigurable Fabric for Accelerating Large-Scale Datacenter Services, ISCA, 2014.
A. Putnam, Large-Scale Reconfigurable Computing in a Microsoft Datacenter, HotChips26, 2014.
機械学習
• CNN/DNNのアクセラレータ
­パイプラインをニューロン・シナプスの値が流れる
21出典︓K. Ovtcharov, et al. Toward Accelerating Deep Learning at Scale Using Specialized Hardware in the Datacenter, HotChips27, 2015.
C. Zhang, et al. Optimizing FPGA-based Accelerator Design for Deep Convolutional Neural Networks, FPGA 2014.
ハードウェアの設計レベル
• RTL: Register-Transfer Level
• デジタル回路を記述する⼿法の⼀種で,
回路の動作を構成する表現
­データ転送︓レジスタ間のデジタル信号の流れ
­それに対する論理演算の組み合わせ
üTimed設計︓「なに」を「いつ」「どのように」を表現
22
レ
ジ
ス
タ
組合せ
回路
レ
ジ
ス
タ
組合せ
回路
クロック
出⼒⼊⼒
⾼位合成 (HLS: High Level Synthesis)
• 抽象度の⾼い動作記述からRTLを⽣成する技術
­汎⽤プログラミング⾔語によって振る舞いを定義
­「なに」を⾏うかに重点を置いて設計する
­ソフトウェア志向の協調設計との親和性が⾼い
23
プロセッサ
通信バス
FPGA
func2
main
func1
int_t main () {
a = func1(xxx);
b = a + func2(yyy);
}
int func1(int x) {
…
return val;
}
int func2(int x) {
int a[N];
int i;
for(i=0;i<N;i++){
a[i] = ・・・;
:
}
}
x
func
i
a
func2
⾼位合成 (HLS: High Level Synthesis)
24出典︓Y Explorations, Inc.: FAQ - ⾼位合成関連 http://www.yxi.com/old/Japanese/faqJ.html
① HDLによるRTL設計
② ⾼位⾔語による設計
a.動作レベルの合成
b.HLS対応コードの⽣成
c.DSL for HLS
③ データフローによる設計
a.メタ⾔語からの合成
b.DFGからの(直接)合成
25
設計レベルでの分類
出典︓M. W. Numan, et al.: Towards Automatic High-Level Code Deployment on Reconfigurable Platforms:
A Survey of High-Level Synthesis Tools and Toolchains, IEEE Access, 2020.
⾼位合成系 ⼤全
26出典︓R. Nane, et al.: A Survey and Evaluation of FPGA High-Level Synthesis Tools, IEEE T-CAD, 2015.
多くはC/C++と
その機能拡張
(#pragma, parallel lib.)
他にも,,,
• Scala (Chisel)
• Haskell (CλaSH)
• KARUTA (origin)
• Java (Synthesijier)
• Python (PyCoRAM)
すぐに触りたい︖︖
27
アダプティブコンピューティング研究推進体(ACRi)
https://www.acri.c.titech.ac.jp
効率的なロボットの実現に向けて
28
• 様々な状況に対応する複雑な制御
• 限定された計算資源と電⼒量
• AI/ML処理を実現する処理性能
• 多品種少量⽣産の展開への対応
FPGA
Ø⾼機能・多機能化
Ø省電⼒化
Ø並列性能
Ø設計柔軟性
ROS meets FPGA
29
•開発⽣産性の向上への期待
•豊富なOSSパッケージ
•分散システム・マルチスケール対応
•書換・再構成可能な回路を設計
•省電⼒性・並列性能の向上
•CPUとの密結合による柔軟な構成
Ø ROSとFPGAの双⽅で
⾼度な開発知識が求められる
Ø ロボット技術者がFPGAを
導⼊する敷居は⾼い (逆も)
FPGAをROSで使うには︖
• トップダウン︓
­システム設計時からFPGAとROSをインテグ
• ボトムアップ︓
­FPGA導⼊済みのロボット/モジュールをROS化
• チャレンジ︓
­ROSノードそのものをFPGA化する
[T. Ohkawa, et al., RoSE 2019]
[Y. Ishida, et al., Advanced Robotics 2020]
­ ROSとFPGAを協調設計する
[D. P. Leal, et al, FPT 2020]
30
https://roscon.ros.org/2017/presentations/ROSCon
%202017%20ROS%20Compliant%20FPGA.pdf
閑話休題︓ros2-forest
31
https://github.com/ros2-forest/forest
FPGA
トップダウンなアプローチ
• ROSはつまるところ通信ライブラリである
• SoC FPGAの活⽤︓CPUからFPGAをドライバとして使う
üトピックを外部ノードへのインタフェースとする
(1) CPUからFPGAにデータを送信して処理をオフロード
(2) FPGAでデータを直接処理してからCPUに送信
32
CPU
bus
ROS
data
circuit
nodetopic
datacircuit
driver
nodetopic
driver
FPGA
ROS x FPGAの適⽤事例
33
CPU
ROS
camera
Image
Preprocessor
driving
motor
webcam
SVM
Classifier
新⽥泰⼤・⽥村爽・⾼瀬英希 ”ZytleBot: ROSベースの⾃律移動ロボットへのFPGAの統合に向けて“
IEICE-RECONF 201909 https://www.slideshare.net/takasehideki/zytlebot-rosfpga
ROS x FPGAの適⽤効果
34
• ログデータをFPGAに
送信して回路処理を確認
• FPGA回路のテストや
結果⽐較を容易化
• sliding window+SVMの
画像処理をハードウェア化
SVM Classification
!
!"#
$
𝑤! 𝑥! + 𝑏
Feature Extraction
8x8 BGR 8x8 HSV HOG
システムの⾼性能化
開発・検証コストの⼯数削減
新⽥泰⼤・⽥村爽・⾼瀬英希 ”ZytleBot: ROSベースの⾃律移動ロボットへのFPGAの統合に向けて“
IEICE-RECONF 201909 https://www.slideshare.net/takasehideki/zytlebot-rosfpga
ボトムアップなアプローチ
• すでにFPGAを導⼊済みのロボット/モジュール
­安川電機︓ロボットコントローラ YRC1000
­TTTech Industrial︓Nerve Blue
­Terasic︓Self-Balancing Robot
üDE10-Nano Kit 搭載
35
ROS対応による価値向上
ロボットへの導⼊容易化
Intel FPGA SoCのROS対応
• ROS 2 Dashing on Terasic Self-Balancing Robot
­ Terasic純正 Linux LXDE Desktop の
Ubuntu rootfs 16.04を18.04に
(kernel v4.5 -> v5.4)
­ FPGAカメラモジュールを追加
36
FPGA
CPU
ROS
motor
driver
control /tf
/image
6-axis camera
/cmd
driver
Image
Preprocessor
imu
ホストPCからの
/cmd 出版
DE10-Nanoの
ターミナル
ロボットの
実動作
3次元座標 /tf の表⽰FPGAカメラ画像
/image の表⽰
ホストPCからの
/cmd 出版
ロボットの
実動作
3次元座標 /tf の表⽰FPGAカメラ画像
/image の表⽰
まとめ
• ROS is not just framework, but design platform!!
­ロボットシステムの開発を加速化
­ROS 2の開発が鋭意進⾏中 Letʼs contribute!!
• ROSをFPGAでやわらかく使うには︖
­トップダウン︓システム設計時からFPGAを導⼊
­ボトムアップ︓既存のロボット/モジュールをROS化
­そんなことより,新しいコトしたくない︖︖
38
ROS Japan Users Group
• Discourse: https://discourse.ros.org/c/local/japan
• connpass: https://rosjp.connpass.com
­勉強会・講習会など 初⼼者から歴戦の猛者まで︕
­関⻄や瀬⼾内・九州でも開催︕
­メンバー数 1,982名 @2020/12/18
39
üSlack: rosjp
üTwitter: #rosjp

FPGAをロボット(ROS)で「やわらかく」使うには