コラム

Column

ご挨拶

VxWorks と Wind River Linux の ROS を試す – その2

Wind River コラム

VxWorks の ROS

前回、VxWorks の ROS に関しては、以下のサイトの紹介にとどまってしまっていました。
https://github.com/Wind-River/vxworks7-ros2-build
今回は、実際に動作させた動作ログもご紹介しようと思います。Linux と通信できることも紹介したかったので、代表的な、publisher – subscriber のデモを使いました。VxWorks の ROS のバージョンは、ROS 2 Dashing です。

ところで、ROS のプログラミングに関しては、以下の選択肢があると思います。
1) C/C++ でプログラミングを行い、C コンパイラで生成したバイナリを動作させる。
2) Python でプログラミングを行い、Python に処理を行わせる。
今回は、2) python での実施を試してみました。デモコードに関しては、github に公開されている以下のコードを試しました。
ros2/examples/rclpy/topics/minimal_publisher/examples_rclpy_minimal_publisher/publisher_member_function.py
ros2/examples/rclpy/topics/minimal_subscriber/examples_rclpy_minimal_subscriber/subscriber_member_function.py

VxWorks で Python が使えるのか? という声もありそうですが、VxWorks 7 からは、Kernel Configuration に Python の項目が現れるようになっています。

VxWorks で ROS 2 の Python コードを実行させる

ROS 2 のプログラム実行は、普通 ros2 run ・・・ の様に、ros2 コマンドを使用します。
Linux で publisher – subscriber を動作させるには、以下のコマンドを Linux Shell (送受信動作のため 2つ open)から実施するのみです。
【publisher 側】
$ . /opt/ros/dashing/setup.bash
$ ros2 run examples_rclpy_minimal_publisher publisher_member_function
[INFO] [minimal_publisher]: Publishing: “Hello World: 0”
[INFO] [minimal_publisher]: Publishing: “Hello World: 1”
[INFO] [minimal_publisher]: Publishing: “Hello World: 2”

【subscriber 側】
$ . /opt/ros/dashing/setup.bash
wrlinux@wrlinux:~$ ros2 run examples_rclpy_minimal_subscriber subscriber_member_function
[INFO] [minimal_subscriber]: I heard: “Hello World: 0”
[INFO] [minimal_subscriber]: I heard: “Hello World: 1”
[INFO] [minimal_subscriber]: I heard: “Hello World: 2″

ここで、上記 subscriber 側(受け側)はそのまま動作させ、publisher 側(送り側)を、VxWorks にしてみます。
-> cmd
[vxWorks *]# set env LD_LIBRARY_PATH=”/host.host/home/wrlinux/vxworks7-ros2-build-master/export/deploy/lib/”
[vxWorks *]# rtp exec -u 0x20000 python3 /host.host/home/wrlinux/rclpy/topics/minimal_publisher/examples_rclpy_minimal_publisher/publisher_member_function.py          —> (1)
Launching process ‘python3’ …
Process ‘python3’ (process Id = 0xffff8000001d49a0) launched.
[INFO] [minimal_publisher]: Publishing: “Hello from VxWorks: 0”
[INFO] [minimal_publisher]: Publishing: “Hello from VxWorks: 1”
[INFO] [minimal_publisher]: Publishing: “Hello from VxWorks: 2”

【subscriber 側】
[INFO] [minimal_subscriber]: I heard: “Hello World: 1”
[INFO] [minimal_subscriber]: I heard: “Hello World: 2”
[INFO] [minimal_subscriber]: I heard: “Hello from VxWorks: 0″   ★”Hello World: 2″ の次からは、”Hello from VxWorks: 0” を受信
[INFO] [minimal_subscriber]: I heard: “Hello from VxWorks: 1”
[INFO] [minimal_subscriber]: I heard: “Hello from VxWorks: 2”

上記ログに説明を付け加えると、
ros2 コマンド自体は、Python なので、VxWorks でも使えるようにできるとは思いますが、各ファイルへの参照 path を整合させる必要があるのか、Linux の様な ros2 run ・・・ でのプログラム起動はできませんでした。そのため、上記 (1) の様に、publisher_member_function.py を直接実施させています。
また、publisher_member_function.py の中で、
sys.path.append(‘/host.host/home/wrlinux/vxworks7-ros2-build-master/export/deploy/lib/python3.8/site-packages’)
等として、参照を解決する必要もありました。いずれにしても、これらの問題を整えれば、VxWorks でも、Python で書かれた ROS のコードが実施できる基本的な確認はできたと思います。
これまで書いてきたように、通信については、同一ネットワーク内に双方が存在すれば、特に上記ログの操作以外は不要で、この辺は、ROS の設計思想としての使いやすさを実感することができました。

