サービスポートの利用

RTコンポーネントは、他のRTコンポーネントに対して何らかの機能を提供したり、 またその機能を利用したりするための仕組みとして、サービスポートを利用することができます。

サービスプロバイダ

まず、サービスを提供するには、Providerクラスを利用します。 Providerクラスは型パラメータを1つ持っており、提供するサービスのインタフェースを指定する必要があります。 また、コンストラクタの引数には、提供するサービスのインスタンスを指定します。 また、Providerカスタム属性を利用することで、このメンバがサービスを提供するポートであることを表します。 “PortName”には、サービスポート名を、“InstanceName”には、提供するサービスの名前を設定します。 これらを省略した場合は、自動的にメンバフィールドの名前(ここでは“provider”)が割り当てられます。

サービスプロバイダの宣言

[Provider(PortName = "MyService", InstanceName = "myservice0")]
Provider<IMyService> provider = new Provider<IMyService>(new MyService());

提供するサービスのインタフェースの定義には、OpenRTM.Core.ServiceContractAttribute、 OpenRTM.Core.OperationContractAttribute、OpenRTM.Core.FaultContractAttributeなどのカスタム属性を利用します。

サービスのインタフェースの宣言

[ServiceContract(Name = "MyService")]
public interface IMyService
{
    [OperationContract(Name = "echo")]
    string Echo(string msg);
}

サービスプロバイダを使用するには、以下に示すようにサービスが呼び出されたときの処理を実装します。 ここでは、受け取ったパラメータをコンソールに表示する処理を実装しています。

サービスの実装

public class MyService : IMyService
{
    public string Echo(string msg)
    {
        Console.WriteLine("Message: " + msg);
        return msg;
    }
}

サービスコンシューマ

サービスを利用するには、Consumerクラスを利用します。 Consumerクラスは型パラメータを1つ持っており、利用するサービスのインタフェースを指定する必要があります。 また、Consumerカスタム属性を利用することで、このメンバがサービスを利用するポートであることを表します。 “PortName”には、サービスポート名を、“InstanceName”には、提供するサービスの名前を設定します。 これらを省略した場合は、自動的にメンバフィールドの名前(ここでは“consumer”)が割り当てられます。

サービスコンシューマの宣言と初期化

[Consumer(PortName = "MyService", InstanceName = "myservice0")]
Consumer<IMyService> consumer = new Consumer<IMyService>();

サービスを利用するためには、Proxyプロパティを利用します。 また、IsValidプロパティを利用して、サービスが利用可能かどうかをチェックすることができます。

サービスの利用

protected override ReturnCode_t OnExecute(int exec_handle)
{
    if (consumer.IsValid)
    {
        string message = "test";
        consumer.Proxy.Echo(message);
    }
    return ReturnCode_t.RTC_OK;
}

コールバックイベント

OpenRTM.NETのサービスポートでは、データポートの場合と同様に、サービスポートの接続、切断時にイベントを受け取ることができます。 コールバックイベントには以下に示すようなものがあります。利用方法はデータポートと同様になります。

コールバックメソッドの種類
コールバックメソッド 説明
void OnConnect(ConnectorProfile prof) サービスポートが接続された時のコールバック
void OnDisconnect (ConnectorProfile prof) サービスポートが切断された時のコールバック

標準で利用できるサービス型

サービスポートで使用できるサービス型を以下に示します。

標準サービス型一覧
型名 内容
ActArray アクチュエータ群を制御するためのサービス
AIO アナログ入出力の設定を行うサービス
Bumper 衝突センサの幾何情報を取得するサービス
Camera カメラの情報を取得するサービス
DIO デジタル入出力の設定を行うサービス
Fiducial 標準マーカーの情報を設定・取得するサービス
GPS GPSセンサの幾何情報を取得するサービス
Gripper 把持機構の制御を行うサービス
IMU IMU(慣性計測ユニット)の幾何情報を取得するサービス
INS INS(慣性航法装置)の幾何情報を取得するサービス
Iimb ロボットの手足の姿勢を制御するサービス
Map 環境地図情報を取得するサービス
Multicamera 複数台カメラの情報を取得するサービス
PanTilt パンチルトデバイスの幾何情報を取得するサービス
Paths 経路計画を行うサービス
PointCloud 点群データの幾何情報を取得するサービス
Position 位置情報の設定・取得を行うサービス
Ranger 距離計測センサの制御や設定を行うサービス
RFID RFIDタグの情報を読み書きするサービス