【可组合节点】
.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
)