🎃
C#からrosbridgeにJSONを投げる遊び
- ROSと非ROSプロセスを繋ぐためのプロトコルとしてrosbridgeというものがあります。
- このプロトコルに則って非ROSの方をイイ感じに書いてやると,ROS側がとても快適になります。
- WebSocketが使えてJSONをやりとりできるものなら何でもROSに混ぜ込むことができます。たまたまC#で書きますが,言語は何でもいいです。
- 当然WebSocketなのでホストを跨いで通信することもできます。私はWSL中のROS2にWindowsからちょっかいかけて遊んでました。
- ROSの仕様を知らなくてもスムーズに連携できるのがいいですね。ROS屋さんと非ROS屋さんの分業体制が非常に取りやすいです。
遊び場
- ここで動かしているC#のライブラリ(Husty)は私が発行しているもので,NuGetで手に入ります。rosbridgeに関してはTopic通信とService通信に対応しています。
- ライブラリを見たい方はコチラへ。
- コード見てもらえばわかりますが,JSONをSerialize/Deserializeするための構造体もROSでよくあるメッセージ型はだいたいカバーしています。全部テストできているわけではないので少々の実装漏れは悪しからず。
環境
- Ubuntu 20.04/22.04
- ROS2 Foxy/Humble
- rosbridge_suite (apt install -y ros-${DISTRO}-rosbridge-suite)
- C# ... .NET7 (Windows/Linux)
手順
- ターミナルを3つ用意してください。
- カメさんを立ち上げます。
ros2 run turtlesim turtlesim_node
- rosbridgeを立ち上げます。
ros2 launch rosbridge_server rosbridge_websocket_launch.xml
- C#のコンソールアプリを立ち上げます。
cd /workspace/rosbridge-sharp/bin/Debug/net7.0 && ./rosbridge-sharp
- C#のキー操作で上下左右に動かすことができます。
Discussion