組込みデバイス向けのROS1ノード軽量実行環境
高瀬 英希・森 智也（京都大学）
emb@lab3.kuis.kyoto-u.ac.jp

自己紹介@takasehideki− 京都大学 情報学研究科 助教− SWEST20 プログラム委員長− IPSJ-SIGEMB 運営幹事
− TOPPERSプロジェクト 特別会員
− ROS Japan UG 関西勉強会 主催
10/27に大阪ATCで開催予定！
ROSCon2018@Madrid参加報告やります

ROS歴：2.5年程度− C原理主義者の組込み屋さん− 最近はElixir推し4

まずはじめに皆さま使ってますよね！？
5

まずはじめにもう時代はでしょうか？？
組込みでも使えるし,,,6まずはじめにやっぱりまだでしょうか！？
既存資産が豊富だし,,,7

今回の提案
ROS1

組込みデバイス

豊富なパッケージ資産が流用可
分散システムを容易に実現可

消費電力・リアルタイム性に優位
資源制約が厳しい組込みデバイス上でROS1ノードを実行
github.com/tlk-emb/mROS

8

mROSの全体像
ROS

mROS

ROS
ノード

ROS
ノード

ミッドレンジ
組込みデバイス

ROSの関数を使ってプログラミング可能

貢献

mROSが提供する機能• 分散システムのエッジの省電力化に繋がる• リアルタイム性の保証が期待できる• 既存パッケージ資産の再利用が可能となる
github.com/tlk-emb/mROS

ROSマスタとの通信
ノード間のpub/sub通信

9mROSのソフトウェア構成
アプリケーション

lwIPを使用

ROSのAPIをそのまま使える

mROS通信ライブラリmbed
mbedライブラリでのデバドラ開発も可能

TOPPERS/ASPカーネル
ハードウェア
資源管理を担当
リアルタイム性の向上も実現可能

github.com/tlk-emb/mROS

10

ITRONタスクによるROS通信機能
タスク間通信は共有メモリ＋デーキュー
サブスクライブタスク・XMLスレーブタスクは周期的に実行それぞれのタスク設計は
ITRON仕様に則る
github.com/tlk-emb/mROS

11

トピック購読のフロー• subscribe() の呼び出し(1)-(3)：xmlマスタタスクによるroscoreへのノード登録(4)：サブスクライブタスクによるmROSサブスクライバの初期化(5)-(7)：ROSパブリッシャノードへのトピック購読リクエストの送信• サブスクライブタスクの周期実行によるデータ購読(8)：サブスクライブタスク内でコールバック関数の実行(9)：共有メモリからの結果の取得

github.com/tlk-emb/mROS

12

トピック出版のフロー• 出版：advertise() によってユーザタスクをROSノードとして登録− publish() 呼び出しによりデータ出版が可能となる(1)：共有メモリに出版データを書き込み(2)：パブリッシュタスクへの出版通知(3)：共有メモリから出版データの読み込み(4)：対応するTCPソケットからパブリッシュタスクがデータを出版

github.com/tlk-emb/mROS

13

デバイス内のノード間通信方式• 共有メモリを介してタスク間でデータを通信(1)-(3)：ROSマスタにユーザタスク１をサブスクライブノードとして登録(4)：サブスクライブタスクにて通知されたIPアドレスを判断(5)-(6)：ユーザタスク２からデータを出版(7)-(8)：サブスクライブタスクでデータを受け取ってコールバック関数を実行

publish() 内で出版相手を判断してメッセージIDを生成
github.com/tlk-emb/mROS

トピックの購読要求は行わない

14

mROSの現在の開発対象• Renesas GR-PEACH
搭載マイコン RZ/A1H(Cortex-A9 400MHz)

ROM/RAM

外部FLASH 8MB
内蔵10MB

動作電圧

3.3V/1.18V−mbed対応／Arduino互換ピン−純正カメラシールドあり
OpenCVも使える

画像処理ROSノードがきびきび動く，かも！？
http://gadget.renesas.com/ja/product/peach.html

github.com/tlk-emb/mROS

15

ｍROSのメモリサイズ• 合計で2.6MB程度：GR-PEACHにとっては軽量• さらなる軽量化は可能−共有メモリの容量を静的に確保しているため−タスク間通信用のメモリ領域を除けば600KB程度−不使用のmbedライブラリの除去 or そもそも生lwIPの使用も検討中
ライブラリ
カーネル

text
99,676

data
0

bss
16,408

合計
116,084

mbed

264,477

52,94045,711

363,128

mROS
合計

57,950422,10328 2,097,310 2,155,288
52,968 2,159,429 2,634,500

github.com/tlk-emb/mROS

16

mROSの活用事例• 特徴点抽出を行うROSパッケージ*1を対象として分散システムを構成• エッジデバイス上でシステムの一部を実行• image_converter をmROS上に移植

カメラのデバイス
ドライバノード

画像データの圧縮処理

デバイス内通信は共有メモリ方式
github.com/tlk-emb/mROS*1:宇都宮大学の大川猛先生からご提供

17

活用事例：カメラ画像から特徴点抽出

github.com/tlk-emb/mROS

18

活用事例：カメラ画像から特徴点抽出
mROSで実行されているノード

mROSノード化によって通信量を75％削減
github.com/tlk-emb/mROS

ROSで実行されているノード

特徴点
抽出結果

元画像
19

おわりに• 組込みデバイス向けROS1ノードの軽量実行環境−既存ROSパッケージをそのまま使える！
−ROS1ノードの省電力化に使える，かも！？
−リアルタイム性能の向上に使える，かも！？
• ユーザ様募集中！！

−ROS1を使っているけど資源制約が厳しい方−開発済みのROS1資産を組込み化したい方−結局ROSマスタ必要やん？時代はROS2！！という方
一緒にROSマスタ組込み化／ROS2対応に取り組みませんか！？
github.com/tlk-emb/mROS

20

⾞載向け(ATK2対応)

mROS
ASP+mbedon PEACH

機能強化

W iP

普及促進

リアルタイム性保証・機能強化

保護機能強化(HRP対応)

多機能化
付加価値向上W iP

catkin_make対応

完
mROSノード間通信最適化

server/client通信

W iP ASP3対応

mbed最新ver.化(multicast,DHCP)

lwIP
生移植

完

W iP

MessageType対応

ROS2ブリッジ機能

HW ROSLYCHEE対応

FreeRTOS
mbedOS対応

マスタ／roscore
機能の組込み化

CPU+FPGA
SoC対応

STM32対応

W iP

ROSノード移植(デモアプリ開発)

github.com/tlk-emb/mROS

マルチコア化(FMP対応)多デバイス移植ROS協調設計(SWORDS対応)

・凡例（ 橙＞⻘＞緑＞灰）枠線︓研究要素の強いもの
⽂字⾊︓実⽤性が出るもの

21