さて、前置きが長くなってしまったが、「オンラインでロボットバトルはできるのか?」を試すというのが本稿の趣旨である。
今回用意したシステムは以下の通り。ロボットは、ROBO-ONE Lightの公認機である近藤科学の「KHR-3HV」を2台使用した。PCからコントロールするために、受信機として純正のBluetoothモジュール「KBT-1」をそれぞれ搭載している。この2台のロボットを、2カ所の遠隔地から操縦できるようにすればいいわけだ。
そのために、ロボットを制御するサーバ側と、画面を見ながら操縦するプレイヤー側に、それぞれPythonプログラムを用意。プレイヤーの操縦データをサーバ側に送信することで動かすようにした。なお今回開発したのは操縦周りの機能だけで、映像の中継は既存のサービスを利用している(今回のテストでは「Discord」を使用)。
KHR-3HVの操縦には通常、コントローラーの「KRC-5FH」と受信機の「KRR-5FH」を使用する。普通であれば、KRR-5FHをロボット内に搭載するのだが、今回のシステムでは、これをUSB経由でPCに接続する。こうすると、PythonプログラムからKRC-5FHで押されているボタンを調べられるので、そのデータをサーバ側に送信している。
コントローラーとロボットの間の通信をインターネット経由にしただけなので、普段と全く同じ操作でロボットを動かすことができる。ただ、より万人向けにするため、キーボードで操縦できるモードも追加してある。ちょっと慣れが必要なものの、コントローラーを持っていなくても、誰でも操縦することが可能だ。
プログラムはGitHubで公開しているのでそちらを参照してほしい。KHRサーバ側で動かすのが「khr_server.py」で、プレイヤー側で動かすのが「khr_client.py」だ。開発環境としてはPython 3.6のAnacondaを使用した。
プログラムの細かい説明は割愛するが、プレイヤー側からは、UDPで50msごとにボタンデータ(2バイト)を送信している。これ以上早くしても体感はほぼ変わらず、処理が間に合わなくなることもあったため、試行錯誤の結果、この数字に落ち着いた。
遠隔操縦の手順は、まずサーバ側でネットワークの受信を開始。すると、割り当てられたポート番号が表示されるので、それをプレイヤー側で入力する。インターネットからのLAN内PCへのアクセスとなるため、筆者の環境では、ルーターでポートマッピングの設定も行った。
今回は、あくまでも遠隔操縦のテストであるため、プログラム側でプレイヤーの認証などは一切行っていない。必要最小限の機能しか実装していないため、実用に際してはさらなる機能追加が必要であることは了解いただきたい。
Copyright © ITmedia, Inc. All Rights Reserved.