MoriKen's Journal

MoriKen's Journal

アラサー社会人博士による徒然日記。技術についてつらつら。だけだとコンテンツが貧弱なので、会社公認で大学院博士課程に進学した経緯や、独学でTOEICを475→910にしたノウハウを共有します。

【ROS 2】RQt プラグインを Windows に移植する(公式文書和訳)

Sponsored Link

ROS 2 公式文書(英語)](https://index.ros.org/doc/ros2/) 日本語訳シリーズです。

本ブログの日本語翻訳版のトップページは以下のリンクを参照下さい。

www.moriken254.com

※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 変数を確認する方法の良い例が含まれています。

翻訳元文書

index.ros.org

関連文書

www.moriken254.com

www.moriken254.com