SlideShare a Scribd company logo
株式会社SUGAR SWEET ROBOTICS


菅 佑樹
ロボットミドルウェアでロ
ボットシステムを作る
Yuki Suga Waseda Univ. Ogata Lab. SUGAR SWEET ROBOTICS
/
https://ogata-lab.jp https://sugarsweetrobotics.com
http://ysuga.net /
自己紹介
• 菅 佑樹 (Yuki Suga)


• 職歴


• 2012-現在 株式会社SUGAR SWEET
ROBOTICS代表取締役


• 2012-現在 早稲田大学表現工学科尾形研研究員


• 2010-2012 株式会社リバスト


• 2007-2010 早稲田大学総合機械工学科助手 (菅
野研)


• 学歴


• 2008 博士 (工学)


• 2002-2004 早稲田大学理工学研究科機械工学専
攻


• 1998-2002 早稲田大学理工学部機械工学科


• 1995-1998 早稲田大学附属高等学院


• 趣味


• 子育て


• 文房具,万年筆収集


• インラインスケート,ヨーヨー
早稲田時代
リバスト時代
SSR時代
ロボットシステムを


ロボットミドルウェアで作る
ロボット用ミドルウェア
• 最近はROSやOpenRTM-aistに代表される「ロボット用ミドルウェア」が便利


• そもそもミドルウエアとはソフトウエア間の通信を補完する通信プロトコ
ルおよびライブラリ・ツール群


• OSをラッピングして,OS間の差を吸収


• OSの機能や定型的な手続きを簡単化


• 異なる言語で開発しても一つのサービスに統合が可能


• 例: Unityなどのゲームミドルウェア


• 分散システムの文脈では,特にネットワーク越しに通信をした時に,ホス
トとなるサーバーのOSや実装をラッピングして,プラットフォームによら
ない通信を提供するためのライブラリ群のこと


• 例:DBMS (Oracle, MySQLなど)


• 通信を標準化して,モジュールのソフトウェアを使いやすくする
OS
アプリ
ミドルウェア
ロボットミドルウェア
• Microsoft Robotics Developer Studio
•Kinectでのモデリング
•動力学シミュレータ
• YARP
•赤ちゃんロボットiCub.人工知能研究分野
• OROCOS
•ヨーロッパ
•コンポーネントモデル
• OpROS
•コンポーネントモデル
•韓国製
• ORiN
•DENSOウェーブの産業用ロボット
•ROS
•Robot Operating System
•もっとも使われているロボット用ミドルウェア
•DARPA Robotics Challengeでも採用
• RT-middleware
•国際団体OMGで規格化された規格
•OpenRTM-aistなど,多くの実装がある
• naoqi
•フランスのAldebaran Robotics社が開発
•NAO用だが,SoftBankのPepperにも採用
•NVIDIA Issac SDK
•NVIDIAが開発
•Protobufで通信.コンポーネントモデル
ミドルウェアの役割
• ネットワーク越しのリソースの利用
促進


• 通信を標準化することで,OSが
LinuxでもWindowsでも関係なく
なる


• 同じ種類のデバイスであればデー
タを標準化して入れ替えられるよ
うになる
例えばこんな時ありがたかった
論理設計と物理設計の分離
• 論理設計・・・欲しい機能をモジュールとし
てまとめる設計


• 物理設計・・・モジュールの配置.分散シス
テム上のどのマシンにリソースを配置するか


• テスト環境ではうまく動いたが,本番環境
で動作しなかったので配置を変更した


• 本番用の工業用PCがUSBハブ認識数に制
限があったので,分散システムにした


• RTCをLinux用に変更して組み込み
Linux上で動作させた
Windows


PC
USBハブ
USBハブ USBハブ
USBハブ
USBハブ
Windows


FA用PC
USBハブ
USBハブ USBハブ
USBハブ
USBハブ
組み込み


Linux PC
①
②
③
③
②
①
1
2
3
1
2
3
ROS
• 機能単位=Node


• データフロー型通信=Topic


• 遠隔手続き型通信=Service


• 機能単位の調整=Parameter
PC2
PC1
Node Node Node
ns1/
TopicA
Publish
Subscribe
ns1/
Service1
Node
Provide
Node
1. Request
2. Call 3. Result
Yuki Suga Waseda Univ. Ogata Lab. SUGAR SWEET ROBOTICS
/
https://ogata-lab.jp https://sugarsweetrobotics.com
http://ysuga.net /
OpenRTM-aist
• 機能単位=RT Component


• 機能単位に状態マシンがある


• INACTIVE-ACTIVE-ERROR


• データフロー型通信= Data Port


• 遠隔手続き型通信=Service Port


• 機能単位の調整=Con
fi
guration
RTC
RTC
RTC
RTC RTC
RTC RTC
RTC
RTC
CREATED INACTIVE
ACTIVE
ERROR
DEACTIVATE
ACTIVATE
RESET
Yuki Suga Waseda Univ. Ogata Lab. SUGAR SWEET ROBOTICS
/
https://ogata-lab.jp https://sugarsweetrobotics.com
http://ysuga.net /
ロボットミドルウェアの特徴
• ROS, OpenRTM-aistはコンポーネント指向型ミドルウェア


• 機能単位: RTComponent,Node


• 通信機能を提供


• メッセージ指向型: DataPort, Topic


• 遠隔呼び出し型: ServicePort, Service, Action


• 機能を実行時に調整するための仕組み: Con
fi
guration, Parameter


• 異なるAPIをカプセル化


• 共通の通信規格でデータを送受信可能に


• 複雑なAPIやデータの集まりを隠 し,共通化
ロボットシステムをミドルウェアで組む目的
• コストを下げること


• 時間的・金銭的コスト


• 機能の再利用による開発工数削減


• 将来のカスタマイズ工数を削減


• 複数プラットフォーム対応のための工数削減


• コストが下がらなければミドルウェアなんか使わなくていい


• 以下の条件のANDならミドルウェアの利用は全く進めない!


• 一個しか作らないし,今後自分も含め,他の誰も使わない特殊な環境,ハードウェア


• 一人ぼっちで開発する.


• 誰にも知られない,使われたくない,使われない.
ロボットミドルウェアでシステムを組む
• コストが下がるポイント


• 多人数で並行作業,外注,共同研究


• 他人の機能要素やツールを再利用


• 論文の最新技術をフォロー


• 他人が運用する


• コストがかかるポイント


• ミドルウェア自体の学習コスト.人間の調達コスト(調達難易度高)


