ZytleBot

⾃律移動ロボットへのFPGA活⽤のすゝめとROS 2移⾏への道
⽥村 爽 新⽥ 泰⼤ ⾼瀬 英希（京都⼤学）

Agenda•ROSにおけるFPGAの活⽤­ FPGA Design competition­ LinuxによるFPGAの扱い⽅­ 活⽤事例紹介•ROS 2への移⾏­ ROS 2対応のモチベーション­ ROS 2ツール使ってみた2

ROSにおけるFPGAの活⽤• FPGA Design competition• LinuxによるFPGAの扱い⽅• 活⽤事例紹介FPGA Design competition• FPT2018およびHEART2019

において併催された
⾃律移動ロボット開発コンテスト• 概要­ 道路を模したコースを⾛⾏­ センサ類はCMOSカメラのみ­ プロセッサは組込みCPUのみ、さらに外部との通信は禁⽌されているため、FPGAをうまく活⽤することが求められる­ ⾞体に関しては⾃由︕
ü ロボットは⾃作でも既製品でもOK!

4

FPGAとは︖• Field Programmable Gate Array­ 中⾝を改変可能なLSI­ ハードウェアそのものの振る舞いを変えられる­ 独⾃のデジタル回路を⾃由に何回でも形成できる

10001

00010

0…

…

1110

11111

0

D-FF
D

Q

CB

0000

IOB

LB

CB

LB

CB

SB

SB

CB

OUT

SB

SB

CB

LB

CB

LB

CB

SB

CB

IN

CB

LUT

SB

CB

IOB

SB
CB

IOB

CB

IOB

SB

SB

IOB
LB 論理ブロック

IOB

IOB

IOB
CB コネクションブロック

SB スイッチブロック IOB ⼊出⼒ブロック

5

