Rosanswers logo


  • Turtlebot3 Waffle
  • Intel NUC
  • ubuntu 18.04
  • ROS2 Crystal


I ran into trouble with the ROS2 Turtlebot3 install Robotis eManula Section 15. In particular see Section "Install Turtlebot3 ROS2 Packages".

I get a QoS not member of rclcpp error and qmock comparison warning during the tb3 build. See detailed build log at question end.

I suspect that my crystal repositories don't match the turtlebot3.repos configuration file I downloaded.


Compilation Error on latest version of RCLCPP

Maintaining a Source Checkout of ROS 2


Am I on the right track? I am hoping I can fix this by downloading the crystal version of tutlebot3.repos but I don't understand how to do that. I was hoping I could replace 'ros2' with 'crystal' in the following wget but that doesn't work.

$ wget https://raw.githubusercontent.com/ROBOTIS-GIT/turtlebot3/ros2/turtlebot3.repos

I suspect another possibility is to update or upgrade crystal or Ubuntu but I need to know whether that is appropriate. I have destroyed build environments that I could not recover from by doing inappropriate updates/upgrades.

Build Detail

$ colcon build --symlink-install
Starting >>> nav2_common
Starting >>> nav_2d_msgs
Starting >>> angles
Starting >>> behaviortree_cpp
Finished <<< nav2_common [1.54s]                                   
Starting >>> nav2_msgs
Finished <<< angles [3.46s]                                      
Starting >>> nav2_voxel_grid
[Processing: behaviortree_cpp, nav2_msgs, nav2_voxel_grid, nav_2d_msgs]
Finished <<< nav2_voxel_grid [43.8s]                                   
Starting >>> cv_bridge
[Processing: behaviortree_cpp, cv_bridge, nav2_msgs, nav_2d_msgs]              
Finished <<< nav_2d_msgs [1min 31s]                                            
Starting >>> dwb_msgs
Finished <<< cv_bridge [1min 1s]            
Starting >>> camera_calibration_parsers
Finished <<< behaviortree_cpp [1min 54s]    
Starting >>> cartographer
Finished <<< camera_calibration_parsers [29.7s]                                
Starting >>> cartographer_ros_msgs
[Processing: cartographer, cartographer_ros_msgs, dwb_msgs, nav2_msgs]         
[Processing: cartographer, cartographer_ros_msgs, dwb_msgs, nav2_msgs]         
[Processing: cartographer, cartographer_ros_msgs, dwb_msgs, nav2_msgs]         
[Processing: cartographer, cartographer_ros_msgs, dwb_msgs, nav2_msgs]         
[Processing: cartographer, cartographer_ros_msgs, dwb_msgs, nav2_msgs]         
Finished <<< dwb_msgs [3min 42s]                                               
Starting >>> gazebo_dev
Finished <<< gazebo_dev [3.56s]                                                
Starting >>> gazebo_msgs
[Processing: cartographer, cartographer_ros_msgs, gazebo_msgs, nav2_msgs]      
[Processing: cartographer, cartographer_ros_msgs, gazebo_msgs, nav2_msgs]      
Finished <<< cartographer_ros_msgs [4min 14s]                                  
Starting >>> image_transport
--- stderr: image_transport                  
/home/eepp/turtlebot3_ws/src/gazebo/camera_info_manager/image_transport/src/camera_publisher.cpp: In constructor ‘image_transport::CameraPublisher::CameraPublisher(rclcpp::Node*, const string&, rmw_qos_profile_t)’:
/home/eepp/turtlebot3_ws/src/gazebo/camera_info_manager/image_transport/src/camera_publisher.cpp:93:22: error: ‘QoS’ is not a member of ‘rclcpp’
   auto qos = rclcpp::QoS(rclcpp::QoSInitialization::from_rmw(custom_qos));
/home/eepp/turtlebot3_ws/src/gazebo/camera_info_manager/image_transport/src/camera_publisher.cpp:93:34: error: ‘rclcpp::QoSInitialization’ has not been declared
   auto qos = rclcpp::QoS(rclcpp::QoSInitialization::from_rmw(custom_qos));
                                  ^09:58, 15 July 2019 (PDT)09:58, 15 July 2019 (PDT)09:58, 15 July 2019 (PDT)~