• オーバーヘッド,無駄処理


• 分散システムの管理運用コスト
コンポーネント化と再利用
• システムの統合


• すべてが異なるAPIを利用するロボット製品)


• カナダInuktun製クローラ


• オランダED社製アーム


• アメリカTRACLabs製パンチルト雲台


• アメリカVIDERE Design製ステレオカメラ


• PCとの通信ラインの接続方法も異なる


• RTコンポーネントでAPIをラッピングして置くことで,ソフト
ウェアの再利用性が向上


• ネットワークで隔てられたPC間の通信が容易


• 異なる言語で書かれたRTCでも通信可能


• モジュールの分割とインターフェース (論理設計)と実際のハードウ
ェアの接続 (物理設計)を分離することがミドルウェアのメリット
ハードウエアの構成(物理設計・配置)
RTシステムの構成(論理設計)
インテグレーションのコスト舐めんな
• これまでのサマーキャンプとか,学生プロジェクトを見る限り


• 役割分担まではできる.SysMLっぽいものを書いたりできる


• 進 ミーティングでいくら『インテグレーション舐めんな』といってもやらない


• 動かしてみると検討不足(よくあるのはシステムの開始や終了部分)でインターフ
ェースを見直したり,パラメータチューニングが面倒でデモに間に合わない


• OpenRTM-aistやROSはインテグレーションしながら組めるのよ.やって!お願いだ
から.みんなの苦しむ姿が見たくないの.
短期間でのシステム構築の手順
• SysML等で設計図を書く


• スケルトンコードを書く


• RTCBuilder


• ROSなら必要なパッケージとNodeのメインコードを全て書く


• 再利用するモジュールはダウンロードしてビルドしてみる


• ここでつまづくのが多い.中身空っぽのStubコンポーネントを作っておいてもいい.僕なら作る.


• ロボットハードのStubコードはハード依存が取れてハード抜きで開発を進めたり,テストしやすくなる


• とりあえずビルドして接続されることを確認する


• RTSystemEditorなら簡単.SystemPro
fi
leを保存する


• ROSはlaunchを書いてrqtなどで確認.launchも保存する


• ここで全部githubに上げる


• 中身は空っぽだが,入力された値を表示するコードくらいは書いておくといい


• 一つ一つのモジュールを実装して,出力を確認しながら進める
Stubコンポーネント
• ハードなしでもシステム開発できるようにする


• シミュレータと繋げるにはシミュレータ環境を作るのが面倒


• コンポーネントだけで小さなシミュレーションを可能にしておく


• 例:移動ロボット


• 速度指令を時間積分するだけのコンポーネント


• 例:アームロボット


• 関節角度指令に対して,指令速度で数値を変更するだけ


• 逐次ログを取っておく (csv) →Excelとか Matplotlibで可視化
それぞれのモジュールの実装方法
• ROSでもROS2でもRTCでも,やることは同じ


• ミドルウェア相互に移植しやすく書くべし


• ミドルウェアに依存しない


• いざとなればミドルウェアを外して単一のアプリに変更できる


• 内部に機能を実装するクラスを作り,ROSのノードのコードや,RTCのコードにはデ
ータ型の変換コードのみを書くべき


• ご参考: UrgRTC (拙作) https://github.com/sugarsweetrobotics/UrgRTC/blob/
master/src/UrgRTC.cpp
モジュールを単体でテストする方法
• データを突っ込んでみる


• OpenRTM-aist ・・・ rtinject (rtshell)


• ROS・・・ rostopic pub


• 出てくるデータをprintしてみる


• OpenRTM-aist ・・・ reprint (rtshell)


• ROS・・・rostopic echo


• ログを取ってみる.再生してみる


• OpenRTM-aist ・・・ rtlog (rtshell)


• ROS・・・ rosbag
例えば・・・


・実験環境でLiDARとロボットのオドメトリをrtlogコマンドで一気に収集


・帰宅してオドメトリとLiDAR情報でSLAMしてみる.パラメータを調整しながら完
成するマップを確認できる


例えば・・・


・出来上がったコンポーネントに対して,rtprintを準備してからrtinjectでデータを
送信するbatスクリプトを用意する


・RTCをコンパイルしてVisual Studioでデバッグしながら,上記のbatスクリプトを
実行すればデバッグが簡単 (RTSEでつなぎながらテストすると大変)
モジュールの中のログをとる
• ミドルウェアが用意しているログ記録方法を使うと良い


• printfなどでコンソールに出すと共有しにくい.ファイルに保存できれば検索可能


• OpenRTM-aist・・・RTC_DEBUG, RTC_INFOなどのコマンドがある


• RTC_DEBUG((“DataInPort(‘in’) received data (%d)”, m_data.data));


• RTC_INFO((“….”));


• RTC_ERROR((“…”));


• ROS・・・roslogを使う


• ROS_DEBUG(“Topic(‘hoge’) received data(%d)”, msg->data);


• ROS_INFO(“…”);


• ROS_ERROR(“…”);


• ログのコツ


• ログメッセージは5W1Hで出すこと(Who, When, Where, What, Why, How)


• ログレベルを考えて使う.
OpenRTM-aistの使えるもの
• とりあえずこのサイトは見て欲しい


• wasanbon.org


• 本来wasanbonはRTCのリポジトリ管理+ビルド+運用ツールだけど,このサイトの右上には
wasanbonで管理しているRTCが並んでいる


• RTCBuilderが掃き出すRTC.xmlというプロファイルを使ってヘルプを自動構築した結果


• カテゴリが階層状になってるともっといいんですけどね


• セックさんにも使ってもらっています


• Air-graph https://sec-airgraph.github.io/AirGraph-doc/


• 今,Python3.8およびOpenRTM 1.2.2に対応作業中です.
Yuki Suga Waseda Univ. Ogata Lab. SUGAR SWEET ROBOTICS
/
https://ogata-lab.jp https://sugarsweetrobotics.com
http://ysuga.net /
ロボットミドルウェアで構成した
システムの例
SLAMとナビゲーション
• 各種移動ロボット対応


• RTCを入れ替え可能


• SLAM(マップ生成)


• 自己位置推定(パーティクルフィル
タ)


• パスプランニング
Yuki Suga Waseda Univ. Ogata Lab. SUGAR SWEET ROBOTICS
/
https://ogata-lab.jp https://sugarsweetrobotics.com
http://ysuga.net /
Arduino+RT-middleware=RTno
• RTno “アールティーノ” = RT-
middleware + Arduino


