皆さんこんにちは。KINKI KNIGHTSのラーメンおじさんです。 この記事はKINKI KNIGHTSアドベントカレンダーの23日目です。 他の記事もよろしくお願いします!
突然ですが皆さんは、家を出るのが億劫な事ってありませんか? ロボットを動かしに部室に行こうと思いつつ、だらだらしているうちに時間が過ぎる…… CloudFlareを利用するとそんな悩みが一気に解決します。
KINKI KNIGHTSの制御環境
KINKI KNIGHTSでは制御基盤としてROS2を採用しています。 また、遠隔ネットワークへのアクセス手段としてCloudFlareのTunnelサービスを利用しています。
ROS2のノードは複数のポートを開いてやり取りしますが、Tunnelを利用する場合接続するポートを一つ一つ指定してやる必要があり、あまり相性がよくありません。 そのため、ROS2を利用する操作は制御者がロボットと同一ネットワークに接地した作業用PCやロボットに搭載されたRaspberryPiにSSHして行います。
ただし、コントローラの入力は制御者のPCに接続された物の値を送信する必要があるため、WebSocketsを用いてコントローラの値を送信しています。
また、ロボットやコントローラPCに静的IPとmDNSを割り当てることで、簡単に接続先を特定できるようにしています。

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でクラウドファンディングを開始しました。
皆様の応援をよろしくお願いします!
【クラファン決定!】
— KINKI KNIGHTS (@Kinki_knights) November 30, 2024
KINKI KNIGHTSではチーム拡大と目標達成に向け、クラウドファンディングを始めます!!
目標金額の達成に向け、皆様の御支援をいただければと思います!
よろしくお願いします!#KINKIKNIGHTS#CoREjp#レスコン2025https://t.co/nnb3X8cA20