DDSをかえさないでNode間通信をする
実行時の効率が上がる
たくさんのノードをComposableノードにまとめすぎると重くなるので注意が必要
component_containerよりcomponent_container_mt(マルチスレッドで実行するComposableノード)のほうが重くなる(foxyでの動作検証)
composable_node
include
composable_node
composable_node_component.hpp
src
composable_node_component.cpp
main.cpp
CMakeLists.txt
package.xml
#include <rclcpp/rclcpp.hpp>
#include <regex>
︙
namespace abu2023 {
using std::placeholders::_1;
using namespace std::chrono_literals;
class ComposableNode : public rclcpp::Node {
︙
public:
ComposableNode(const rclcpp::NodeOptions &options) : ComposableNode("", options) {}
ComposableNode(const std::string &name_space = "", const rclcpp::NodeOptions &options = rclcpp::NodeOptions()) : Node("composable_node", name_space, options) {
︙
}
};
} // namespace abu2023
#include <rclcpp/rclcpp.hpp>
#include <rclcpp_components/register_node_macro.hpp>
#include "composable_node/composable_node_component.hpp"
RCLCPP_COMPONENTS_REGISTER_NODE(abu2023::ComposableNode)
#include <rclcpp/rclcpp.hpp>
#include "composable_node/composable_node_component.hpp"
int main(int argc, char *argv[]) {
rclcpp::init(argc, argv);
rclcpp::spin(std::make_shared<abu2023::ComposableNode>());
rclcpp::shutdown();
return 0;
}
cmake_minimum_required(VERSION 3.5)
project(composable_node)
if(NOT CMAKE_CXX_STANDARD)
set(CMAKE_CXX_STANDARD 17)
endif()
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_auto REQUIRED)
ament_auto_find_build_dependencies()
#composableノード設定部分
ament_auto_add_library(${PROJECT_NAME}_component SHARED
src/${PROJECT_NAME}_component.cpp)
rclcpp_components_register_nodes(${PROJECT_NAME}_component "abu2023::ComposableNode")
target_compile_options(${PROJECT_NAME}_component PUBLIC -Wall)
#実行ファイル設定
ament_auto_add_executable(${PROJECT_NAME}
src/main.cpp
)
if(BUILD_TESTING)
find_package(ament_lint_auto REQUIRED)
ament_lint_auto_find_test_dependencies()
endif()
ament_auto_package()