• ArduinoとRTミドルウエアの連携


• RTコンポーネントをArduinoで作る


• 組み込みプログラミングのみでRTC
を作る
あーるてぃーの
RTC
データポート構成な
どのプロファイル
データポートの通信


状態マシンの制御
組み込みプログラム


・データポートの宣言


・Double型出力ポートx1


・Long型入力ポートx1


・出力ポートからA/D変換結果を出力


・入力ポートへの指令でLEDを制御
コンポーネントの
自動生成 (ProxyRTC)
Yuki Suga Waseda Univ. Ogata Lab. SUGAR SWEET ROBOTICS
/
https://ogata-lab.jp https://sugarsweetrobotics.com
http://ysuga.net /
ロボットミドルウェアの応用例
ロボットミドルウェアとR-envの連携
• シナリオを編集してロボットシステムを現場に適
用する「運用」と,基本的なロボットシステムを
開発する「開発」の分業が目的


• ロボットプログラミングツール R-env (NTT) と
OpenRTM-aist / ROS / ROS2の連携


• R-envによるロボットサービスのシナリオ作成


• ロボットシステムを構成するミドルウェアレイ
ヤにR-envから指令を送ることができる


• データ型変換


• データフロー型送受信+遠隔呼び出し型通
信
Yuki Suga Waseda Univ. Ogata Lab. SUGAR SWEET ROBOTICS
/
https://ogata-lab.jp https://sugarsweetrobotics.com
http://ysuga.net /
まとめ
• さきに全体を組む.空っぽでもいい


• ロボはStubにできると良い.シミュレータが簡単ならそれでもいい


• 一つずつ実装していく.出口側のRTCで出力をログしておいて,CSVで確認するとかできる


• コンポーネントの中のコードはクラスでひとまとまりにしておきたい


• できればそのクラスの単体テストを実装したい


• デモを一周できる最低限のコードを実装していく


• さっさとデモだけはできるようにしたい


• デモ+αを実装するときは,最低限デモを通した時のコードを変更しないで済むような設計
がいい


• 新しい機能は新しいコンポーネントを追加して機能追加できるようにしたい

More Related Content

What's hot

Rtshell入門
Rtshell入門Rtshell入門
Rtshell入門
openrtm
 
OpenRTM-aistおよび RTコンポーネントプログラミングの概要
OpenRTM-aistおよび RTコンポーネントプログラミングの概要OpenRTM-aistおよび RTコンポーネントプログラミングの概要
OpenRTM-aistおよび RTコンポーネントプログラミングの概要
openrtm
 
201111 04
201111 04201111 04
201111 04
openrtm
 
RTミドルウェアサマーキャンプ2018「開発プロセスと RT コンポーネントのデバッグ・テスト手法」
RTミドルウェアサマーキャンプ2018「開発プロセスと RT コンポーネントのデバッグ・テスト手法」RTミドルウェアサマーキャンプ2018「開発プロセスと RT コンポーネントのデバッグ・テスト手法」
RTミドルウェアサマーキャンプ2018「開発プロセスと RT コンポーネントのデバッグ・テスト手法」
openrtm
 
201110 01 Polytech Center 1
201110 01 Polytech Center 1201110 01 Polytech Center 1
201110 01 Polytech Center 1
openrtm
 
190605 04
190605 04190605 04
190605 04
openrtm
 
NEDO特別講座 ロボット共通プラットフォーム講習会 (1)
NEDO特別講座 ロボット共通プラットフォーム講習会 (1)NEDO特別講座 ロボット共通プラットフォーム講習会 (1)
NEDO特別講座 ロボット共通プラットフォーム講習会 (1)
NoriakiAndo
 
Rtミドルウェアサマーキャンプ2021_宮本信彦
Rtミドルウェアサマーキャンプ2021_宮本信彦Rtミドルウェアサマーキャンプ2021_宮本信彦
Rtミドルウェアサマーキャンプ2021_宮本信彦
openrtm
 
Slam実習
Slam実習Slam実習
Slam実習
openrtm
 
ROBOMECH2017 インターネットを利用したロボットサービスとRSiの取り組み2017
ROBOMECH2017 インターネットを利用したロボットサービスとRSiの取り組み2017ROBOMECH2017 インターネットを利用したロボットサービスとRSiの取り組み2017
ROBOMECH2017 インターネットを利用したロボットサービスとRSiの取り組み2017
openrtm
 
OpenRTM-aist入門
OpenRTM-aist入門OpenRTM-aist入門
OpenRTM-aist入門
Yuki Suga
 
2015 summercamp 04
2015 summercamp 042015 summercamp 04
2015 summercamp 04
openrtm
 
RTコンポーネント作成入門
RTコンポーネント作成入門RTコンポーネント作成入門
RTコンポーネント作成入門
openrtm
 
2017 summercamp 04
2017 summercamp 042017 summercamp 04
2017 summercamp 04
openrtm
 
201110 02 Polytech center 2
201110 02 Polytech center 2201110 02 Polytech center 2
201110 02 Polytech center 2
openrtm
 
Rtmコンテスト必勝法
Rtmコンテスト必勝法Rtmコンテスト必勝法
Rtmコンテスト必勝法openrtm
 
RTミドルウェア応用実習
RTミドルウェア応用実習RTミドルウェア応用実習
RTミドルウェア応用実習
openrtm
 
2015 summercamp 09
2015 summercamp 092015 summercamp 09
2015 summercamp 09
openrtm
 
2016 summercamp RTM-ROS相互運用とJSKでの取り組み
2016 summercamp RTM-ROS相互運用とJSKでの取り組み2016 summercamp RTM-ROS相互運用とJSKでの取り組み
2016 summercamp RTM-ROS相互運用とJSKでの取り組み
openrtm
 
160608 01
160608 01160608 01
160608 01
openrtm
 

What's hot (20)

Rtshell入門
Rtshell入門Rtshell入門
Rtshell入門
 
OpenRTM-aistおよび RTコンポーネントプログラミングの概要
OpenRTM-aistおよび RTコンポーネントプログラミングの概要OpenRTM-aistおよび RTコンポーネントプログラミングの概要
OpenRTM-aistおよび RTコンポーネントプログラミングの概要
 
201111 04
201111 04201111 04
201111 04
 
