SSL-Roots / consai2r2

https://github.com/SSL-Roots/consai_ros2 へ開発を移行しています。
MIT License
8 stars 7 forks source link

【急募】Boostを使わずにマルチプラットフォームでgrSimやVisionとUDP通信する方法 #14

Closed ShotaAk closed 4 years ago

ShotaAk commented 4 years ago

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 のコアにあるかもしれない?)

MiraiHattori commented 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と同じような機能が提供されるようです.

MiraiHattori commented 4 years ago

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が入っているように見えるので,そちらが何に依存しているかを調べている最中です.

ShotaAk commented 4 years ago

@future731 調査ありがとうございます。 ROS2のboostに対する解釈を勘違いしてました。

通信系は標準ライブラリに入らないと思うので、boost使っても良いかなと思っています。

MiraiHattori commented 4 years ago

返信ありがとうございます。 そういえば、non boostなasioを使った例を見たことがあります。これもwindowsでも入れられるもののはずです。 https://github.com/clydemcqueen/tello_ros/blob/master/tello_driver/include/tello_driver_node.hpp

MiraiHattori commented 4 years ago

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に変わっていたりしてコンパイルが通らないので,少し古い例を載せています

MiraiHattori commented 4 years ago

https://github.com/eProsima/Fast-RTPS/blob/master/cmake/modules/FindAsio.cmake もしnon boost asioを使うことになったときの備忘録を書いておくと,これと同じものをcmakeディレクトリに入れておくのが安心そうです.

ShotaAk commented 4 years ago

boostを使うのでcloseします。