新型コロナで大きな影響を受けたロボットバトル、リモートでやれんのか!俺的ROBO-ONEオンラインバトル解説(2/3 ページ)

» 2020年10月26日 10時00分 公開
[大塚実MONOist]

では実際にオンラインでロボットバトルをやってみよう

 さて、前置きが長くなってしまったが、「オンラインでロボットバトルはできるのか?」を試すというのが本稿の趣旨である。

 今回用意したシステムは以下の通り。ロボットは、ROBO-ONE Lightの公認機である近藤科学の「KHR-3HV」を2台使用した。PCからコントロールするために、受信機として純正のBluetoothモジュール「KBT-1」をそれぞれ搭載している。この2台のロボットを、2カ所の遠隔地から操縦できるようにすればいいわけだ。

システム構成図 ROBO-ONEのロボットバトルをオンラインでやるためのシステム構成図(クリックで拡大)

 そのために、ロボットを制御するサーバ側と、画面を見ながら操縦するプレイヤー側に、それぞれPythonプログラムを用意。プレイヤーの操縦データをサーバ側に送信することで動かすようにした。なお今回開発したのは操縦周りの機能だけで、映像の中継は既存のサービスを利用している(今回のテストでは「Discord」を使用)。

 KHR-3HVの操縦には通常、コントローラーの「KRC-5FH」と受信機の「KRR-5FH」を使用する。普通であれば、KRR-5FHをロボット内に搭載するのだが、今回のシステムでは、これをUSB経由でPCに接続する。こうすると、PythonプログラムからKRC-5FHで押されているボタンを調べられるので、そのデータをサーバ側に送信している。

受信機をPCに接続すれば、コントローラーの操作を調べることができる 受信機をPCに接続すれば、コントローラーの操作を調べることができる(クリックで拡大)

 コントローラーとロボットの間の通信をインターネット経由にしただけなので、普段と全く同じ操作でロボットを動かすことができる。ただ、より万人向けにするため、キーボードで操縦できるモードも追加してある。ちょっと慣れが必要なものの、コントローラーを持っていなくても、誰でも操縦することが可能だ。

 プログラムはGitHubで公開しているのでそちらを参照してほしい。KHRサーバ側で動かすのが「khr_server.py」で、プレイヤー側で動かすのが「khr_client.py」だ。開発環境としてはPython 3.6のAnacondaを使用した。

GiHubで公開しているKHR-3HV遠隔操縦システムのプログラム GiHubで公開しているKHR-3HV遠隔操縦システムのプログラム(クリックでWebサイトへ)

 プログラムの細かい説明は割愛するが、プレイヤー側からは、UDPで50msごとにボタンデータ(2バイト)を送信している。これ以上早くしても体感はほぼ変わらず、処理が間に合わなくなることもあったため、試行錯誤の結果、この数字に落ち着いた。

サーバ側の画面(左)とプレイヤー側の画面(右) (左)サーバ側の画面。受信を開始し、プレイヤー側からデータが届き始めると、ステータスが「パケット受信中」になる。(右)プレイヤー側の画面。ちなみにサーバ側がデータを受信したかどうかの確認は行っていないので注意(クリックで拡大)

 遠隔操縦の手順は、まずサーバ側でネットワークの受信を開始。すると、割り当てられたポート番号が表示されるので、それをプレイヤー側で入力する。インターネットからのLAN内PCへのアクセスとなるため、筆者の環境では、ルーターでポートマッピングの設定も行った。

 今回は、あくまでも遠隔操縦のテストであるため、プログラム側でプレイヤーの認証などは一切行っていない。必要最小限の機能しか実装していないため、実用に際してはさらなる機能追加が必要であることは了解いただきたい。

Copyright © ITmedia, Inc. All Rights Reserved.