RTミドルウェアサマーキャンプ2018「開発プロセスと RT コンポーネントのデバッグ・テスト手法」
RTミドルウェアサマーキャンプ2018「開発プロセスと RT コンポーネントのデバッグ・テスト手法」RTミドルウェアサマーキャンプ2018「開発プロセスと RT コンポーネントのデバッグ・テスト手法」
RTミドルウェアサマーキャンプ2018「開発プロセスと RT コンポーネントのデバッグ・テスト手法」
 
201110 01 Polytech Center 1
201110 01 Polytech Center 1201110 01 Polytech Center 1
201110 01 Polytech Center 1
 
190605 04
190605 04190605 04
190605 04
 
NEDO特別講座 ロボット共通プラットフォーム講習会 (1)
NEDO特別講座 ロボット共通プラットフォーム講習会 (1)NEDO特別講座 ロボット共通プラットフォーム講習会 (1)
NEDO特別講座 ロボット共通プラットフォーム講習会 (1)
 
Rtミドルウェアサマーキャンプ2021_宮本信彦
Rtミドルウェアサマーキャンプ2021_宮本信彦Rtミドルウェアサマーキャンプ2021_宮本信彦
Rtミドルウェアサマーキャンプ2021_宮本信彦
 
Slam実習
Slam実習Slam実習
Slam実習
 
ROBOMECH2017 インターネットを利用したロボットサービスとRSiの取り組み2017
ROBOMECH2017 インターネットを利用したロボットサービスとRSiの取り組み2017ROBOMECH2017 インターネットを利用したロボットサービスとRSiの取り組み2017
ROBOMECH2017 インターネットを利用したロボットサービスとRSiの取り組み2017
 
OpenRTM-aist入門
OpenRTM-aist入門OpenRTM-aist入門
OpenRTM-aist入門
 
2015 summercamp 04
2015 summercamp 042015 summercamp 04
2015 summercamp 04
 
RTコンポーネント作成入門
RTコンポーネント作成入門RTコンポーネント作成入門
RTコンポーネント作成入門
 
2017 summercamp 04
2017 summercamp 042017 summercamp 04
2017 summercamp 04
 
201110 02 Polytech center 2
201110 02 Polytech center 2201110 02 Polytech center 2
201110 02 Polytech center 2
 
Rtmコンテスト必勝法
Rtmコンテスト必勝法Rtmコンテスト必勝法
Rtmコンテスト必勝法
 
RTミドルウェア応用実習
RTミドルウェア応用実習RTミドルウェア応用実習
RTミドルウェア応用実習
 
2015 summercamp 09
2015 summercamp 092015 summercamp 09
2015 summercamp 09
 
2016 summercamp RTM-ROS相互運用とJSKでの取り組み
2016 summercamp RTM-ROS相互運用とJSKでの取り組み2016 summercamp RTM-ROS相互運用とJSKでの取り組み
2016 summercamp RTM-ROS相互運用とJSKでの取り組み
 
160608 01
160608 01160608 01
160608 01
 

Similar to Rtミドルウェアサマーキャンプ資料2021_菅佑樹

RTミドルウェアサマーキャンプ資料2022.pdf
RTミドルウェアサマーキャンプ資料2022.pdfRTミドルウェアサマーキャンプ資料2022.pdf
RTミドルウェアサマーキャンプ資料2022.pdf
openrtm
 
チケット管理システム大決戦第二弾
チケット管理システム大決戦第二弾チケット管理システム大決戦第二弾
チケット管理システム大決戦第二弾
Ryutaro YOSHIBA
 
機械図面の基礎
機械図面の基礎機械図面の基礎
機械図面の基礎
Yuki Suga
 
クラウドを超えた先の企業システム像 20091008 JJUG CCC
クラウドを超えた先の企業システム像 20091008 JJUG CCCクラウドを超えた先の企業システム像 20091008 JJUG CCC
クラウドを超えた先の企業システム像 20091008 JJUG CCC
Yusuke Suzuki
 
qpsutdy 201307 LT
qpsutdy 201307 LTqpsutdy 201307 LT
qpsutdy 201307 LT
Tomohiro Ikeda
 
ロボットについて (ロボットのソフトウェア的側面と分散モジュール開発)
ロボットについて (ロボットのソフトウェア的側面と分散モジュール開発)ロボットについて (ロボットのソフトウェア的側面と分散モジュール開発)
ロボットについて (ロボットのソフトウェア的側面と分散モジュール開発)
Yuki Suga
 
テスト分析・設計を体感しよう ~マインドマップを活用してテスト観点を発想しよう
テスト分析・設計を体感しよう ~マインドマップを活用してテスト観点を発想しようテスト分析・設計を体感しよう ~マインドマップを活用してテスト観点を発想しよう
テスト分析・設計を体感しよう ~マインドマップを活用してテスト観点を発想しよう
Akira Ikeda
 
Dad紹介@豆ナイト
Dad紹介@豆ナイトDad紹介@豆ナイト
Dad紹介@豆ナイト
隆之 豊島
 
プロダクトにおけるScala
プロダクトにおけるScalaプロダクトにおけるScala
プロダクトにおけるScala
Yuto Suzuki
 
デザイナーにもできる再構築の高速化/負荷分散
デザイナーにもできる再構築の高速化/負荷分散 デザイナーにもできる再構築の高速化/負荷分散
デザイナーにもできる再構築の高速化/負荷分散
Hajime Fujimoto
 
【初心者向】ロジカルシンキングをゼロからはじめる
【初心者向】ロジカルシンキングをゼロからはじめる【初心者向】ロジカルシンキングをゼロからはじめる
【初心者向】ロジカルシンキングをゼロからはじめる
Ryosuke Ishii
 
20121124 学生セミナー「基礎からわかる! IT業界とプログラミング」
20121124 学生セミナー「基礎からわかる! IT業界とプログラミング」20121124 学生セミナー「基礎からわかる! IT業界とプログラミング」
20121124 学生セミナー「基礎からわかる! IT業界とプログラミング」Takashi Uemura
 
Autoencoderは正規直交基底の夢を見るか
Autoencoderは正規直交基底の夢を見るかAutoencoderは正規直交基底の夢を見るか
Autoencoderは正規直交基底の夢を見るか
Kyota Yasuda
 
第3期キックオフ説明会+勉強会
第3期キックオフ説明会+勉強会 第3期キックオフ説明会+勉強会
第3期キックオフ説明会+勉強会 Shuhei Iitsuka
 
