1. 概要

主にKinectとの情報のやり取りをし、内外への橋渡しをする部分の構成を担うブランチである。このブランチは人多いBotの根幹を担うブランチであり、樹に喩えれば幹に相当する部分である。他のブランチとのマージ作業には十分に注意する必要がある。

2. 設定

人多いBotは実行ファイルと同ディレクトリに配置されたconfig.jsonを設定ファイルとする。各種情報をこれに記載する必要がある。 また、実際の稼働では現時点での計測アルゴリズムに採用しているAtteiブランチにてconfig.jsonの設定が必要である。

config.json
{
    "primitive_driver_v1": {
        "Limit": 10000,
        "DEPTH_X": 640,
        "DEPTH_Y": 480
    },
    "primitive_driver_v2": {
        "Limit": 10000,
        "DEPTH_X": 512,
        "DEPTH_Y": 424
    },
    "named_pipe": {
        "Host": "Kinect",
        "Port": 0
    },
    "udp": {
        "Host": "127.0.0.1",
        "Port": 4000
    },
    "websocket_std": {
        "Host": "*",
        "Port": 8000
    },
    "websocket_std_err": {
        "Host": "*",
        "Port": 8500,
        "ConnectionTimeout": 5
    },
    "start":["WebSocket"]
}
primitive_driver

PrimitiveDriverの設定。Kinectから取得するDepthデータの解像度、データ取得の最大試行回数の設定を行う。ただし現在のAtteiアルゴリズムでは上記のパラメータに固定されているので今のところ設定は意味をなさない。

named_pipe

名前付きパイプの名前を指定。Portは使用しないので適当に設定。

udp

UDPサーバーの設定

websocket

各接続の設定をする。ただし標準エラー出力については接続待受のタイムアウトを設定する。

start

起動するサーバーを設定する。WebSocket、UDP、NamedPipeが用意されている。

設定値のデフォルトはRogyWatchCommon.Configクラスなどを参照

3. 注意

KinectはV1とV2とでMicrosoftから的供されているSDKが異なり、更に悪いことにこれらの名前空間、クラス名が被っているため通常の方法では同一アセンブリ内に参照を追加することはできない。

これについては上のような方法で解決できるはずであるが、本プロジェクトではそもそもPrimitiveDriverとしてKinectへのアクセスをバージョンごとに別アセンブリに分けているのでこれら干渉は起こらなないはずである。

しかし現実問題、コンパイルは通るが実行時にNo method Errorが発生して実行することはできない。おそらく、コンパイラかデバッガのバグであると思われる。色々試してみた結果、生成された実行ファイルRogyWatch.exeのファイル名を変えると実行できることがわかった。したがって、ビルド毎にRogyWatch.exeを別の名前に変え、プロジェクトの設定よりデバッグ対象を外部のプログラムとして名前を変えたRogyWatch.exeに変える必要がある。

この変更は既に既存ブランチで適用済みである

この問題については現時点では根本的な解決方法は不明であり、Microsoftへの報告が必要である。