In Unit 6 - Node composition.
I am currently following the Node composition tutorial, i build without any error, using the colcon build, then source the install/setup.bash but I can’t see my component using the :
ros2 component types
the component does not appear in the list. I followed and verified each step but couldn’t figure out what was missing or wrong. Do you have any ideas ? (Below my code).
CMakeList:
cmake_minimum_required(VERSION 3.8)
project(my_components)
if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
add_compile_options(-Wall -Wextra -Wpedantic)
endif()
# find dependencies
find_package(ament_cmake REQUIRED)
find_package(rclcpp REQUIRED)
find_package(rclcpp_components REQUIRED)
find_package(composition REQUIRED)
find_package(geometry_msgs REQUIRED)
if(BUILD_TESTING)
find_package(ament_lint_auto REQUIRED)
# the following line skips the linter which checks for copyrights
# comment the line when a copyright and license is added to all source files
set(ament_cmake_copyright_FOUND TRUE)
# the following line skips cpplint (only works in a git repo)
# comment the line when this package is in a git repo and when
# a copyright and license is added to all source files
set(ament_cmake_cpplint_FOUND TRUE)
ament_lint_auto_find_test_dependencies()
endif()
ament_package()
include_directories(include)
add_library(moverobot_component SHARED src/moverobot_component.cpp)
target_compile_definitions(moverobot_component PRIVATE "COMPOSITION_BUILDING_DLL")
ament_target_dependencies(moverobot_component
"rclcpp"
"rclcpp_components"
"geometry_msgs")
rclcpp_components_register_nodes(moverobot_component "my_components::MoveRobot")
set(node_plugins "${node_plugins}my_components::MoveRobot;$<TARGET_FILE:moverobot_component>\n")
install(TARGETS
moverobot_component
ARCHIVE DESTINATION lib
LIBRARY DESTINATION lib
RUNTIME DESTINATION bin)
moverobot_component.cpp file
#include "my_components/moverobot_component.hpp"
#include <chrono>
#include <iostream>
#include <memory>
#include <utility>
#include "geometry_msgs/msg/twist.hpp"
#include "rclcpp/rclcpp.hpp"
#include "std_msgs/msg/string.hpp"
using namespace std::chrono_literals;
namespace my_components {
MoveRobot::MoveRobot(const rclcpp::NodeOptions &options)
: Node("moverobot", options) {
pub_ = create_publisher<geometry_msgs::msg::Twist>("cmd_vel", 10);
timer_ = create_wall_timer(1s, std::bind(&MoveRobot::on_timer, this));
}
void MoveRobot::on_timer() {
auto msg = std::make_unique<geometry_msgs::msg::Twist>();
msg->linear.x = 0.3;
msg->angular.z = 0.3;
std::flush(std::cout);
pub_->publish(std::move(msg));
}
} // namespace my_components
#include "rclcpp_components/register_node_macro.hpp"
RCLCPP_COMPONENTS_REGISTER_NODE(my_components::MoveRobot)