Spring Boot + Doma + AngularJSで作るERP (LINE Fukuoka Meetup版)
Spring Boot + Doma + AngularJSで作るERP (LINE Fukuoka Meetup版)Spring Boot + Doma + AngularJSで作るERP (LINE Fukuoka Meetup版)
Spring Boot + Doma + AngularJSで作るERP (LINE Fukuoka Meetup版)
学 松崎
 
ROS JAPAN Users Group Meetup 03
ROS JAPAN Users Group Meetup 03ROS JAPAN Users Group Meetup 03
ROS JAPAN Users Group Meetup 03Daiki Maekawa
 
Next.js Storybook Driven Development
Next.js Storybook Driven DevelopmentNext.js Storybook Driven Development
Next.js Storybook Driven Development
Takuya Tejima
 
マイクロサービスアーキテクチャ とは何か
マイクロサービスアーキテクチャとは何かマイクロサービスアーキテクチャとは何か
マイクロサービスアーキテクチャ とは何か
Yusuke Suzuki
 
Microsoft Stream について
Microsoft Stream についてMicrosoft Stream について
Microsoft Stream について
Takanori Tsuruta
 
OSC2013 HIROSHIMA ライトニングトーク すごい広島
OSC2013 HIROSHIMA ライトニングトーク すごい広島OSC2013 HIROSHIMA ライトニングトーク すごい広島
OSC2013 HIROSHIMA ライトニングトーク すごい広島
Tomohiko Himura
 

Similar to Rtミドルウェアサマーキャンプ資料2021_菅佑樹 (20)

RTミドルウェアサマーキャンプ資料2022.pdf
RTミドルウェアサマーキャンプ資料2022.pdfRTミドルウェアサマーキャンプ資料2022.pdf
RTミドルウェアサマーキャンプ資料2022.pdf
 
チケット管理システム大決戦第二弾
チケット管理システム大決戦第二弾チケット管理システム大決戦第二弾
チケット管理システム大決戦第二弾
 
機械図面の基礎
機械図面の基礎機械図面の基礎
機械図面の基礎
 
クラウドを超えた先の企業システム像 20091008 JJUG CCC
クラウドを超えた先の企業システム像 20091008 JJUG CCCクラウドを超えた先の企業システム像 20091008 JJUG CCC
クラウドを超えた先の企業システム像 20091008 JJUG CCC
 
qpsutdy 201307 LT
qpsutdy 201307 LTqpsutdy 201307 LT
qpsutdy 201307 LT
 
ロボットについて (ロボットのソフトウェア的側面と分散モジュール開発)
ロボットについて (ロボットのソフトウェア的側面と分散モジュール開発)ロボットについて (ロボットのソフトウェア的側面と分散モジュール開発)
ロボットについて (ロボットのソフトウェア的側面と分散モジュール開発)
 
テスト分析・設計を体感しよう ~マインドマップを活用してテスト観点を発想しよう
テスト分析・設計を体感しよう ~マインドマップを活用してテスト観点を発想しようテスト分析・設計を体感しよう ~マインドマップを活用してテスト観点を発想しよう
テスト分析・設計を体感しよう ~マインドマップを活用してテスト観点を発想しよう
 
Dad紹介@豆ナイト
Dad紹介@豆ナイトDad紹介@豆ナイト
Dad紹介@豆ナイト
 
プロダクトにおけるScala
プロダクトにおけるScalaプロダクトにおけるScala
プロダクトにおけるScala
 
デザイナーにもできる再構築の高速化/負荷分散
デザイナーにもできる再構築の高速化/負荷分散 デザイナーにもできる再構築の高速化/負荷分散
デザイナーにもできる再構築の高速化/負荷分散
 
【初心者向】ロジカルシンキングをゼロからはじめる
【初心者向】ロジカルシンキングをゼロからはじめる【初心者向】ロジカルシンキングをゼロからはじめる
【初心者向】ロジカルシンキングをゼロからはじめる
 
20121124 学生セミナー「基礎からわかる! IT業界とプログラミング」
20121124 学生セミナー「基礎からわかる! IT業界とプログラミング」20121124 学生セミナー「基礎からわかる! IT業界とプログラミング」
20121124 学生セミナー「基礎からわかる! IT業界とプログラミング」
 
Autoencoderは正規直交基底の夢を見るか
Autoencoderは正規直交基底の夢を見るかAutoencoderは正規直交基底の夢を見るか
Autoencoderは正規直交基底の夢を見るか
 
第3期キックオフ説明会+勉強会
第3期キックオフ説明会+勉強会 第3期キックオフ説明会+勉強会
第3期キックオフ説明会+勉強会
 
Spring Boot + Doma + AngularJSで作るERP (LINE Fukuoka Meetup版)
Spring Boot + Doma + AngularJSで作るERP (LINE Fukuoka Meetup版)Spring Boot + Doma + AngularJSで作るERP (LINE Fukuoka Meetup版)
Spring Boot + Doma + AngularJSで作るERP (LINE Fukuoka Meetup版)
 
ROS JAPAN Users Group Meetup 03
ROS JAPAN Users Group Meetup 03ROS JAPAN Users Group Meetup 03
ROS JAPAN Users Group Meetup 03
 
Next.js Storybook Driven Development
Next.js Storybook Driven DevelopmentNext.js Storybook Driven Development
Next.js Storybook Driven Development
 
マイクロサービスアーキテクチャ とは何か
マイクロサービスアーキテクチャとは何かマイクロサービスアーキテクチャとは何か
マイクロサービスアーキテクチャ とは何か
 
Microsoft Stream について
Microsoft Stream についてMicrosoft Stream について
Microsoft Stream について
 
OSC2013 HIROSHIMA ライトニングトーク すごい広島
OSC2013 HIROSHIMA ライトニングトーク すごい広島OSC2013 HIROSHIMA ライトニングトーク すごい広島
OSC2013 HIROSHIMA ライトニングトーク すごい広島
 

More from openrtm

ROBOMECH2023 RTミドルウェア講習会 第1部
ROBOMECH2023 RTミドルウェア講習会 第1部ROBOMECH2023 RTミドルウェア講習会 第1部
ROBOMECH2023 RTミドルウェア講習会 第1部
openrtm
 
ピッキングシステム
ピッキングシステムピッキングシステム
ピッキングシステム
openrtm
 
GNGを使った未知環境における経路計画
GNGを使った未知環境における経路計画GNGを使った未知環境における経路計画
GNGを使った未知環境における経路計画
openrtm
 
まねっこロボット
まねっこロボットまねっこロボット
まねっこロボット
openrtm
 
商品自動補充ロボットシステム
商品自動補充ロボットシステム商品自動補充ロボットシステム
商品自動補充ロボットシステム
openrtm
 
