LabVIEWでROS2に接続してみました

はじめに

ROSというものをご存じでしょうか?ここでいうROSとはRobot Operating Systemのことです。これはロボットのシミュレーションを行うためのツール群です。OSとありますが、基本ソフトウェアというよりは、OSとアプリケーションをつなぐためのミドルウェアです。いわゆるROS1とROS2がありますが、ここではROS2を対象にします。

ROS2のドキュメント:ROS2

私はロボットの研究開発にかかわったことはありませんが、自動運転のプロジェクトに関わった(巻き込まれた)ことがあり、そこで初めてROSというものを知りました。車両をロボットに見立ててシミュレーション環境でプログラム的に走行させる感じです。ゲームみたいな感覚で、ROSではないですがゲーミングエンジンを用いた自動運転のシミュレーションも存在します。ついでに、このとき初めてLinuxを触りました。まあ、当時はROS1だけで、ROS1が動く環境はUbuntuでGUIがあるので、Linuxに触ったといっていいのかは不明ですが。関わっていた自動運転のプロジェクトも勤め先の大きな組織改編や異動があって関わらなくなりました。うまくいったかどうかは判断しないですが、結果的には技術的におもしろい経験ができたと思います。今回はROS2をLabVIEWから動かすには今ならどうするかを試したいと思います。

準備

ROSのドキュメントに従ってインストールすると、インストール後にカメを動かすシミュレーションを動かすことになります。カメはROSのマスコット的な存在で、ディストリビューションが更新されるたびに新しいカメが出てきます。個人的には、子どものころに見ていたTMNTのOP曲が好きでした。…どうでもいいですね。ROSのインストールについては、公式のドキュメントを参照してください。ROSくわしくないし。

ROSはUbuntuで動かすものと思っているのでUbuntuを用意する必要がありますが、私はWindows OSのPCしか持っていません。その状況でUbuntuを入れるには、仮想環境(Hyper-VやVirtual Machineなど)を入れる、PCをマルチプラットフォームにするなどありますが、今回はWSL(Windows Subsystem for Linux)を入れました。WSLもくわしくないので、詳細は公式ドキュメントなどを参照してください。

WSL のインストール | Microsoft Learn

結局、準備したものは次の通りになります。

  • PC:Windows 11 Pro
  • LabVIEW:2026 Q3 Community 64bit
  • Ubuntu:26.04
  • ROS2:Lyrical Luth (ros-lyrical-desktop)

ROS2については

sudo apt install ros-lyrical-turtlesim

でカメのシミュレーションをインストールしています。上コマンドの”lyrical”は実際にインストールしたROS2のディストリビューションになります。くわしくはROS2のチュートリアルを参照してください。

LabVIEWでROS2と接続するには?

ROSはロボット関係のシミュレーションやアプリケーション開発をするための支援ツールといえます。ハードウェアを制御することになるので、LabVIEWに公式のアドオンやパッケージがある…と思いたかったですが、残念ながら私の知る限りありません。あってもよさそうですが…。ROSと接続するなら次の方法が考えられます。

  • ROS Bridgeを利用してWebSocketで接続する。
  • PythonやMATLABでROS2のAPIを作る。
  • VIパッケージマネージャー(VIPM)からROS for LabVIEWをインストールして使う。
  • VIPMからRTI DDS Toolkit for LabVIEWをインストールして使う。

個人的にはROS for LabVIEWはあまりおすすめしないです。使ったことがありますが、何やっているかわかりませんでした。こちらからPublishしたメッセージを相手(確かAutoware)が受け取れないというバグがあって、調べたらメッセージのハッシュ値がないとかそんなことがあった記憶があります。あと、ROS2には対応してないと思いますし。

RTI DDS Toolkit for LabVIEWについては、正直なところ触ったことがないので使い勝手が分かりません。もしかしたら、今回紹介する方法より簡単かもしれません。知らんけど。

PythonとMATLABについては、最近は生成AIさん、PythonならGithub Copilotさん、MATLABならMATLAB Copilotさんがうまくやってくれるでしょう。知らんけど。MATLABは有償の開発環境ですが、ロボットの研究や自動運転の開発をするようなチームならMATLAB/Simulinkは標準装備なんじゃないかな?モデルも作れますし。ただ、私のところにはMATLABはHomeしかなく、ツールボックスもありません。

