メインコンテンツへスキップ

00. デバイス一覧

HTTP REST APIを介して、接続されているすべてのHaplyデバイスを検出します(WebSocketは不要です)。これは、ランタイムが起動しており、ハードウェアが検出できていることを確認するための簡単なスモークテストです。

学習内容:

  • GET /devices クエリを実行して、Inverse3、VerseGrip、およびワイヤレスVerseGripデバイスを一覧表示する
  • JSONのレスポンスからデバイスIDを読み取り、デバイスの種類ごとにグループ化する
  • セッションセレクターを使用して、生のデバイス座標とセッションのアプリケーション空間ビューを切り替える

ワークフロー​

  1. GET http://localhost:10001/devices を送信します。
  2. JSONのレスポンスを解析します。トップレベルの配列は3つあります: inverse3、verse_grip、wireless_verse_grip。
  3. デバイスIDを種類ごとにグループ化して出力します。配列が空の場合、その種類のデバイスは検出されていないことを意味します。
  4. セッションセレクターを ?session=<selector> として追加すると、レスポンスはそのセッションのデバイスに絞り込まれ、座標はそのアプリケーション空間(basis、mount、workspaceが適用されたもの)に変換されます。Pythonのサンプルでは、これを --session SELECTOR というCLI引数として公開しています(:profile:instance、#id、:-1、:0、…を受け付けます)。これはチュートリアル08(HTTPのリモート設定)で使用されているものと同じフラグ、同じヘルプテキストなので、ここで見つけたセレクタをそのままそのチュートリアルに貼り付けることができます。C++のサンプルでは、セレクタを指定せずにクエリを実行します。

パラメーター​

パラメーターデフォルト用途
サービスURLhttp://localhost:10001HTTPのベースURL
エンドポイント/devicesデバイス検出エンドポイント
セッションセレクター(なし)?session=:0、?session=:-1、?session=:my_profile:0、?session=co.haply.hub::*:0(globのワイルドカードに対応)— セレクターを参照してください。Pythonのサンプルでは --session SELECTOR として公開されています(チュートリアル08(同じフラグ)。

主要なコード​

Pythonのサンプルでは、セッションセレクタを --session SELECTOR というargparse引数として公開しています。これを指定しない場合、デバイスは生のデバイス空間座標で返されます。指定した場合は、選択したセッションのデバイスに絞り込まれ、アプリケーション空間に変換されます。ヘルプテキストはチュートリアル08(HTTPのリモート設定)と同じなので、ここで見つけたセレクタをそのままそのチュートリアルに貼り付けることができます。

def parse_args():
parser = argparse.ArgumentParser(
description="List connected Haply Inverse devices via the HTTP API.")
parser.add_argument(
"--session", type=str, default="",
help=(
"Session selector. Formats:\n"
" :profile:instance by profile name (e.g. ':my_profile:0')\n"
" pattern:instance glob wildcard in profile (e.g. 'co.haply.hub::*:0')\n"
" '*' matches any sequence, '?' one character\n"
" #session_id by numeric id (e.g. '#42' — quote in shells to escape '#')\n"
" :-1 the last active session\n"
" :0 the first session"
))
return parser.parse_args()

def main():
args = parse_args()
session = args.session or None

url = f"{BASE_URL}/devices"
if session:
url += f"?session={session}"
print(f"Querying devices for session '{session}' (application space)\n")
else:
print("Querying all detected devices (device space)\n")

r = requests.get(url, timeout=3)
r.raise_for_status()
data = r.json()

print_devices("Inverse3", data.get("inverse3"))
print_devices("Wired Verse Grip", data.get("verse_grip"))
print_devices("Wireless Verse Grip", data.get("wireless_verse_grip"))
SDKインストーラーに同梱

チュートリアル00も、SDKとともにローカルにインストールされています。サービスのインストールディレクトリ配下の tutorials/00-haply-inverse-device-list/ ご確認ください。

出典: Python·C++·C++ Glaze

関連: JSON 仕様·セレクタ·セッション