Closed ShotaAk closed 4 years ago
https://index.ros.org/doc/ros2/Contributing/Developer-Guide/ にあるのは,standard libraryにあるものをわざわざboostから持ってこないようにしましょう.ということではないでしょうか.
通信関係はboost::asioを使うことが多く,これらがc++ standard libraryには移植されないであろうことを考えるとboostでもよいかもしれません. どうしてもboostを避けるべき,ということであれば一応 asioがあり,boost::asioと同じような機能が提供されるようです.
ros2ではrmw_fastrtpsを用いて通信が行われているようです. https://github.com/ros2/rmw_fastrtps/blob/master/rmw_fastrtps_cpp/package.xml#L19 によると,これはどうやら https://github.com/eProsima/Fast-RTPS に依存していて, https://github.com/eProsima/Fast-RTPS/blob/ffd0e27c8c8b16ff557e655c3290a2232ab90231/cmake/modules/FindAsio.cmake にあるように,少なくともasio(not boost::asio)には依存していそうです.
現在手元でros2を用いた最小構成のconsai2r2を構築中なのですが,依存関係で勝手にboost::asioが入っているように見えるので,そちらが何に依存しているかを調べている最中です.
@future731 調査ありがとうございます。 ROS2のboostに対する解釈を勘違いしてました。
通信系は標準ライブラリに入らないと思うので、boost使っても良いかなと思っています。
返信ありがとうございます。 そういえば、non boostなasioを使った例を見たことがあります。これもwindowsでも入れられるもののはずです。 https://github.com/clydemcqueen/tello_ros/blob/master/tello_driver/include/tello_driver_node.hpp
http://think-async.com/Asio/asio-1.11.0/doc/asio/examples/cpp11_examples.html melodicで動くasioの例です. 最新のasio(version 1.12.2)のソースコードはio_serviceがio_contextに変わっていたりしてコンパイルが通らないので,少し古い例を載せています
https://github.com/eProsima/Fast-RTPS/blob/master/cmake/modules/FindAsio.cmake もしnon boost asioを使うことになったときの備忘録を書いておくと,これと同じものをcmakeディレクトリに入れておくのが安心そうです.
boostを使うのでcloseします。
ROS 2 Developer Guide より、C++でBoostは極力使うなと書かれている。
しかし、C++の通信関係は標準ライブラリにないことが多いので、困る。 実際にconsai2r2_senderのsim_sender では、(sys/socket.h)を使用しており、Linuxでは動くが、Win, macOSでは動作しない。
下記のように、ROS2はBoostではなく標準ライブラリを使おうとしている。
https://github.com/ros2/ros2_documentation/blob/master/source/Contributing/Migration-Guide.rst#boost
ということで、Win, OS Xでも動作するように、マルチプラットフォーム対応のUDP通信ライブラリを探したい。
(もしかしたら、ROS2 のコアにあるかもしれない?)