RTサマーキャンプ2022最終発表_都立大.pptx
RTサマーキャンプ2022最終発表_都立大.pptxRTサマーキャンプ2022最終発表_都立大.pptx
RTサマーキャンプ2022最終発表_都立大.pptx
openrtm
 
SysML実習20220822SC_GA.pdf
SysML実習20220822SC_GA.pdfSysML実習20220822SC_GA.pdf
SysML実習20220822SC_GA.pdf
openrtm
 
5.総合演習(2)
5.総合演習(2)5.総合演習(2)
5.総合演習(2)
openrtm
 
4.総合演習(1)
4.総合演習(1)4.総合演習(1)
4.総合演習(1)
openrtm
 
3.RTCプログラミング演習
3.RTCプログラミング演習3.RTCプログラミング演習
3.RTCプログラミング演習
openrtm
 
2.プログラミングの基礎
2.プログラミングの基礎2.プログラミングの基礎
2.プログラミングの基礎
openrtm
 
1.コース概要
1.コース概要1.コース概要
1.コース概要
openrtm
 
Rtコンポーネント作成入門
Rtコンポーネント作成入門Rtコンポーネント作成入門
Rtコンポーネント作成入門
openrtm
 
RTミドルウェアサマーキャンプ2021_坂本武志_1
RTミドルウェアサマーキャンプ2021_坂本武志_1RTミドルウェアサマーキャンプ2021_坂本武志_1
RTミドルウェアサマーキャンプ2021_坂本武志_1
openrtm
 
Rtミドルウェアサマーキャンプ資料2021_坂本武志_2
Rtミドルウェアサマーキャンプ資料2021_坂本武志_2Rtミドルウェアサマーキャンプ資料2021_坂本武志_2
Rtミドルウェアサマーキャンプ資料2021_坂本武志_2
openrtm
 
201111 05
201111 05201111 05
201111 05
openrtm
 
201110 03
201110 03201110 03
201110 03
openrtm
 
SICE 2020 Rtm tutorial 2_online_en
SICE 2020 Rtm tutorial 2_online_enSICE 2020 Rtm tutorial 2_online_en
SICE 2020 Rtm tutorial 2_online_en
openrtm
 

More from openrtm (18)

ROBOMECH2023 RTミドルウェア講習会 第1部
ROBOMECH2023 RTミドルウェア講習会 第1部ROBOMECH2023 RTミドルウェア講習会 第1部
ROBOMECH2023 RTミドルウェア講習会 第1部
 
ピッキングシステム
ピッキングシステムピッキングシステム
ピッキングシステム
 
GNGを使った未知環境における経路計画
GNGを使った未知環境における経路計画GNGを使った未知環境における経路計画
GNGを使った未知環境における経路計画
 
まねっこロボット
まねっこロボットまねっこロボット
まねっこロボット
 
商品自動補充ロボットシステム
商品自動補充ロボットシステム商品自動補充ロボットシステム
商品自動補充ロボットシステム
 
RTサマーキャンプ2022最終発表_都立大.pptx
RTサマーキャンプ2022最終発表_都立大.pptxRTサマーキャンプ2022最終発表_都立大.pptx
RTサマーキャンプ2022最終発表_都立大.pptx
 
SysML実習20220822SC_GA.pdf
SysML実習20220822SC_GA.pdfSysML実習20220822SC_GA.pdf
SysML実習20220822SC_GA.pdf
 
5.総合演習(2)
5.総合演習(2)5.総合演習(2)
5.総合演習(2)
 
4.総合演習(1)
4.総合演習(1)4.総合演習(1)
4.総合演習(1)
 
3.RTCプログラミング演習
3.RTCプログラミング演習3.RTCプログラミング演習
3.RTCプログラミング演習
 
2.プログラミングの基礎
2.プログラミングの基礎2.プログラミングの基礎
2.プログラミングの基礎
 
1.コース概要
1.コース概要1.コース概要
1.コース概要
 
Rtコンポーネント作成入門
Rtコンポーネント作成入門Rtコンポーネント作成入門
Rtコンポーネント作成入門
 
RTミドルウェアサマーキャンプ2021_坂本武志_1
RTミドルウェアサマーキャンプ2021_坂本武志_1RTミドルウェアサマーキャンプ2021_坂本武志_1
RTミドルウェアサマーキャンプ2021_坂本武志_1
 
Rtミドルウェアサマーキャンプ資料2021_坂本武志_2
Rtミドルウェアサマーキャンプ資料2021_坂本武志_2Rtミドルウェアサマーキャンプ資料2021_坂本武志_2
Rtミドルウェアサマーキャンプ資料2021_坂本武志_2
 
201111 05
201111 05201111 05
201111 05
 
201110 03
201110 03201110 03
201110 03
 
SICE 2020 Rtm tutorial 2_online_en
SICE 2020 Rtm tutorial 2_online_enSICE 2020 Rtm tutorial 2_online_en
SICE 2020 Rtm tutorial 2_online_en
 

