ROS2を使ってみる その1(環境構築、Windows)
はじめに
今回はROS2の環境構築です。何度か挑戦して諦めていたのですが、今度こそちゃんと動かせるようにしてみます。
つい最近参加していたROS Japan UGでは、ROS1からROS2に移行するのは大変という話を聞きました。ROS2から始めたほうがすんなり使えるそうです。私もROS2から始めてみます。
▼こちらのイベントに参加していました。
https://rosjp.connpass.com/event/304753/
ROS2に関する書籍はいくつか出版されているのですが、環境構築の方法については古いことがあるらしいです。今回は公式ドキュメントに沿って環境を構築していきます。
環境を構築する
Windows 10のみサポートしているそうです。
▼ドキュメントはこちら
https://docs.ros.org/en/iron/Installation/Windows-Install-Binary.html
▼はじめに古い方のドキュメントを読んでしまっていました。こちらは公式ではサポートされていません。でも検索して最初に見つかるのがこのドキュメントだと思います。
https://docs.ros.org/en/dashing/Installation/Windows-Install-Binary.html#
chocolateyのインストール
▼インストール方法についてはこちら
https://chocolatey.org/install#individual
PowerShellで実行するコマンドがあります。
▼コマンドはこちら
Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))
▼実行してみると、以下のエラーが出ました。
警告: 'choco' was found at 'C:\ProgramData\chocolatey\bin\choco.exe'.
警告: An existing Chocolatey installation was detected. Installation will not continue. This script will not overwrite existing installations.
If there is no Chocolatey installation at 'C:\ProgramData\chocolatey', delete the folder and attempt the installation again.
C:\ProgramData\chocolateyにすでにchocolateyのフォルダがありました。一旦削除して、もう一度実行しました。
▼すると、次のエラーが出ました。
Installation of Chocolatey to default folder requires Administrative permissions. Please run from elevated prompt. Please see https://chocolatey.org/install for details and alternatives if needing to install as a non-administrator.
管理者権限が無いと実行できないようです。VS CodeのターミナルのPowerShellで実行していたのですが、改めてPowerShellを管理者として実行しました。
▼スタートメニューのWindows PowerShellを右クリックすると、選択できます。
この後も管理者権限でコマンドを実行しています。
さらにPythonとVisual C++ Redistributablesをインストールしました。
choco install -y python --version 3.8.3
choco install -y vcredist2013 vcredist140
Open SSLのインストール
▼ダウンロードはこちらから
https://slproweb.com/products/Win32OpenSSL.html
Win64 OpenSSL v3.2.1のexeファイルをダウンロードしました。実行してみると、これもすでにフォルダがあったみたいです。改めてインストールしました。
▼setxで環境変数を設定しておきます。
setx /m OPENSSL_CONF "C:\Program Files\OpenSSL-Win64\bin\openssl.cfg"
Visual Studioのインストール
▼ダウンロードはこちらから
https://visualstudio.microsoft.com/ja/downloads/
Visual Studio 2019のDesktop development with C++が必要です。既にインストールしていたので、インストーラを起動して確認しておきました。
▼インストーラの「変更」を選択すると、設定を確認できます。
▼C++によるデスクトップ開発が既にインストールされている状態です。
Open CVのインストール
▼こちらのリンクをクリックすると、ダウンロードが始まります。
https://github.com/ros2/ros2/releases/download/opencv-archives/opencv-3.4.6-vc16.VS2019.zip
ダウンロードしたファイルを解凍後、Cドライブ直下に移動しておきます。
▼移動した状態
▼環境変数を設定しておきます。
setx -m OpenCV_DIR C:\opencv
dependenciesのインストール
▼cmakeをインストールします。
choco install -y cmake
▼こちらのページから、必要なパッケージをダウンロードします。
https://github.com/ros2/choco-packages/releases/tag/2022-03-15
▼必要なパッケージはこちら
- asio.1.12.1.nupkg
- bullet.3.17.nupkg
- cunit.2.1.3.nupkg
- eigen-3.3.4.nupkg
- tinyxml-usestl.2.6.2.nupkg
- tinyxml2.6.0.0.nupkg
▼ダウンロードしたパッケージをインストールします。「<PATH\TO\DOWNLOADS\>」の部分は、環境に合わせてください。
choco install -y -s <PATH\TO\DOWNLOADS\> asio cunit eigen tinyxml-usestl tinyxml2 bullet
私の場合はユーザー名がmgs_1で、C:\Users\mgs_1\Downloadsにしました。
▼ちなみに、パッケージが足りていないとエラーが出ました。
▼さらにインストールします。pipをアップグレードしないとエラーが出ました。
python -m pip install -U pip setuptools==59.6.0
python -m pip install -U catkin_pkg cryptography empy importlib-metadata jsonschema lark==1.1.1 lxml matplotlib netifaces numpy opencv-python PyQt5 pillow psutil pycairo pydot pyparsing==2.4.7 pyyaml rosdistro
xmllintのインストール
▼ダウンロードページはこちら
https://www.zlatkovic.com/pub/libxml/64bit/
libxml2-2.9.3-win32-x86_64.7zをダウンロードしました。推奨されている通りCドライブ直下にxmllintフォルダを作成して、そこで解凍しました。
▼解凍後のフォルダはこちら
「Add C:\xmllint\bin to the PATH」とのことだったので、環境変数のPathに、C:\xmllint\binを追加しました。
Qt5のインストール
推奨されていた5.12.x Offline Installersからインストールしました。かなり時間がかかりました。
▼インストール後、環境変数を設定しました。
setx /m Qt5_DIR C:\Qt\Qt5.12.12\5.12.12\msvc2017_64
setx /m QT_QPA_PLATFORM_PLUGIN_PATH C:\Qt\Qt5.12.12\5.12.12\msvc2017_64\plugins\platforms
rqt_graphを使う場合はGraphvizが必要とのことだったので、これもインストールしておきます。ノード間通信に関するものだそうです。
▼graphviz-9.0.0 (64-bit) EXE installerをダウンロードしました。
https://graphviz.org/download/
インストーラに環境変数の追加について聞かれるので、追加しておきました。
ROS2のインストール
▼ダウンロードはこちらから
https://github.com/ros2/ros2/releases
今回はros2-iron-20240209-windows-release-amd64.zipをダウンロードしました。
▼C:\dev\ros2_ironフォルダに配置しました。
セットアップをするのに call C:\dev\ros2_iron\local_setup.bat を実行するように書かれていました。しかし、callが定義されていないというエラーが出ていました。
▼callをつけずにbatファイルを実行すると、以下のエラーが出ました。
"[rti_connext_dds_cmake_module][warning] RTI Connext DDS environment script not found (\resource\scripts\rtisetenv_x64Win64VS2017.bat).
RTI Connext DDS will not be available at runtime, unless you already configured PATH manually."
ps1ファイルを実行してから、ros2コマンドを実行するとうまくいきました。
▼こちらのコマンドだとうまくいきました。
C:\dev\ros2_iron\local_setup.ps1
ros2 run demo_nodes_cpp talker
▼Hello WorldがPublishされています!
なお新しくPowerShellを開くと、setupを実行しなければros2が定義されていない状態になっていました。
▼talkerを起動した状態で、別のPowerShellでlistenerも起動してみました。
ros2 run demo_nodes_py listener
▼talkerのメッセージを受信しています!
追記
後日、別のPowerShellを起動してみるとコマンドをすんなり実行できなかったので再度検証してみました。
▼例えばlocal_setup.ps1を実行していない状態でros2コマンドを実行しようとすると、認識されていませんでした。
▼local_setup.ps1も、実行ポリシーを変更しなければ実行できませんでした。
ポリシーを変更してから、local_setup.ps1を実行すると、ros2コマンドを呼び出せました。
▼以下の順番でコマンドを実行しました。
Set-ExecutionPolicy Bypass -Scope Process -Force
C:\dev\ros2_iron\local_setup.ps1
ros2 run demo_nodes_cpp talker
▼talkerを実行できています。
最後に
目次を見ると、インストールするものが多いですね。バージョン依存が心配になります。
ひとまずInstallationのページはこれでOKかなと思います。まだ簡単なサンプルしか実行していないので、次はチュートリアルを試してみます。
▼チュートリアルのページはこちら
https://docs.ros.org/en/iron/Tutorials.html
Raspberry Piにも環境を構築したいところです。