Cloud Flareで遠隔ロボコン

Cloud Flareで遠隔ロボコン

皆さんこんにちは。KINKI KNIGHTSのラーメンおじさんです。 この記事はKINKI KNIGHTSアドベントカレンダーの23日目です。 他の記事もよろしくお願いします!

突然ですが皆さんは、家を出るのが億劫な事ってありませんか? ロボットを動かしに部室に行こうと思いつつ、だらだらしているうちに時間が過ぎる…… CloudFlareを利用するとそんな悩みが一気に解決します。

KINKI KNIGHTSの制御環境

KINKI KNIGHTSでは制御基盤としてROS2を採用しています。 また、遠隔ネットワークへのアクセス手段としてCloudFlareのTunnelサービスを利用しています。

ROS2のノードは複数のポートを開いてやり取りしますが、Tunnelを利用する場合接続するポートを一つ一つ指定してやる必要があり、あまり相性がよくありません。 そのため、ROS2を利用する操作は制御者がロボットと同一ネットワークに接地した作業用PCやロボットに搭載されたRaspberryPiにSSHして行います。

ただし、コントローラの入力は制御者のPCに接続された物の値を送信する必要があるため、WebSocketsを用いてコントローラの値を送信しています。

また、ロボットやコントローラPCに静的IPとmDNSを割り当てることで、簡単に接続先を特定できるようにしています。

image.png (61.4 kB)

JoyNodeWeb

ネットワーク越しにコントローラの値を飛ばせるよう、Joyノードをwebサーバー化しました。 joy_node_webとしてGitHubで公開しています。

PCに接続したコントローラをGamePadAPIで読み取り、Websocketsでサーバーに飛ばします。 CloudFlareを介す場合はSSLで転送されるのでWSではなくWSSを利用するようにしましょう。 遅延はほとんどなく、通常のJoyNodeと使い勝手はほぼ同等です。 ブラウザで動作するため、ROS2が入っていないPCやタブレットでもコントローラ用端末として扱えるのがメリットです。 通常のJoyノードとキー配列が変わる場合がある(ブラウザ依存)ので注意が必要です。

CloudFlare Tunnelの設定

CloudFlareを設定してSSHとWebSocketsに遠隔地から接続できるようにしていきます。

RaspberryPiにCloudflaredをインストールしてログイン

sudo apt update
sudo apt install cloudflared
cloudflared tunnel login

トンネル名を適当に決めてトンネルを作成します。 以降、$machine_nameを適当なトンネル名に置き換えて読み進めてください。

sudo cloudflared tunnel create $machine_name

トンネルが作成されると~/.cloudflared内に.jsonとcert.pemファイルが登録されます。
***.jsonの***が生成されたトンネルのIDになります。

設定ファイルを ~/.cloudflared/config.yamlに作成します。 トンネル一つでSSHとHTTPを通します。 WebsocketsはHTTPと同一ポートで通ります。

tunnel: $machine_name
credentials-file: /home/kk/.cloudflared/[トンネルのID]

ingress:
        - hostname: $machine_name.kinkiknights.com
          service: ssh://localhost:22
        - hostname: joy_$machine_name.kinkiknights.com
          service: http://127.0.0.1:8700
        - service: http_status:404

tunnel run コマンドでトンネルを有効化します。

cloudflared tunnel run $machine_name

最後に

いかがだったでしょうか? こんな感じでやっているので、遠隔地からでもKINKI KNIGHTSに制御班として参加可能です。 皆さんも入団して是非一緒に遠隔ロボコンしましょう!

最後までお読みいただきありがとうございました。
明日は、代表の回になります!お楽しみに!!

お知らせ

KINKI KNIGHTSでクラウドファンディングを開始しました。

皆様の応援をよろしくお願いします!


All News →