RSNP クライアントの実装を簡略化するための追加ライブラリ
An additional library for implement cost reduction of RSNP clients
加納 政芳
∗1Masayoshi Kanoh
山本 悠策
∗1Yusaku Yamamoto
中村 剛士
∗2Tsuyoshi Nakamura
∗1
中京大学
Chukyo University
∗2
名古屋工業大学
Nagoya Institute of Technology
The Robot Service Network Protocol (RSNP) is a common platform for providing services with robots. Devel- oping a service in reference to RSNP costs its developers programs for server and robot control. In this paper, we propose an additional library for implement cost reduction of RSNP clients.
1. はじめに
近年,情報端末やネットワーク技術の発展,普及に伴い,様々 な情報へのアクセスが容易になった.ロボット分野において も,コンテンツの提供やセンサ情報の集約といったネットワー クを利用したサービスが提案されており
[1, 2, 3]
,今後,サー ビスが拡大していくと考えられる.ロボットを用いた様々な サービスを提供するための共通プラットフォームとしてRobot Service Network Protocol
(RSNP
)[4, 5]
がある.RSNP
に 準拠して開発されたサービスは,RSNP
が利用可能な全ての ロボットで使用できる利点がある.RSNP
に準拠したサービスの開発には,それに準拠したサー バの構築,ロボットの開発および,サーバとロボット用のプロ グラム開発など,要求される技術が多岐にわたる.このよう にサービス開発には大きなコストがかかることから,サービ ス開発は敬遠されがちである.RSNP
に準拠したサービス開 発の環境を改善する試みとして,文献[6]
では,RSNP Server
Container
を提案している.サーバ仮想化技術であるLinux
Containers
を利用してRSNP
サーバ環境をゲストOS
として 提供することによって,RSNP
に準拠したサーバを容易に構 築できるようにしている.文献[7]
では,リアルタイム音声通 信のためにMultimediaProfile
を拡張し,リアルタイムで音声 データを通信可能にする機能を追加している.このようにサー ビス開発環境改善の試みは数多くなされているが,これまでにRSNP
クライアントのプログラム開発を改善する提案は行わ れていない.そこで本稿では,RSNP
クライアントのための サービス実装を簡略する追加ライブラリを提案する.本ライブ ラリは,サービスの開発に必要となる基本的な処理をパッケー ジとして提供するため,RSNP
サービスの開発コストの削減 が見込める.2. RSNP クライアント開発用ライブラリ
従来の
RSNP
ライブラリ構造では,複数のクラスにロボッ トの動作指示,サーバへの依頼送信やサーバからの依頼要求対 応といった処理を記述している.そのため,開発者にとって,ソースコードの加筆修正箇所やデータ通信の流れがイメージし づらいといえる.これに対して提案ライブラリでは,サービス の開発に必要な接続・認証・切断といった基本的な処理をパッ ケージとして提供しつつ,簡易な実装を実現する.
連絡先
:
加納 政芳,中京大学,〒466-8666
名古屋市昭和区八 事本町101-2
ユーザプログラム
RSNPController
AcceptorProfileFa ctory_impl
RSNPConnect Data
Acceptor
AcceptorProfile FactoryBase
MultimediaProfile Base
Invoker
InvokerProfile Factory
Multimedia Profile RSNPライブラリ
提案ライブラリ
2 1
3 4
7
9
5 8
6
図
1:
提案ライブラリ簡易な実装を実現するために,
RSNPController
クラス,RSNPConnectData
クラス,AcceptorProfileFactory impl
ク ラスを開発した(図1
).RSNPController
クラスは,接続・切断や認証といった通信の管理と各プロファイルの利用処理を 行う.
RSNP
クライアントの開発者は基本的にこのクラスの みを用いてプログラムを開発すればよい.RSNPConnectData
クラスは,通信に必要なデータおよび,サーバからの要求に 対する各プロファイルの応答処理を登録する.AcceptorPro- fileFactory impl
クラスは,サーバからの要求に対する各プロ ファイルの応答処理を管理する.図
1
の矢印は処理の流れを表しており,1
〜4
はサーバか らの要求に対する処理,5
,6
はサーバからの要求に対する 各プロファイルの応答処理の管理,7
〜9
は通信の接続・切断 や認証処理である.従来のRSNP
ライブラリを用いたクライ アントの開発では,1 2 3 5 7 8
をコーディングする必要が あるが,提案ライブラリを用いた場合は,1
,7
のみコーディ ングすればよい.なお,図1
はMultimediaProfile
を例にして いるが,他のプロファイルにおいても提案ライブラリは利用可 能である.1
The 29th Annual Conference of the Japanese Society for Artificial Intelligence, 2015
3H4-NFC-03b-1
1: p u b l i c s t a t i c v o i d m a i n ( S t r i n g [] a r g s ) t h r o w s I O E x c e p t i o n { 2: if ( a r g s . l e n g t h >= 3) {
3: r o b o t _ i d = a r g s [ 0 ] ; 4: p a s s w o r d = a r g s [ 1 ] ;
5: p o r t = I n t e g e r . p a r s e I n t ( a r g s [ 2 ] ) ;
6: }
7: S e r v e r S o c k e t s e r v e r s o c k = n e w S e r v e r S o c k e t( p o r t );
8: S o c k e t s o c k = n u l l ;
9: R S N P C o n t r o l l e r r s n p = n e w R S N P C o n t r o l l e r( epn , r o b o t _ i d , p a s s w o r d );
1 0 : r s n p . c o n n e c t ( ) ; 1 1 :
1 2 : t r y {
1 3 : if ( r s n p . _ i s C o n n e c t ( ) ) {
1 4 : l o n g c o n v _ i d = r s n p . g e t C o n v _ i d ( ) ;
1 5 : I C o n t e n t s _ p r o f i l e cp = r s n p . s t a r t C o n t e n t s _ p r o f i l e( n e w C o n t e n t s P r o f i l e B a s e ( ) ) ; 1 6 : I A s y n c C a l l B a c k c a l l b a c k = n e w I A s y n c C a l l B a c k () {
1 7 : @ O v e r r i d e p u b l i c v o i d d o E v e n t ( R e t _ v a l u e ret , b o o l e a n i s L a s t ) { 1 8 : C o n t e n t s P r o f i l e H e l p e r h e l p e r = n e w C o n t e n t s P r o f i l e H e l p e r ( r e t );
1 9 : S t r i n g m e s s a g e = h e l p e r . g e t D e t a i l ( ) ;
2 0 : }
2 1 : @ O v e r r i d e p u b l i c v o i d d o E x c e p t i o n( E x c e p t i o n e ) {}
2 2 : };
2 3 : cp . d i s t r i b u t e _ c o n t e n t s ( c o n v _ i d , "" , -1 , 0 , c a l l b a c k );
2 4 :
2 5 : M u l t i m e d i a _ p r o f i l e _ i m p l m p i = n e w M u l t i m e d i a _ p r o f i l e _ i m p l ( ) ; 2 6 : I M u l t i m e d i a _ p r o f i l e mp = r s n p . s t a r t M u l t i m e d i a _ p r o f i l e( m p i );
2 7 : mp . s t a r t _ p r o f i l e( c o n v _ i d );
2 8 : s o c k = s e r v e r s o c k. a c c e p t ( ) ; 2 9 :
3 0 : r s n p . d i s c o n n e c t ( ) ;
3 1 : s o c k . c l o s e ( ) ;
3 2 : s e r v e r s o c k. c l o s e ( ) ;
3 3 : } e l s e { }
3 4 : } c a t c h ( R S i E x c e p t i o n e ){
3 5 : e . p r i n t S t a c k T r a c e ( ) ;
3 6 : }
3 7 : }
図
2: RobotMain.java
の開発例3. 開発例
本節では,
http://www.robotservices.org/wiki/jp
にお いて公開されているサンプルプログラムRobotSample.zip
を 例にして,提案ライブラリを用いた場合のソースコードを示す.RobotSample.zip
は画像送信サービスのサンプルプログラムであるが,このサービスを実現するために,
AcceptorProfile- Factory impl.java
,Multimedia profile impl
および,Robot-
Main.java
の3
つのソースコードを作成している.提案ライブラリを用いた場合は,
AcceptorProfileFactory impl.java
は作 成せずに,Multimedia profile impl.java
と同一のソースコー ドを用いて,RobotMain.java
のみ書き換えることで同様の機 能を有したサービスを開発できる.図2
に提案ライブラリを 用いた場合のRobotMain.java
のソースコードを示す.まず,
RSNPController
クラスをインスタンス化する(同 図l.9;
図1
の7
).つぎに,RSNPController
クラスのイン スタンスを通じてサーバへの接続およびロボットの認証を行 い,conv id
を同インスタンスから取得する(ll.10
,14
,15;
7
).そして,MultimediaProfile
をインスタンス化し(l.25;
1
),同プロファイルの開始処理を行う(l.26; 7
).最後に,RSNPController
クラスのインスタンスを通じてサーバとの接続を切断する(
l.30; 7
).以上の手続きによって容易にサーバとの通信管理と
Multi- mediaProfile
の利用ができる.4. おわりに
本稿では