【可组合节点】

【可组合节点】

.cpp

#include <rclcpp_components/register_node_macro.hpp>
RCLCPP_COMPONENTS_REGISTER_NODE(demo_detect::DetectArmor)
//demo_detect::DetectArmor:命名空间::类名

demo.launch.py

import launch
import launch_ros
from launch_ros.actions import ComposableNodeContainer
from launch_ros.descriptions import ComposableNode
def generate_launch_description():
    continer = ComposableNodeContainer(
        name='detect_container',
        namespace='',
	#!!!注意packageh和executable:要固定rclcpp格式
        package='rclcpp_components',
        executable='component_container',
        composable_node_descriptions=[
		#把各个节点组合到这里
            ComposableNode(
                package='detect',
                plugin='demo_detect::VideoPublisher',
                name='video_publisher'
            ),
            ComposableNode(
                package='detect',
                plugin='demo_detect::DetectArmor',
                name='detect_armor'
            ),
        ],
        output='both',
    )
    return launch.LaunchDescription([continer])

CMakeList.txt

add_library(video_publisher_component SHARED src/video_publisher.cpp)
ament_target_dependencies(video_publisher_component rclcpp sensor_msgs cv_bridge rclcpp_components)
rclcpp_components_register_nodes(video_publisher_component "demo_detect::VideoPublisher")

add_library(detect_armor_component SHARED src/detect_armor.cpp)
ament_target_dependencies(detect_armor_component rclcpp sensor_msgs cv_bridge rclcpp_components) 
rclcpp_components_register_nodes(detect_armor_component "demo_detect::DetectArmor")

target_link_libraries(video_publisher_component ${OpenCV_LIBS})
target_link_libraries(detect_armor_component ${OpenCV_LIBS})

install(TARGETS video_publisher_component detect_armor_component
      ARCHIVE DESTINATION lib
      LIBRARY DESTINATION lib
      RUNTIME DESTINATION bin
)
posted @ 2025-03-03 19:25  White_ink  阅读(23)  评论(0)    收藏  举报