布留川氏の「UnityではじめるROS 人工知能ロボットプログラミング実践入門」を読みました。

とても具体的な内容でわかりやすかったです。だいぶROSの雰囲気がわかりました。

この本では、Windows にUbuntu のエミュレーターWSL2を入れ、そこにROSの環境が入ったDockerを展開してROSの環境を整えるのですが、とても簡単にできてびっくりでした。

しかし、ROS2はWindowsでも対応とのこと、ROS2+Unity の環境をそのままWindows11に作れないかを試したくなりました。

そこで、公式のHP[公式 Foxy]を参考にして試しました。かなりてこずりましたが、talkerとlistener のテストをクリアして、カメが表示されるところまでいけました。しかし、一部のros2コマンドでエラーが出るなど、不具合が残っています。ここではそこまでをとりあえず覚書として記録しておきます。

これからインストールするという人は、公式の最後の方で(Alternative)ROS2 Build Installation from aka.ms/rosとして紹介されている方をお勧めします。こちらの方が迷うところが少なく、ros2コマンドも使えています。こちらは、後でまとめたいと思います。

Install Chocolatey

まず、Chocolatey のインストール。
これはHPの右上の「Try It Now」から進めた。コマンドをコピペして、コマンドプロンプトに張り付けて実行しインストールできた。
コマンドプロンプトは、管理者権限で開いている(PowerShellを使ったりもしていたがコマンドプロンプトの方が良さそう)。

Install Pytohn

Python 3.8.3 を直接入れる想定だが、すでにPythonは入っている。バージョンを合わせるために、conda で仮想環境「ros2」を作って、そこにPython3.8.3を入れた。以下、「ros2」に入って実行。
[code]
conda create -n ros2 python=3.8.3
conda activate ros2
[/code]

Install Visual C++ Redistributables

以下のコマンドで問題なし。
[code]
choco install -y vcredist2013 vcredist140
[/code]

Install OpenSSL

これも問題なし。
[code]
setx /m OPENSSL_CONF "C:\Program Files\OpenSSL-Win64\bin\openssl.cfg"
[/code]

Install Visual Studio

Visual Studio 2019を入れるとのことだがすでに入っていたのでOK。

Install OpenCV

本家の説明通り、OpenCv3.4.6をgithubからDLして、解凍して”C:\opencv” にコピー。
以下のコマンドを実行。
[code]
setx /m OpenCV_DIR C:\opencv
[/code]

Install dependencies

以下はできた。
[code]
choco install -y cmake
[/code]
指示通り、”C:\Program Files\CMake\bin” をユーザー環境変数のPathに加えた。

ちなみに、Windows11 の場合の環境変数の設定までの行き方は、

設定>システム>バージョン情報>システムの詳細設定>環境変数

次は、本家の方法ではうまくできなかったので、こちらの情報を参考にした。

リンク先よりもこっちのgithubの方がバージョンがそろっているので、こっちからファイルをDLして、”C:\tools” に入れた。
そして、以下を実行
[code]
cd c:\tools
choco install -y -s c:\tools asio cunit eigen tinyxml-usestl tinyxml2 log4cxx
[/code]

画面表示の一部。

なんどもこの手続きを試しているので、もうinstallされていると言われている。

さらにpipでいろいろいれる。問題なし。

[code]
python -m pip install -U catkin_pkg cryptography empy ifcfg lark-parser lxml netifaces numpy opencv-python pyparsing pyyaml setuptools rosdistro
[/code]

RQt dependencies

これもインストールは問題なし(ros2という仮想環境で入れている。後でQtのエラーが出るが、この仮想環境で入れていることが問題なのか。。?)

[code]
python -m pip install -U pydot PyQt5
choco install graphviz
[/code]

Downloading ROS2

ここのgithubから、
ros2-foxy-20230322-windows-release-amd64.zip
をDLし、解凍。”C:\dev\ros2_foxy”に配置。
この中身はこんな感じ。

Environment setup

このコマンドはros2を有効にするためのもののようで、新規のコマンドプロンプトに対して実行すると、ros2 のコマンドが使えるようになる。

[code]
call C:\dev\ros2_foxy\local_setup.bat
[/code]

例えば、以下でhelpを表示できる。
[code]
ros2 -h

Failed to load entry point ‘test’: No module named ‘yaml’
Failed to load entry point ‘launch’: No module named ‘yaml’
usage: ros2 [-h] Call `ros2 <command> -h` for more detailed usage. …

