WindowsにROS2(foxy)をインストールしたときのメモ。
こちらをもとにインストールしたが、つまづいたことや、悩んだことを中心にまとめておく。
ただしインストールしただけで、本格的に使っていないので都度修正が必要かもしれない。
インスト-ル方針
下記の方針でいくことにした。
- 現時点(2021.4)のLTSであるFoxyにする。ラズパイ4と連携させるつもりでそちらは Ubuntu20.04だから問題なさそう。
- 極力chocolatelyを使わない(必要性を感じなかったし、コマンド引数のオプションがいっぱいありすぎて確認するのがめんどくさそう)
- Python3はユーザ環境でインストールする。(ドキュメントはAdmin権限で C:\Python38 にインストールするが、普段づかいするとき pip --user がめんどくさいので)
chocolatelyのインストール
ドキュメントのリンク先にいき、右上のInstall Nowからたどる。Step1のメールアドレスの登録するようになっているが、無視してもStep2のインストールはできる。
個人利用なのでIndividualのタブの手順を実行する。
- 管理者モードでPowerShellを起動する。
- インストールディレクトリをデフォルトから変えたい場合は、事前に環境変数 ChocolatelyInstall を指定しておく。
setx -m ChocolatelyInstall C:\Dev\インストールしたいディレクトリ>
自動的にディレクトリが作られないようなので事前につくっておかないといけないらしい。 - 四角に囲まれたコマンドを管理者権限のPowershellで実行
Python 3.8のインストール
方針に示したように、ユーザ環境にインストールしたい。
- choco でインストールする場合は管理者権限(全ユーザむけ)のインストールになるから使わない。ちなみにchocoでインストールするときはドキュメントにあるように --version 指定をしないと最新(3.9.2など)がインストールされるので必ず指定すること。C:\Python38にインストールされる。
- ユーザ環境(C:\Users<yourname>\Python)にインストールは本家python.orgからダウンロードすればよい。3.8系の最新(3.8.9)をインストールしてみたが今のところ問題なさそう。
- Ros2のバイナリパッケージに含まれるすべてのPythonスクリプトには
c:\Python38
がハードコーディングされている。今回はユーザ環境にインストールしているのでリンクをはって対処する。管理者じゃないコマンドプロンプトでmklink /D C:\Python38 C:\Users\<username>\AppData\Local\Programs\Python\Python38
を実行しシンボリックリンクをはる。LinuxやMacと違って、mklink /D リンク先 リンク元
なのが注意点。
あとは"Enviroment Setup"までドキュメント通り実施する。
chocoをつかうと便利だった点は"Install dependencies"のところ。1行で終わり。
もちろんすべてnupkgなので実はVisualStudioがあるから重要でもないのかもしれないけど。PATHをchocoが追加してくれるのがありがたいということで。
環境変数の設定
call <インストールディレクトリ>\local_setup.bat
で終わりかと思いきやそうでもない。環境変数2つを手動で設定してやる必要があった。
QT_QPA_PLATFORM_PLUGIN_PATH
チュートリアルのturtlesim_nodeを起動しようとすると下記エラーがでて、そもそもwindowが開かない。
qt.qpa.plugin: Could not find the Qt platform plugin "windows" in "C:\Qt\5.15.0\msvc2019_64\plugins\platforms"
This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.
これの対処として環境変数QT_QPA_PLATFORM_PLUGIN_PATH
をros_foxy\bin\platformsに指定してやる必要がある。
C:\Users\username> set QT_QPA_PLATFORM_PLUGIN_PATH=<インストールディレクトリ>\ros2-foxy\bin\platforms
C:\Users\username> setx QT_QPA_PLATFORM_PLUGIN_PATH <インストールディレクトリ>\ros2-foxy\bin\platforms
これで亀がでてくる。
ROS_DOMAIN_ID
ROS1から2への変更点で大きなものはmaster-slaveでなくなったこと。つまり母艦PCでmasterを起動したり、スレーブのロボットでslaveを起動しなくても node同士で通信できるということ。
母艦とロボット間を連携させるためには、ROSのドメインROS_DOMAIN_IDを合わせてやる必要がある。
set ROS_DOMAIN_ID=1
一セットしかROS2を使わないならsetxしてやるといい。
まとめ
とりあえずラズパイ、VMware上のUbuntuのROS2の間でturtulesimで相互にメッセージを交換できた。
これからあそんでいこう。