Rtミドルウェアサマーキャンプ資料2021_菅佑樹

  • 2. Yuki Suga Waseda Univ. Ogata Lab. SUGAR SWEET ROBOTICS / https://ogata-lab.jp https://sugarsweetrobotics.com http://ysuga.net / 自己紹介 • 菅 佑樹 (Yuki Suga) • 職歴 • 2012-現在 株式会社SUGAR SWEET ROBOTICS代表取締役 • 2012-現在 早稲田大学表現工学科尾形研研究員 • 2010-2012 株式会社リバスト • 2007-2010 早稲田大学総合機械工学科助手 (菅 野研) • 学歴 • 2008 博士 (工学) • 2002-2004 早稲田大学理工学研究科機械工学専 攻 • 1998-2002 早稲田大学理工学部機械工学科 • 1995-1998 早稲田大学附属高等学院 • 趣味 • 子育て • 文房具,万年筆収集 • インラインスケート,ヨーヨー 早稲田時代 リバスト時代 SSR時代
  • 4. ロボット用ミドルウェア • 最近はROSやOpenRTM-aistに代表される「ロボット用ミドルウェア」が便利 • そもそもミドルウエアとはソフトウエア間の通信を補完する通信プロトコ ルおよびライブラリ・ツール群 • OSをラッピングして,OS間の差を吸収 • OSの機能や定型的な手続きを簡単化 • 異なる言語で開発しても一つのサービスに統合が可能 • 例: Unityなどのゲームミドルウェア • 分散システムの文脈では,特にネットワーク越しに通信をした時に,ホス トとなるサーバーのOSや実装をラッピングして,プラットフォームによら ない通信を提供するためのライブラリ群のこと • 例:DBMS (Oracle, MySQLなど) • 通信を標準化して,モジュールのソフトウェアを使いやすくする OS アプリ ミドルウェア
  • 5. ロボットミドルウェア • Microsoft Robotics Developer Studio •Kinectでのモデリング •動力学シミュレータ • YARP •赤ちゃんロボットiCub.人工知能研究分野 • OROCOS •ヨーロッパ •コンポーネントモデル • OpROS •コンポーネントモデル •韓国製 • ORiN •DENSOウェーブの産業用ロボット •ROS •Robot Operating System •もっとも使われているロボット用ミドルウェア •DARPA Robotics Challengeでも採用 • RT-middleware •国際団体OMGで規格化された規格 •OpenRTM-aistなど,多くの実装がある • naoqi •フランスのAldebaran Robotics社が開発 •NAO用だが,SoftBankのPepperにも採用 •NVIDIA Issac SDK •NVIDIAが開発 •Protobufで通信.コンポーネントモデル
  • 7. 例えばこんな時ありがたかった 論理設計と物理設計の分離 • 論理設計・・・欲しい機能をモジュールとし てまとめる設計 • 物理設計・・・モジュールの配置.分散シス テム上のどのマシンにリソースを配置するか • テスト環境ではうまく動いたが,本番環境 で動作しなかったので配置を変更した • 本番用の工業用PCがUSBハブ認識数に制 限があったので,分散システムにした • RTCをLinux用に変更して組み込み Linux上で動作させた Windows PC USBハブ USBハブ USBハブ USBハブ USBハブ Windows FA用PC USBハブ USBハブ USBハブ USBハブ USBハブ 組み込み Linux PC ① ② ③ ③ ② ① 1 2 3 1 2 3
  • 8. ROS • 機能単位=Node • データフロー型通信=Topic • 遠隔手続き型通信=Service • 機能単位の調整=Parameter PC2 PC1 Node Node Node ns1/ TopicA Publish Subscribe ns1/ Service1 Node Provide Node 1. Request 2. Call 3. Result
  • 9. Yuki Suga Waseda Univ. Ogata Lab. SUGAR SWEET ROBOTICS / https://ogata-lab.jp https://sugarsweetrobotics.com http://ysuga.net / OpenRTM-aist • 機能単位=RT Component • 機能単位に状態マシンがある • INACTIVE-ACTIVE-ERROR • データフロー型通信= Data Port • 遠隔手続き型通信=Service Port • 機能単位の調整=Con fi guration RTC RTC RTC RTC RTC RTC RTC RTC RTC CREATED INACTIVE ACTIVE ERROR DEACTIVATE ACTIVATE RESET
  • 10. Yuki Suga Waseda Univ. Ogata Lab. SUGAR SWEET ROBOTICS / https://ogata-lab.jp https://sugarsweetrobotics.com http://ysuga.net / ロボットミドルウェアの特徴 • ROS, OpenRTM-aistはコンポーネント指向型ミドルウェア • 機能単位: RTComponent,Node • 通信機能を提供 • メッセージ指向型: DataPort, Topic • 遠隔呼び出し型: ServicePort, Service, Action • 機能を実行時に調整するための仕組み: Con fi guration, Parameter • 異なるAPIをカプセル化 • 共通の通信規格でデータを送受信可能に • 複雑なAPIやデータの集まりを隠 し,共通化
  • 11. ロボットシステムをミドルウェアで組む目的 • コストを下げること • 時間的・金銭的コスト • 機能の再利用による開発工数削減 • 将来のカスタマイズ工数を削減 • 複数プラットフォーム対応のための工数削減 • コストが下がらなければミドルウェアなんか使わなくていい • 以下の条件のANDならミドルウェアの利用は全く進めない! • 一個しか作らないし,今後自分も含め,他の誰も使わない特殊な環境,ハードウェア • 一人ぼっちで開発する. • 誰にも知られない,使われたくない,使われない.
  • 12. ロボットミドルウェアでシステムを組む • コストが下がるポイント • 多人数で並行作業,外注,共同研究 • 他人の機能要素やツールを再利用 • 論文の最新技術をフォロー • 他人が運用する • コストがかかるポイント • ミドルウェア自体の学習コスト.人間の調達コスト(調達難易度高) • オーバーヘッド,無駄処理 • 分散システムの管理運用コスト
  • 13. コンポーネント化と再利用 • システムの統合 • すべてが異なるAPIを利用するロボット製品) • カナダInuktun製クローラ • オランダED社製アーム • アメリカTRACLabs製パンチルト雲台 • アメリカVIDERE Design製ステレオカメラ • PCとの通信ラインの接続方法も異なる • RTコンポーネントでAPIをラッピングして置くことで,ソフト ウェアの再利用性が向上 • ネットワークで隔てられたPC間の通信が容易 • 異なる言語で書かれたRTCでも通信可能 • モジュールの分割とインターフェース (論理設計)と実際のハードウ ェアの接続 (物理設計)を分離することがミドルウェアのメリット ハードウエアの構成(物理設計・配置) RTシステムの構成(論理設計)
  • 14. インテグレーションのコスト舐めんな • これまでのサマーキャンプとか,学生プロジェクトを見る限り • 役割分担まではできる.SysMLっぽいものを書いたりできる • 進 ミーティングでいくら『インテグレーション舐めんな』といってもやらない • 動かしてみると検討不足(よくあるのはシステムの開始や終了部分)でインターフ ェースを見直したり,パラメータチューニングが面倒でデモに間に合わない • OpenRTM-aistやROSはインテグレーションしながら組めるのよ.やって!お願いだ から.みんなの苦しむ姿が見たくないの.
  • 15. 短期間でのシステム構築の手順 • SysML等で設計図を書く • スケルトンコードを書く • RTCBuilder • ROSなら必要なパッケージとNodeのメインコードを全て書く • 再利用するモジュールはダウンロードしてビルドしてみる • ここでつまづくのが多い.中身空っぽのStubコンポーネントを作っておいてもいい.僕なら作る. • ロボットハードのStubコードはハード依存が取れてハード抜きで開発を進めたり,テストしやすくなる • とりあえずビルドして接続されることを確認する • RTSystemEditorなら簡単.SystemPro fi leを保存する • ROSはlaunchを書いてrqtなどで確認.launchも保存する • ここで全部githubに上げる • 中身は空っぽだが,入力された値を表示するコードくらいは書いておくといい • 一つ一つのモジュールを実装して,出力を確認しながら進める
  • 16. Stubコンポーネント • ハードなしでもシステム開発できるようにする • シミュレータと繋げるにはシミュレータ環境を作るのが面倒 • コンポーネントだけで小さなシミュレーションを可能にしておく • 例:移動ロボット • 速度指令を時間積分するだけのコンポーネント • 例:アームロボット • 関節角度指令に対して,指令速度で数値を変更するだけ • 逐次ログを取っておく (csv) →Excelとか Matplotlibで可視化
  • 17. それぞれのモジュールの実装方法 • ROSでもROS2でもRTCでも,やることは同じ • ミドルウェア相互に移植しやすく書くべし • ミドルウェアに依存しない • いざとなればミドルウェアを外して単一のアプリに変更できる • 内部に機能を実装するクラスを作り,ROSのノードのコードや,RTCのコードにはデ ータ型の変換コードのみを書くべき • ご参考: UrgRTC (拙作) https://github.com/sugarsweetrobotics/UrgRTC/blob/ master/src/UrgRTC.cpp
  • 18. モジュールを単体でテストする方法 • データを突っ込んでみる • OpenRTM-aist ・・・ rtinject (rtshell) • ROS・・・ rostopic pub • 出てくるデータをprintしてみる • OpenRTM-aist ・・・ reprint (rtshell) • ROS・・・rostopic echo • ログを取ってみる.再生してみる • OpenRTM-aist ・・・ rtlog (rtshell) • ROS・・・ rosbag 例えば・・・ ・実験環境でLiDARとロボットのオドメトリをrtlogコマンドで一気に収集 ・帰宅してオドメトリとLiDAR情報でSLAMしてみる.パラメータを調整しながら完 成するマップを確認できる 例えば・・・ ・出来上がったコンポーネントに対して,rtprintを準備してからrtinjectでデータを 送信するbatスクリプトを用意する ・RTCをコンパイルしてVisual Studioでデバッグしながら,上記のbatスクリプトを 実行すればデバッグが簡単 (RTSEでつなぎながらテストすると大変)
  • 19. モジュールの中のログをとる • ミドルウェアが用意しているログ記録方法を使うと良い • printfなどでコンソールに出すと共有しにくい.ファイルに保存できれば検索可能 • OpenRTM-aist・・・RTC_DEBUG, RTC_INFOなどのコマンドがある • RTC_DEBUG((“DataInPort(‘in’) received data (%d)”, m_data.data)); • RTC_INFO((“….”)); • RTC_ERROR((“…”)); • ROS・・・roslogを使う • ROS_DEBUG(“Topic(‘hoge’) received data(%d)”, msg->data); • ROS_INFO(“…”); • ROS_ERROR(“…”); • ログのコツ • ログメッセージは5W1Hで出すこと(Who, When, Where, What, Why, How) • ログレベルを考えて使う.
  • 20. OpenRTM-aistの使えるもの • とりあえずこのサイトは見て欲しい • wasanbon.org • 本来wasanbonはRTCのリポジトリ管理+ビルド+運用ツールだけど,このサイトの右上には wasanbonで管理しているRTCが並んでいる • RTCBuilderが掃き出すRTC.xmlというプロファイルを使ってヘルプを自動構築した結果 • カテゴリが階層状になってるともっといいんですけどね • セックさんにも使ってもらっています • Air-graph https://sec-airgraph.github.io/AirGraph-doc/ • 今,Python3.8およびOpenRTM 1.2.2に対応作業中です.
  • 21.
  • 22. Yuki Suga Waseda Univ. Ogata Lab. SUGAR SWEET ROBOTICS / https://ogata-lab.jp https://sugarsweetrobotics.com http://ysuga.net / ロボットミドルウェアで構成した システムの例 SLAMとナビゲーション • 各種移動ロボット対応 • RTCを入れ替え可能 • SLAM(マップ生成) • 自己位置推定(パーティクルフィル タ) • パスプランニング
  • 23. Yuki Suga Waseda Univ. Ogata Lab. SUGAR SWEET ROBOTICS / https://ogata-lab.jp https://sugarsweetrobotics.com http://ysuga.net / Arduino+RT-middleware=RTno • RTno “アールティーノ” = RT- middleware + Arduino • ArduinoとRTミドルウエアの連携 • RTコンポーネントをArduinoで作る • 組み込みプログラミングのみでRTC を作る あーるてぃーの RTC データポート構成な どのプロファイル データポートの通信 状態マシンの制御 組み込みプログラム ・データポートの宣言 ・Double型出力ポートx1 ・Long型入力ポートx1 ・出力ポートからA/D変換結果を出力 ・入力ポートへの指令でLEDを制御 コンポーネントの 自動生成 (ProxyRTC)
  • 24. Yuki Suga Waseda Univ. Ogata Lab. SUGAR SWEET ROBOTICS / https://ogata-lab.jp https://sugarsweetrobotics.com http://ysuga.net / ロボットミドルウェアの応用例 ロボットミドルウェアとR-envの連携 • シナリオを編集してロボットシステムを現場に適 用する「運用」と,基本的なロボットシステムを 開発する「開発」の分業が目的 • ロボットプログラミングツール R-env (NTT) と OpenRTM-aist / ROS / ROS2の連携 • R-envによるロボットサービスのシナリオ作成 • ロボットシステムを構成するミドルウェアレイ ヤにR-envから指令を送ることができる • データ型変換 • データフロー型送受信+遠隔呼び出し型通 信
  • 25. Yuki Suga Waseda Univ. Ogata Lab. SUGAR SWEET ROBOTICS / https://ogata-lab.jp https://sugarsweetrobotics.com http://ysuga.net / まとめ • さきに全体を組む.空っぽでもいい • ロボはStubにできると良い.シミュレータが簡単ならそれでもいい • 一つずつ実装していく.出口側のRTCで出力をログしておいて,CSVで確認するとかできる • コンポーネントの中のコードはクラスでひとまとまりにしておきたい • できればそのクラスの単体テストを実装したい • デモを一周できる最低限のコードを実装していく • さっさとデモだけはできるようにしたい • デモ+αを実装するときは,最低限デモを通した時のコードを変更しないで済むような設計 がいい • 新しい機能は新しいコンポーネントを追加して機能追加できるようにしたい