RosSharp

こんにちは。

今月は、「RosSharp」という、ライブラリについて紹介したいと思います。

去年の6月に、 ROS…? という記事で紹介した、ROSというロボット用のオープンソースソフトウェアに関連したクライアントライブラリで、ROSのトピックの受信・発信などの動作が可能になる、というものだそうです。


そもそもROSとはどういうものか

というのは以前の記事でも書いてあるのですが、一年触ってきたなかで理解も進んだかなぁと思うので、改めて、ざっくり説明しておきます。どういうこと?って鳴るかもしれないのですが、ゆっくり読んでみてください…。

node(ノード)という個別の機能を持ったプログラム(例えば、センサーから値を取得して送信する/センサーからの入力値をもとにマップを作成する、など。)が、

topic(トピック)というメッセージ(メッセージ型がいろいろあります。作成も可能)をやり取りして動作することでロボットの動作を作っていく

……という手法でロボットを制御するというシステムの上に成り立つ、オープンソースソフトウェア…です。

この、nodeの動作に必要なものなどを組み合わせたパッケージがネット上に公開されていて、センサーやモーターなど、ものによりますが、個別の機材からの値取得のコードを書かなくても、公開されているパッケージを取得し、適切なパラメータを設定することで必要な値が取れる、必要な動作を再現できるということで、とても便利なツールだと感じました。

もちろん、機材によってはパッケージが公開されていない場合もあるので、その場合は自分でパッケージを作成する必要があります。………が、指定されたトピックを用意するだけで、難しい計算などがわからなくても、難し論文を読まなくても、マップ作成や、自立走行、ロボットの姿勢制御が実現できる、というだけで、とても魅力的というか、便利なツールといえると思うので、ロボットを作るときはぜひ調べてみてください。

私は、「ROS」しか触ったことがありませんが、複数台制御などを念頭に入れて実装を行うのであれば「ROS2」というものを使ってみてもいいかと思います。ただ、調べたところによると、「ROS」と「ROS2」は、かなり異なるシステムで、個別のものであると考えたほうがいい……というような話も見た気がするので、なかなか難しいのかなぁとも思いました。


本題

で、タイトルで上げた「RosSharp」。

「WindowsからROSで制御されたロボットを操縦したい。」ということで、通信方法を調べる中で知りました。一応通信方法としては、このほかにも、ソケット通信などの方法もあるようです。

ただ、このRosSharpを用いれば「トピックの発信・受信が可能」……ということは

ロボット側のソースコードには手を加えることなく、ロボットの操縦アプリを作成することができる。

…ということなんですね。

幸い、公式ページは日本語版のページもあり、さらにサンプルプログラムまで公開されていました。

調べている中で、Visual Studioで使えるらしいということ、Unityでも「ROS#」というもがありこちらでも実現できそう、ということがわかりました。(Unityは触ってないので…詳細は知らないです…)

Visual Studioを使ったことがなかったもので何をどうしたらいいの?…という感じだったんで、サンプルコードの使い方だけ紹介しておきます。

  1. Gitからサンプルコードを取得し、解凍しておきます。
  2. Visual Studioで、サンプルコードを開きます。
  3. ソリューションエクスプローラーで、RosSharp.slnをダブルクリック(ソリューションエクスプローラーが表示されていない場合は、ツールバー>表示、もしくは[Ctrl]+[Alt]+[L])
  4. いろいろ確認されるかもしれませんが、すべてOKしてください。
  5. RosSharp.slnが表示されたら、ソリューションエクスプローラーの中の、ディレクトリSampleを開き、その下のTalker.Devを開きます。
  6. Talker.Devの中に、app.configに適切な値を入れていきます。(PC名でも行けるのかもしれませんが、確認できていないです。)
    1. ROS_MASTER_URL:`http://******:11311`(******には、UbuntuのIP)
    2. ROS_HOSTNAME:アクセスするWindowsのIPアドレス(localhostでは動きませんでした。)
  7. Ubuntu側で、roscoreを実行します。
  8. ツールバー2段目に、3つセレクトボックスが表示されているので、****.Dev、RosCore、GenMsgなどが選択肢に入っているボックスの値を、app.configを設定したTalker.Devに変更し、横の[▷開始]をクリックします。

*Ubuntu側で`rostopic echo chatter`を呼び出すと取得できていることが確認できるかと思います。

現状、サンプルコードで使用されているstd_msgs.String以外のデータ型のトピックの発信・受信の確認はできていませんが、これは使えそうだなぁと思ったので、しばらくVisual Studioの使い方、C#の勉強をしながら、調べていきたいなぁと思います。