ros2 is an extensible command-line tool for ROS 2.

optional arguments:
-h, –help show this help message and exit

Commands:
action Various action related sub-commands
bag Various rosbag related sub-commands
component Various component related sub-commands

[/code]

表示はされるが、yaml のモジュールがないと言われているのが気になる。

ROS2の通信テスト

コマンドプロンプトを開いて、
[code]
call C:\dev\ros2_foxy\local_setup.bat
ros2 run demo_nodes_cpp talker
[/code]
すると、talker がPublishを始める。

もう一つコマンドプロンプトを開いて、
[code]
call C:\dev\ros2_foxy\local_setup.bat
ros2 run demo_nodes_py listener
[/code]
これで、以下のように、listenerがメッセージを受け取れればOK。できた。

TatleSimのテスト

ROSでおなじみのカメの画像は出せるのか。

ここからは、nakanishi_lab のQiita記事を参考にした。ただし、local_setup.bat のパスは、ここまでで作った環境に合わせて”call C:dev\ros2_foxy_local_setup.bat”記述。

workspace の作成
[code]
call C:\dev\ros2_foxy\local_setup.bat
md \dev_ws\src
cd \dev_ws\src
git clone https://github.com/ros/ros_tutorials.git -b foxy-devel
[/code]

Build
[code]
call C:\dev\ros2_foxy\local_setup.bat
cd \dev_ws
call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvarsall.bat" x86_amd64
colcon build –merge-install
[/code]

※colconは、仮想環境ros2に入っていないと実行できない。
※上の3行目、Visual Studio 2019をインストールしなおしたら、パスが変わったようだ。
今自分の環境では以下でうまくいく(call “C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Auxiliary\Build\vcvarsall.bat” x86_amd64)。
※上の4行目を実行したときのメッセージ。Failedと出ている。Qt5が見つからないのでパスをくれと言っている。
[code]
(ros2) C:\dev_ws>colcon build –merge-install
Starting >>> turtlesim
— stderr: turtlesim
CMake Error at CMakeLists.txt:15 (find_package):
By not providing "FindQt5.cmake" in CMAKE_MODULE_PATH this project has
asked CMake to find a package configuration file provided by "Qt5", but
CMake did not find one.

Could not find a package configuration file provided by "Qt5" with any of
the following names:

Qt5Config.cmake
qt5-config.cmake

Add the installation prefix of "Qt5" to CMAKE_PREFIX_PATH or set "Qt5_DIR"
to a directory containing one of the above files. If "Qt5" provides a
separate development package or SDK, be sure it has been installed.

Failed <<< turtlesim [5.38s, exited with code 1]

Summary: 0 packages finished [5.66s]
1 package failed: turtlesim
1 package had stderr output: turtlesim
[/code]

いろいろと気になるが、いったん進めてみる。Turtlesimの起動。

[code]
cd \dev_ws
call C:\dev\ros2_foxy\local_setup.bat
ros2 run turtlesim turtlesim_node
[/code]

※追記:管理者権限でコマンドプロンプトを開くとカメができないようだ。普通に開く。

最後のコマンドを通すには、環境変数の設定が必要だった。ユーザー変数に以下のパスを加えた。

情報源はこちら

やっとカメが表示された。

ちなみに、起動するたびにカメのデザインが変わるという、ちょっとにくい演出がある。

ただし、ros2のコマンドでエラーがでるので、うまくいっていないと思いう。

[code]
(ros2) C:\dev_ws>ros2 node list

Failed to load entry point ‘list’: [WinError 87] パラメーターが間違っています。: ‘.’
Traceback (most recent call last):
File "C:\dev\ros2_foxy\Scripts\ros2-script.py", line 33, in <module>
sys.exit(load_entry_point(‘ros2cli==0.9.13’, ‘console_scripts’, ‘ros2’)())
File "C:\dev\ros2_foxy\Lib\site-packages\ros2cli\cli.py", line 39, in main
add_subparsers_on_demand(
File "C:\dev\ros2_foxy\Lib\site-packages\ros2cli\command\__init__.py", line 250, in add_subparsers_on_demand
extension.add_arguments(
File "C:\dev\ros2_foxy\Lib\site-packages\ros2node\command\node.py", line 25, in add_arguments
add_subparsers_on_demand(
File "C:\dev\ros2_foxy\Lib\site-packages\ros2cli\command\__init__.py", line 237, in add_subparsers_on_demand
extension = command_extensions[name]
KeyError: ‘list’
[/code]