FPGAの強みI)(A)(C

6

FPGA vs GPU
Pros­ 消費電⼒­ リアルタイム性• Cons­ 開発コスト••備考­ 性能は設計とやりたいこと次第­ 値段も安いとは⾔い切れない

⾼位合成C, C++
🔻
ハードウェア記述⾔語
FPGA向け統合開発環境
C, C++
🔻
Linuxを含めた実⾏環境

設計ツール・設計⼿法の開発＆改良
7

プログラマブルSoC••FPGAのみでは柔軟性に乏しいCPUとFPGAを1チップに収めたプログラマブルSoC­­•

CPUにはRTOSやLinuxを搭載可能­••

Xilinx︓Zynq
Intel︓SoC FPGA

もちろんROSもデバイスドライバを介してFPGAをデバイスとして扱うことができる
FPGAの回路の再書き換えをLinuxから⾏うことも可能に︕
Sensor(Linux kernel 4.10以降)

CPU
Ubuntu 18.04/dev/video0

FPGA

Configuration
画像処理
IP CoreIP CoreIP Core8LinuxからFPGAを操作• FPGAの設計ツールで、CPUとFPGA回路間を配線­ ツールによりLinuxの物理アドレスへの割り当てが⾏われる• 物理アドレスを操作
a.

メモリマップドIO­ /dev/memで制御（危険︕）b.

UIO(User space IO)­ ユーザプロセスから指定範囲のメモリを操作する機能c.

デバイスドライバの作成­ 安全・⼿間がかかる­ 再利⽤性◎9活⽤事例︓ZytleBot•

Zynq + TurtleBot­ Zynq UltraScale+ MPSoC­ TurtleBot3 : ROS
standard platform robot kit

10TurtleBot3 & ZytleBot
LiDAR

FPGAboard

Raspberry Pi

Pcam 5C
USBCam11

システム構成&開発メンバー• 学⽣2⼈で開発­SW担当︓⽥村（本⽇発表）
Driving SystemüGazeboシミュレータ⽤の環境作成
ü⾃律移動アルゴリズム全般
ü3Dモデリングツールによるパーツ作成・印刷­HW担当︓新⽥üFPGAでするべきアルゴリズムの検討とその実装üFPGAの回路設計
12

FPGAによる⾚信号検出• スライディングウィンドウ法 + SVM
Feature Extraction• ⼊⼒:320pix*240pixフレーム画像• 出⼒:891個のウインドウの推定結果­ レイテンシ︓2milisec­ HW使⽤ ︓6.22milisec = 160fps
SWのみ︓1700milisec = 0.58fps

8x8 BGR8x8 HSV HOG
SVM Classification%! 𝑤" 𝑥" + 𝑏"#$ü275倍⾼速化
https://www.slideshare.net/takasehideki/zytlebotrosfpga/takasehideki/zytlebot-rosfpga
https://github.com/lp6m/ImageDetectionHW2

13

コンテスト結果• 2018年12⽉に沖縄で開催された

FPT2018にて優勝︕• 14チーム中 3チームがROS• 半数以上のチームがロボットが動かなかった中、ROSを使っていたチームは全て動作、内2つが決勝進出• Welcome to ROS × FPGA
14

• 優勝商品はなんと…

TurtleBot3号機につづく

15

ROS 2への移⾏• ROS 2移⾏へのモチベーション• 移⾏の流れZytleBot to ROS 2!

車体メインボードOS
ROS Distro

TurtleBot3
Zybo Z7-20
Ubuntu 16.04
Kinetic Kame

車体メインボードOS
ROS Distro

TurtleBot3
Ultra96
Ubuntu 18.04
Crystal Clemmys

現在はDashingに対応

17

Why ROS 2?
• とりあえずNodeletをやめたい• ノートPCをMacBookにしたい• launchファイルがPythonに…?

18

Why ROS 2?
• とりあえずNodeletをやめたい• ノートPCをMacBookにしたい• launchファイルがPythonに…?
画像取得
ノード

iImage人検出
ノード

Nodelet複数ノードをまとめて1プロセスで起動◎スマートポインタによるデータコピー
×保守性 再利⽤性

ノードごとに1プロセス🔻
通信コストがかかる
ROS 2では標準機能コンポーネントとしての記法を定めて保守性 再利⽤性◎
19

Why ROS 2?
• とりあえずNodeletをやめたい• ノートPCをMacBookにしたい• launchファイルがPythonに…?

https://index.ros.org/doc/ros2/Releases/
Release-Dashing-Diademata/20

Why ROS 2?
• とりあえずNodeletをやめたい• ノートPCをMacBookにしたい• launchファイルがPythonに…?

xml ➡ Python※現時点では開発中
21

Why ROS 2?
• とりあえずNodeletをやめたい• ノートPCをMacBookにしたい• launchファイルがPythonに…?
• etc..

DDS︖
組込み向け︖

FPGAとの親和性︖

リアルタイム性︖

とりあえずやってみよう︕

22

ROS 2移⾏のための取り組み•

ROS 2のコンポーネント形式にそったパッケージの作成•

Gazeboシミュレータの移⾏•実機へのインテグレーション

23

ROS 2 プログラミング• 2通りの選択肢­ ROS 1と同様の書き⽅­ 共有ライブラリとしてノードを実装する（ベストプラクティス）• 共有ライブラリとしての書き⽅を理解する必要があるため、プログラミング難易度は上がる• 同⼀プロセス内で複数ノード実⾏ができる­ データのゼロコピーや、ノードの実⾏順序を守らせることが可能になる• Nodeletで不満だった保守性、安全性も◎24

Gazeboシミュレータの移⾏•

GazeboもROS 2対応︕︕•モデルの記法は変わらず•

ROS 1プラグインを対応した
ROS 2プラグインに移⾏­

マイグレーションガイドあり︕
gazebo_ros_pkgsのgitのWikiを参考

25

実機へのインテグレーション• ロボット動作に必要なパッケージがROS 2に対応しているか否かで明暗が別れる• 今回はTurtleBot3がROS 2対応していたため、スムーズに移⾏­ ロボットベンダー社様、ROS 2パッケージをお願いします…
­ (私たちももちろん頑張ります^^;)• rosbag2も利⽤可能︕­ ただし、1で可能だった再⽣速度の変更などは未対応

26

ROS 1 or ROS 2 ?
• ROS 2で⼤変だった点­ ...特になし︕（先⼈の⽅々のおかげ）­ コア部分の開発はかなり進んでいる実感• ROS 2に移⾏するならこれからがチャンス­ 初の⻑期サポートdistroのDashingがリリース­ ⽇本語の講習会、書籍、記事なども︕­ ROS 1のソフトウェア資産も魅⼒的だが、みんなでしがみ付いていると…

27

ROS 2 コンテスト結果••

HEART2019 @⻑崎
ROS 2でも優勝︕

Welcome tohttps://github.com/sousou1/zytlebot_ros2

and FPGA︕

To Be Continued FPT201928