ROS 2 公式文書(英語)](https://index.ros.org/doc/ros2/) 日本語訳シリーズです。
本ブログの日本語翻訳版のトップページは以下のリンクを参照下さい。
※2019/05/11 現在のものです。
RQt は歴史的には Windows 上でサポートされていませんが、互換性は持つようになってきています(ゆっくりとではありますが)。
RQt 移植の例
Microsoft は ROS の大部分を Windows に移植するよう努力しました。彼らのリポジトリは必要な変更を知るための良いリソースとなっています。そのリソースは init-windows と呼ばれるブランチを持つリポジトリとして、 ms-iot
オーガニゼーションに格納してあります。例えば、こちらです。
こちらが qt_gui_core の ROS 2 ポートです。
こちらが python_qt_binding の ROS 2 ポートです。
Windows 10 に関する考慮事項
TinyXML バージョン 1 に関する問題
TinyXML バージョン 1 ではうまく動作しませんでした。ですので、必要に応じて TinyXML-2 にアップグレードしました。それはかなり簡単です。
TinyXML-2 への移植の例についてはこの PR をチェックしてください。
__cplusplus
を使用するコードと pluginlib を必要とするコード
何箇所か、特に pluginlib の ROS 2 移植版では、__cplusplus
フラグの使用があります。残念ながら Windows では、Visual Studio は実際に使用されている C++ 標準に関係なく、このフラグを正しく設定できません。詳しくはこちらのページをご覧ください。
設定するには、コンパイルオプション /Zc:__cplusplus
を追加する必要があります。
たとえば、CMake では、次のようにすることができます。
target_compile_options(${PROJECT_NAME} PUBLIC "/Zc:__cplusplus")
ビルド生成物の格納場所(インストール前)
これは qt_gui_cpp
をビルドしている間にだけ起こりました。そのパッケージでは、カスタムコマンドはパッケージの他の部分のターゲットライブラリに依存します。ただし、そのライブラリはビルドが完了するまでインストールされません。 Windowsは ${configuration} ディレクトリに構築されています。例えば:
- Linuxでは、
qt_gui_cpp.a
は<ros2_ws>/build/qt_gui_cpp/src/qt_gui_cpp /
にビルドされます。 - しかし Windows では
qt_gui_cpp.lib
は<ros2_ws>/build/qt_gui_cpp/src/qt_gui_cpp/Release
にビルドされています。
この状況でのプラットフォーム間の互換性のためには、CMake 生成式を使用してください。ただし、リンクするライブラリが必要な場合は、必ず $<TARGET_FILE:_target>
ではなく $<TARGET_LINKER_FILE:_target>
を使用してください。後者は .dll
ファイルを検出できるでしょう(ただしそれは Windows 上でリンクされることができません)。こちらの例をご覧ください。
コンパイラとリンカのフラグ
一般に、Windows に移植するとき、多くのパッケージは追加のコンパイラフラグを利用するかもしれません。 Windows のコンパイラフラグは Microsoft のドキュメントにあります。 C++ コンパイラは cl.exe
と呼ばれます。
リンカフラグについては、Microsoft のドキュメントを参照してください。リンカプログラムは link.exe
と呼ばれます。
しかし、CMake は実際には変数でこれらのオプションの多くを提供しています。この StackOverflow ページには、スクリプトで使用可能なすべての CMake 変数を確認する方法の良い例が含まれています。