rosbridgeに生のJSONを送りつける

Mon May 2 17:23:30 JST 2022 (modified: Mon May 2 17:29:41 JST 2022)
views: 4581, keywords:日記, ROS, CMake この記事は最終更新日が2年以上前のものです。

 やりたいことはこういう感じです。

  • サーバ側にシミュレータのロボット(TurtleBot3)を用意して、rosbridgeと、ナビゲーションのノード一式を動かす。
  • 別のPCからrosbridgeでロボットを制御したい。
  • 別のPCには、できればWebSocketのライブラリ程度しかインストールしたくない。

で、以下の方法でとりあえずできそうな目処が立ちました。

サーバ側でロボット一式を立ち上げておく

 roslaunchで立ち上げておきます。今回使ったリポジトリ(まだ未整備です)。ローンチファイルはこんな感じ

クライアント側からrosbridgeと接続する

 wscatというツールを使いました。

インストールの方法については、 npmまるでわからん という状況なので、ここには書きません。

 で、立ち上げます。

### ロボットのいるサーバのIPアドレスとrosbridgeのポート番号を指定してwscatを立ち上げ ###
   $ wscat -c ws://192.168.1.25:8000
   Connected (press CTRL+C to quit)
   >              <- ここに送信したいデータを書くっぽい

サーバ側には、このようにログが出ます。

2022-05-02 15:41:37+0900 [-] [INFO] [1651473697.993877, 1363.184000]: 
   Client connected.  1 clients total.

 curltelnetの使用も考えましたが、WebSocketでの通信の方法は調べがつきませんでした。

JSONを書く

 rosbridge v2.0準拠のJSONを書きます。v1.0ではアカンそうで、

Received a rosbridge v1.0 message.  Please refer to rosbridge.org
   for the correct format of rosbridge v2.0 messages. 

と怒られます。v2.0でのsubscribe、puslishの例を書いておきます。wscatの出すプロンプト「>」の横に書きます。例が見当たらず、正解を当てるまで疲れました・・・。

  • subscribeの例
{"op": "subscribe", "topic":"/rosout","type":"rosgraph_msgs/Log"}
  • publishの例
{"op": "publish", "topic":"/cmd_vel","msg":{"linear":{"x":0.1,"y":0,"z":0},
   "angular":{"x":0,"y":0,"z":0}},"type":"geometry_msgs/Twist"}

subscribeの場合はJSONでrosbridgeからデータが送られてきます。puslishの場合も、受け付けた内容をrosbridgeが返してきます。

 上のpublishを入力しているときの動画を掲載します。

最後に一言

 プロトコルの仕様は、なるべくローレベルなワンライナーと共に説明してほしいなあ・・・。

 いかがでしたでしょうか 現場からは以上です。

ノート   このエントリーをはてなブックマークに追加 
 

prev:日記(2022年3月21日) next:最近のママ活ならぬシェル活について

やり散らかし一覧

記事いろいろ