ssk tech blog

自律移動ロボットの話を書きます

ROS dashingでROS勉強会のROS2チュートリアル

目次

はじめに

ROS dashingが今までのROS2と比べてLTS(Long Time Support)期間が長くなって、自分の中でROS2を勉強する機運が高まってきました。
ROS Japan UG(User Group)が開催しているROS勉強会のROS2チュートリアルがcrysterl対応でdashingに対応してなかったので、勉強がてらdashingで動かしました。

ROS2勉強会@東京
rosjp.connpass.com

ROS2勉強会@大阪
rosjp.connpass.com

ROS2チュートリアル資料。これをやりました。
gbiggs.github.io

コード置き場

修正したコード。style_comparisonブランチにあります。

github.com

環境

ubuntu 18.04

トラブルシューティング

別に見る必要は無いです。一応書き残しときます。

問題1:rclcpp_register_node_pluginsコマンド

  • エラーメッセージ
CMake Error at CMakeLists.txt:32 (rclcpp_register_node_plugins):
  Unknown CMake command "rclcpp_register_node_plugins".
  • 対処法
    dashingではrclcpp_register_node_pluginsコマンドの代わりにrclcpp_components_register_nodesコマンドになったので、CMakeListsを修正。 github.com

問題2:create_subscription関数

  • 警告メッセージ
/home/sasaki/ros2_basics/src/displayer/src/displayer_component.cpp:17:66: warning・・・  
/opt/ros/dashing/include/rclcpp/node_impl.hpp:139:1: note: declared here
 Node::create_subscription(
 ^~~~

f:id:ssk0109:20190721210959p:plain

問題3:メッセージをpublishする際の警告

  • 警告メッセージ
/home/sasaki/ros2_basics/src/rosjp_ros2_basics/greeter_ros2_style/src/greeter_component.cpp: In member function ‘void greeter_ros2_style::Greeter::broadcast_greeting()’:
/home/sasaki/ros2_basics/src/rosjp_ros2_basics/greeter_ros2_style/src/greeter_component.cpp:44:25: warning:・・・  
・・・  
/opt/ros/dashing/include/rclcpp/publisher.hpp:137:3: note: declared here
   publish(const std::shared_ptr<const MessageT> & msg)
   ^~~~~~~
  • 対処法
    /opt/ros/dashing/include/rclcpp/publisher.hppの137行を見に行ったら、 " If using a shared_ptr, use publish(*msg)." って書いてあったので、ソースのpublishしている部分を以下のように修正しました。
-publisher->publish(greeting)  
+publisher->publish(*greeting)  

結果

左画面がpublisherのgreeterで、右画面がsubscriberのdisplayerです。
f:id:ssk0109:20190721204855p:plain