make[2]: *** [CMakeFiles/image_transport.dir/src/camera_publisher.cpp.o] Error 1
make[1]: *** [CMakeFiles/image_transport.dir/all] Error 2
make: *** [all] Error 2
Failed   <<< image_transport    [ Exited with code 2 ]
Aborted  <<< nav2_msgs                                   
Aborted  <<< gazebo_msgs                                 
--- stderr: cartographer                     
In file included from /usr/src/googletest/googlemock/include/gmock/gmock-spec-builders.h:75:0,
                 from /usr/src/googletest/googlemock/include/gmock/gmock-generated-function-mockers.h:43,
                 from /usr/src/googletest/googlemock/include/gmock/gmock.h:61,
                 from /home/eepp/turtlebot3_ws/src/cartographer/cartographer/cartographer/io/serialization_format_migration_test.cc:27:
/usr/src/googletest/googlemock/include/gmock/gmock-matchers.h: In instantiation of ‘bool testing::internal::AnyEq::operator()(const A&, const B&) const [with A = unsigned int; B = int]’:
/usr/src/googletest/googlemock/include/gmock/gmock-matchers.h:908:18:   required from ‘bool testing::internal::ComparisonBase<D, Rhs, Op>::Impl<Lhs>::MatchAndExplain(Lhs, testing::MatchResultListener*) const [with Lhs = const unsigned int&; D = testing::internal::EqMatcher<int>; Rhs = int; Op = testing::internal::AnyEq]’
/home/eepp/turtlebot3_ws/src/cartographer/cartographer/cartographer/io/serialization_format_migration_test.cc:120:1:   required from here
/usr/src/googletest/googlemock/include/gmock/gmock-matchers.h:204:60: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   bool operator()(const A& a, const B& b) const { return a == b; }
                                                          ~~^[[User:Edc|Edc]] ([[User talk:Edc|talk]])
Aborted  <<< cartographer
Summary: 10 packages finished [17min 38s]
  1 package failed: image_transport
  3 packages aborted: cartographer gazebo_msgs nav2_msgs
  2 packages had stderr output: cartographer image_transport
  41 packages not processed

Originally posted by Ed C. on ROS Answers with karma: 38 on 2019-07-15

Post score: 0


1 Answer 1


Rosanswers logo

The QoS class has been introduced in ROS2 Dashing release ( the one after Crystal).

Apparently the Turtlebot repository has only a ros2 branch and not a specific branch for each ROS2 distribution. The ros2 branch requires Dashing. https://github.com/ROBOTIS-GIT/turtlebot3/tree/ros2

I suggest you to update your ROS distribution to Dashing, as it is the first long term release of ROS2.

You can follow the instructions here https://index.ros.org/doc/ros2/Installation/Dashing/

Originally posted by alsora with karma: 1322 on 2019-07-16

This answer was ACCEPTED on the original site

Post score: 0

Original comments

Comment by Ed C. on 2019-07-16:
Thank you. This is what I anticipated. I will happily move to Dashing. I will also complain that this requirement does not follow acceptable release guidelines followed by ROS1.

My complaint is that two weeks ago I was advised that the navigation2 and TB3 releases were available in Crystal and not yet ready for Dashing. I also knew that Crystal’s EOL is December 2019. My conservative approach was to bring myself up to speed with ROS2 on supported component versions on Crystal and use the next several weeks to move to Dashing. I have long experienced hiccups between ROS releases. For example, I installed Kinetic early in its release cycle but moved quickly back to Indigo because Kinetic didn’t support packages I required and I liked the stability on Indigo. I revisit Kinetic later.

Furthermore, it clearly says in the Rototis emanual that the ROS2 implementation has been tested with Crystal. See Section 15.

Comment by alsora on 2019-07-17:
IMO The Robotis manual has always been updated very slowly compared to the actual code. An alternative that you have is also to go back to an old commit of the turtlebot source code. Turtlebot was working fine with Crystal, it's just a matter of using the correct version of the code. This commit should work for you


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.