SlideShare uma empresa Scribd logo
1 de 24
Baixar para ler offline
第1部:RTミドルウエア概要

           (独)産業技術総合研究所
            知能システム研究部門
                安藤慶昭


                                                   1




                     RTとは?
• RT = Robot Technology   cf. IT
  – ≠Real-time
  – 単体のロボットだけでなく、さまざまなロボット技術に基づく機能要素
    をも含む (センサ、アクチュエータ, 制御スキーム、アルゴリズム、
    etc….)

                  産総研版RTミドルウエア




     OpenRTM-aist
       +         +            +    +        +
                                   RT-Middleware

• RT-Middleware (RTM)
  – RT要素のインテグレーションのためのミドルウエア
• RT-Component (RTC)
  – RT-Middlewareにおけるソフトウエアの基本単位

                                                   2
従来のシステムでは…




             Joystick
             software


Joystick


                             Robot Arm
                           Control software



互換性のあるインターフェース同士は接続可能                             Robot Arm


                                                               3




           従来のシステムでは…
                           Humanoid’s Arm
                           Control software




                                              Humanoid’s Arm


             Joystick
             software


Joystick


                             Robot Arm
                           Control software
    ロボットによって、インターフェースは色々
      互換性が無ければつながらない                              Robot Arm


                                                               4
RTミドルウエアでは…
RTミドルウエアは別々に作られた
ソフトウエアモジュール同士を繋ぐ                             Arm A
                                         Control software


ための共通インターフェース
を提供する

                                compatible
                                arm interfaces
                                                            Humanoid’s Arm


                   Joystick
                   software


    Joystick


                                             Arm B
                                         Control software

ソフトウエアの再利用性の向上
RTシステム構築が容易になる                                                  Robot Arm


                                                                             5




    ミドルウエア、コンポーネント、etc…
•   ミドルウエア
    – OSとアプリケーション層の中間に位置し、特定の用途に対して利便性、抽象
      化向上のために種々の機能を提供するソフトウエア
    – 例:RDBMS、ORB等。定義は結構曖昧
•   分散オブジェクト(ミドルウエア)
    – 分散環境において、リモートのオブジェクトに対して透過的アクセスを提供す
      る仕組み
    – 例:CORBA、Java RMI、DCOM等
•   コンポーネント
    – 再利用可能なソフトウエアの断片(例えばモジュール)であり、内部の詳細機
      能にアクセスするための(シンタクス・セマンティクスともにきちんと定義され
      た)インターフェースセットをもち、外部に対してはそのインターフェースを介し
      てある種の機能を提供するモジュール。
•   CBSD(Component Based Software Development)
    – ソフトウエア・システムを構築する際の基本構成要素をコンポーネントとして
      構成するソフトウエア開発手法



                                                                             6
モジュール化のメリット
• 再利用性の向上
 – 同じコンポーネントをいろいろなシステムに使いまわせる
• 選択肢の多様化
 – 同じ機能を持つ複数のモジュールを試すことができる
• 柔軟性の向上
 – モジュール接続構成かえるだけで様々なシステムを構築
   できる
• 信頼性の向上
 – モジュール単位でテスト可能なため信頼性が向上する
• 堅牢性の向上
 – システムがモジュールで分割されているので、一つの問
   題が全体に波及しにくい




  RTコンポーネント化のメリット
モジュール化のメリットに加えて
• ソフトウエアパターンを提供
 – ロボットに特有のソフトウエアパターンを提供することで、
   体系的なシステム構築が可能
• フレームワークの提供
 – フレームワークが提供されているので、コアのロジックに
   集中できる
• 分散ミドルウエア
 – ロボット体内LANやネットワークロボットなど、分散システ
   ムを容易に構築可能
RTミドルウエアの目的

       モジュール化による問題解決
•    仕様の明確化
      コストの問題                             技術の問題                        ニーズの問題
•    最新技術を容易に利用可能
•    誰でもロボットが作れる                             最新の理論・                        多様なユーザ
A社製移動ベース    B社製アーム    C社製センサ・・・
                                             アルゴリズム



                                                    仕様
                                    RTコンポーネント化
                                         !     !    !    !


      モジュール化・再利用                                                      カスタマイズが容易に
                                         システム開発者


ロボットの低コスト化                         最新技術を利用可能                         多様なニーズに対応



ロボットシステムインテグレーションによるイノベーション
                                                                                     9




     RTミドルウエアとRTコンポーネント
              ロジック

      ・デバイス制御
    ・制御アルゴリズム                 RT
     ・アプリケーション                                               RT
                           コンポーネント
        etc…                                              コンポーネント
                           フレームワーク


     ロジックを箱(フレームワーク)に入れたもの=RTコンポーネント(RTC)



                     RTC    RTC    RTC       RTC   RTC   RTC   RTC   RTC


                                         RTミドルウエア


           RTCの実行環境(OSのようなもの)=RTミドルウエア(RTM)
                 ※RTCはネットワーク上に分散可能
                                                                                    10
RTコンポーネントの主な機能
 アクティビティ・実行コンテキスト                                                     データポート
共通の状態遷移        複合実行                                                       •  データ指向ポート
                                                                  •        連続的なデータの送受信
                                       センサRTC                             •  動的な接続・切断
    Inactive       Active                                                             位置
                                                                                                                    サーボの例
                                                                          目標値
                                        制御RTC                                                                      電圧
                                                                                                    1
                                                                                                          +   Kp
                                                                                              -    TI s


                   Error          アクチュエータRTC
                                                                                                   TDs




                                                                           エンコーダ
                                                                                     位置         制御器                     アクチュエータ
                                                                          コンポーネント            コ ンポーネント                   コンポーネント
     ライフサイクルの管理・コアロジックの実行                                                            データ指向通信機能

     サービスポート                                                              コンフィギュレーション
•        定義可能なインターフェースを持つ
     •    内部の詳細な機能にアクセス                                           •        パラメータを保持する仕組み
               –   パラメータ取得・設定          ステレオビジョンの例                 •        いくつかのセットを保持可能                            複数のセットを
                   – モード切替                     サービスポート                •     実行時に動的に変更可能                              動作時に
                    – etc…                                                                                           切り替えて
     ステレオビジョン                                                                                                        使用可能
     インターフェース                                    3Dデプス                        名前
                                                                      セット名
                                                  データ                          値
 ・モード設定関数
 ・座標系設定関数            画像            ステレオビジョン                                   名前
                     データ                                              セット名
・キャリブレーション                          コンポーネント                                    値

    ・etc…                                        データポート

           サービス指向相互作用機能
                                                                                                                                  11




                              RTCの分割と連携
                                       ロボット体内のコンポーネントによる構成例
                                                       画像データ                                      ポート
                                                                                                  データ・コマンドの流れ
                                                           顔位置
                                                           問 合せ
                              カメラ                                            顔認識
                           コ ンポーネント                                       コ ンポーネント

                                       画像データ
                                                                          人物データ
                                                ステレオビジョン                  表情データ
                                                コ ンポーネント
                                                                                               頭・腕駆動
                                                                               ジェスチャ          コ ンポーネント
                                               カメラコントロール                       軌 道データ
                              カメラ
                           コ ンポーネント



                                       音声データ
                                                   音声認識                      対話                 音声合成
                                                 コ ンポーネント                 コ ンポーネント            コ ンポーネント
                                                            文字データ                    文字データ
                               マイク
                            コ ンポーネント




    (モジュール)情報の隠蔽と公開のルールが重要
RTミドルウエアによる分散システム
                                                                        ロボットC
                        ロボットA                      ロボットB
 RTMにより、
ネットワーク上に
分散するRTCを
OS・言語の壁を
                       RTC     RTC                 RTC    RTC         RTC RTC RTC
越えて接続する
 ことができる。                   RTM                       RTM                  RTM
                          Solaris                   FreeBSD             ARTLinux
    ネットワーク

       Linux                  Windows                      TRON
         RTM                        RTM                    RTM
     RTC    RTC              RTC      RTC                RTC    RTC   RTC同士の接続
                                                                       は、プログラム
                                                                      実行中に動的に
                                                                      行うことが出来る。
    アプリケーション               操作デバイス                          センサ




                        OpenRTM-aist
•   コンポーネントフレームワーク + ミドルウエアライブラリ
•   コンポーネントインターフェース:
     – OMG Robotic Technology Component Specification ver1.0 準拠
•   OS
     – 公式:FreeBSD, Linux (Fedora, Debian, Ubuntu, Vine, Scientific), Windows
     – 非公式:Mac OS X, uITRON, T-Kernel, VxWorks
