Weitere ähnliche Inhalte Mehr von Hideki Takase (20) Kürzlich hochgeladen (11) ROS (Robot Operating System) の紹介とIoT/IOT分野への展開1. ROS (Robot Operating System) の紹介と
IoT/IOT分野への展開
⾼瀬 英希
(京都⼤学/JSTさきがけ)
RICC-PIoT workshop 2021
2021/03/05
3. 3
⾃⼰紹介
本務・兼務
京都⼤学 情報学研究科 准教授
JSTさきがけ 兼任研究者
理研R-CCS 客員研究員
TOPPERSプロジェクト 運営委員
学会活動
IPSJ-SIGEMB 運営幹事
IEICE-RECONF 専⾨委員
SWEST ステアリング委員
コミュニティ活動
ROS Japan Users Group
ROSCon JP 実⾏委員
IoT ALGYAN (あるじゃん) 運営委員
NervesJP : Elixir for IoT
@takasehideki
箱 庭
6. これまでの取り組み
2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020
task
arrival
task is
running
MM-SPM
copy
Execution time
Task1
Task2
Task3
SPM
region
メモリ配置最適化
ΗΑ΅
ΗΑ΅
ΗΑ΅
ΗΑ΅
ΗΑ΅
ΗΑ΅
ΗΑ΅
Εή Π̻ ̼ ̰
R N B ̰ Ѓ ; Ξ΅ Ιμ㌸廷
ʹ ό ΙΛΰ ΦΛΠψЃ ΅ ㌸廷
Ή ό Ϊ ̹ ς ㌸廷
Q S N R ㌸廷
剰堽⒔
ς ό Θι
φΐ Λ΅
κλσ̰ Ѓ ; Ξ΅ Ιμ㌸廷
ΰ φΓΛΌ ̰ Ѓ ; Ξ΅ Ιμ㌸廷
徳從㝡㏆㌸廷 G V ̰ τΊ σΒι
κλσ'; μΛΏ ξ(
✆咩G V ΰ φΓΛΌ κλσ
ΰ φΓΛΌ
ʹ ό ΙΛΰ
ΦΛΠψЃ ΅
ΰ φΓΛΌ
κλσ ΰ φΓΛΌ ✆咩G V
設計階層に跨る
消費エネルギー
統合的最適化
RTOS
FPGA
ROS
Elixir
Power-
Efficient
High-
Performance
Power-
Efficient
High-
Performance
τ1
CP1 CP2
τ2 τ3
High-
Performance
Power-
Efficient
τ1
τ2 τ3
τ3
DEPS for
hetero SoC
SW志向協調設計
ZytleBot
SoCアーキテクチャ
コンパイラ
汎⽤カーネル
通信ミドルウェア
AI/MLライブラリ
SoCアーキテクチャ
コンパイラ
リアルタイムOS
通信ミドルウェア
デバイスライブラリ
SoCアーキテクチャ
コンパイラ
インタプリタ
通信ミドルウェア
数値演算ライブラリ
デバイス エッジサーバ クラウド
箱 庭
Cockatrice
HLS最適化
包括的IoT
開発環境
組込み向けROS
Rclex
13. 13
(Robot Operating System)
• ROS (ROS 1)︓2007年11⽉に最初の正式リリース
OSS資産や情報,対応ロボットが豊富にある
最終版 Noetic の EOL は2025年3⽉まで
• ROS 2︓絶賛成⻑中の次世代版
ROSのコンセプトを引き継いで再設計されたバージョン
ロボットソフトウェアの開発を加速化するプラットフォーム
http://www.ros.org/about-ros/
14. 14
Plumbing: 通信モデルとミドルウェア
• ROSノード (機能単位) の疎な結合⽅式
登録・変更・削除・配置が容易にできる
障害時にはノード単位で再起動を⾏える
基本はTopicを介した⾮同期・出版購読型の通信
node1
node2
node3
node4
Topic1
Topic2
node5
出版(Publish) 購読(Subscribe)
msg
msg
msg
msg
詳細は
のちほど,,,
17. 17
Ecosystem: 世界規模のコミュニティ
• オンライン
ROS Wiki: パッケージ・⽂書の公開
ROS Answers: Q&Aページ
ROS Discourse: リリースやイベントの告⽰
üTSC, SIG-WGsの議事録も全て公開
• オフライン
ROSCon: 世界規模の開発者会議
ü最近はlocal conf.も
SIG meetups, workshop,
local events, etc.,,,
18. 18
ROSの歴史と開発体制の変遷
2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020
1st commit to SourceForge (Nov. 2007)
https://sourceforge.net/p/ros/code/1/log/?path=
http://www.ros.org/news/
2017/11/ros-turns-10.html
ROS 1.0 released
ROS 2 Alpha released
http://wiki.ros.org/Distributions
https://docs.ros.org/en/
rolling/Releases.html
ROS 2 TSC
20. 20
ROSの通信⽅式
• トピック topic
ROS通信の基本
⾮同期型の出版購読通信
(Publish/Subscribe)
• サービス service
1対1・同期型のRPC通信
(Request/Response)
• アクション action
フィードバック付きRPC通信
⾮同期と同期の組み合わせ
node
service
action
node
node
node
node
topic
publish
subscribe
node
node
node
node node
request
response
goal
feedback
result
node
service
action
node
node
node
node
topic
publish
subscribe
node
node
node
node node
request
response
goal
feedback
result
21. 21
ROSの通信型
• ロボット通信に頻出する型が定義されている
Primitive Type: Bool / Byte / Char / Duration / String / Time /
Float32, 64 / Int8, 16, 32, 64 / UInt8, 16, 32, 64 / Empty
Array Type: Header / ByteMultiArray / ColorRGBA /
MultiArrayDimension / MultiArrayLayout / Float32, Float64MultiArray /
Int8, Int16, Int32, Int64MultiArray / UInt8, UInt16, UInt32, UInt64MultiArray
• 独⾃の型のメッセージを定義することができる
例︓両⾞輪の⾓速度と回転量,現在位置の3次元座標,など
階層構造や配列を含むこともできる
*.msg, *.srv ファイルで定義する
パッケージ化して流⽤もできる
requestの設定
(serviceへの送信値)
responseの設定
(serviceからの返送値)
22. 22
ROS 1の通信プロトコル
• roscore (ROS Master)︓
ノードの登録と名前空間の管理
• XML-RPC︓
roscoreへのノードの登録
ノード間の接続関係の確⽴
• TCPROS
TCP/IP上での⾮同期通信
UDPROSもある
24. 24
ROS 2に(公式)対応しているDDS実装
Middleware Library Provider Support ライセンス・備考等
rmw_fastrtps_cpp eProsima
Fast-RTPS
Tier 1 Apache 2.0,現時点のROS 2デフォルト,
軽量実装
rmw_connext_cpp RTI Connext Tier 1 商⽤/研究(機能制限)ライセンス,
No.1ベンダ,PF/Arch.サポートは限定的
rmw_cyclonedds_cpp Eclipse
Cyclone DDS
Tier 1 Eclipse Public License 2.0(Open),
⾼性能・⾼信頼な評価結果,
次のdistributionからROS 2デフォルトに
rmw_fastrtps_
dynamic_cpp
eProsima
Fast-RTPS
Tier 2 Apache 2.0,型の実⾏時の解釈・変換
(type introspection)をサポート
REP-2000 を基に
作成・整理
• 実装機能やライセンス形態で複数のDDSから通信層を選択できる
• 異種DDSを選択したノード間で通信できる(rmw層で抽象化)
Tier 1: Open Robotics公式の⼿厚いサポート
Tier 2: 公式だが限定的なサポート
25. 25
QoS Control
• 通信経路の品質を指定する(Pub/Sub間で互換性が必要)
• 指定できるパラメータの例 (下線はデフォルト設定)
History (履歴): Keep last (任意の値数を保持) or Keep all
Depth (深さ): Size of the queue (Keep lastの個数 10)
Reliability (信頼性): Best effort or Reliable (リトライ試⾏)
Durability (耐久性): Transient local or Volatile (遅延⾮許容)
https://index.ros.org/doc/ros2/Concepts/About-Quality-of-Service-Settings/
Profile History policy Reliability Durability
Default Keep last 10 Reliable Volatile
Services Keep last 10 Reliable Volatile
Sensor data keep last 5 Best effort Volatile
Parameters keep last 1000 Reliable Volatile
28. 28
ROS 1ノードの軽量実⾏環境
• ロボットアプリのリアルタイム性の確保を容易化
• ROSとのAPI互換による既存資産の移植性の向上
• 分散ロボットシステムの省電⼒化を実現
貢献
組込みデバイスでROS 1を活⽤する技術
H. Takase, et al., “mROS: A Lightweight Runtime Environment of ROS 1 nodes for Embedded
Devices,” Journal of Information Processing, Vol. 28, No. 2, pp. 150-160, Feb 2020.
29. 29
ソフトウェア階層と構造
H. Takase, et al., “mROS: A Lightweight Runtime Environment of ROS 1 nodes for Embedded
Devices,” Journal of Information Processing, Vol. 28, No. 2, pp. 150-160, Feb 2020.
inter-task communication
TCP/IP communication
mROS comm. lib
TCPROS
XMLRPC
• ROSと互換性のあるAPIを提供
下回りのスタックは組込み向けの
TCP/IPスタックとカーネルで構成
マルチノード化も可能
32. ROS x FPGA統合開発PF
• Zynq + TurtleBot
Zynq Ultrascale+ MPSoC
TurtleBot3
• 開発⼿法とテンプレートを提供
ROS/FPGA協調設計フロー
FPGA駆動⽤ROSノード
PS/PL通信インタフェース
32
ZytleBot
• 新⽥, ⽥村, ⾼瀬 ”ZytleBot: ROSベースの⾃律移動ロボットへのFPGAの統合に向けて“ IEICE-RECONF 201909 (招待講演)
• Y. Nitta, Sou Tamura, Hidetoshi Yugen and Hideki Takase, “ZytleBot: FPGA Integrated Development Platform
for ROS Based Autonomous Mobile Robot,” in ICFPT 2019.
ROSとFPGAの統合を加速化
ロボットの動作品質を向上
34. 34
ElixirのROS 2 Client Library Rclex
RMW (ROS MiddleWare)
node.py
rclpy
RCL (ROS Client Library)
HW
node.cpp
rclcpp Rclex
node.ex
node node node
DDS B
DDS A DDS (Data Distribution Service)
• OMG標準仕様として規定
• 出版購読通信を提供
• ノード⾃動検出 など
• 共通の基盤機能
• 実装はC⾔語
• 各⾔語から呼び出すことで
ライブラリを開発可能
• DDSの通信機能を抽象化するAPI層
• 複数のDDS実装から選択可能
tlk-emb/rclex
35. 35
ROS x Elixir︕の⽬指す貢献 Rclex
Publisher
・
・
Topic1
Subscriber
・
・
Publisher
・
・
Topic1 Subscriber
・
・
Topic2
Topic3
...Erlangプロセスに実⾏させる処理
ØElixirでErlangプロセスを
同時かつ⼤量に⽣成
Øプロセスで出版購読処理と
付随するコールバックを実⾏
軽量プロセスの並⾏処理で
⽣成ノード数に対する
スケーラビリティを向上
tlk-emb/rclex
36. 36
Erlang VM/カーネルとの関係 Rclex
OS
Process Space
rclcpp
node1
rclcpp
node2
Erlang VM
Rclex
node1
Rclex
node2
CPU
process
exec. queue
Pub process1
Sub process1
Sub process2
...
RCL node block =
Erlang resource object
• OSの1プロセスとしてErlang VMが起動
• Erlangスケジューラの中でループ処理とプロセス=ROSノードを実⾏
• プロセスが軽量︓起動時間が数マイクロ秒,メモリはおよそ300ワード
RCL資源をstatic linkした
共有ライブラリをErlang NIFを
介してロード・呼び出し
tlk-emb/rclex
37. 37
Rclexノードの実装例 (topic出版)
tlk-emb/rclex
Rclex
defmodule PubSample do
def pubmain do
num_node = 10
Rclex.rclexinit
|> Rclex.create_nodes(ʻtest_pub_nodeʼ,num_node)
|> Rclex.create_publishers(ʻtesttopicʼ, :single)
|> Rclex.Timer.create_wall_timer(1000,&pub_func/1)
end
def pub_func (publisher_list) do
n = length(publisher_list)
msg_list = Rclex.initialize_msg(:string, n)
Enum.map(0..n-1,fn(index)->
Rclex.setdata_string(Enum.at(msg_list,index),”hello”)
end)
Rclex.Publisher.publish(publisher_list,msg_list)
end
end
ノード数
設定されたノード名にインデックスを
付けてノードを⽣成
トピックの作成
:single->1つのトピック
:multi-> 複数のトピック
実⾏周期と実⾏する関数の設定
ノード数に応じた
メッセージリストを⽤意
トピックへの出版
39. その前に,ROS 2 TSC @2021-02-22
• ロードマップの策定やコア機能などを主導
https://docs.ros.org/en/foxy/Governance.html
• ROS 2開発に貢献する組織(の技術者)により編成
いわゆるBig Techやロボティクス業界の有名企業
半導体やOSやDDSのトップベンダ など
特定トピックに特化したWGsも編成されている
• 品質保証を重視した開発プロセスの採⽤
アジャイル︓Kanbanによるプロジェクト進⾏の可視化
テスト駆動︓継続的インテグレーション(CI)の適⽤
41. 41
ROS with Windows and Azure
• Windows 10 Desktop / IoTでのサポート
• MS各種ツール・サービスとの連携
• ROSノード・パッケージの提供
https://aka.ms/ros
42. 42
rapyuta.io by Rapyuta Robotics
https://www.rapyuta-robotics.com/ja/platform/
• 異種・マルチロボットシステムにスケールと
柔軟性を与える分散型インテリジェンス
• すべてのロボットとクラウド上で動作する
分散アプリケーションの構築、デプロイ、監視
• ROSとの互換性を備えた、安全でスケーラブルな
ロボット間およびロボットとクラウド間の通信を実現
• API⼜はWebUIを通し、すべてのロボットから
データを収集、保存、可視化
https://youtu.be/vogOEIwGh50
46. IoTシステム開発時の課題 (例: ⾃動運転配⾞システム)
46
• IoT開発には様々な分野の技術領域
=技術者の結集が不可⽋
• 結合テストや検証が困難である
• 問題発⽣時にはその原因と
経路の調査が複雑となる
• 実証実験コストも⼤きくなる
凡例
クラウド
CAN
ECU
⾞載PC
管制サーバ
スマホ
Web系
⾃動運転
制御系
ECU制御系
バックエンド
サーバ系
メカ系
エレキ系
ネットワーク系
IT系エンジニア
交通サービス系
ET系エンジニア
制御系エンジニア
ICTエンジニア
センサ
53. • 1台のロボットが1個の組込みマイコンで制御
• 仮想化対象︓HackEV @ETロボコン
• 組込みマイコン︓athrill
• カーネルとロボット制御⽤プログラムの仮想化
• 実⾏プラットフォーム︓TOPPERS/EV3RT
• ISA︓V850E2M <- ARMv7-A
• カーネル︓TOPPERS/ASP3 <- HRP3
• 制御アプリのレベルでは互換となる
• 可視化・物理演算︓Unity
• センサ値の取得(カラー,超⾳波,ジャイロ)
• モータ制御・LCD表⽰
プロトタイプモデルの構成
53
超⾳波センサ
カラーセンサ
センサ⽤ライト
モータ
ジャイロセンサ
LCD表⽰
マイコン・シミュレータ
制御処理(C/C++)
EV3RT
ASP3/ASP
athrill
58. プロトタイプモデルの開発状況
58
プロトタイプモデル 技術調査 実装 動作確認 配布
〇 〇 〇 〇
△ △ △ ×
〇 〇 〇 ×
EV3RTの教育向け活⽤に興味のある⽅,
ETロボコンへの参加を検討される⽅向けに公開中
仮想マイコン(docker/athrill/mROS)とUnity間連携完了
FPGA/GPUおよびLinux(QEMU)との連携⽅法を検討予定
ET & IoT Digital 2020のTOPPERS/SESSAMEパビリオンにて
RDBOXとの連携⽅法/デモ等をご紹介中︕︕
59. 59
RDBOX by インテック
①⾃動でロボット実⾏環境を作る・守る、維持する ②ロボットを改良し続ける
③効率的にリソースを使う
Robotics Developers BOX︓ロボット技術者の為の道具箱
RDBOXは、クラウドネイティブとエッジコンピューティング技術を⾼度に統合した、ロボット/IoT開発者のための
先進的なITプラットフォームです。OSSとして公開されており、誰でも簡単に使うことができます。
59
60. 60
RDBOX x 箱庭で実現するこれからの開発スタイル
Logging
CI/CD
• コンテナ作成
• 静的解析
• ユニットテスト
• システムテスト
commit
【箱庭システムテストS】
• 動作を点数化する仕組み
• 録画の仕組み
• 並列実⾏する仕組み
• 倍速で動かす仕組み
Developper
実機へ投⼊
(⾃動で)
差し戻し
Hook
Visualization
Analyze
実⾏ファイル
差し戻し
× RDBOX App Marketで好きなアプリを選んで
RDBOXが供するネットワーク環境下で
クラウドコンピュートリソースを活⽤しながら稼働
Feedback
ログファイル
Cloud
Real
World
OnPre
or
IaaS
Try & Errorを繰り返すことをサポートし、自動化によって属人性を排除
ブラウザからいつでも・どこでも・誰でも開発に参加できる
60
61. 61
61
CI/CD for ROS powered by & 箱 庭
https://twitter.com/fudekunJP/status/1356840768527163394
63. 63
おわりに
• ROS (Robot Operating System) の紹介
特に Plumbing を重点的に
• IoT/IOT for/with ROSの動向の共有
地域間相互接続の広域分散網と連携されていくと,
どのような展開がありえるでしょうか︖
強⼒に,協⼒しませんか︕︖︖
https://toppers.github.io/hakoniwa/ 箱 庭
64. 64
ROS Japan Users Group
• Discourse: https://discourse.ros.org/c/local/japan
• connpass: https://rosjp.connpass.com
勉強会・講習会など 初⼼者から歴戦の猛者まで︕
関⻄や瀬⼾内・九州でも開催︕
メンバー数 2,066名 @2021/03/03
üSlack: rosjp
üTwitter: #rosjp
65. 65
参考情報︓書籍
• ⼩倉 崇︓ROSではじめるロボットプログラミング
まずはじめに読むべき書籍︕バージョンと情報は古いので注意
• 表 允皙 ほか︓ROSロボットプログラミングバイブル
TurtleBot3を⽚⼿に進める場合の良書
• 上⽥ 隆⼀︓Raspberry Piで学ぶROSロボット⼊⾨
ラズパイマウスを⽚⼿に進める場合の良書
• ⻄⽥ 健 ほか︓実⽤ロボット開発のためのROSプログラミング
中級向け ロボット開発をなにか実践してから読むのが有⽤
• 近藤 豊︓ROS2ではじめよう次世代ロボットプログラミング
世界初 && 最も充実したROS 2の解説本︕
• 岡⽥ 浩之︓ロボットプログラミングROS2⼊⾨
⼿を動かしながらROS 2を基本から学べる
66. 66
参考情報︓Web Tutorial
• ROS Tutorials http://wiki.ros.org/ROS/Tutorials
• ROS 2 Tutorials https://index.ros.org/doc/ros2/Tutorials/
• ROS講座 (on Qiita) https://qiita.com/srs/items/5f44440afea0eb616b4a
• 5分でワカル!? ROSとはなにか
https://twitter.com/takasehideki/status/1365328482583019523
• 「ROS」の基礎とROS 2プログラミングの実践
https://drive.google.com/open?id=12yDH1WFAyaunIROPaFlo3XULziugxIze