这个项目的结构如下:
高层次目录结构:
-
rclcpp/
- include/: 包含C++库的头文件。
- rclcpp/: 包含与ROS 2 C++客户端库核心组件相关的头文件,如节点、参数、发布器、订阅器和执行器等。
- src/: 包含库的实现文件。
- test/: 包含测试文件,可能使用了GTest等框架来验证各组件的功能。
- include/: 包含C++库的头文件。
-
rclcpp_lifecycle/:
- 与
rclcpp/
结构类似,但专门用于生命周期相关的组件。ROS 2中的生命周期节点允许进行更复杂的状态管理。
- 与
-
.vscode/: 包含用于Visual Studio Code的配置文件,表明该项目可以在VSCode中打开和构建。
-
CMakeLists.txt: 构建配置文件,用于通过CMake设置构建过程。
文件关系:
- include/rclcpp/: 头文件定义了库中使用的接口和模板。这些文件通常由
src/
目录中的源文件包含。 - src/: 对应于
include/rclcpp/
中的头文件的实现文件。 - test/: 包含验证核心和生命周期组件功能的测试文件。
文件树:
(base) clb@clb:~/1-code/ROS2/rclcpp$ tree
.
├── CODEOWNERS
├── CONTRIBUTING.md
├── LICENSE
├── rclcpp
│ ├── CHANGELOG.rst
│ ├── CMakeLists.txt
│ ├── doc
│ │ ├── api_review_march_2020.md
│ │ ├── notes_on_statically_typed_parameters.md
│ │ ├── param_callback_design.png
│ │ └── proposed_node_parameter_callbacks.md
│ ├── Doxyfile
│ ├── include
│ │ └── rclcpp
│ │ ├── allocator
│ │ │ ├── allocator_common.hpp
│ │ │ └── allocator_deleter.hpp
│ │ ├── any_executable.hpp
│ │ ├── any_service_callback.hpp
│ │ ├── any_subscription_callback.hpp
│ │ ├── callback_group.hpp
│ │ ├── client.hpp
│ │ ├── clock.hpp
│ │ ├── context.hpp
│ │ ├── contexts
│ │ │ └── default_context.hpp
│ │ ├── copy_all_parameter_values.hpp
│ │ ├── create_client.hpp
│ │ ├── create_generic_client.hpp
│ │ ├── create_generic_publisher.hpp
│ │ ├── create_generic_subscription.hpp
│ │ ├── create_publisher.hpp
│ │ ├── create_service.hpp
│ │ ├── create_subscription.hpp
│ │ ├── create_timer.hpp
│ │ ├── detail
│ │ │ ├── add_guard_condition_to_rcl_wait_set.hpp
│ │ │ ├── cpp_callback_trampoline.hpp
│ │ │ ├── qos_parameters.hpp
│ │ │ ├── README.md
│ │ │ ├── resolve_enable_topic_statistics.hpp
│ │ │ ├── resolve_intra_process_buffer_type.hpp
│ │ │ ├── resolve_use_intra_process.hpp
│ │ │ ├── rmw_implementation_specific_payload.hpp
│ │ │ ├── rmw_implementation_specific_publisher_payload.hpp
│ │ │ ├── rmw_implementation_specific_subscription_payload.hpp
│ │ │ ├── subscription_callback_type_helper.hpp
│ │ │ ├── template_contains.hpp
│ │ │ ├── template_unique.hpp
│ │ │ └── utilities.hpp
│ │ ├── duration.hpp
│ │ ├── dynamic_typesupport
│ │ │ ├── dynamic_message.hpp
│ │ │ ├── dynamic_message_type_builder.hpp
│ │ │ ├── dynamic_message_type.hpp
│ │ │ ├── dynamic_message_type_support.hpp
│ │ │ └── dynamic_serialization_support.hpp
│ │ ├── event_handler.hpp
│ │ ├── event.hpp
│ │ ├── exceptions
│ │ │ └── exceptions.hpp
│ │ ├── exceptions.hpp
│ │ ├── executor.hpp
│ │ ├── executor_options.hpp
│ │ ├── executors
│ │ │ ├── executor_entities_collection.hpp
│ │ │ ├── executor_entities_collector.hpp
│ │ │ ├── executor_notify_waitable.hpp
│ │ │ ├── multi_threaded_executor.hpp
│ │ │ ├── single_threaded_executor.hpp
│ │ │ └── static_single_threaded_executor.hpp
│ │ ├── executors.hpp
│ │ ├── expand_topic_or_service_name.hpp
│ │ ├── experimental
│ │ │ ├── buffers
│ │ │ │ ├── buffer_implementation_base.hpp
│ │ │ │ ├── intra_process_buffer.hpp
│ │ │ │ └── ring_buffer_implementation.hpp
│ │ │ ├── create_intra_process_buffer.hpp
│ │ │ ├── executable_list.hpp
│ │ │ ├── executors
│ │ │ │ └── events_executor
│ │ │ │ ├── events_executor_event_types.hpp
│ │ │ │ ├── events_executor.hpp
│ │ │ │ ├── events_queue.hpp
│ │ │ │ └── simple_events_queue.hpp
│ │ │ ├── intra_process_manager.hpp
│ │ │ ├── README.md
│ │ │ ├── ros_message_intra_process_buffer.hpp
│ │ │ ├── subscription_intra_process_base.hpp
│ │ │ ├── subscription_intra_process_buffer.hpp
│ │ │ ├── subscription_intra_process.hpp
│ │ │ └── timers_manager.hpp
│ │ ├── function_traits.hpp
│ │ ├── future_return_code.hpp
│ │ ├── generic_client.hpp
│ │ ├── generic_publisher.hpp
│ │ ├── generic_subscription.hpp
│ │ ├── get_message_type_support_handle.hpp
│ │ ├── graph_listener.hpp
│ │ ├── guard_condition.hpp
│ │ ├── init_options.hpp
│ │ ├── intra_process_buffer_type.hpp
│ │ ├── intra_process_setting.hpp
│ │ ├── is_ros_compatible_type.hpp
│ │ ├── loaned_message.hpp
│ │ ├── logger.hpp
│ │ ├── macros.hpp
│ │ ├── memory_strategies.hpp
│ │ ├── memory_strategy.hpp
│ │ ├── message_info.hpp
│ │ ├── message_memory_strategy.hpp
│ │ ├── network_flow_endpoint.hpp
│ │ ├── node.hpp
│ │ ├── node_impl.hpp
│ │ ├── node_interfaces
│ │ │ ├── detail
│ │ │ │ └── node_interfaces_helpers.hpp
│ │ │ ├── node_base.hpp
│ │ │ ├── node_base_interface.hpp
│ │ │ ├── node_clock.hpp
│ │ │ ├── node_clock_interface.hpp
│ │ │ ├── node_graph.hpp
│ │ │ ├── node_graph_interface.hpp
│ │ │ ├── node_interfaces.hpp
│ │ │ ├── node_logging.hpp
│ │ │ ├── node_logging_interface.hpp
│ │ │ ├── node_parameters.hpp
│ │ │ ├── node_parameters_interface.hpp
│ │ │ ├── node_services.hpp
│ │ │ ├── node_services_interface.hpp
│ │ │ ├── node_timers.hpp
│ │ │ ├── node_timers_interface.hpp
│ │ │ ├── node_time_source.hpp
│ │ │ ├── node_time_source_interface.hpp
│ │ │ ├── node_topics.hpp
│ │ │ ├── node_topics_interface.hpp
│ │ │ ├── node_type_descriptions.hpp
│ │ │ ├── node_type_descriptions_interface.hpp
│ │ │ ├── node_waitables.hpp
│ │ │ └── node_waitables_interface.hpp
│ │ ├── node_options.hpp
│ │ ├── parameter_client.hpp
│ │ ├── parameter_event_handler.hpp
│ │ ├── parameter_events_filter.hpp
│ │ ├── parameter.hpp
│ │ ├── parameter_map.hpp
│ │ ├── parameter_service.hpp
│ │ ├── parameter_value.hpp
│ │ ├── publisher_base.hpp
│ │ ├── publisher_factory.hpp
│ │ ├── publisher.hpp
│ │ ├── publisher_options.hpp
│ │ ├── qos.hpp
│ │ ├── qos_overriding_options.hpp
│ │ ├── rate.hpp
│ │ ├── rclcpp.hpp
│ │ ├── serialization.hpp
│ │ ├── serialized_message.hpp
│ │ ├── service.hpp
│ │ ├── strategies
│ │ │ ├── allocator_memory_strategy.hpp
│ │ │ └── message_pool_memory_strategy.hpp
│ │ ├── subscription_base.hpp
│ │ ├── subscription_content_filter_options.hpp
│ │ ├── subscription_factory.hpp
│ │ ├── subscription.hpp
│ │ ├── subscription_options.hpp
│ │ ├── subscription_traits.hpp
│ │ ├── subscription_wait_set_mask.hpp
│ │ ├── time.hpp
│ │ ├── timer.hpp
│ │ ├── time_source.hpp
│ │ ├── topic_statistics
│ │ │ └── subscription_topic_statistics.hpp
│ │ ├── topic_statistics_state.hpp
│ │ ├── type_adapter.hpp
│ │ ├── type_support_decl.hpp
│ │ ├── typesupport_helpers.hpp
│ │ ├── utilities.hpp
│ │ ├── visibility_control.hpp
│ │ ├── waitable.hpp
│ │ ├── wait_for_message.hpp
│ │ ├── wait_result.hpp
│ │ ├── wait_result_kind.hpp
│ │ ├── wait_set.hpp
│ │ ├── wait_set_policies
│ │ │ ├── detail
│ │ │ │ ├── storage_policy_common.hpp
│ │ │ │ ├── synchronization_policy_common.hpp
│ │ │ │ └── write_preferring_read_write_lock.hpp
│ │ │ ├── dynamic_storage.hpp
│ │ │ ├── sequential_synchronization.hpp
│ │ │ ├── static_storage.hpp
│ │ │ └── thread_safe_synchronization.hpp
│ │ └── wait_set_template.hpp
│ ├── package.xml
│ ├── QUALITY_DECLARATION.md
│ ├── README.md
│ ├── resource
│ │ ├── get_interface.hpp.em
│ │ ├── interface_traits.hpp.em
│ │ └── logging.hpp.em
│ ├── src
│ │ └── rclcpp
│ │ ├── any_executable.cpp
│ │ ├── callback_group.cpp
│ │ ├── client.cpp
│ │ ├── clock.cpp
│ │ ├── context.cpp
│ │ ├── contexts
│ │ │ └── default_context.cpp
│ │ ├── create_generic_client.cpp
│ │ ├── detail
│ │ │ ├── add_guard_condition_to_rcl_wait_set.cpp
│ │ │ ├── resolve_intra_process_buffer_type.cpp
│ │ │ ├── resolve_parameter_overrides.cpp
│ │ │ ├── resolve_parameter_overrides.hpp
│ │ │ ├── rmw_implementation_specific_payload.cpp
│ │ │ ├── rmw_implementation_specific_publisher_payload.cpp
│ │ │ ├── rmw_implementation_specific_subscription_payload.cpp
│ │ │ └── utilities.cpp
│ │ ├── duration.cpp
│ │ ├── dynamic_typesupport
│ │ │ ├── dynamic_message.cpp
│ │ │ ├── dynamic_message_type_builder.cpp
│ │ │ ├── dynamic_message_type.cpp
│ │ │ ├── dynamic_message_type_support.cpp
│ │ │ └── dynamic_serialization_support.cpp
│ │ ├── event.cpp
│ │ ├── event_handler.cpp
│ │ ├── exceptions
│ │ │ └── exceptions.cpp
│ │ ├── executable_list.cpp
│ │ ├── executor.cpp
│ │ ├── executor_options.cpp
│ │ ├── executors
│ │ │ ├── executor_entities_collection.cpp
│ │ │ ├── executor_entities_collector.cpp
│ │ │ ├── executor_notify_waitable.cpp
│ │ │ ├── multi_threaded_executor.cpp
│ │ │ ├── single_threaded_executor.cpp
│ │ │ └── static_single_threaded_executor.cpp
│ │ ├── executors.cpp
│ │ ├── expand_topic_or_service_name.cpp
│ │ ├── experimental
│ │ │ ├── executors
│ │ │ │ └── events_executor
│ │ │ │ └── events_executor.cpp
│ │ │ └── timers_manager.cpp
│ │ ├── future_return_code.cpp
│ │ ├── generic_client.cpp
│ │ ├── generic_publisher.cpp
│ │ ├── generic_subscription.cpp
│ │ ├── graph_listener.cpp
│ │ ├── guard_condition.cpp
│ │ ├── init_options.cpp
│ │ ├── intra_process_manager.cpp
│ │ ├── logger.cpp
│ │ ├── logging_mutex.cpp
│ │ ├── logging_mutex.hpp
│ │ ├── memory_strategies.cpp
│ │ ├── memory_strategy.cpp
│ │ ├── message_info.cpp
│ │ ├── network_flow_endpoint.cpp
│ │ ├── node.cpp
│ │ ├── node_interfaces
│ │ │ ├── node_base.cpp
│ │ │ ├── node_clock.cpp
│ │ │ ├── node_graph.cpp
│ │ │ ├── node_logging.cpp
│ │ │ ├── node_parameters.cpp
│ │ │ ├── node_services.cpp
│ │ │ ├── node_timers.cpp
│ │ │ ├── node_time_source.cpp
│ │ │ ├── node_topics.cpp
│ │ │ ├── node_type_descriptions.cpp
│ │ │ └── node_waitables.cpp
│ │ ├── node_options.cpp
│ │ ├── parameter_client.cpp
│ │ ├── parameter.cpp
│ │ ├── parameter_event_handler.cpp
│ │ ├── parameter_events_filter.cpp
│ │ ├── parameter_map.cpp
│ │ ├── parameter_service.cpp
│ │ ├── parameter_service_names.hpp
│ │ ├── parameter_value.cpp
│ │ ├── publisher_base.cpp
│ │ ├── qos.cpp
│ │ ├── qos_overriding_options.cpp
│ │ ├── rate.cpp
│ │ ├── serialization.cpp
│ │ ├── serialized_message.cpp
│ │ ├── service.cpp
│ │ ├── signal_handler.cpp
│ │ ├── signal_handler.hpp
│ │ ├── subscription_base.cpp
│ │ ├── subscription_intra_process_base.cpp
│ │ ├── time.cpp
│ │ ├── timer.cpp
│ │ ├── time_source.cpp
│ │ ├── type_support.cpp
│ │ ├── typesupport_helpers.cpp
│ │ ├── utilities.cpp
│ │ ├── waitable.cpp
│ │ └── wait_set_policies
│ │ └── detail
│ │ └── write_preferring_read_write_lock.cpp
│ └── test
│ ├── benchmark
│ │ ├── benchmark_client.cpp
│ │ ├── benchmark_executor.cpp
│ │ ├── benchmark_init_shutdown.cpp
│ │ ├── benchmark_node.cpp
│ │ ├── benchmark_node_parameters_interface.cpp
│ │ ├── benchmark_parameter_client.cpp
│ │ ├── benchmark_service.cpp
│ │ └── CMakeLists.txt
│ ├── cmake
│ │ └── rclcpp_add_build_failure_test.cmake
│ ├── CMakeLists.txt
│ ├── mocking_utils
│ │ └── patch.hpp
│ ├── msg
│ │ ├── Header.msg
│ │ ├── LargeMessage.msg
│ │ ├── MessageWithHeader.msg
│ │ └── String.msg
│ ├── rclcpp
│ │ ├── allocator
│ │ │ ├── test_allocator_common.cpp
│ │ │ └── test_allocator_deleter.cpp
│ │ ├── CMakeLists.txt
│ │ ├── exceptions
│ │ │ └── test_exceptions.cpp
│ │ ├── executors
│ │ │ ├── executor_types.hpp
│ │ │ ├── test_entities_collector.cpp
│ │ │ ├── test_events_executor.cpp
│ │ │ ├── test_events_queue.cpp
│ │ │ ├── test_executor_notify_waitable.cpp
│ │ │ ├── test_executors_busy_waiting.cpp
│ │ │ ├── test_executors_callback_group_behavior.cpp
│ │ │ ├── test_executors.cpp
│ │ │ ├── test_executors_intraprocess.cpp
│ │ │ ├── test_executors_timer_cancel_behavior.cpp
│ │ │ ├── test_multi_threaded_executor.cpp
│ │ │ ├── test_reinitialized_timers.cpp
│ │ │ ├── test_static_executor_entities_collector.cpp
│ │ │ ├── test_static_single_threaded_executor.cpp
│ │ │ ├── test_waitable.cpp
│ │ │ └── test_waitable.hpp
│ │ ├── node_interfaces
│ │ │ ├── detail
│ │ │ │ └── test_template_utils.cpp
│ │ │ ├── node_wrapper.hpp
│ │ │ ├── test_does_not_compile
│ │ │ │ ├── get_node_topics_interface_const_ptr_rclcpp_node.cpp
│ │ │ │ ├── get_node_topics_interface_const_ptr_wrapped_node.cpp
│ │ │ │ ├── get_node_topics_interface_const_ref_rclcpp_node.cpp
│ │ │ │ └── get_node_topics_interface_const_ref_wrapped_node.cpp
│ │ │ ├── test_get_node_interfaces.cpp
│ │ │ ├── test_node_base.cpp
│ │ │ ├── test_node_clock.cpp
│ │ │ ├── test_node_graph.cpp
│ │ │ ├── test_node_interfaces.cpp
│ │ │ ├── test_node_parameters.cpp
│ │ │ ├── test_node_services.cpp
│ │ │ ├── test_node_timers.cpp
│ │ │ ├── test_node_topics.cpp
│ │ │ ├── test_node_type_descriptions.cpp
│ │ │ └── test_node_waitables.cpp
│ │ ├── strategies
│ │ │ ├── test_allocator_memory_strategy.cpp
│ │ │ └── test_message_pool_memory_strategy.cpp
│ │ ├── test_add_callback_groups_to_executor.cpp
│ │ ├── test_any_service_callback.cpp
│ │ ├── test_any_subscription_callback.cpp
│ │ ├── test_client_common.cpp
│ │ ├── test_client.cpp
│ │ ├── test_clock.cpp
│ │ ├── test_context.cpp
│ │ ├── test_copy_all_parameter_values.cpp
│ │ ├── test_create_subscription.cpp
│ │ ├── test_create_timer.cpp
│ │ ├── test_duration.cpp
│ │ ├── test_executor.cpp
│ │ ├── test_expand_topic_or_service_name.cpp
│ │ ├── test_externally_defined_services.cpp
│ │ ├── test_find_weak_nodes.cpp
│ │ ├── test_function_traits.cpp
│ │ ├── test_future_return_code.cpp
│ │ ├── test_generic_client.cpp
│ │ ├── test_generic_pubsub.cpp
│ │ ├── test_graph_listener.cpp
│ │ ├── test_guard_condition.cpp
│ │ ├── test_init_options.cpp
│ │ ├── test_interface_traits.cpp
│ │ ├── test_intra_process_buffer.cpp
│ │ ├── test_intra_process_manager.cpp
│ │ ├── test_intra_process_manager_with_allocators.cpp
│ │ ├── test_loaned_message.cpp
│ │ ├── test_logger.cpp
│ │ ├── test_logger_service.cpp
│ │ ├── test_logging.cpp
│ │ ├── test_memory_strategy.cpp
│ │ ├── test_message_memory_strategy.cpp
│ │ ├── test_node.cpp
│ │ ├── test_node_global_args.cpp
│ │ ├── test_node_options.cpp
│ │ ├── test_parameter_client.cpp
│ │ ├── test_parameter.cpp
│ │ ├── test_parameter_event_handler.cpp
│ │ ├── test_parameter_events_filter.cpp
│ │ ├── test_parameter_map.cpp
│ │ ├── test_parameter_service.cpp
│ │ ├── test_publisher.cpp
│ │ ├── test_publisher_subscription_count_api.cpp
│ │ ├── test_publisher_with_type_adapter.cpp
│ │ ├── test_qos.cpp
│ │ ├── test_qos_event.cpp
│ │ ├── test_qos_overriding_options.cpp
│ │ ├── test_qos_parameters.cpp
│ │ ├── test_rate.cpp
│ │ ├── test_ring_buffer_implementation.cpp
│ │ ├── test_rosout_qos.cpp
│ │ ├── test_rosout_subscription.cpp
│ │ ├── test_serialized_message_allocator.cpp
│ │ ├── test_serialized_message.cpp
│ │ ├── test_service.cpp
│ │ ├── test_service_introspection.cpp
│ │ ├── test_subscription_content_filter.cpp
│ │ ├── test_subscription.cpp
│ │ ├── test_subscription_options.cpp
│ │ ├── test_subscription_publisher_count_api.cpp
│ │ ├── test_subscription_publisher_with_same_type_adapter.cpp
│ │ ├── test_subscription_traits.cpp
│ │ ├── test_subscription_with_type_adapter.cpp
│ │ ├── test_time.cpp
│ │ ├── test_timer.cpp
│ │ ├── test_timers_manager.cpp
│ │ ├── test_time_source.cpp
│ │ ├── test_type_support.cpp
│ │ ├── test_typesupport_helpers.cpp
│ │ ├── test_utilities.cpp
│ │ ├── test_wait_for_message.cpp
│ │ ├── test_wait_set.cpp
│ │ ├── topic_statistics
│ │ │ ├── test_subscription_topic_statistics.cpp
│ │ │ └── test_topic_stats_utils.hpp
│ │ ├── waitables
│ │ │ ├── test_intra_process_waitable.cpp
│ │ │ └── waitable_test_helpers.hpp
│ │ └── wait_set_policies
│ │ ├── test_dynamic_storage.cpp
│ │ ├── test_static_storage.cpp
│ │ ├── test_storage_policy_common.cpp
│ │ └── test_thread_safe_synchronization.cpp
│ ├── resources
│ │ ├── test_node
│ │ │ ├── load_complicated_parameters.yaml
│ │ │ ├── load_parameters.yaml
│ │ │ ├── no_valid_parameters.yaml
│ │ │ └── test_parameters.yaml
│ │ └── test_node_parameters
│ │ ├── complicated_wildcards.yaml
│ │ ├── params_by_order.yaml
│ │ └── wildcards.yaml
│ └── utils
│ ├── rclcpp_gtest_macros.hpp
│ └── test_rclcpp_gtest_macros.cpp
├── rclcpp_action
│ ├── CHANGELOG.rst
│ ├── CMakeLists.txt
│ ├── Doxyfile
│ ├── include
│ │ └── rclcpp_action
│ │ ├── client_goal_handle.hpp
│ │ ├── client_goal_handle_impl.hpp
│ │ ├── client.hpp
│ │ ├── create_client.hpp
│ │ ├── create_server.hpp
│ │ ├── exceptions.hpp
│ │ ├── qos.hpp
│ │ ├── rclcpp_action.hpp
│ │ ├── server_goal_handle.hpp
│ │ ├── server.hpp
│ │ ├── types.hpp
│ │ └── visibility_control.hpp
│ ├── package.xml
│ ├── QUALITY_DECLARATION.md
│ ├── README.md
│ ├── src
│ │ ├── client.cpp
│ │ ├── qos.cpp
│ │ ├── server.cpp
│ │ ├── server_goal_handle.cpp
│ │ └── types.cpp
│ └── test
│ ├── benchmark
│ │ ├── benchmark_action_client.cpp
│ │ ├── benchmark_action_server.cpp
│ │ └── CMakeLists.txt
│ ├── mocking_utils
│ │ └── patch.hpp
│ ├── test_client.cpp
│ ├── test_server.cpp
│ ├── test_server_goal_handle.cpp
│ ├── test_traits.cpp
│ └── test_types.cpp
├── rclcpp_components
│ ├── CHANGELOG.rst
│ ├── cmake
│ │ ├── rclcpp_components_package_hook.cmake
│ │ ├── rclcpp_components_register_node.cmake
│ │ └── rclcpp_components_register_nodes.cmake
│ ├── CMakeLists.txt
│ ├── Doxyfile
│ ├── include
│ │ └── rclcpp_components
│ │ ├── component_manager.hpp
│ │ ├── component_manager_isolated.hpp
│ │ ├── node_factory.hpp
│ │ ├── node_factory_template.hpp
│ │ ├── node_instance_wrapper.hpp
│ │ ├── register_node_macro.hpp
│ │ └── visibility_control.hpp
│ ├── package.xml
│ ├── QUALITY_DECLARATION.md
│ ├── rclcpp_components-extras.cmake.in
│ ├── README.md
│ ├── src
│ │ ├── component_container.cpp
│ │ ├── component_container_isolated.cpp
│ │ ├── component_container_mt.cpp
│ │ ├── component_manager.cpp
│ │ └── node_main.cpp.in
│ └── test
│ ├── benchmark
│ │ └── benchmark_components.cpp
│ ├── components
│ │ └── test_component.cpp
│ ├── test_component_manager_api.cpp
│ └── test_component_manager.cpp
├── rclcpp_lifecycle
│ ├── CHANGELOG.rst
│ ├── CMakeLists.txt
│ ├── Doxyfile
│ ├── include
│ │ └── rclcpp_lifecycle
│ │ ├── lifecycle_node.hpp
│ │ ├── lifecycle_node_impl.hpp
│ │ ├── lifecycle_publisher.hpp
│ │ ├── managed_entity.hpp
│ │ ├── node_interfaces
│ │ │ └── lifecycle_node_interface.hpp
│ │ ├── state.hpp
│ │ ├── transition.hpp
│ │ ├── type_traits
│ │ │ └── is_manageable_node.hpp
│ │ └── visibility_control.h
│ ├── package.xml
│ ├── QUALITY_DECLARATION.md
│ ├── README.md
│ ├── src
│ │ ├── lifecycle_node.cpp
│ │ ├── lifecycle_node_interface_impl.cpp
│ │ ├── lifecycle_node_interface_impl.hpp
│ │ ├── managed_entity.cpp
│ │ ├── node_interfaces
│ │ │ └── lifecycle_node_interface.cpp
│ │ ├── state.cpp
│ │ └── transition.cpp
│ └── test
│ ├── benchmark
│ │ ├── benchmark_lifecycle_client.cpp
│ │ ├── benchmark_lifecycle_node.cpp
│ │ ├── benchmark_state.cpp
│ │ └── benchmark_transition.cpp
│ ├── mocking_utils
│ │ └── patch.hpp
│ ├── test_callback_exceptions.cpp
│ ├── test_client.cpp
│ ├── test_lifecycle_node.cpp
│ ├── test_lifecycle_node_errors.cpp
│ ├── test_lifecycle_publisher.cpp
│ ├── test_lifecycle_service_client.cpp
│ ├── test_register_custom_callbacks.cpp
│ ├── test_service.cpp
│ ├── test_state_machine_info.cpp
│ ├── test_state_wrapper.cpp
│ └── test_transition_wrapper.cpp
└── README.md
79 directories, 514 files
(base) clb@clb:~/1-code/ROS2/rclcpp$
文件作用:
要详细列出每个文件的作用,尤其是在如此庞大的代码库中,需要逐一分析每个文件的内容和功能。为了系统地展示这些信息,我会按目录结构分类,并尽可能详细地解释每个文件的作用。
根目录文件
- CODEOWNERS: 这个文件列出了代码库的维护者,通常用于GitHub等平台,确保当有人对该库提出问题或合并请求时,相关责任人会被通知。
- CONTRIBUTING.md: 贡献指南文档,提供了向项目贡献代码、提交问题、报告bug等的详细说明。
- LICENSE: 项目使用的开源许可证,规定了代码库的使用、修改、分发等权利。
- README.md: 项目的主要文档,通常包含项目的概述、安装和使用说明,以及与项目相关的重要信息。
rclcpp 目录
- rclcpp/CHANGELOG.rst: 项目更新日志,记录了每个版本的变更和改进,以便用户和开发者追踪项目的历史。
- rclcpp/CMakeLists.txt: CMake 配置文件,用于定义项目的构建过程,包括编译选项、依赖关系、目标生成等。
- rclcpp/Doxyfile: 用于配置 Doxygen 工具生成代码文档,通常包括项目的注释风格、文档输出格式等设置。
- rclcpp/doc/:
- api_review_march_2020.md: 2020年3月API审查的相关文档,记录了API设计的讨论和决策。
- notes_on_statically_typed_parameters.md: 关于静态类型参数的设计笔记。
- param_callback_design.png: 参数回调设计的图示。
- proposed_node_parameter_callbacks.md: 提出的节点参数回调设计文档。
- rclcpp/include/rclcpp/: 这个目录包含了 ROS 2 C++ 客户端库的所有头文件,定义了主要的类和函数接口。
- allocator/:
- allocator_common.hpp: 定义通用的分配器接口和操作。
- allocator_deleter.hpp: 定义用于分配器的删除器模板。
- any_executable.hpp: 定义可以执行的对象的抽象接口。
- any_service_callback.hpp: 定义服务回调的抽象接口。
- any_subscription_callback.hpp: 定义订阅回调的抽象接口。
- callback_group.hpp: 定义回调组的接口,管理不同类型的回调。
- client.hpp: 定义服务客户端的接口,用于发起服务请求。
- clock.hpp: 定义时钟接口,用于管理和获取时间。
- context.hpp: 定义上下文接口,用于管理节点的生命周期和状态。
- contexts/:
- default_context.hpp: 定义默认的上下文实现。
- copy_all_parameter_values.hpp: 提供复制所有参数值的功能。
- create_client.hpp: 提供创建客户端的工厂函数。
- create_generic_client.hpp: 提供创建通用客户端的工厂函数。
- create_generic_publisher.hpp: 提供创建通用发布器的工厂函数。
- create_generic_subscription.hpp: 提供创建通用订阅者的工厂函数。
- create_publisher.hpp: 提供创建发布器的工厂函数。
- create_service.hpp: 提供创建服务的工厂函数。
- create_subscription.hpp: 提供创建订阅者的工厂函数。
- create_timer.hpp: 提供创建定时器的工厂函数。
- detail/:
- add_guard_condition_to_rcl_wait_set.hpp: 提供在等待集里添加保护条件的功能。
- cpp_callback_trampoline.hpp: 提供 C++ 回调的跳板函数。
- qos_parameters.hpp: 定义 QoS 参数的细节实现。
- resolve_enable_topic_statistics.hpp: 用于解决启用主题统计的选项。
- resolve_intra_process_buffer_type.hpp: 用于解决进程内缓冲区类型。
- rmw_implementation_specific_payload.hpp: 定义特定实现的 RMW 有效载荷。
- subscription_callback_type_helper.hpp: 帮助定义订阅回调类型。
- template_contains.hpp: 用于检查模板是否包含特定类型的帮助函数。
- template_unique.hpp: 用于确保模板类型唯一的帮助函数。
- utilities.hpp: 提供通用的实用函数。
- duration.hpp: 定义时间段的接口,用于处理时间间隔。
- dynamic_typesupport/:
- dynamic_message.hpp: 定义动态消息的接口。
- dynamic_message_type_builder.hpp: 提供动态消息类型构建器的功能。
- dynamic_message_type.hpp: 定义动态消息类型的接口。
- dynamic_message_type_support.hpp: 提供动态消息类型支持的功能。
- dynamic_serialization_support.hpp: 提供动态序列化支持的功能。
- event.hpp: 定义事件接口,用于处理各种事件。
- event_handler.hpp: 定义事件处理程序的接口。
- exceptions.hpp: 定义异常处理接口和特定异常类。
- executor.hpp: 定义执行器接口,用于管理回调的执行。
- executor_options.hpp: 定义执行器的配置选项。
- executors/:
- executor_entities_collection.hpp: 定义执行实体的集合。
- executor_entities_collector.hpp: 提供收集执行实体的功能。
- executor_notify_waitable.hpp: 提供执行器通知等待的功能。
- multi_threaded_executor.hpp: 定义多线程执行器的接口。
- single_threaded_executor.hpp: 定义单线程执行器的接口。
- static_single_threaded_executor.hpp: 定义静态单线程执行器的接口。
- expand_topic_or_service_name.hpp: 提供展开主题或服务名称的功能。
- experimental/:
- buffers/:
- buffer_implementation_base.hpp: 定义缓冲区实现的基础接口。
- intra_process_buffer.hpp: 定义进程内缓冲区的接口。
- ring_buffer_implementation.hpp: 定义环形缓冲区的实现。
- create_intra_process_buffer.hpp: 提供创建进程内缓冲区的功能。
- executable_list.hpp: 定义可执行对象列表的接口。
- executors/:
- events_executor/:
- events_executor_event_types.hpp: 定义事件执行器的事件类型。
- events_executor.hpp: 定义事件执行器的接口。
- events_queue.hpp: 定义事件队列的接口。
- simple_events_queue.hpp: 提供简单事件队列的实现。
- events_executor/:
- intra_process_manager.hpp: 定义进程内管理器的接口。
- subscription_intra_process.hpp: 定义进程内订阅者的接口。
- timers_manager.hpp: 定义定时器管理器的接口。
- buffers/:
- function_traits.hpp: 提供函数特性和元编程的工具。
- future_return_code.hpp: 定义未来返回码的接口。
- generic_client.hpp: 定义通用客户端的接口。
- generic_publisher.hpp: 定义通用发布者的接口。
- generic_subscription.hpp: 定义通用订阅者的接口。
- get_message_type_support_handle.hpp: 提供获取消息类型支持句柄的功能。
- graph_listener.hpp: 定义图监听器的接口,用于监听节点之间的关系变化。
- guard_condition.hpp: 定义保护条件的接口,用于线程同步等。
- init_options.hpp: 定义初始化选项的接口。
- is_ros_compatible_type.hpp: 提供检查类型是否与 ROS 兼容的功能。
- loaned_message.hpp: 定义借用消息的接口,用于消息的内存管理。
- logger.hpp: 定义日志记录器的接口。
- macros.hpp: 定义常用的宏。
- memory_strategies.hpp: 定义内存策略的接口,用于管理消息的内存分配。
- message_info.hpp: 定义消息信息的接口。
- network_flow_endpoint.hpp: 定义网络流端点的接口。
- node.hpp: 定义节点的接口,用于创建和管理 ROS 2 节点。
- parameter.hpp: 定义参数的接口,用于管理节点的配置参数。
- publisher.hpp: 定义发布者的接口,用于发布消息到主题。
- node_impl.hpp: 提供节点实现的内部细节,通常不直接暴露给用户。
- node_interfaces/:
- node_base.hpp: 定义节点基础接口的功能,如启动和停止节点。
- node_base_interface.hpp: 定义节点基础接口的抽象类。
- node_clock.hpp: 提供与节点时钟相关的功能。
- node_clock_interface.hpp: 定义节点时钟接口的抽象类。
- node_graph.hpp: 定义节点图相关的接口,用于管理和查询节点之间的关系。
- node_graph_interface.hpp: 定义节点图接口的抽象类。
- node_interfaces.hpp: 汇总所有节点接口的头文件。
- node_logging.hpp: 提供节点日志记录功能的接口。
- node_logging_interface.hpp: 定义节点日志记录接口的抽象类。
- node_parameters.hpp: 提供节点参数管理的接口。
- node_parameters_interface.hpp: 定义节点参数接口的抽象类。
- node_services.hpp: 提供节点服务的接口。
- node_services_interface.hpp: 定义节点服务接口的抽象类。
- node_timers.hpp: 提供节点定时器的接口。
- node_timers_interface.hpp: 定义节点定时器接口的抽象类。
- node_time_source.hpp: 提供节点时间源的接口,用于同步时间。
- node_time_source_interface.hpp: 定义节点时间源接口的抽象类。
- node_topics.hpp: 提供节点主题管理的接口。
- node_topics_interface.hpp: 定义节点主题接口的抽象类。
- node_type_descriptions.hpp: 提供节点类型描述的接口。
- node_type_descriptions_interface.hpp: 定义节点类型描述接口的抽象类。
- node_waitables.hpp: 提供节点可等待对象(如服务、订阅)的接口。
- node_waitables_interface.hpp: 定义节点可等待对象接口的抽象类。
- allocator/:
- node_options.hpp: 定义节点创建时的配置选项。
- parameter_client.hpp: 提供与节点参数交互的客户端接口。
- parameter_event_handler.hpp: 提供处理参数事件的接口,如参数更改通知。
- parameter_events_filter.hpp: 提供过滤参数事件的功能。
- parameter_map.hpp: 提供参数映射的接口,用于存储和查询参数值。
- parameter_service.hpp: 提供节点参数服务的接口,用于远程获取和设置参数。
- parameter_value.hpp: 定义参数值的接口,支持各种数据类型。
- publisher_base.hpp: 定义发布者基础类的接口,用于扩展发布者功能。
- publisher_factory.hpp: 提供发布者工厂的接口,用于创建发布者实例。
- publisher_options.hpp: 定义发布者创建时的配置选项。
- qos.hpp: 定义质量服务(QoS)的接口,用于控制消息传递的行为。
- qos_overriding_options.hpp: 提供覆盖QoS选项的接口。
- rate.hpp: 提供节奏控制的接口,用于限制循环频率。
- rclcpp.hpp: 汇总rclcpp库的所有核心接口。
- serialization.hpp: 提供消息序列化和反序列化的接口。
- serialized_message.hpp: 定义序列化消息的接口,用于在网络上传输数据。
- service.hpp: 定义服务的接口,用于处理客户端请求。
- strategies/:
- allocator_memory_strategy.hpp: 定义内存分配策略的接口,用于高效管理内存。
- message_pool_memory_strategy.hpp: 提供消息池内存策略的实现。
- subscription_base.hpp: 定义订阅者基础类的接口,用于扩展订阅者功能。
- subscription_content_filter_options.hpp: 提供订阅内容过滤选项的接口。
- subscription_factory.hpp: 提供订阅者工厂的接口,用于创建订阅者实例。
- subscription.hpp: 定义订阅者的接口,用于接收主题消息。
- subscription_options.hpp: 定义订阅者创建时的配置选项。
- subscription_traits.hpp: 提供订阅者特性的接口,用于处理特定类型的消息。
- subscription_wait_set_mask.hpp: 提供订阅者等待集合掩码的接口,用于控制等待行为。
- time.hpp: 定义时间的接口,用于处理和转换时间数据。
- timer.hpp: 定义定时器的接口,用于在特定时间间隔内执行操作。
- time_source.hpp: 提供时间源的接口,用于节点的时间同步。
- topic_statistics/:
- subscription_topic_statistics.hpp: 提供订阅主题统计信息的接口,用于监控消息传递性能。
- topic_statistics_state.hpp: 定义主题统计状态的接口。
- type_adapter.hpp: 提供类型适配器的接口,用于自定义消息类型的处理。
- type_support_decl.hpp: 定义类型支持的声明,用于消息类型的序列化和反序列化。
- typesupport_helpers.hpp: 提供类型支持的辅助函数。
- utilities.hpp: 提供通用实用工具的接口,如日志记录、错误处理等。
- visibility_control.hpp: 定义可见性控制的接口,用于控制符号的导出和隐藏。
- waitable.hpp: 定义可等待对象的接口,用于处理异步事件。
- wait_for_message.hpp: 提供等待消息到达的接口,用于同步订阅者。
- wait_result.hpp: 定义等待结果的接口,用于处理等待操作的返回值。
- wait_result_kind.hpp: 定义等待结果类型的接口,用于区分不同的等待结果。
- wait_set.hpp: 定义等待集的接口,用于管理多个可等待对象的同步。
- wait_set_policies/:
- dynamic_storage.hpp: 提供动态存储策略的接口,用于管理等待集中的对象。
- sequential_synchronization.hpp: 提供顺序同步策略的接口,用于管理同步操作。
- static_storage.hpp: 提供静态存储策略的接口。
- thread_safe_synchronization.hpp: 提供线程安全的同步策略接口。
- detail/:
- storage_policy_common.hpp: 定义通用存储策略的接口。
- synchronization_policy_common.hpp: 定义通用同步策略的接口。
- write_preferring_read_write_lock.hpp: 提供写优先的读写锁实现。
rclcpp/src 目录
- rclcpp/src/rclcpp/: 这个目录包含了
include/rclcpp/
中定义的所有接口的实现文件。- any_executable.cpp: 实现
any_executable.hpp
定义的可执行对象接口。 - callback_group.cpp: 实现
callback_group.hpp
定义的回调组接口。 - client.cpp: 实现
client.hpp
定义的服务客户端接口。 - clock.cpp: 实现
clock.hpp
定义的时钟接口。 - context.cpp: 实现
context.hpp
定义的上下文接口。 - contexts/:
- default_context.cpp: 实现
default_context.hpp
定义的默认上下文接口。
- default_context.cpp: 实现
- create_generic_client.cpp: 实现通用客户端创建接口。
- detail/:
- add_guard_condition_to_rcl_wait_set.cpp: 实现添加保护条件到等待集的功能。
- resolve_intra_process_buffer_type.cpp: 实现解决进程内缓冲区类型的功能。
- resolve_parameter_overrides.cpp: 实现解决参数覆盖的功能。
- rmw_implementation_specific_payload.cpp: 实现特定实现的 RMW 有效载荷接口。
- utilities.cpp: 实现通用实用工具接口。
- duration.cpp: 实现时间段的接口。
- dynamic_typesupport/:
- dynamic_message.cpp: 实现动态消息的接口。
- dynamic_message_type_builder.cpp: 实现动态消息类型构建器接口。
- dynamic_message_type.cpp: 实现动态消息类型接口。
- dynamic_serialization_support.cpp: 实现动态序列化支持接口。
- event.cpp: 实现事件接口。
- event_handler.cpp: 实现事件处理程序接口。
- exceptions/:
- exceptions.cpp: 实现异常处理接口。
- executable_list.cpp: 实现可执行对象列表接口。
- executor.cpp: 实现执行器接口。
- executor_options.cpp: 实现
- executor_options.cpp: 实现
executor_options.hpp
定义的执行器选项接口。 - executors/:
- executor_entities_collection.cpp: 实现执行实体集合的接口。
- executor_entities_collector.cpp: 实现执行实体收集器的接口。
- executor_notify_waitable.cpp: 实现执行器通知等待的接口。
- multi_threaded_executor.cpp: 实现多线程执行器的接口。
- single_threaded_executor.cpp: 实现单线程执行器的接口。
- static_single_threaded_executor.cpp: 实现静态单线程执行器的接口。
- any_executable.cpp: 实现
- executors.cpp: 实现
executors.hpp
定义的执行器接口的核心部分。 - expand_topic_or_service_name.cpp: 实现展开主题或服务名称的功能。
- experimental/:
- executors/:
- events_executor/:
- events_executor.cpp: 实现事件执行器的接口。
- events_executor/:
- timers_manager.cpp: 实现定时器管理器的接口。
- executors/:
- future_return_code.cpp: 实现未来返回码的接口。
- generic_client.cpp: 实现通用客户端的接口。
- generic_publisher.cpp: 实现通用发布者的接口。
- generic_subscription.cpp: 实现通用订阅者的接口。
- graph_listener.cpp: 实现图监听器的接口,用于监视节点关系变化。
- guard_condition.cpp: 实现保护条件的接口,用于线程同步。
- init_options.cpp: 实现初始化选项的接口。
- intra_process_manager.cpp: 实现进程内管理器的接口。
- logger.cpp: 实现日志记录器的接口。
- logging_mutex.cpp: 实现用于日志记录的互斥锁功能。
- memory_strategies.cpp: 实现内存策略的接口,用于管理消息的内存分配。
- memory_strategy.cpp: 实现内存策略的具体实现。
- message_info.cpp: 实现消息信息的接口。
- network_flow_endpoint.cpp: 实现网络流端点的接口。
- node.cpp: 实现
node.hpp
定义的节点接口。 - node_interfaces/:
- node_base.cpp: 实现节点基础接口。
- node_clock.cpp: 实现节点时钟接口。
- node_graph.cpp: 实现节点图接口。
- node_logging.cpp: 实现节点日志接口。
- node_parameters.cpp: 实现节点参数接口。
- node_services.cpp: 实现节点服务接口。
- node_timers.cpp: 实现节点定时器接口。
- node_time_source.cpp: 实现节点时间源接口。
- node_topics.cpp: 实现节点主题接口。
- node_type_descriptions.cpp: 实现节点类型描述接口。
- node_waitables.cpp: 实现节点可等待对象接口。
- node_options.cpp: 实现节点创建时的配置选项。
- parameter_client.cpp: 实现节点参数客户端的接口,用于与参数服务器交互。
- parameter.cpp: 实现参数管理接口,用于处理节点的配置参数。
- parameter_event_handler.cpp: 实现参数事件处理程序接口,用于响应参数更改。
- parameter_events_filter.cpp: 实现参数事件过滤器接口,用于过滤特定的参数事件。
- parameter_map.cpp: 实现参数映射接口,用于存储和查询节点的参数值。
- parameter_service.cpp: 实现参数服务接口,用于远程获取和设置节点的参数。
- parameter_value.cpp: 实现参数值接口,用于处理各种数据类型的参数值。
- publisher_base.cpp: 实现发布者基础类接口,支持扩展发布者功能。
- qos.cpp: 实现质量服务(QoS)接口,用于控制消息传递的行为。
- qos_overriding_options.cpp: 实现覆盖QoS选项的接口。
- rate.cpp: 实现节奏控制接口,用于限制循环频率。
- serialization.cpp: 实现消息序列化和反序列化的接口。
- serialized_message.cpp: 实现序列化消息的接口,用于在网络上传输数据。
- service.cpp: 实现服务接口,用于处理客户端请求。
- signal_handler.cpp: 实现信号处理程序接口,用于处理系统信号。
- subscription_base.cpp: 实现订阅者基础类接口,用于扩展订阅者功能。
- subscription_intra_process_base.cpp: 实现进程内订阅者基础接口。
- time.cpp: 实现时间接口,用于处理和转换时间数据。
- timer.cpp: 实现定时器接口,用于在特定时间间隔内执行操作。
- time_source.cpp: 实现时间源接口,用于节点的时间同步。
- type_support.cpp: 实现类型支持接口,用于消息类型的序列化和反序列化。
- typesupport_helpers.cpp: 实现类型支持的辅助函数。
- utilities.cpp: 实现通用实用工具接口,如日志记录、错误处理等。
- waitable.cpp: 实现可等待对象接口,用于处理异步事件。
- wait_set_policies/:
- detail/:
- write_preferring_read_write_lock.cpp: 实现写优先的读写锁接口。
- detail/:
rclcpp/test 目录
-
test/: 该目录包含了测试用例,用于验证
rclcpp
库中的各种功能。- benchmark/: 包含性能基准测试文件,测试库的执行效率。
- benchmark_client.cpp: 测试客户端的性能。
- benchmark_executor.cpp: 测试执行器的性能。
- benchmark_init_shutdown.cpp: 测试初始化和关闭的性能。
- benchmark_node.cpp: 测试节点的性能。
- benchmark_node_parameters_interface.cpp: 测试节点参数接口的性能。
- benchmark_parameter_client.cpp: 测试参数客户端的性能。
- benchmark_service.cpp: 测试服务的性能。
- cmake/: 包含用于测试的CMake脚本。
- rclcpp_add_build_failure_test.cmake: 定义构建失败测试的CMake脚本。
- mocking_utils/: 包含测试中使用的模拟工具文件。
- patch.hpp: 定义用于模拟的补丁工具。
- msg/: 包含消息类型的定义文件。
- Header.msg: 定义带有头部的消息类型。
- LargeMessage.msg: 定义大消息类型。
- MessageWithHeader.msg: 定义带有头部的消息类型。
- String.msg: 定义字符串消息类型。
- rclcpp/: 包含对
rclcpp
各个功能模块的测试用例。- allocator/:
- test_allocator_common.cpp: 测试通用分配器接口。
- test_allocator_deleter.cpp: 测试分配器删除器接口。
- exceptions/:
- test_exceptions.cpp: 测试异常处理接口。
- executors/:
- test_entities_collector.cpp: 测试实体收集器接口。
- test_events_executor.cpp: 测试事件执行器接口。
- test_executors_busy_waiting.cpp: 测试忙等待执行器的接口。
- test_executors_callback_group_behavior.cpp: 测试执行器的回调组行为。
- test_executors.cpp: 测试执行器接口。
- test_executors_intraprocess.cpp: 测试进程内执行器接口。
- test_executors_timer_cancel_behavior.cpp: 测试执行器定时器取消行为。
- test_multi_threaded_executor.cpp: 测试多线程执行器接口。
- test_static_executor_entities_collector.cpp: 测试静态执行实体收集器接口。
- test_static_single_threaded_executor.cpp: 测试静态单线程执行器接口。
- test_waitable.cpp: 测试可等待对象接口。
- node_interfaces/:
- detail/:
- test_template_utils.cpp: 测试模板工具接口。
- test_get_node_interfaces.cpp: 测试节点接口获取功能。
- test_node_base.cpp: 测试节点基础接口。
- test_node_clock.cpp: 测试节点时钟接口。
- test_node_graph.cpp: 测试节点图接口。
- test_node_interfaces.cpp: 测试节点接口。
- test_node_parameters.cpp: 测试节点
- detail/:
- allocator/:
- test_node_parameters.cpp: 测试节点参数接口,验证参数的设置、获取和处理逻辑。
- test_node_services.cpp: 测试节点服务接口,验证服务的创建和处理。
- test_node_timers.cpp: 测试节点定时器接口,验证定时任务的创建和执行。
- test_node_topics.cpp: 测试节点主题接口,验证主题的发布和订阅功能。
- test_node_type_descriptions.cpp: 测试节点类型描述接口,验证节点类型的定义和查询。
- test_node_waitables.cpp: 测试节点可等待对象接口,验证异步操作的管理。
- benchmark/: 包含性能基准测试文件,测试库的执行效率。
-
rclcpp/test/strategies/:
- test_allocator_memory_strategy.cpp: 测试内存分配策略接口,验证内存管理的有效性。
- test_message_pool_memory_strategy.cpp: 测试消息池内存策略接口,验证消息池的性能和稳定性。
-
rclcpp/test/ (其他文件):
- test_add_callback_groups_to_executor.cpp: 测试将回调组添加到执行器中的功能。
- test_any_service_callback.cpp: 测试任意服务回调的接口,验证不同服务回调的兼容性。
- test_any_subscription_callback.cpp: 测试任意订阅回调的接口,验证不同订阅回调的兼容性。
- test_client_common.cpp: 测试客户端的常见功能,确保客户端行为的一致性。
- test_client.cpp: 测试客户端接口,验证客户端请求和响应的处理。
- test_clock.cpp: 测试时钟接口,验证时间获取和操作的正确性。
- test_context.cpp: 测试上下文接口,验证节点生命周期的管理。
- test_copy_all_parameter_values.cpp: 测试复制所有参数值的功能,验证参数复制的准确性。
- test_create_subscription.cpp: 测试创建订阅者的功能,验证订阅者的正确创建和操作。
- test_create_timer.cpp: 测试创建定时器的功能,验证定时器的配置和执行。
- test_duration.cpp: 测试时间段接口,验证时间计算的准确性。
- test_executor.cpp: 测试执行器接口,验证回调的调度和执行。
- test_expand_topic_or_service_name.cpp: 测试主题或服务名称的展开功能,验证名称解析的正确性。
- test_externally_defined_services.cpp: 测试外部定义服务的兼容性,确保与外部服务的集成。
- test_find_weak_nodes.cpp: 测试查找弱节点的功能,确保节点依赖关系的正确处理。
- test_function_traits.cpp: 测试函数特性接口,验证模板元编程的功能。
- test_future_return_code.cpp: 测试未来返回码的接口,确保异步操作的状态管理。
- test_generic_client.cpp: 测试通用客户端接口,验证通用服务调用的行为。
- test_generic_pubsub.cpp: 测试通用发布和订阅接口,确保消息传递的通用性。
- test_graph_listener.cpp: 测试图监听器接口,验证节点关系变化的响应。
- test_guard_condition.cpp: 测试保护条件接口,确保线程同步的可靠性。
- test_init_options.cpp: 测试初始化选项接口,验证节点配置的灵活性。
- test_interface_traits.cpp: 测试接口特性接口,确保接口的类型安全和兼容性。
- test_intra_process_buffer.cpp: 测试进程内缓冲区接口,验证消息在同一进程中的传递效率。
- test_intra_process_manager.cpp: 测试进程内管理器接口,确保多线程环境下的正确性。
- test_intra_process_manager_with_allocators.cpp: 测试带有分配器的进程内管理器,确保内存管理与消息传递的兼容性。
- test_loaned_message.cpp: 测试借用消息接口,验证消息的内存管理。
- test_logger.cpp: 测试日志记录器接口,确保日志输出的准确性和性能。
- test_logger_service.cpp: 测试日志服务接口,验证日志服务的创建和使用。
- test_logging.cpp: 测试日志记录功能,确保日志系统的正确配置和使用。
- test_memory_strategy.cpp: 测试内存策略接口,验证内存分配的策略和性能。
- test_message_memory_strategy.cpp: 测试消息内存策略接口,确保消息池的有效管理。
- test_node.cpp: 测试节点接口,验证节点的创建、销毁和基本操作。
- test_node_global_args.cpp: 测试节点的全局参数管理,确保参数配置的正确性。
- test_node_options.cpp: 测试节点选项接口,验证节点创建时的配置选项。
- test_parameter_client.cpp: 测试节点参数客户端接口,验证与参数服务器的交互。
- test_parameter.cpp: 测试参数管理接口,确保参数的设置和查询功能。
- test_parameter_event_handler.cpp: 测试参数事件处理程序接口,确保参数更改通知的准确性。
- test_parameter_events_filter.cpp: 测试参数事件过滤功能,确保特定参数事件的正确处理。
- test_parameter_map.cpp: 测试参数映射接口,验证参数存储和查询的功能。
- test_parameter_service.cpp: 测试参数服务接口,确保参数服务的创建和响应。
- test_publisher.cpp: 测试发布者接口,验证消息发布的正确性和性能。
- test_publisher_subscription_count_api.cpp: 测试发布者订阅计数API,确保订阅者数量的准确统计。
- test_publisher_with_type_adapter.cpp: 测试带有类型适配器的发布者,确保自定义消息类型的正确处理。
- test_qos.cpp: 测试QoS(质量服务)接口,确保消息传递的可靠性。
- test_qos_event.cpp: 测试QoS事件的处理,确保QoS参数变化的正确响应。
- test_qos_overriding_options.cpp: 测试覆盖QoS选项的功能,确保配置选项的正确应用。
- test_qos_parameters.cpp: 测试QoS参数管理的功能,确保参数配置的正确性。
- test_rate.cpp: 测试速率控制接口,确保循环频率的准确控制。
- test_ring_buffer_implementation.cpp: 测试环形缓冲区的实现,验证消息缓存的有效性。
- test_rosout_qos.cpp: 测试
rosout
(ROS日志输出)的QoS配置,确保日志消息的传递质量。 - test_rosout_subscription.cpp: 测试
rosout
订阅接口,确保日志订阅的有效性。 - test_serialized_message_allocator.cpp: 测试序列化消息的内存分配策略,确保消息传递的内存管理。
- test_serialized_message.cpp: 测试序列化消息接口,验证消息的序列化和反序列化。
- test_service.cpp: 测试服务接口,验证服务请求和响应的正确性。
- test_service_introspection.cpp: 测试服务自省功能,确保服务接口的可调试性。
- test_subscription_content_filter.cpp: 测试订阅内容过滤功能,确保订阅消息的精确控制。
- test_subscription.cpp: 测试订阅者接口,验证消息接收的正确性和稳定性。
- test_subscription_options.cpp: 测试订阅者选项接口,确保订阅配置的灵活性。
- test_subscription_publisher_count_api.cpp: 测试订阅者和发布者计数API,确保消息传递统计的准确性。
- test_subscription_publisher_with_same_type_adapter.cpp: 测试带有相同类型适配器的发布者和订阅者接口,确保自定义类型消息的正确传递。
- test_subscription_traits.cpp: 测试订阅者特性接口,验证订阅者的类型安全和兼容性。
- test_subscription_with_type_adapter.cpp: 测试带有类型适配器的订阅者接口,确保自定义消息类型的正确处理。
- test_time.cpp: 测试时间接口,验证时间计算和转换的准确性。
-
test_timer.cpp: 测试定时器接口,验证定时器的创建、配置和触发功能。
-
test_timers_manager.cpp: 测试定时器管理器接口,确保定时器的有效管理和调度。
-
test_time_source.cpp: 测试时间源接口,验证时间同步和时间源切换的功能。
-
test_type_support.cpp: 测试类型支持接口,确保消息类型的正确序列化和反序列化。
-
test_typesupport_helpers.cpp: 测试类型支持辅助函数,确保类型操作的可靠性。
-
test_utilities.cpp: 测试实用工具接口,验证通用工具函数的正确性和性能。
-
test_wait_for_message.cpp: 测试等待消息接口,确保消息接收的同步控制。
-
test_wait_set.cpp: 测试等待集接口,验证多个可等待对象的同步管理。
-
topic_statistics/:
- test_subscription_topic_statistics.cpp: 测试订阅主题统计接口,确保消息传递性能的监控。
- test_topic_stats_utils.hpp: 定义和测试主题统计工具的头文件,提供统计数据的处理功能。
-
waitables/:
- test_intra_process_waitable.cpp: 测试进程内可等待对象接口,验证进程内消息传递的同步性。
- waitable_test_helpers.hpp: 提供可等待对象测试的辅助工具,支持测试中使用的辅助功能。
-
wait_set_policies/:
- test_dynamic_storage.cpp: 测试动态存储策略接口,验证等待集中的对象管理。
- test_static_storage.cpp: 测试静态存储策略接口,确保静态对象管理的正确性。
- test_storage_policy_common.cpp: 测试通用存储策略接口,验证不同存储策略的兼容性和性能。
- test_thread_safe_synchronization.cpp: 测试线程安全同步策略,确保多线程环境下的同步可靠性。
-
resources/:
- test_node/:
- load_complicated_parameters.yaml: 用于测试复杂参数加载的YAML配置文件。
- load_parameters.yaml: 用于测试参数加载的YAML配置文件。
- no_valid_parameters.yaml: 用于测试无效参数加载的YAML配置文件。
- test_parameters.yaml: 用于测试参数加载和设置的YAML配置文件。
- test_node_parameters/:
- complicated_wildcards.yaml: 用于测试复杂通配符参数的YAML配置文件。
- params_by_order.yaml: 用于测试按顺序加载参数的YAML配置文件。
- wildcards.yaml: 用于测试通配符参数的YAML配置文件。
- test_node/:
-
utils/:
- rclcpp_gtest_macros.hpp: 定义了一些用于简化Google Test框架中测试用例编写的宏。
- test_rclcpp_gtest_macros.cpp: 测试
rclcpp_gtest_macros.hpp
中定义的宏,确保它们在测试中正确工作。
rclcpp_action 目录
-
rclcpp_action/CHANGELOG.rst: 记录
rclcpp_action
库的变更日志,跟踪每个版本的更新和修复。 -
rclcpp_action/CMakeLists.txt: 用于配置
rclcpp_action
库的构建过程,包括依赖关系和编译选项。 -
rclcpp_action/Doxyfile: 用于生成
rclcpp_action
库的代码文档的Doxygen配置文件。 -
rclcpp_action/include/:
- rclcpp_action/client_goal_handle.hpp: 定义了动作客户端目标句柄的接口,用于管理客户端的目标状态。
- rclcpp_action/client_goal_handle_impl.hpp: 动作客户端目标句柄的实现细节,通常用于内部处理。
- rclcpp_action/client.hpp: 定义了动作客户端的接口,用于发送目标请求和接收结果。
- rclcpp_action/create_client.hpp: 提供创建动作客户端的工厂函数。
- rclcpp_action/create_server.hpp: 提供创建动作服务器的工厂函数。
- rclcpp_action/exceptions.hpp: 定义了动作相关的异常处理接口。
- rclcpp_action/qos.hpp: 定义了动作的质量服务(QoS)设置接口。
- rclcpp_action/rclcpp_action.hpp: 汇总
rclcpp_action
库的所有核心接口。 - rclcpp_action/server_goal_handle.hpp: 定义了动作服务器目标句柄的接口,用于管理服务器的目标状态。
- rclcpp_action/server.hpp: 定义了动作服务器的接口,用于接收目标请求和发送结果。
- rclcpp_action/types.hpp: 定义了动作类型的接口,用于在动作通信中使用。
- rclcpp_action/visibility_control.hpp: 定义了可见性控制接口,用于控制符号的导出和隐藏。
-
rclcpp_action/src/:
- client.cpp: 实现动作客户端接口,处理目标请求和结果接收的逻辑。
- qos.cpp: 实现动作的质量服务(QoS)接口,管理动作消息传递的行为。
- server.cpp: 实现动作服务器接口,处理目标请求和结果发送的逻辑。
- server_goal_handle.cpp: 实现动作服务器目标句柄的接口,管理目标的状态和生命周期。
- types.cpp: 实现动作类型接口,定义了动作的基础类型和功能。
-
rclcpp_action/test/:
- benchmark/:
- benchmark_action_client.cpp: 测试动作客户端的性能,确保目标请求和结果处理的效率。
- benchmark_action_server.cpp: 测试动作服务器的性能,确保目标处理和结果发送的效率。
- CMakeLists.txt: 用于配置动作基准测试的CMake文件。
- mocking_utils/:
- patch.hpp: 提供测试中使用的模拟工具,支持动作相关功能的测试。
- test_client.cpp: 测试动作客户端接口,验证目标请求和结果接收的正确性。
- test_server.cpp: 测试动作服务器接口,验证目标处理和结果发送的正确性。
- test_server_goal_handle.cpp: 测试动作服务器目标句柄接口,确保目标状态的正确管理。
- test_traits.cpp: 测试动作类型的特性接口,确保类型的正确性和兼容性。
- test_types.cpp: 测试动作类型接口,验证动作类型的定义和使用。
- benchmark/:
rclcpp_components 目录
-
rclcpp_components/CHANGELOG.rst: 记录
rclcpp_components
库的变更日志,跟踪每个版本的更新和修复。 -
rclcpp_components/cmake/:
- rclcpp_components_package_hook.cmake: 定义了组件包的构建挂钩,用于在构建过程中执行特定操作。
- rclcpp_components_register_node.cmake: 提供注册节点组件的CMake宏,支持节点的动态加载。
- rclcpp_components_register_nodes.cmake: 提供注册多个节点组件的CMake宏,支持批量节点注册。
-
rclcpp_components/CMakeLists.txt: 用于配置
rclcpp_components
库的构建过程,包括依赖关系和编译选项。 -
rclcpp_components/Doxyfile: 用于生成
rclcpp_components
库的代码文档的Doxygen配置文件。 -
rclcpp_components/include/:
- rclcpp_components/component_manager.hpp: 定义组件管理器的接口,用于加载和管理节点组件。
- rclcpp_components/component_manager_isolated.hpp: 定义独立的组件管理器接口,用于隔离组件运行环境。
- rclcpp_components/node_factory.hpp: 定义节点工厂接口,用于创建节点实例。
- rclcpp_components/node_factory_template.hpp: 提供节点工厂模板,用于简化节点的创建过程。
- rclcpp_components/node_instance_wrapper.hpp: 定义节点实例包装器接口,用于管理节点的生命周期。
- rclcpp_components/register_node_macro.hpp: 定义注册节点的宏,用于简化节点组件的注册过程。
- rclcpp_components/visibility_control.hpp: 定义可见性控制接口,用于控制符号的导出和隐藏。
-
rclcpp_components/src/:
- component_container.cpp: 实现组件容器接口,用于管理和运行多个节点组件。
- component_container_isolated.cpp: 实现独立的组件容器接口,用于隔离和管理节点组件。
-
component_container_mt.cpp: 实现多线程组件容器接口,用于并行管理和运行多个节点组件。
-
component_manager.cpp: 实现组件管理器接口,负责加载、管理和销毁节点组件。
-
node_main.cpp.in: 这是一个CMake配置文件,用于定义节点的主入口点,通常在构建过程中被处理为实际的C++文件。
rclcpp_components/test 目录
- benchmark/:
- benchmark_components.cpp: 进行组件的基准测试,评估组件加载、初始化、运行和销毁的性能。
- components/:
- test_component.cpp: 测试单个组件的接口和功能,确保组件正确加载和运行。
- test_component_manager_api.cpp: 测试组件管理器的API接口,验证组件的加载、管理和卸载功能。
- test_component_manager.cpp: 测试组件管理器的整体功能,确保多个组件之间的协调运行。
rclcpp_lifecycle 目录
-
rclcpp_lifecycle/CHANGELOG.rst: 记录
rclcpp_lifecycle
库的变更日志,跟踪每个版本的更新和修复。 -
rclcpp_lifecycle/CMakeLists.txt: 用于配置
rclcpp_lifecycle
库的构建过程,包括依赖关系和编译选项。 -
rclcpp_lifecycle/Doxyfile: 用于生成
rclcpp_lifecycle
库的代码文档的 Doxygen 配置文件。 -
rclcpp_lifecycle/include/:
- rclcpp_lifecycle/lifecycle_node.hpp: 定义生命周期节点的接口,允许节点在不同的状态之间切换,如未激活、激活、终止等。
- rclcpp_lifecycle/lifecycle_node_impl.hpp: 提供生命周期节点接口的实现细节,通常用于内部处理。
- rclcpp_lifecycle/lifecycle_publisher.hpp: 定义生命周期发布者的接口,支持在特定节点状态下发布消息。
- rclcpp_lifecycle/managed_entity.hpp: 定义可管理实体的接口,通常用于节点和发布者的生命周期管理。
- rclcpp_lifecycle/node_interfaces/lifecycle_node_interface.hpp: 定义生命周期节点接口的抽象类,用于扩展节点的生命周期管理。
- rclcpp_lifecycle/state.hpp: 定义节点的状态接口,用于管理节点的当前状态和状态转换。
- rclcpp_lifecycle/transition.hpp: 定义状态转换接口,用于管理节点从一个状态到另一个状态的过渡。
- rclcpp_lifecycle/type_traits/is_manageable_node.hpp: 提供类型特性接口,检查一个节点是否可管理。
- rclcpp_lifecycle/visibility_control.h: 定义可见性控制接口,用于控制符号的导出和隐藏。
-
rclcpp_lifecycle/src/:
- lifecycle_node.cpp: 实现生命周期节点的接口,管理节点的状态转换和生命周期。
- lifecycle_node_interface_impl.cpp: 实现生命周期节点接口的内部功能,管理节点状态和回调。
- lifecycle_node_interface_impl.hpp: 提供生命周期节点接口的实现细节,通常用于内部处理。
- managed_entity.cpp: 实现可管理实体的接口,管理实体的生命周期和状态。
- state.cpp: 实现节点状态接口,管理节点的当前状态和允许的状态转换。
- transition.cpp: 实现状态转换接口,处理节点的状态转换逻辑。
- node_interfaces/lifecycle_node_interface.cpp: 实现生命周期节点接口,确保节点在不同状态下的正确行为。
rclcpp_lifecycle/test 目录
- benchmark/:
- benchmark_lifecycle_client.cpp: 测试生命周期节点的客户端性能,确保状态转换请求的效率。
- benchmark_lifecycle_node.cpp: 测试生命周期节点的整体性能,评估状态转换和消息发布的效率。
- benchmark_state.cpp: 测试节点状态接口的性能,确保状态管理的效率。
- benchmark_transition.cpp: 测试状态转换接口的性能,确保状态转换过程的高效性。
- mocking_utils/:
- patch.hpp: 提供测试中使用的模拟工具,支持生命周期相关功能的测试。
- test_callback_exceptions.cpp: 测试生命周期节点中的回调异常处理,确保异常被正确捕获和处理。
- test_client.cpp: 测试生命周期节点的客户端接口,验证客户端的状态请求和响应。
- test_lifecycle_node.cpp: 测试生命周期节点的接口和功能,确保节点在不同状态下的正确行为。
- test_lifecycle_node_errors.cpp: 测试生命周期节点中的错误处理,确保异常情况下的稳定性。
- test_lifecycle_publisher.cpp: 测试生命周期发布者的接口,验证在特定节点状态下的消息发布行为。
- test_lifecycle_service_client.cpp: 测试生命周期服务客户端的接口,验证服务调用的正确性。
- test_register_custom_callbacks.cpp: 测试自定义回调的注册,确保回调函数的正确执行。
- test_service.cpp: 测试生命周期服务的接口,验证服务的注册、调用和响应。
- test_state_machine_info.cpp: 测试状态机的信息管理,确保状态机的正确初始化和状态查询。
- test_state_wrapper.cpp: 测试状态包装器接口,验证状态对象的封装和管理。
- test_transition_wrapper.cpp: 测试状态转换包装器接口,确保状态转换的逻辑正确性。
其他文件
- README.md: 整个代码库的主要文档,通常包括项目的概述、使用说明、构建步骤等信息。
- package.xml: ROS 包的描述文件,定义了包的名称、版本、依赖关系、维护者等信息,确保包在 ROS 环境中正确注册和使用。
- QUALITY_DECLARATION.md: 质量声明文档,描述了代码库的质量保证措施、测试覆盖率、代码审查流程等信息,确保代码质量。
以上详细列出了代码库中各个文件的作用。这个代码库结构清晰,涵盖了 ROS 2 的多个核心功能模块,包括节点管理、生命周期管理、动作接口、组件管理等,通过头文件定义接口,在源码文件中实现具体功能,并通过测试文件进行功能验证和性能评估。如果你有任何其他问题,或需要更深入的分析,请随时告诉我。