•   言語:
     – C++ (1.1.0), Python (1.0.0), Java (1.0.0)
     – .NET (implemented by SEC)
•   CPU アーキテクチャ (動作実績):
     – i386, ARM9, PPC, SH4
     – PIC, dsPIC, H8 (RTC-Lite)
•   ツール (Eclipse プラグイン)
     – テンプレートソースジェネレータ: rtc-template、RTCBuilder
     – システムインテグレーションツール: RTSystemEditor
     – その他
           • Pattern weaver for RT-Middleware (株式会社テクノロジックアートより発売中)
                                                                                    14
OMG RTC 標準化
•     2005年9月
      RFP: Robot Technology Components
      (RTCs) 公開。
•     2006年2月
      Initial Response : PIM and PSM for
      RTComponent を執筆し提出
      提案者:AIST(日)、RTI(米)
•     2006年4月
      両者の提案を統合した仕様を提案
•     2006年9月
      ABにて承認、事実上の国際標準獲得
      FTFが組織され最終文書化開始
•     2007年8月
      FTFの最後の投票が終了
•     2007年9月
      ABにてFTFの結果を報告、承認
•     2008年4月
      OMG RTC標準仕様公式リリース
•     2010年1月
      OpenRTM-aist-1.0リリース



                                                                                     15




                     OMG RTC ファミリ
    Name                    Vendor         Feature
    OpenRTM-aist            AIST           C++, Python, Java

    OpenRTM.NET             SEC            .NET(C#,VB,C++/CLI, F#, etc..)

    miniRTC, microRTC       SEC            CAN・ZigBee等を利用した組込用RTC実装

    Dependable RTM          SEC/AIST       機能安全認証 (IEC61508) capableなRTM実装

    RTC CANOpen             SIT, CiA       CANOpenのためのCiA (Can in automation) における
                                           RTC標準
    PALRO                   富士ソフト          小型ヒューマノイドのためのC++ PSM 実装

    OPRoS                   ETRI           韓国国家プロジェクトでの実装

    GostaiRTC               GOSTAI,        ロボット言語上で動作するC++ PSM実装
                            THALES
    H-RTM (仮称)              本田R&D          OpenRTM-aist互換、FSM型コンポーネントをサポート


同一標準仕様に基づく多様な実装により
 • 実装(製品)の継続性を保証
 • 実装間での相互利用がより容易に
                                                                                     16
Success stories
                                                    DAQ-Middleware: KEK/J-PARC
                                                    KEK: High Energy Accelerator Research Organization
                                                    J-PARC: Japan Proton Accelerator Research Complex




HRP-4: Kawada/AIST




TAIZOU: General Robotics Inc.   HIRO: Kawada/GRX           HRP-4C: Kawada/AIST
                                                                                                         17




                  OpenRTM and HRP4
 • New real-time control                      • Hardware/simulator
   framework for                                concurrent development
                                                is realized by OpenRTM
   humanoid robot
                                                and OpenHRP3
   HRP4




        This control system can be more general and for various kind of
                                   robots.
Japan Proton Accelerator Research Complex
Model : Dell PowerEdge SC1430
                                     (J-PARC,大強度陽子加速器施設)
CPU :Intel Xeon 5120 @ 1.86GHz 2 Cores ×2
Memory: 2GB                                                                              物質・生命科学実験施設
                                                                                                                                      ハドロン実験施設
                                                                                                                                    Hadron Beam Facility
NIC: Intel Pro 1000 PCI/e (1GbE)                                                        Materials and Life Science
OS: Scientific Linux 5.4 (i386)                                                           Experimental Facility

                                                                        核変換施設
                                                                         Nuclear
              Source             Sink                                 Transmutation
                                                                                                                                      500 m




                                                                                                                                           ニュートリノ
                                                                                                                                            実験施設
                                                                                                                                           Neutrino to
                                                                                                                                           Kamiokande
                                            Ethernet                                                    3 GeV Synchrotron
                                                                                       Linac                                         50 GeV Synchrotron
                                                                                                           (25 Hz, 1MW)                  (0.75 MW)
                                                                                      (350m)

                                                                                                        J-PARC = Japan Proton Accelerator Research Complex
                                                       © KEK                                         Joint Project between KEK and JAEA (former JAERI)


                    88MB/s = 704 Mbps




                                                         Readout modules x102
                                                         PSDs x816




© KEK




                                  RTミドルウエアPJ
                                              FY2002.12-FY2004
    • 名称:NEDO 21世紀ロボッ
      トチャレンジプログラム
            – 「ロボット機能発現のために
              必要な要素技術開発」
    • 目的:
            – RT要素の部品化(モジュー
              ル化)の研究開発
            – 分散オブジェクト指向開発
            – RT要素の分類・モジュール
              化に必要な機能・インタフェ
              ース仕様の明確化
    • 予算規模:
            – 65百万円
            – 全体267.3百万円



                                                                                                                                                             20
NEDO基盤PJ                                        その他の

                     FY2003-FY2007                              ロボット開発
                                                                  ツール
                                                                 プラグイン

                                Java開発環境   C++開発環境    RtcLink   追加・拡張
•   名称:「運動制御デバイスおよび               プラグイン     プラグイン    プラグイン

    モジュールの開発」
                                           Eclipse Paltform
•   目的:
    – 運動制御デバイスの開発                              JavaVM
    – デバイスに搭載するRTCの開発                  ツールのEclipseプラグイン化
    – その他モーションコントロールに
      資するRTM/RTCの開発
•   予算規模:
    – 15百万円/年
    – 371百万円、全体1,259百万円




                                            RTC-CANの開発

         dsPIC版RTC-Liteの開発
                                                                         21




                       知能化PJ
                       FY2007-FY2012

• 名称:「次世代ロボット知能
  化技術開発プロジェクト」
• 目的
    – ソフトウエアプラットフォーム
      の開発
    – 作業知能、移動知能、コミュ
      ニケーション知能に関するモ
      ジュールの開発
• 予算:
    – 400百万円
    – 全体7,000百万円
• 研究グループ
    – 15グループ


                                                                         22
RTミドルウエアの広がり
 ダウンロード数                                                        ユーザ数
                                  2012年2月現在
       2008年 2009年 2010年 2011年 2012年        合計                  タイプ                   登録数
C++      4978 9136 12049 1851     253       28267         Webページユーザ                           365 人
Python    728 1686 2387     566    55        5422         Webページアクセス               約 300 visit/day
Java      643 1130    685   384    46        2888                                 約 1000 view/day

Tool     3993 6306 3491     967    39       14796         メーリングリスト                            447 人

All     10342 18258 18612 3768    393       51373         講習会                            のべ   572 人
                                                          利用組織(Google Map)                  46 組織


  プロジェクト登録数                  OMG RTC規格実装 (11種類)
       タイプ       登録数       Name                Vendor             Feature
 RTコンポーネント群          287   OpenRTM-aist        AIST               C++, Python, Java
                           OpenRTM.NET         SEC                .NET(C#,VB,C++/CLI, F#, etc..)
 RTミドルウエア             14
                           miniRTC, microRTC   SEC                CAN・ZigBee等を利用した組込用RTC実装
 ツール                  19
                           Dependable RTM      SEC/AIST           機能安全認証 (IEC61508) capableなRTM実装
 仕様・文書                 4
                           RTC CANOpen         SIT, CiA           CANOpenのためのCiA (Can in automation) に
 ハードウエア               28                                          おけるRTC標準
                           PALRO               富士ソフト              小型ヒューマノイドのためのC++ PSM 実装
                           OPRoS               ETRI               韓国国家プロジェクトでの実装
                           GostaiRTC           GOSTAI, THALES     ロボット言語上で動作するC++ PSM実装

                                                                                                      23




                     プロジェクトページ
   • ユーザが自分の作品を
     登録
   • 他のユーザの作った
     RTCを探すことができ
     る
             タイプ             登録数
       RTコンポーネント群                  287
       RTミドルウエア                        14
       ツール                             19
       仕様・文書                           4
       ハードウエア                          28

                                                                                                      24
ハードウエア集
• OpenRTMで利用可能
  なハードウエアのリスト
• ハードウエアを利用す
  るために利用できるコ
  ンポーネントのリスト




                        25




      NEDO RTコンポーネント集
• www.openrtm.org に
  NEDO知能化PJ成果
  物の特別ページを設置
  –ツール
  –作業知能モジュール
  –移動知能モジュール
  –対話知能モジュール
  –商用ライセンスモジュー
   ル
  の5カテゴリに分けて掲載
RTコンポーネントの開発




                                                  27




OpenRTMを使った開発の流れ
               どのようなコンポーネントか?
               ・名前
コンポーネント        ・データポート
   の仕様         ・サービスポート               コアロジック
               ・コンフィギュレーション

                                      RTC開発者が
                                      開発したプログ
                       コードの雛型           ラム資産
RtcTemplate
                      (C++のクラス)
              コード生成
                              コンパイル
                                      雛型にコアロジック
                                        を埋め込む
                       .so or DLL
 マネージャ
(ミドルウエア)

                         実行

                                                  28
フレームワークとコアロジック

  RT コ ンポーネント                                   RT コ ンポーネント
 標 準インターフェース                                   標 準インターフェース


                             ステレオビジョン
                              ア ルゴリズム
                            左目画 像 右目画 像        左目画 像 右目画 像



   中身は空
                  +           デプスマップ
                                          =      デプスマップ


RT コ ンポーネント                  コアロジック            ステレオビジョン
 フ レームワーク                                     RT コ ンポーネント


RTCフレームワーク+コアロジック=RTコンポーネント




            コンポーネントの作成
                     (Windowsの場合)



  RTBUilder                   CMake            Visual C++




  コンポーネントの                  VCのプロジェクト           実装および
   仕様の入力                     ファイルの生成           VCでコンパイル
                                              実行ファイルの生成
                テンプレートコード
                   の生成




                                                              30
コード例
• 生成されたクラスのメン
  バー関数に必要な処理
  を記述
• 主要な関数
 – onExecute (周期実行)
• 処理
 –   InPortから読む
 –   OutPortへ書く
 –   サービスを呼ぶ
 –   コンフィギュレーションを
     読む
                                                  31




     コンポーネント内の状態遷移


                              ユーザがあまり
                             意識しなくてよい部分


                            コンポーネント開発時に
                               必要な部分




                      ActiveDo/RTC::onExecuteはここに入る
                       (DataFlow型のコンポーネントのとき)
コールバック関数
               RTCの作成=コールバック関数に処理を埋め込む
コールバック関数 処理
onInitialize     初期化処理
                                                                       とりあえずは
onActivated      アクティブ化されるとき1度だけ呼ばれる                                   この5つの関数
onExecute        アクティブ状態時に周期的に呼ばれる                                     を押さえて
                                                                       おけばOK
onDeactivated    非アクティブ化されるとき1度だけ呼ばれる
onAborting       ERROR状態に入る前に1度だけ呼ばれる
onReset          resetされる時に1度だけ呼ばれる
onError          ERROR状態のときに周期的に呼ばれる
onFinalize       終了時に1度だけ呼ばれる
onStateUpdate    onExecuteの後毎回呼ばれる
onRateChanged ExecutionContextのrateが変更されたとき1度だけ呼ばれる
onStartup        ExecutionContextが実行を開始するとき1度だけ呼ばれる
onShutdown       ExecutionContextが実行を停止するとき1度だけ呼ばれる




                               InPort
  •   InPortのテンプレート第2引数:バ
                                     InPort
      ッファ
       – ユーザ定義のバッファが利用
                                                        read()
         可能
  •   InPortのメソッド                                                operator>>

       – read(): InPort バッファから                      最新値

         バインドされた変数へ最新値
         を読み込む
                                                            バインドされた変数
       – >> : ある変数へ最新値を読
         み込む                                  リングバッファ



基本的にOutPortと対になる                          例

      データポートの型を
                                       Sensor Data             Robot
      同じにする必要あり                                              Component
OutPort
•   OutPortのテンプレート第2引数:
    バッファ                                                          OutPort

     – ユーザ定義のバッファが利用
                                                  write()
       可能
•   OutPortのメソッド                                  最新値
                                    operator<<
     – write(): OutPort バッファへ
       バインドされた変数の最新値
       として書き込む
     – >> : ある変数の内容を最新                      バインドされた変数
       値としてリングバッファに書き                                       リングバッファ
       込む

基本的にInPortと対になる                          例

                                        Sensor                 Sensor Data
    データポートの型を                          Component
    同じにする必要あり




                      データ変数
struct TimedShort               struct TimedShortSeq
 {                               {
     Time tm;                        Time tm;
     short data;                     sequence<short> data;
 };                              };


•   基本型                         •     シーケンス型
    – tm:時刻                            – data[i]: 添え字によるアクセス
    – data: データそのもの                    – data.length(i): 長さiを確保
                                       – data.length(): 長さを取得

                                •     データを入れるときにはあらかじめ
                                      長さをセットしなければならない。
                                •     CORBAのシーケンス型そのもの
                                •     今後変更される可能性あり
データポート
• データ指向(Data Centric)な
  ストリームポート
                                              Activity   Publisher            CORBA I/F
     – 型:long, double×6, etc…                       Notify
                                                                      put(data)
                                                                   inport.put(data) operation
         • ユーザが任意に定義可能                              buffer                 Original Protocol
     – 出力:OutPort                              asynchronous          (a) “new” type subscription
     – 入力:InPort                                                                    Raw TCP Socket
                                                (a) Push (publisher/subscriber) communication model
• 接続制御(接続時に選択可能)                              Activity   Publisher
                                                                        put(data)
     – Interface type                              Timer
                                                                      outport.get() operation
                                                   buffer         Connected by original protocol
         • CORBA,TCP socket,
           other protocol, etc…                                  (b) “periodic” type subscription
     – Data flow type
         • push/pull                               Activity
                                                              Data transfer through “Original Protocol”
                                                                  (b) Pull communication model
                                                                       put(data)
     – Subscription type
         • Flush, New, Periodic
                                                   synchronous       (c) “flush” type subscription



                                                                                                          37




                   データポートモデル
•   Connector:
     – バッファと通信路を抽象化したオブジェクト。OutPortからデータを受け取りバ
       ッファに書き込む。InPortからの要求に従いバッファからデータを取り出す。
     – OutPortに対してバッファフル・タイムアウト等のステータスを伝える。
     – InPortに対してバッファエンプティ・タイムアウト等のステータスを伝える。
•   OutPort:
     – アクティビティからの要求によってデータをコネクタに書き込むオブジェクト
•   InPort:
     – アクティビティからの要求によってデータをコネクタから読み出すオブジェクト




                 notify full/timeout status                      notify empty/timeout status
                                                                                                          38
Push型データポートモデル
                                                   ネットワーク等による通信
• Connector
  – 実際には間に通信が入
    る可能性がある
• 3つの送信モデル
  – “new”,“periodic”,“flush”
  – パブリッシャによる実現
• バッファ、パブリッシャ、
  通信インターフェースの
  3つをConnectorに内
  包

                                                                                39




       バッファインターフェース
                                               BufferBase <T>
                               advanceRptr(long n) : ReturnCode
• バッファ操作のための                   advanceWptr(long n) : ReturnCode
  インターフェースを定義                  empty() : bool
                               full() : bool
 – より詳細な操作を提供                  get(T& data) : ReturnCode
                               put(T& data) : ReturnCode
 – バッファフル/エンプティ                read(T& data, int sec, int nsec) : ReturnCode
                               write(T& data, int sec, int nsec) : ReturnCode
   を検出可能に
 – タイムアウトを検出可能                 リターンコード
                               •BUFFER OK 正常終了
   に                           •BUFFER ERROR エラー終了
                               •BUFFER FULL バッファフル状態
                               •BUFFER EMPTY バッファ空状態
                               •NOT SUPPORTED サポート外の要求
                               •TIMEOUT タイムアウト
                               •PRECONDITION NOT MET 事前状態を満たさない


                                                                                40
Pushポリシー
                                  ALL
 • バッファ残留データ
       – 送り方のポリシ
 ポリシ 送り方                          FIFO

 ALL    全部送信
 FIFO   先入れ後だしで1個ずつ送信
 NEW    最新値のみ送信                   NEW

 SKIP   n個おきに間引いて送信

       – データ生成・消費速度を              SKIP
         考慮して設定する必要
         がある。
 予稿にはNEWの説明にLIFOと記述していましたが正確には
 LIFOではなく最新値のみの送信です。LIFO形式のポリシを
 導入するかどうかは検討中です。ご意見ください。

                                                   41




                 動作シーケンス
                       ③ 参照を取得
       ネームサーバ
                       ④ ポートを接続




① 参照を登録                                  ② 参照を登録




                                                   42
ネットワークインターフェースが
          2つある場合の注意
                                                 RTC-A (Address B)
RTC-A (Address B)
   ってどこ?

                                                     ネーム
                              Address B
                                                     サーバ

                                           登録はアドレスB側の
                      RTC-A                  ネームサーバ



    登録はアドレスB側の                            こちらのアドレスを基に
      ネームサーバ                               CORBA参照を生成
                              Address A




                                                                     43




                    Rtc.confについて
RT Component起動時の登録先NamingServiceや、登録
  情報などについて記述するファイル
記述例:
corba.nameservers: localhost:9876
naming.formats: SimpleComponent/%n.rtc
(詳細な記述方法は etc/rtc.conf.sample を参照)

以下のようにすると、コンポーネント起動時に読み込まれ
 る
      ./ConsoleInComp –f rtc.conf
ネーミングサービス設定
corba.nameservers         host_name:port_numberで指定、デフォルトポートは
                          2809(omniORBのデフォルト)、複数指定可能
naming.formats            %h.host_cxt/%n.rtc →host.host_cxt/MyComp.rtc
                          複数指定可能、0.2.0互換にしたければ、
                          %h.host_cxt/%M.mgr_cxt/%c.cat_cxt/%m.mod_cxt/%
                          n.rtc
naming.update.enable      “YES” or “NO”: ネーミングサービスへの登録の自動アッ
                          プデート。コンポーネント起動後にネームサービスが起動
                          したときに、再度名前を登録する。
naming.update.interval    アップデートの周期[s]。デフォルトは10秒。
timer.enable              “YES” or “NO”: マネージャタイマ有効・無効。
                          naming.updateを使用するには有効でなければならない
timer.tick                タイマの分解能[s]。デフォルトは100ms。

             必須の項目                必須でないOption設定




                            ログ設定
logger.enable            “YES” or “NO”: ログ出力を有効・無効

logger.file_name         ログファイル名。
                         %h:ホスト名、%M:マネージャ名,%p:プロセスID 使用可
logger.date_format       日付フォーマット。strftime(3)の表記法に準拠。
                         デフォルト:%b %d %H:%M:%S → Apr 24 01:02:04
logger.log_level         ログレベル: SILENT, ERROR, WARN, NORMAL,
                         INFO, DEBUG, TRACE, VERBOSE, PARANOID
                         SILENT:何も出力しない
                         PARANOID:全て出力する
                         ※以前はRTC内で使えましたが、現在はまだ使えません
                         。


         必須の項目                   必須でないOption設定
その他
corba.endpoints   IP_Addr:Port で指定:NICが複数あるとき、ORBをどちらで
                  listenさせるかを指定。Portを指定しない場合でも”:”が必要。
                  例 “corba.endpoints: 192.168.0.12:” 使いたいNICに割り当てら
                  NICが2つある場合必ず指定。                     れているIPアドレス

                  (指定しなくても偶然正常に動作することもあるが念のため。)
corba.args        CORBAに対する引数。詳細はomniORBのマニュアル参照。
[カテゴリ名].          コンポーネントの設定ファイル
[コンポーネント名].       •カテゴリ名:manipulator,
config_file       •コンポーネント名:myarm,
または               •インスタンス名myarm0,1,2,…
[カテゴリ名].          の場合
[インスタンス名].        manipulator.myarm.config_file: arm.conf
config_file       manipulator.myarm0.config.file: arm0.conf
                  のように指定可能

        必須の項目                    必須でないOption設定




                              まとめ
• RTミドルウエアの概要
    – 背景、目的、利点
    – 標準化、適用例
    – 過去のプロジェクト、Webページ
• RTコンポーネントの開発
    – 開発の流れ
    – 動作シーケンス
    – コールバック、データポート、rtc.conf


                                                                     48

Mais conteúdo relacionado

Mais procurados

160705-w01 RTミドルウエア講習会・早稲田大
160705-w01 RTミドルウエア講習会・早稲田大160705-w01 RTミドルウエア講習会・早稲田大
160705-w01 RTミドルウエア講習会・早稲田大openrtm
 
Arduino用3gシールドへの期待(クアルコムジャパン 特別顧問 山田純様)
Arduino用3gシールドへの期待(クアルコムジャパン 特別顧問 山田純様)Arduino用3gシールドへの期待(クアルコムジャパン 特別顧問 山田純様)
Arduino用3gシールドへの期待(クアルコムジャパン 特別顧問 山田純様)Takayori Takamoto
 
Motor Control Software
Motor Control SoftwareMotor Control Software
Motor Control SoftwareKeiju Anada
 
仮想化技術によるマルウェア対策とその問題点
仮想化技術によるマルウェア対策とその問題点仮想化技術によるマルウェア対策とその問題点
仮想化技術によるマルウェア対策とその問題点Kuniyasu Suzaki
 
131106 01 i-rex2013
131106 01 i-rex2013131106 01 i-rex2013
131106 01 i-rex2013openrtm
 
RTミドルウェアによるロボットプログラミング技術 3. RTMによるプログラミング
RTミドルウェアによるロボットプログラミング技術 3. RTMによるプログラミングRTミドルウェアによるロボットプログラミング技術 3. RTMによるプログラミング
RTミドルウェアによるロボットプログラミング技術 3. RTMによるプログラミングNoriaki Ando
 

Mais procurados (7)

160705-w01 RTミドルウエア講習会・早稲田大
160705-w01 RTミドルウエア講習会・早稲田大160705-w01 RTミドルウエア講習会・早稲田大
160705-w01 RTミドルウエア講習会・早稲田大
 
Arduino用3gシールドへの期待(クアルコムジャパン 特別顧問 山田純様)
Arduino用3gシールドへの期待(クアルコムジャパン 特別顧問 山田純様)Arduino用3gシールドへの期待(クアルコムジャパン 特別顧問 山田純様)
Arduino用3gシールドへの期待(クアルコムジャパン 特別顧問 山田純様)
 
Motor Control Software
Motor Control SoftwareMotor Control Software
Motor Control Software
 
仮想化技術によるマルウェア対策とその問題点
仮想化技術によるマルウェア対策とその問題点仮想化技術によるマルウェア対策とその問題点
仮想化技術によるマルウェア対策とその問題点
 
131106 01 i-rex2013
131106 01 i-rex2013131106 01 i-rex2013
131106 01 i-rex2013
 
RTミドルウェアによるロボットプログラミング技術 3. RTMによるプログラミング
RTミドルウェアによるロボットプログラミング技術 3. RTMによるプログラミングRTミドルウェアによるロボットプログラミング技術 3. RTMによるプログラミング
RTミドルウェアによるロボットプログラミング技術 3. RTMによるプログラミング
 
第7回関東qt勉強会
第7回関東qt勉強会第7回関東qt勉強会
第7回関東qt勉強会
 

Destaque

パートナーシップ資料(産総研諏訪:倫理審査) Web用
パートナーシップ資料(産総研諏訪:倫理審査) Web用パートナーシップ資料(産総研諏訪:倫理審査) Web用
パートナーシップ資料(産総研諏訪:倫理審査) Web用openrtm
 
Robomec2014 rtm講習会第3部
Robomec2014 rtm講習会第3部Robomec2014 rtm講習会第3部
Robomec2014 rtm講習会第3部openrtm
 
20130329 rtm4
20130329 rtm420130329 rtm4
20130329 rtm4openrtm
 
131017 cnr研究会 ando
131017 cnr研究会 ando131017 cnr研究会 ando
131017 cnr研究会 andoopenrtm
 
20130329 rtm01
20130329 rtm0120130329 rtm01
20130329 rtm01openrtm
 
I rex2013 rtミドルウェア講習会ー原
I rex2013 rtミドルウェア講習会ー原I rex2013 rtミドルウェア講習会ー原
I rex2013 rtミドルウェア講習会ー原openrtm
 
Rtm講習会 140626 02
Rtm講習会 140626 02Rtm講習会 140626 02
Rtm講習会 140626 02openrtm
 
Rtm講習会 140626 01
Rtm講習会 140626 01Rtm講習会 140626 01
Rtm講習会 140626 01openrtm
 

Destaque (8)

パートナーシップ資料(産総研諏訪:倫理審査) Web用
パートナーシップ資料(産総研諏訪:倫理審査) Web用パートナーシップ資料(産総研諏訪:倫理審査) Web用
パートナーシップ資料(産総研諏訪:倫理審査) Web用
 
Robomec2014 rtm講習会第3部
Robomec2014 rtm講習会第3部Robomec2014 rtm講習会第3部
Robomec2014 rtm講習会第3部
 
20130329 rtm4
20130329 rtm420130329 rtm4
20130329 rtm4
 
131017 cnr研究会 ando
131017 cnr研究会 ando131017 cnr研究会 ando
131017 cnr研究会 ando
 
20130329 rtm01
20130329 rtm0120130329 rtm01
20130329 rtm01
 
I rex2013 rtミドルウェア講習会ー原
I rex2013 rtミドルウェア講習会ー原I rex2013 rtミドルウェア講習会ー原
I rex2013 rtミドルウェア講習会ー原
 
Rtm講習会 140626 02
Rtm講習会 140626 02Rtm講習会 140626 02
Rtm講習会 140626 02
 
Rtm講習会 140626 01
Rtm講習会 140626 01Rtm講習会 140626 01
Rtm講習会 140626 01
 

Semelhante a 20130329 rtm1

Rtミドルウェア講習会 第1部資料
Rtミドルウェア講習会 第1部資料Rtミドルウェア講習会 第1部資料
Rtミドルウェア講習会 第1部資料openrtm
 
Rtミドルウェア講習会@名城大 20140624 1
Rtミドルウェア講習会@名城大 20140624 1Rtミドルウェア講習会@名城大 20140624 1
Rtミドルウェア講習会@名城大 20140624 1openrtm
 
160705-01 RTミドルウエア講習会・名城大
160705-01 RTミドルウエア講習会・名城大160705-01 RTミドルウエア講習会・名城大
160705-01 RTミドルウエア講習会・名城大openrtm
 
Robomec2015講習会 150517 01
Robomec2015講習会 150517 01Robomec2015講習会 150517 01
Robomec2015講習会 150517 01openrtm
 
130710 01
130710 01130710 01
130710 01openrtm
 
130522 01
130522 01130522 01
130522 01openrtm
 
Open lab2013パネル原稿集
Open lab2013パネル原稿集Open lab2013パネル原稿集
Open lab2013パネル原稿集openrtm
 
130711 01
130711 01130711 01
130711 01openrtm
 
iREX2015 RTM講習会
iREX2015 RTM講習会iREX2015 RTM講習会
iREX2015 RTM講習会openrtm
 
RTミドルウエア: OpenRTM-aist概要
RTミドルウエア: OpenRTM-aist概要 RTミドルウエア: OpenRTM-aist概要
RTミドルウエア: OpenRTM-aist概要 openrtm
 
2015RTミドルウエア講習会
2015RTミドルウエア講習会2015RTミドルウエア講習会
2015RTミドルウエア講習会openrtm
 
1.コース概要
1.コース概要1.コース概要
1.コース概要openrtm
 
Nedo講座・rtmセミナー
Nedo講座・rtmセミナーNedo講座・rtmセミナー
Nedo講座・rtmセミナーopenrtm
 
150629 01
150629 01150629 01
150629 01openrtm
 
160608 02
160608 02160608 02
160608 02openrtm
 
171129-irex2017
171129-irex2017171129-irex2017
171129-irex2017openrtm
 
170622-01
170622-01170622-01
170622-01openrtm
 
201110 01 Polytech Center 1
201110 01 Polytech Center 1201110 01 Polytech Center 1
201110 01 Polytech Center 1openrtm
 
Japan Robot Week 2016 RTM講習会 第1部
Japan Robot Week 2016 RTM講習会 第1部Japan Robot Week 2016 RTM講習会 第1部
Japan Robot Week 2016 RTM講習会 第1部Noriaki Ando
 

Semelhante a 20130329 rtm1 (20)

Rtミドルウェア講習会 第1部資料
Rtミドルウェア講習会 第1部資料Rtミドルウェア講習会 第1部資料
Rtミドルウェア講習会 第1部資料
 
Rtミドルウェア講習会@名城大 20140624 1
Rtミドルウェア講習会@名城大 20140624 1Rtミドルウェア講習会@名城大 20140624 1
Rtミドルウェア講習会@名城大 20140624 1
 
160705-01 RTミドルウエア講習会・名城大
160705-01 RTミドルウエア講習会・名城大160705-01 RTミドルウエア講習会・名城大
160705-01 RTミドルウエア講習会・名城大
 
Robomec2015講習会 150517 01
Robomec2015講習会 150517 01Robomec2015講習会 150517 01
Robomec2015講習会 150517 01
 
130710 01
130710 01130710 01
130710 01
 
130522 01
130522 01130522 01
130522 01
 
Open lab2013パネル原稿集
Open lab2013パネル原稿集Open lab2013パネル原稿集
Open lab2013パネル原稿集
 
130711 01
130711 01130711 01
130711 01
 
iREX2015 RTM講習会
iREX2015 RTM講習会iREX2015 RTM講習会
iREX2015 RTM講習会
 
RTミドルウエア: OpenRTM-aist概要
RTミドルウエア: OpenRTM-aist概要 RTミドルウエア: OpenRTM-aist概要
RTミドルウエア: OpenRTM-aist概要
 
2015RTミドルウエア講習会
2015RTミドルウエア講習会2015RTミドルウエア講習会
2015RTミドルウエア講習会
 
1.コース概要
1.コース概要1.コース概要
1.コース概要
 
Nedo講座・rtmセミナー
Nedo講座・rtmセミナーNedo講座・rtmセミナー
Nedo講座・rtmセミナー
 
150629 01
150629 01150629 01
150629 01
 
160608 02
160608 02160608 02
160608 02
 
171129-irex2017
171129-irex2017171129-irex2017
171129-irex2017
 
170622-01
170622-01170622-01
170622-01
 
201110 01 Polytech Center 1
201110 01 Polytech Center 1201110 01 Polytech Center 1
201110 01 Polytech Center 1
 
Goudo m
Goudo mGoudo m
Goudo m
 
Japan Robot Week 2016 RTM講習会 第1部
Japan Robot Week 2016 RTM講習会 第1部Japan Robot Week 2016 RTM講習会 第1部
Japan Robot Week 2016 RTM講習会 第1部
 

Mais de 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最終発表_都立大.pptxopenrtm
 
SysML実習20220822SC_GA.pdf
SysML実習20220822SC_GA.pdfSysML実習20220822SC_GA.pdf
SysML実習20220822SC_GA.pdfopenrtm
 
RTミドルウェアサマーキャンプ資料2022.pdf
RTミドルウェアサマーキャンプ資料2022.pdfRTミドルウェアサマーキャンプ資料2022.pdf
RTミドルウェアサマーキャンプ資料2022.pdfopenrtm
 
NEDO講座 MoveIt! チュートリアル 第1部
NEDO講座 MoveIt! チュートリアル 第1部NEDO講座 MoveIt! チュートリアル 第1部
NEDO講座 MoveIt! チュートリアル 第1部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
 
OpenRTM概要
OpenRTM概要OpenRTM概要
OpenRTM概要openrtm
 
Slam実習
Slam実習Slam実習
Slam実習openrtm
 
Rtshell入門
Rtshell入門Rtshell入門
Rtshell入門openrtm
 
Rtコンポーネント作成入門
Rtコンポーネント作成入門Rtコンポーネント作成入門
Rtコンポーネント作成入門openrtm
 
Rtミドルウェアサマーキャンプ2021_宮本信彦
Rtミドルウェアサマーキャンプ2021_宮本信彦Rtミドルウェアサマーキャンプ2021_宮本信彦
Rtミドルウェアサマーキャンプ2021_宮本信彦openrtm
 
RTミドルウェアサマーキャンプ2021_坂本武志_1
RTミドルウェアサマーキャンプ2021_坂本武志_1RTミドルウェアサマーキャンプ2021_坂本武志_1
RTミドルウェアサマーキャンプ2021_坂本武志_1openrtm
 
Rtミドルウェアサマーキャンプ資料2021_坂本武志_2
Rtミドルウェアサマーキャンプ資料2021_坂本武志_2Rtミドルウェアサマーキャンプ資料2021_坂本武志_2
Rtミドルウェアサマーキャンプ資料2021_坂本武志_2openrtm
 

Mais de openrtm (20)

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
 
RTミドルウェアサマーキャンプ資料2022.pdf
RTミドルウェアサマーキャンプ資料2022.pdfRTミドルウェアサマーキャンプ資料2022.pdf
RTミドルウェアサマーキャンプ資料2022.pdf
 
NEDO講座 MoveIt! チュートリアル 第1部
NEDO講座 MoveIt! チュートリアル 第1部NEDO講座 MoveIt! チュートリアル 第1部
NEDO講座 MoveIt! チュートリアル 第1部
 
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.プログラミングの基礎
 
OpenRTM概要
OpenRTM概要OpenRTM概要
OpenRTM概要
 
Slam実習
Slam実習Slam実習
Slam実習
 
Rtshell入門
Rtshell入門Rtshell入門
Rtshell入門
 
Rtコンポーネント作成入門
Rtコンポーネント作成入門Rtコンポーネント作成入門
Rtコンポーネント作成入門
 
Rtミドルウェアサマーキャンプ2021_宮本信彦
Rtミドルウェアサマーキャンプ2021_宮本信彦Rtミドルウェアサマーキャンプ2021_宮本信彦
Rtミドルウェアサマーキャンプ2021_宮本信彦
 
RTミドルウェアサマーキャンプ2021_坂本武志_1
RTミドルウェアサマーキャンプ2021_坂本武志_1RTミドルウェアサマーキャンプ2021_坂本武志_1
RTミドルウェアサマーキャンプ2021_坂本武志_1
 
Rtミドルウェアサマーキャンプ資料2021_坂本武志_2
Rtミドルウェアサマーキャンプ資料2021_坂本武志_2Rtミドルウェアサマーキャンプ資料2021_坂本武志_2
Rtミドルウェアサマーキャンプ資料2021_坂本武志_2
 

20130329 rtm1

  • 1. 第1部:RTミドルウエア概要 (独)産業技術総合研究所 知能システム研究部門 安藤慶昭 1 RTとは? • RT = Robot Technology cf. IT – ≠Real-time – 単体のロボットだけでなく、さまざまなロボット技術に基づく機能要素 をも含む (センサ、アクチュエータ, 制御スキーム、アルゴリズム、 etc….) 産総研版RTミドルウエア OpenRTM-aist + + + + + RT-Middleware • RT-Middleware (RTM) – RT要素のインテグレーションのためのミドルウエア • RT-Component (RTC) – RT-Middlewareにおけるソフトウエアの基本単位 2
  • 2. 従来のシステムでは… Joystick software Joystick Robot Arm Control software 互換性のあるインターフェース同士は接続可能 Robot Arm 3 従来のシステムでは… Humanoid’s Arm Control software Humanoid’s Arm Joystick software Joystick Robot Arm Control software ロボットによって、インターフェースは色々 互換性が無ければつながらない Robot Arm 4
  • 3. RTミドルウエアでは… RTミドルウエアは別々に作られた ソフトウエアモジュール同士を繋ぐ Arm A Control software ための共通インターフェース を提供する compatible arm interfaces Humanoid’s Arm Joystick software Joystick Arm B Control software ソフトウエアの再利用性の向上 RTシステム構築が容易になる Robot Arm 5 ミドルウエア、コンポーネント、etc… • ミドルウエア – OSとアプリケーション層の中間に位置し、特定の用途に対して利便性、抽象 化向上のために種々の機能を提供するソフトウエア – 例:RDBMS、ORB等。定義は結構曖昧 • 分散オブジェクト(ミドルウエア) – 分散環境において、リモートのオブジェクトに対して透過的アクセスを提供す る仕組み – 例:CORBA、Java RMI、DCOM等 • コンポーネント – 再利用可能なソフトウエアの断片(例えばモジュール)であり、内部の詳細機 能にアクセスするための(シンタクス・セマンティクスともにきちんと定義され た)インターフェースセットをもち、外部に対してはそのインターフェースを介し てある種の機能を提供するモジュール。 • CBSD(Component Based Software Development) – ソフトウエア・システムを構築する際の基本構成要素をコンポーネントとして 構成するソフトウエア開発手法 6
  • 4. モジュール化のメリット • 再利用性の向上 – 同じコンポーネントをいろいろなシステムに使いまわせる • 選択肢の多様化 – 同じ機能を持つ複数のモジュールを試すことができる • 柔軟性の向上 – モジュール接続構成かえるだけで様々なシステムを構築 できる • 信頼性の向上 – モジュール単位でテスト可能なため信頼性が向上する • 堅牢性の向上 – システムがモジュールで分割されているので、一つの問 題が全体に波及しにくい RTコンポーネント化のメリット モジュール化のメリットに加えて • ソフトウエアパターンを提供 – ロボットに特有のソフトウエアパターンを提供することで、 体系的なシステム構築が可能 • フレームワークの提供 – フレームワークが提供されているので、コアのロジックに 集中できる • 分散ミドルウエア – ロボット体内LANやネットワークロボットなど、分散システ ムを容易に構築可能
  • 5. RTミドルウエアの目的 モジュール化による問題解決 • 仕様の明確化 コストの問題 技術の問題 ニーズの問題 • 最新技術を容易に利用可能 • 誰でもロボットが作れる 最新の理論・ 多様なユーザ A社製移動ベース B社製アーム C社製センサ・・・ アルゴリズム 仕様 RTコンポーネント化 ! ! ! ! モジュール化・再利用 カスタマイズが容易に システム開発者 ロボットの低コスト化 最新技術を利用可能 多様なニーズに対応 ロボットシステムインテグレーションによるイノベーション 9 RTミドルウエアとRTコンポーネント ロジック ・デバイス制御 ・制御アルゴリズム RT ・アプリケーション RT コンポーネント etc… コンポーネント フレームワーク ロジックを箱(フレームワーク)に入れたもの=RTコンポーネント(RTC) RTC RTC RTC RTC RTC RTC RTC RTC RTミドルウエア RTCの実行環境(OSのようなもの)=RTミドルウエア(RTM) ※RTCはネットワーク上に分散可能 10
  • 6. RTコンポーネントの主な機能 アクティビティ・実行コンテキスト データポート 共通の状態遷移 複合実行 • データ指向ポート • 連続的なデータの送受信 センサRTC • 動的な接続・切断 Inactive Active 位置 サーボの例 目標値 制御RTC 電圧 1 + Kp - TI s Error アクチュエータRTC TDs エンコーダ 位置 制御器 アクチュエータ コンポーネント コ ンポーネント コンポーネント ライフサイクルの管理・コアロジックの実行 データ指向通信機能 サービスポート コンフィギュレーション • 定義可能なインターフェースを持つ • 内部の詳細な機能にアクセス • パラメータを保持する仕組み – パラメータ取得・設定 ステレオビジョンの例 • いくつかのセットを保持可能 複数のセットを – モード切替 サービスポート • 実行時に動的に変更可能 動作時に – etc… 切り替えて ステレオビジョン 使用可能 インターフェース 3Dデプス 名前 セット名 データ 値 ・モード設定関数 ・座標系設定関数 画像 ステレオビジョン 名前 データ セット名 ・キャリブレーション コンポーネント 値 ・etc… データポート サービス指向相互作用機能 11 RTCの分割と連携 ロボット体内のコンポーネントによる構成例 画像データ ポート データ・コマンドの流れ 顔位置 問 合せ カメラ 顔認識 コ ンポーネント コ ンポーネント 画像データ 人物データ ステレオビジョン 表情データ コ ンポーネント 頭・腕駆動 ジェスチャ コ ンポーネント カメラコントロール 軌 道データ カメラ コ ンポーネント 音声データ 音声認識 対話 音声合成 コ ンポーネント コ ンポーネント コ ンポーネント 文字データ 文字データ マイク コ ンポーネント (モジュール)情報の隠蔽と公開のルールが重要
  • 7. RTミドルウエアによる分散システム ロボットC ロボットA ロボットB RTMにより、 ネットワーク上に 分散するRTCを OS・言語の壁を RTC RTC RTC RTC RTC RTC RTC 越えて接続する ことができる。 RTM RTM RTM Solaris FreeBSD ARTLinux ネットワーク Linux Windows TRON RTM RTM RTM RTC RTC RTC RTC RTC RTC RTC同士の接続 は、プログラム 実行中に動的に 行うことが出来る。 アプリケーション 操作デバイス センサ OpenRTM-aist • コンポーネントフレームワーク + ミドルウエアライブラリ • コンポーネントインターフェース: – OMG Robotic Technology Component Specification ver1.0 準拠 • OS – 公式:FreeBSD, Linux (Fedora, Debian, Ubuntu, Vine, Scientific), Windows – 非公式:Mac OS X, uITRON, T-Kernel, VxWorks • 言語: – C++ (1.1.0), Python (1.0.0), Java (1.0.0) – .NET (implemented by SEC) • CPU アーキテクチャ (動作実績): – i386, ARM9, PPC, SH4 – PIC, dsPIC, H8 (RTC-Lite) • ツール (Eclipse プラグイン) – テンプレートソースジェネレータ: rtc-template、RTCBuilder – システムインテグレーションツール: RTSystemEditor – その他 • Pattern weaver for RT-Middleware (株式会社テクノロジックアートより発売中) 14
  • 8. OMG RTC 標準化 • 2005年9月 RFP: Robot Technology Components (RTCs) 公開。 • 2006年2月 Initial Response : PIM and PSM for RTComponent を執筆し提出 提案者:AIST(日)、RTI(米) • 2006年4月 両者の提案を統合した仕様を提案 • 2006年9月 ABにて承認、事実上の国際標準獲得 FTFが組織され最終文書化開始 • 2007年8月 FTFの最後の投票が終了 • 2007年9月 ABにてFTFの結果を報告、承認 • 2008年4月 OMG RTC標準仕様公式リリース • 2010年1月 OpenRTM-aist-1.0リリース 15 OMG RTC ファミリ Name Vendor Feature OpenRTM-aist AIST C++, Python, Java OpenRTM.NET SEC .NET(C#,VB,C++/CLI, F#, etc..) miniRTC, microRTC SEC CAN・ZigBee等を利用した組込用RTC実装 Dependable RTM SEC/AIST 機能安全認証 (IEC61508) capableなRTM実装 RTC CANOpen SIT, CiA CANOpenのためのCiA (Can in automation) における RTC標準 PALRO 富士ソフト 小型ヒューマノイドのためのC++ PSM 実装 OPRoS ETRI 韓国国家プロジェクトでの実装 GostaiRTC GOSTAI, ロボット言語上で動作するC++ PSM実装 THALES H-RTM (仮称) 本田R&D OpenRTM-aist互換、FSM型コンポーネントをサポート 同一標準仕様に基づく多様な実装により • 実装(製品)の継続性を保証 • 実装間での相互利用がより容易に 16
  • 9. Success stories DAQ-Middleware: KEK/J-PARC KEK: High Energy Accelerator Research Organization J-PARC: Japan Proton Accelerator Research Complex HRP-4: Kawada/AIST TAIZOU: General Robotics Inc. HIRO: Kawada/GRX HRP-4C: Kawada/AIST 17 OpenRTM and HRP4 • New real-time control • Hardware/simulator framework for concurrent development is realized by OpenRTM humanoid robot and OpenHRP3 HRP4 This control system can be more general and for various kind of robots.
  • 10. Japan Proton Accelerator Research Complex Model : Dell PowerEdge SC1430 (J-PARC,大強度陽子加速器施設) CPU :Intel Xeon 5120 @ 1.86GHz 2 Cores ×2 Memory: 2GB 物質・生命科学実験施設 ハドロン実験施設 Hadron Beam Facility NIC: Intel Pro 1000 PCI/e (1GbE) Materials and Life Science OS: Scientific Linux 5.4 (i386) Experimental Facility 核変換施設 Nuclear Source Sink Transmutation 500 m ニュートリノ 実験施設 Neutrino to Kamiokande Ethernet 3 GeV Synchrotron Linac 50 GeV Synchrotron (25 Hz, 1MW) (0.75 MW) (350m) J-PARC = Japan Proton Accelerator Research Complex © KEK Joint Project between KEK and JAEA (former JAERI) 88MB/s = 704 Mbps Readout modules x102 PSDs x816 © KEK RTミドルウエアPJ FY2002.12-FY2004 • 名称:NEDO 21世紀ロボッ トチャレンジプログラム – 「ロボット機能発現のために 必要な要素技術開発」 • 目的: – RT要素の部品化(モジュー ル化)の研究開発 – 分散オブジェクト指向開発 – RT要素の分類・モジュール 化に必要な機能・インタフェ ース仕様の明確化 • 予算規模: – 65百万円 – 全体267.3百万円 20
  • 11. NEDO基盤PJ その他の FY2003-FY2007 ロボット開発 ツール プラグイン Java開発環境 C++開発環境 RtcLink 追加・拡張 • 名称:「運動制御デバイスおよび プラグイン プラグイン プラグイン モジュールの開発」 Eclipse Paltform • 目的: – 運動制御デバイスの開発 JavaVM – デバイスに搭載するRTCの開発 ツールのEclipseプラグイン化 – その他モーションコントロールに 資するRTM/RTCの開発 • 予算規模: – 15百万円/年 – 371百万円、全体1,259百万円 RTC-CANの開発 dsPIC版RTC-Liteの開発 21 知能化PJ FY2007-FY2012 • 名称:「次世代ロボット知能 化技術開発プロジェクト」 • 目的 – ソフトウエアプラットフォーム の開発 – 作業知能、移動知能、コミュ ニケーション知能に関するモ ジュールの開発 • 予算: – 400百万円 – 全体7,000百万円 • 研究グループ – 15グループ 22
  • 12. RTミドルウエアの広がり ダウンロード数 ユーザ数 2012年2月現在 2008年 2009年 2010年 2011年 2012年 合計 タイプ 登録数 C++ 4978 9136 12049 1851 253 28267 Webページユーザ 365 人 Python 728 1686 2387 566 55 5422 Webページアクセス 約 300 visit/day Java 643 1130 685 384 46 2888 約 1000 view/day Tool 3993 6306 3491 967 39 14796 メーリングリスト 447 人 All 10342 18258 18612 3768 393 51373 講習会 のべ 572 人 利用組織(Google Map) 46 組織 プロジェクト登録数 OMG RTC規格実装 (11種類) タイプ 登録数 Name Vendor Feature RTコンポーネント群 287 OpenRTM-aist AIST C++, Python, Java OpenRTM.NET SEC .NET(C#,VB,C++/CLI, F#, etc..) RTミドルウエア 14 miniRTC, microRTC SEC CAN・ZigBee等を利用した組込用RTC実装 ツール 19 Dependable RTM SEC/AIST 機能安全認証 (IEC61508) capableなRTM実装 仕様・文書 4 RTC CANOpen SIT, CiA CANOpenのためのCiA (Can in automation) に ハードウエア 28 おけるRTC標準 PALRO 富士ソフト 小型ヒューマノイドのためのC++ PSM 実装 OPRoS ETRI 韓国国家プロジェクトでの実装 GostaiRTC GOSTAI, THALES ロボット言語上で動作するC++ PSM実装 23 プロジェクトページ • ユーザが自分の作品を 登録 • 他のユーザの作った RTCを探すことができ る タイプ 登録数 RTコンポーネント群 287 RTミドルウエア 14 ツール 19 仕様・文書 4 ハードウエア 28 24
  • 13. ハードウエア集 • OpenRTMで利用可能 なハードウエアのリスト • ハードウエアを利用す るために利用できるコ ンポーネントのリスト 25 NEDO RTコンポーネント集 • www.openrtm.org に NEDO知能化PJ成果 物の特別ページを設置 –ツール –作業知能モジュール –移動知能モジュール –対話知能モジュール –商用ライセンスモジュー ル の5カテゴリに分けて掲載
  • 14. RTコンポーネントの開発 27 OpenRTMを使った開発の流れ どのようなコンポーネントか? ・名前 コンポーネント ・データポート の仕様 ・サービスポート コアロジック ・コンフィギュレーション RTC開発者が 開発したプログ コードの雛型 ラム資産 RtcTemplate (C++のクラス) コード生成 コンパイル 雛型にコアロジック を埋め込む .so or DLL マネージャ (ミドルウエア) 実行 28
  • 15. フレームワークとコアロジック RT コ ンポーネント RT コ ンポーネント 標 準インターフェース 標 準インターフェース ステレオビジョン ア ルゴリズム 左目画 像 右目画 像 左目画 像 右目画 像 中身は空 + デプスマップ = デプスマップ RT コ ンポーネント コアロジック ステレオビジョン フ レームワーク RT コ ンポーネント RTCフレームワーク+コアロジック=RTコンポーネント コンポーネントの作成 (Windowsの場合) RTBUilder CMake Visual C++ コンポーネントの VCのプロジェクト 実装および 仕様の入力 ファイルの生成 VCでコンパイル 実行ファイルの生成 テンプレートコード の生成 30
  • 16. コード例 • 生成されたクラスのメン バー関数に必要な処理 を記述 • 主要な関数 – onExecute (周期実行) • 処理 – InPortから読む – OutPortへ書く – サービスを呼ぶ – コンフィギュレーションを 読む 31 コンポーネント内の状態遷移 ユーザがあまり 意識しなくてよい部分 コンポーネント開発時に 必要な部分 ActiveDo/RTC::onExecuteはここに入る (DataFlow型のコンポーネントのとき)
  • 17. コールバック関数 RTCの作成=コールバック関数に処理を埋め込む コールバック関数 処理 onInitialize 初期化処理 とりあえずは onActivated アクティブ化されるとき1度だけ呼ばれる この5つの関数 onExecute アクティブ状態時に周期的に呼ばれる を押さえて おけばOK onDeactivated 非アクティブ化されるとき1度だけ呼ばれる onAborting ERROR状態に入る前に1度だけ呼ばれる onReset resetされる時に1度だけ呼ばれる onError ERROR状態のときに周期的に呼ばれる onFinalize 終了時に1度だけ呼ばれる onStateUpdate onExecuteの後毎回呼ばれる onRateChanged ExecutionContextのrateが変更されたとき1度だけ呼ばれる onStartup ExecutionContextが実行を開始するとき1度だけ呼ばれる onShutdown ExecutionContextが実行を停止するとき1度だけ呼ばれる InPort • InPortのテンプレート第2引数:バ InPort ッファ – ユーザ定義のバッファが利用 read() 可能 • InPortのメソッド operator>> – read(): InPort バッファから 最新値 バインドされた変数へ最新値 を読み込む バインドされた変数 – >> : ある変数へ最新値を読 み込む リングバッファ 基本的にOutPortと対になる 例 データポートの型を Sensor Data Robot 同じにする必要あり Component
  • 18. OutPort • OutPortのテンプレート第2引数: バッファ OutPort – ユーザ定義のバッファが利用 write() 可能 • OutPortのメソッド 最新値 operator<< – write(): OutPort バッファへ バインドされた変数の最新値 として書き込む – >> : ある変数の内容を最新 バインドされた変数 値としてリングバッファに書き リングバッファ 込む 基本的にInPortと対になる 例 Sensor Sensor Data データポートの型を Component 同じにする必要あり データ変数 struct TimedShort struct TimedShortSeq { { Time tm; Time tm; short data; sequence<short> data; }; }; • 基本型 • シーケンス型 – tm:時刻 – data[i]: 添え字によるアクセス – data: データそのもの – data.length(i): 長さiを確保 – data.length(): 長さを取得 • データを入れるときにはあらかじめ 長さをセットしなければならない。 • CORBAのシーケンス型そのもの • 今後変更される可能性あり
  • 19. データポート • データ指向(Data Centric)な ストリームポート Activity Publisher CORBA I/F – 型:long, double×6, etc… Notify put(data) inport.put(data) operation • ユーザが任意に定義可能 buffer Original Protocol – 出力:OutPort asynchronous (a) “new” type subscription – 入力:InPort Raw TCP Socket (a) Push (publisher/subscriber) communication model • 接続制御(接続時に選択可能) Activity Publisher put(data) – Interface type Timer outport.get() operation buffer Connected by original protocol • CORBA,TCP socket, other protocol, etc… (b) “periodic” type subscription – Data flow type • push/pull Activity Data transfer through “Original Protocol” (b) Pull communication model put(data) – Subscription type • Flush, New, Periodic synchronous (c) “flush” type subscription 37 データポートモデル • Connector: – バッファと通信路を抽象化したオブジェクト。OutPortからデータを受け取りバ ッファに書き込む。InPortからの要求に従いバッファからデータを取り出す。 – OutPortに対してバッファフル・タイムアウト等のステータスを伝える。 – InPortに対してバッファエンプティ・タイムアウト等のステータスを伝える。 • OutPort: – アクティビティからの要求によってデータをコネクタに書き込むオブジェクト • InPort: – アクティビティからの要求によってデータをコネクタから読み出すオブジェクト notify full/timeout status notify empty/timeout status 38
  • 20. Push型データポートモデル ネットワーク等による通信 • Connector – 実際には間に通信が入 る可能性がある • 3つの送信モデル – “new”,“periodic”,“flush” – パブリッシャによる実現 • バッファ、パブリッシャ、 通信インターフェースの 3つをConnectorに内 包 39 バッファインターフェース BufferBase <T> advanceRptr(long n) : ReturnCode • バッファ操作のための advanceWptr(long n) : ReturnCode インターフェースを定義 empty() : bool full() : bool – より詳細な操作を提供 get(T& data) : ReturnCode put(T& data) : ReturnCode – バッファフル/エンプティ read(T& data, int sec, int nsec) : ReturnCode write(T& data, int sec, int nsec) : ReturnCode を検出可能に – タイムアウトを検出可能 リターンコード •BUFFER OK 正常終了 に •BUFFER ERROR エラー終了 •BUFFER FULL バッファフル状態 •BUFFER EMPTY バッファ空状態 •NOT SUPPORTED サポート外の要求 •TIMEOUT タイムアウト •PRECONDITION NOT MET 事前状態を満たさない 40
  • 21. Pushポリシー ALL • バッファ残留データ – 送り方のポリシ ポリシ 送り方 FIFO ALL 全部送信 FIFO 先入れ後だしで1個ずつ送信 NEW 最新値のみ送信 NEW SKIP n個おきに間引いて送信 – データ生成・消費速度を SKIP 考慮して設定する必要 がある。 予稿にはNEWの説明にLIFOと記述していましたが正確には LIFOではなく最新値のみの送信です。LIFO形式のポリシを 導入するかどうかは検討中です。ご意見ください。 41 動作シーケンス ③ 参照を取得 ネームサーバ ④ ポートを接続 ① 参照を登録 ② 参照を登録 42
  • 22. ネットワークインターフェースが 2つある場合の注意 RTC-A (Address B) RTC-A (Address B) ってどこ? ネーム Address B サーバ 登録はアドレスB側の RTC-A ネームサーバ 登録はアドレスB側の こちらのアドレスを基に ネームサーバ CORBA参照を生成 Address A 43 Rtc.confについて RT Component起動時の登録先NamingServiceや、登録 情報などについて記述するファイル 記述例: corba.nameservers: localhost:9876 naming.formats: SimpleComponent/%n.rtc (詳細な記述方法は etc/rtc.conf.sample を参照) 以下のようにすると、コンポーネント起動時に読み込まれ る ./ConsoleInComp –f rtc.conf
  • 23. ネーミングサービス設定 corba.nameservers host_name:port_numberで指定、デフォルトポートは 2809(omniORBのデフォルト)、複数指定可能 naming.formats %h.host_cxt/%n.rtc →host.host_cxt/MyComp.rtc 複数指定可能、0.2.0互換にしたければ、 %h.host_cxt/%M.mgr_cxt/%c.cat_cxt/%m.mod_cxt/% n.rtc naming.update.enable “YES” or “NO”: ネーミングサービスへの登録の自動アッ プデート。コンポーネント起動後にネームサービスが起動 したときに、再度名前を登録する。 naming.update.interval アップデートの周期[s]。デフォルトは10秒。 timer.enable “YES” or “NO”: マネージャタイマ有効・無効。 naming.updateを使用するには有効でなければならない timer.tick タイマの分解能[s]。デフォルトは100ms。 必須の項目 必須でないOption設定 ログ設定 logger.enable “YES” or “NO”: ログ出力を有効・無効 logger.file_name ログファイル名。 %h:ホスト名、%M:マネージャ名,%p:プロセスID 使用可 logger.date_format 日付フォーマット。strftime(3)の表記法に準拠。 デフォルト:%b %d %H:%M:%S → Apr 24 01:02:04 logger.log_level ログレベル: SILENT, ERROR, WARN, NORMAL, INFO, DEBUG, TRACE, VERBOSE, PARANOID SILENT:何も出力しない PARANOID:全て出力する ※以前はRTC内で使えましたが、現在はまだ使えません 。 必須の項目 必須でないOption設定
  • 24. その他 corba.endpoints IP_Addr:Port で指定:NICが複数あるとき、ORBをどちらで listenさせるかを指定。Portを指定しない場合でも”:”が必要。 例 “corba.endpoints: 192.168.0.12:” 使いたいNICに割り当てら NICが2つある場合必ず指定。 れているIPアドレス (指定しなくても偶然正常に動作することもあるが念のため。) corba.args CORBAに対する引数。詳細はomniORBのマニュアル参照。 [カテゴリ名]. コンポーネントの設定ファイル [コンポーネント名]. •カテゴリ名:manipulator, config_file •コンポーネント名:myarm, または •インスタンス名myarm0,1,2,… [カテゴリ名]. の場合 [インスタンス名]. manipulator.myarm.config_file: arm.conf config_file manipulator.myarm0.config.file: arm0.conf のように指定可能 必須の項目 必須でないOption設定 まとめ • RTミドルウエアの概要 – 背景、目的、利点 – 標準化、適用例 – 過去のプロジェクト、Webページ • RTコンポーネントの開発 – 開発の流れ – 動作シーケンス – コールバック、データポート、rtc.conf 48