今回はROS Bridge+WebSocketを利用しました。といっても、WebSocketの知識も大してないので、VIPMからWebSocketのパッケージをインストールしました。

WebSockets Toolkit for LabVIEW – Download – VIPM by JKI

ROS側でROS Bridgeを起動すると、WebSocketで通信できるようになるので、LabVIEWでWebSocketを通して読み書きすることでPublishしたりSubscribeしたりできます。この方法ならLabVIEWだけでROS接続できます。

カメを動かしてみた

カメの召喚

まずは、ターミナルからWSLでUbuntuを起動します。

wsl --distribution ubuntu

ターミナルを使わなくても起動する方法はあるのでそれでもいいです。私の場合はUbuntuのインストール時にディストリビューションを特に指定しなかったので、インストール時の最新版の26.04が入りました。Ubuntuが起動したら、次のコマンドでカメを召喚します。

source /opt/ros/lyrical/setup.bash
ros2 run turtlesim turtlesim_node

source /opt/ros/lyrical/setup.bashはおまじないです。パスを設定するみたいな感じだったかな?Linuxについてはくわしくないので間違っているかもしれませんが、原則このおまじないが必要です。確か、何かのファイルにこれを書き込んで保存するとおまじないを省略できたと思うので、興味があれば調べてみてください。いずれにしても、このコマンドでカメが召喚されます。

ROS2のカメ

ROS Bridgeの起動

次にROS Bridgeの起動をします。カメを召還したものとは別の新しいターミナルを開いてWSLからUbuntuを起動します。ここはカメ召喚の最初と同じです。おまじないも同じです。

wsl --distribution ubuntu
source /opt/ros/lyrical/setup.bash

おまじないも唱えたら、ROS Bridgeを起動します。

ros2 launch rosbridge_server rosbridge_websocket_launch.xml

これでWebSocketでROS2に接続できるようになりました。

LabVIEWから接続

今回は、次のブロックダイアグラムのVIを作りました。

WebSocket VIブロックダイアグラム

上のループでカメの速度や角速度をPublishして、下のループで亀の位置や速度をSubscribeします。アイコンがデフォルトのVIはJSON形式の文字列を作ったり解読したりするもので、ここで通信自体はしていないです。

処理の流れ

  • WebSocketのクライアント作成
  • WebSocketのハンドシェイク
  • ヘッダーの取得(なくても可)
  • Publishするコマンドの登録
  • あとはPublishやSubscribeの繰り返し
  • Stopボタンで終了

今回はWSLでUbuntuを起動しているので、WebSocketのIPアドレスは127.0.0.1(自分自身)になっています。ポート番号はROS Bridge起動後にコマンドラインに表示された番号を利用します。今回は

[rosbridge_websocket-1] [INFO] [1788352148.944284657] [rosbridge_websocket]: Rosbridge WebSocket server started on port 9090

と表示されているので9090です。デフォルト値が9090です。

早速、VIを実行してみます。

実行中のVIとTurtleSimの画面
ターミナルの様子

画面を見てもターミナルを見てもカメが壁にぶつかりまくっていることが分かります。カメの動きをLabVIEWから制御し、カメの位置を取得できています。

ROS BridgeではJSON形式で情報の授受を行います。JSON形式でのやり取りはROSに限らずよく使われることであり、例えば生成AIさんとの会話をプログラム的に行う場合も使われます。しかし、LabVIEWのJSON関数は貧弱なところがあるので、これもVIPMからJSONtext Toolkitを入れて対応しています。

JSONtext Toolkit for LabVIEW – Download – VIPM by JKI

JSONはスタンダードな形式なので、このパッケージは便利です。個人的には設定ファイルを構成ファイル(ini)ではなくJSONを最初に考えたいと思うようになっています。

まとめ

今回はROS BridgeとWebSocketを利用してLabVIEWから簡単なROS2の接続を行いました。PublishしたTopicもSubscribeしたTopicもそれぞれ1種類という単純なものでした。本格的なプロジェクトでROSを利用する場合もTopicが増えるだけで接続-通信の本質は変わらないと思います。…まあ、本質が変わらないだけで複雑度は増えて難易度は上がりますが。自動運転のプロジェクトにかかわっていたのは記事作成時点で何年も前のことですが、今さらながら理解が深まったと感じました。

タイトルとURLをコピーしました