本記事はソラコムが提供する「SORACOM公式ブログ」に掲載された「ROSを外部ネットワークと安全に接続する方法」を再編集したものです。
目次
はじめに構成
手順
1.SIMグループ、VPGの作成とGate設定
2.ルーターRUT240設定
3.RUT240 Firewall設定
4.PC/Virtual SIM(SORACOM Arc)の設定
5.SIMの確認
6.Robot Appの実行
7.PCでのOperator App設定
8.配信画像の確認
9.パフォーマンスベンチマーク
10.まとめ
こんにちは、ソリューションアーキテクトの松永です。
自動運転や産業ロボットでも使われているROS(Robot Operating System)を使って遠隔にあるロボットからの映像をPCで閲覧する方法をご紹介します。
はじめに
ROSは同一ネットワークに配置されたノード間でメッセージのやり取りをして外部センサーやカメラ情報を処理しています。しかし、外部ネットワークのROSやROS以外のアプリケーションとそのメッセージをやりとりするためには、ノード間で以下のような課題があります。
- 各PCのIPやホスト名解決の設定
- ノード間で広範囲なポート(1025-65535)をすべて疏通させる設定
こういった課題を解決するのが Ros Bridgeです。Ros Bridgeはノード内のメッセージのやり取りをROS以外のシステムに連携するための仕組みで、メッセージをWebSocket経由で共有します。
このWebSocketのエンドポイントを外部に共有する必要がでてきますが、セキュリティについてもご安心ください。SORACOMは通常Public IPを持たないことから、このエンドポイントを共有してもインターネットからアクセスすることはできない仕組みとなっています。今回は閉域網サービスVirtual Private Gateway(VPG)を利用して構築していきます。
構成
今回の構成を見てみましょう。アプリケーションのプログラムはros-bridge-image-sharing-example@Githubにて公開しております。
- RUT240ルーター + SORACOM SIM:ラズベリーパイが所属するネットワークで稼働するルーターです。
- ラズベリーパイ:ラズベリー 4 Model Bを利用しました。ルーターの設定をするために、Desktop版を利用しています。
- Robot App:Docker内で稼働する画像配信アプリケーションです。
sensor_msgs/CompressedImage
をPublishし、同時にRos BridgeがメッセージをJSONフォーマットにしてWebSocket経由で外部へ配信します。通常このタイミングで、画像のバイナリーデータはBase64にエンコードされ配信されています。 - ウェブカメラ:画像配信アプローチが配信するカメラ画像を取得します。今回は、Wansview様のウェブカメラを使用いたしました。
- PC: 今回はM1 Macを使用しております。
- Operator App: 配信された画像データをAngularで可視化するアプリケーションです。
- SORACOM Arc: PCからSORACOMのサービスを利用するための、VPNサービスです。PCからはSIMを利用せずに接続します。
- Virtual Private Gateway(VPG):お客様の専用のネットワーク構成を組むためのサービスです。
- SORACOM Gate:VPGのオプションサービスで、同一VPGに所属するSIM間でのネットワークアクセスを許可するサービスです。
手順
- SIMグループ、VPGの作成とGate設定
- ルーターRUT240設定
- RUT240 Firewall設定
- PC/Virtual SIM(SORACOM Arc)の設定
- SIMの確認
- Robot Appの実行
- PCでのOperator App設定
- 配信画像の確認
- パフォーマンスベンチマーク
- まとめ
1.SIMグループ、VPGの作成とGate設定
- グループ作成:ドキュメント「グループ作成」に従い、SIMグループを作成します。本ブログではグループ名を
taketo_gate
としています。 - VPG作成とGate設定:ドキュメント「デバイス間通信」に従ってSORACOM Gateを有効にしたVPGを作成してください。
2.ルーターRUT240設定
- 初期設定:こちらのガイドを従ってRUT240を初期設定してください。
- グループ設定:RUT240をドキュメント「グループの設定を変更する」に従って作成したグループに所属させます。
- Static IPの設定:SORACOMユーザーコンソールの
Menu >> VPG
から作成したVPGを選択し、「高度な設定」タブのIPアドレスマップからエントリを追加します。RUT240にに固定IPアドレスを割り当ててください。(例:10.198.97.225) - 速度変更:ドキュメント「IoT SIM の速度クラスを変更する」に従い、通信速度を
s1.4xfast
に設定してください。 - セッションのリセット:設定を反映するために一度、セッションをリセットします。
3.RUT240 Firewall設定
リモートVNCなどでRUT240にWifiで接続したラズベリーパイにアクセスしてください。RUT240の管理コンソール(デフォルト: http://192.168.1.1)へアクセスし、以下を設定してください。
- WANからのForwardを許可
- Firewall Fowarding設定:WANから9090ポートのアクセスをラズベリーパイのport 9090に転送します。
*注意:本番ではラズベリーパイをStatic IPに設定することをお勧め致します。
4.PC/Virtual SIM(SORACOM Arc)の設定
MacからSORACOMのサービスを利用するために、SORACOM Arcを有効にします。また、ラズベリーパイへアクセスするために、デバイスサブネットのルーティング設定を行います。
- バーチャルSIM作成:ドキュメント「バーチャル SIM/Subscriber で接続する」に従い、SORACOM Arcを有効にしてください。また、PCから同一VPGのデバイスにアクセスするために、
arc.json
を編集して作成したVPGのデバイスサブネット(例:10.128.0.0/9)をarcAllowedIPs
に設定してください。 - グループ設定:ドキュメント「グループの設定を変更する」に従って作成したグループに所属させます。グループを変更した後には、Virtual SIMのセッションリセットが必要です。
taketomatsunaga@TAKETOnoMacBook-Pro arc % cat arc.json { "privateKey": "***********************", "publicKey": "***********************", "simId": "89000010999***********************", "logLevel": 2, "enableMetrics": false, "interface": "utun", "profile": { "authKey": "secret-ZZEugP94RR***********************", "authKeyId": "keyId-***********************", "endpoint": "https://api.soracom.io" }, "arcSessionStatus": { "arcServerPeerPublicKey": "cx***********************", "arcServerEndpoint": "54.150.168.252:11010", "arcAllowedIPs": ["100.127.0.0/16", "{作成したVPGのデバイスサブネット 例)10.128.0.0/9}"], "additionalAllowedIPs": [], "arcClientPeerIpAddress": "10.149.124.229" } }
5.SIMの確認
SIMの設定をした後、SORACOMユーザーコンソールにて SIM一覧を確認してください。
- RUT240のSIMとPCの Virtual SIMが同一のグループ(例:
taketo_gate
)に所属していること - 状態が全てオンラインであること
- RUT240の速度クラスが
s1.fxfast
になっていること
6.Robot Appの実行
ウェブカメラを接続した状態でラズベリーパイにsshし、次のコマンドを実行してRobot Appのコンテナを実行します。
- ウェブカメラをラズベリーパイに接続
- SSHしてRobot Appを実行:下記のコマンドを実行してアプリケーションを実行してください。
git clone git@github.com:soracom-labs/ros-bridge-image-sharing-example.git cd ros-bridge-image-sharing-example/RobotApp/ docker build -t ros_bridge_dev:1.0 . docker run --name=ros_bridge_dev -it \ --volume="$PWD/:/workspace/share:rw" \ --device=/dev/video0:/dev/video0 \ --net=host\ ros_bridge_dev:1.0
Dockerコンテナ内部で次のコマンドを実行して、Robot Appを実行します。
export WORKSPACE=/workspace/share cd $WORKSPACE/catkin_ws catkin build source $WORKSPACE/catkin_ws/devel/setup.bash export APP_IMAGE_FPS=5 export APP_IMAGE_QUALITY=30 export APP_CAMERA_ID=0 sudo chmod 666 /dev/video0 roslaunch app.launch
7.PCでのOperator App設定
以下のコマンドを実行してプログラムをクローンしてください。
git clone git@github.com:soracom-labs/ros-bridge-image-sharing-example.git
「SIMの確認」で確認したRUT240のIPアドレスで OperatorApp/src/environments/environment.ts
の値を書き換えてください。
export const environment = { production: false, robotIp: '{RUT240のIPアドレス 例:10.198.97.225}', robotPort: '9090', };
以下のコマンドでプログラムを実行します。また、npm versionはv14.x.xであれば問題ありません。
cd ros-bridge-image-sharing-example/OperatorApp nvm install v14.17.3 nvm use v14.17.3 npm install ng serve
8.配信画像の確認
PC側でOperator Appのhttp://localhost:4200/にアクセスしてください。下のようにラズベリーパイからウェブカメラの映像が転送されてきているのが確認できます。
9.パフォーマンスベンチマーク
今回の結果でパフォーマンスは以下の通りでした。Robot Appの実行時に APP_IMAGE_FPS
(送信頻度)や APP_IMAGE_QUALITY
(画像圧縮レベル:1~100)値を変更することも可能です。
項目 | 実績値 | 備考 |
FPS(Frame Per Second) | 5.0 | APP_IMAGE_FPS=5 で実行し、遅延なしでした。 |
画像大きさ | 640 × 480 | |
画像サイズ | 16Kバイト | APP_IMAGE_QUALITY=30 で実行しました。 |
10.まとめ
今回は別のネットワーク(遠隔地)に所属するROSの情報を遠隔から取得する方法をご紹介しました。動画配信SaaSなどを利用せず、直接ROSの画像メッセージデータを取得し、PCで可視化する方法でした。
ROSのメッセージを外部ネットワークに共有する際には、ROS Topicをそのまま使うのではなくRos Bridgeの利用をお勧めいたします。そして、SORACOMのサービスで拠点間をセキュアに繋げましょう。
冒頭でもご紹介しましたが、プログラムはros-bridge-image-sharing-example@Githubにて公開しておりますので是非試してみてください。
松永
投稿 ROSを外部ネットワークと安全に接続する方法 は SORACOM公式ブログ に最初に表示されました。
この連載の記事
-
第474回
デジタル
SORACOM Flux の AI アクションに Amazon Bedrock – Anthropic Claude 3.5 Haiku を追加、Teltonika RUT240 の価格を改訂 takuyaのほぼ週刊ソラコム 11/02-11/15 -
第473回
デジタル
IoTセキュリティの基本知識と実践をご紹介 ― 10/31開催:SORACOMユーザー向けオンラインセミナー開催レポート -
第472回
デジタル
SORACOM Flux に追加された Incoming Webhook をつかってインタラクティブな Flux アプリを作る -
第471回
デジタル
サーバールームの異常な温度上昇を通知する新規掲載レシピのご紹介 -
第470回
デジタル
Virtual Private Gateway (VPG) Type-F2 が正式リリースになりました! -
第469回
デジタル
暗号化非対応のTCPクライアントでもNapterまでの通信を暗号化する方法 -
第468回
デジタル
SORACOM Beam や SORACOM Flux の開発・デバッグに使える HTTP モックサーバーを素早く作る方法 -
第467回
デジタル
IoTプラットフォームSORACOMの契約回線数が700万を突破、次世代SIMテクノロジー「iSIM」を商用化、搭載モジュールを提供開始 takuyaのほぼ週刊ソラコム 10/12-11/02 -
第466回
デジタル
カメラとAIで楽器演奏シーンを簡単に残す、IoTプロトタイピングの裏側 -
第465回
デジタル
数千を超えるIoT機器を管理!生成AIで設備運用を効率化するhacomonoの挑戦