コンフィギュレーションを利用する

RTCは、起動した後に内部のパラメータを動的に変更できる コンフィギュレーションという機能を備えています。

PyRTSeamでコンフィギュレーションを利用するには、 プロファイルでコンフィギュレーションの初期値を定義し、 ロジックでコンフィギュレーションの値を受け取るようにします。

コンフィギュレーションの初期値を定義する

コンフィギュレーションの初期値を定義するには、rtseam.Profile.__init__の引数configs に辞書(パラメータ名:初期値)を与えます。

コンフィギュレーションに利用できるパラメータの型は、

  • int
  • long
  • float
  • string

と、それらのリストです。

“MaxVelocity”という名前で、初期値が1.0のコンフィギュレーションパラメータを定義する:

PROFILE = rtseam.Profile(configs={"MaxVelocity": 1.0})

複数のコンフィギュレーションパラメータを定義する:

PROFILE = rtseam.Profile(configs={"MaxVelocity": 1.0,
                                  "ErrorMessage": "Fail!!"})

ロジックでコンフィギュレーションを受け取る

ロジックでコンフィギュレーションを利用する場合は、クラスの__init__メソッドで 引数として辞書(パラメータ名:値)を受け取るようにします。 PyRTSeamは、RTCのonActivatedが呼び出されたときのコンフィギュレーションの値を ロジックの__init__メソッドに渡します:

class AddN(object):
    def __init__(self, configs):
        self._n = configs["N"]

    def __call__(self, input_data):
        output_data = {}
        if "InputNumber" in input_data:
            value = input_data["InputNumber"]
            value.data += self._n
            output_data["OutputNumber"] = value
        return output_data

ソースコード例

データ入力ポートとデータ出力ポートを1つずつ持ち、入力された値に、 コンフィギュレーションで指定された値を加算して出力するRTC:

import RTC
import rtseam.openrtm

PROFILE = rtseam.Profile(name="AddN",
                         configs={"N": 1},
                         inports={"InputNumber": RTC.TimedLong},
                         outports={"OutputNumber": RTC.TimedLong})

class AddN(object):
    def __init__(self, configs):
        self._n = configs["N"]

    def __call__(self, input_data):
        output_data = {}
        if "InputNumber" in input_data:
            value = input_data["InputNumber"]
            value.data += self._n
            output_data["OutputNumber"] = value
        return output_data

rtseam.openrtm.run(PROFILE, AddN)