ただ、ちょっと、ハマったことがありました。それは何かというと、最初 Linux 側の ROS は Foxy で環境構築していました。一方で、VxWorks の ROS は、Wind River の github のものを使うと、Dashing になっていました。最初は全く通信できず、何が原因かさっぱり分かりませんでした。ところが、
https://github.com/ros2/ros2/issues/1020
上記は、ROS 2 の問題点に関するレポートサイト(2022年8月8日参照)なのですが、タイトル「Foxy build can’t receive messages published by Dashing if FastRTPS used」が示す通り、Dashing(Foxy の2世代前)から publish されたメッセージを、Foxy は受け取れないようです。そこで、Linux 側を、Dashing 環境にすることにより、ここまでたどり着くことができました。

Dashing 以外の VxWorks の ROS については、ROS の lib/ を build する必要があるので、時間のある時に調べてみたいと思います。
ROS のソースコードの VxWorks 環境での build にもハードルがあると思っています。

ROS 1 bridge で、ROS 1 と ROS 2 を相互通信させる

ros1_bridge を動作させる手順については、ネット上にも多々紹介されていますが、参考までに、この度の手順を以下に紹介します。
ros1_bridge は、Linux で動作させます。(ネットワーク内のいずれかのノードで動作していれば、bridge として全体に作用するようです)
ROS 2 の Publisher – subscribeer の ROS 1 のものが簡単に見つかりませんでしたので、今回は、ROS 1、ROS 2 共通で簡単に使用できる talker – listener プログラムを使用しました。

(ros1_bridge の build)
$ mkdir -p ros1_bridge_ws/src
$ cd ros1_bridge_ws/src
$ git clone -b dashing https://github.com/ros2/ros1_bridge.git
$ cd ..
$ source /opt/ros/melodic/setup.bash
$ source /opt/ros/dashing/setup.bash
*(注、ここで当方の環境では、以下のメッセージが表示されましたが、動作に問題は無さそうでした)
ROS_DISTRO was set to ‘melodic’ before. Please make sure that the environment does not mix paths from different distributions.
$ colcon build –symlink-install –packages-select ros1_bridge –cmake-force-configure
* (注、colcon build は予め install が必要です。Ubuntu なら、sudo apt install python3-colcon-common-extensions)

(ros1_bridge の起動)
$ source ros1_bridge_ws/install/setup.bash
$ export ROS_MASTER_URI=http://localhost:11311
$ ros2 run ros1_bridge dynamic_bridge

(動作確認)
【talker 側】— VxWorks Dashing (ROS 2)
[vxWorks *]# set env LD_LIBRARY_PATH=”/host.host/home/wrlinux/vxworks7-ros2-build-master/export/deploy/lib/”
[vxWorks *]# rtp exec -u 0x20000 python3 /host.host/home/wrlinux/demo_nodes_py/topics/talker.py
Launching process ‘python3’ …
Process ‘python3’ (process Id = 0xffff800000192c40) launched.
[INFO] [talker]: Publishing: “Hello from VxWorks: 0”
[INFO] [talker]: Publishing: “Hello from VxWorks: 1”
[INFO] [talker]: Publishing: “Hello from VxWorks: 2”

【listener 側】— Linux melodic (ROS 1)
$ rosrun rospy_tutorials listener
[INFO] [1659088448.691259]: /listener_37249_1659088105775I heard Hello from VxWorks: 0
[INFO] [1659088450.598169]: /listener_37249_1659088105775I heard Hello from VxWorks: 1
[INFO] [1659088452.485746]: /listener_37249_1659088105775I heard Hello from VxWorks: 2

VxWorks の ROS 2(Dashing) と、Linux の ROS 1(melodic) が、ros1_bridge を介して通信できることを確認できます。

まとめ

Wind River の github 公開の ROS を使って、VxWorks で、ROS の Python コードを動作させることができました。
VxWorks で実現が難しい ROS アプリケーションについては、Linux の ROS で補うなどの手段が可能であること、ROS 2 ではまだ準備のできていない ROS 1 の機能も、ros1_bridge を使って補うことができる可能性のあることを確認することができました。

次回以降の予定

今回 VxWorks の Python で、ROS のコードを動作させたのですが、動作開始するまでに待ち時間が大きいことを確認しています。次回以降は、性能に関することにも踏み込んでみたいと考えていますし、ロボットらしいデモを動作させることに挑戦してみようと思っています。

 

※ Wind RiverおよびVxWorksは、Wind River Systemsの登録商標です。

メールマガジン

ご登録いただきましたメールアドレスは弊社の掲げる個人情報保護方針に沿って管理し、お客様の同意なく第三者に開示・提供することはございません。 詳細につきましては、当サイトの「個人情報保護方針」をご参照ください。

CONTACT

まずはお気軽に
お問い合わせください!

PAGE TOP