Introduce rclcpp_components to implement composition (#665)
* Introduce rclcpp_components package Signed-off-by: Michael Carroll <michael@openrobotics.org> * Keep pointer to NodeWrapper vs NodeInterface. Signed-off-by: Michael Carroll <michael@openrobotics.org> * Remove component registration from rclcpp Signed-off-by: Michael Carroll <michael@openrobotics.org> * Make topics names private-prefix. Signed-off-by: Michael Carroll <michael@openrobotics.org> * Handle name and namespace with remap rules. Signed-off-by: Michael Carroll <michael@openrobotics.org> * Linting. Signed-off-by: Michael Carroll <michael@openrobotics.org> * Address reviewer feedback. Signed-off-by: Michael Carroll <michael@openrobotics.org> * Change to smart pointers for managing memory. Signed-off-by: Michael Carroll <michael@openrobotics.org> * Update to use rcpputils filesystem/split. Signed-off-by: Michael Carroll <michael@openrobotics.org> * Address reviewer feedback and add docs. Signed-off-by: Michael Carroll <michael@openrobotics.org> * Add tests around ComponentManager. Signed-off-by: Michael Carroll <michael@openrobotics.org> * Lint. Signed-off-by: Michael Carroll <michael@openrobotics.org> * Address reviewer feedback and add overflow check. Signed-off-by: Michael Carroll <michael@openrobotics.org> * Fix CI. Signed-off-by: Michael Carroll <michael@openrobotics.org>
This commit is contained in:
		
							parent
							
								
									d11a10a583
								
							
						
					
					
						commit
						0f25f714fe
					
				
					 18 changed files with 1243 additions and 56 deletions
				
			
		| 
						 | 
				
			
			@ -432,14 +432,7 @@ if(BUILD_TESTING)
 | 
			
		|||
  endif()
 | 
			
		||||
endif()
 | 
			
		||||
 | 
			
		||||
ament_package(
 | 
			
		||||
  CONFIG_EXTRAS rclcpp-extras.cmake
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
install(
 | 
			
		||||
  DIRECTORY cmake
 | 
			
		||||
  DESTINATION share/${PROJECT_NAME}
 | 
			
		||||
)
 | 
			
		||||
ament_package()
 | 
			
		||||
 | 
			
		||||
install(
 | 
			
		||||
  DIRECTORY include/ ${CMAKE_CURRENT_BINARY_DIR}/include/
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,26 +0,0 @@
 | 
			
		|||
# Copyright 2015 Open Source Robotics Foundation, Inc.
 | 
			
		||||
#
 | 
			
		||||
# Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
# you may not use this file except in compliance with the License.
 | 
			
		||||
# You may obtain a copy of the License at
 | 
			
		||||
#
 | 
			
		||||
#     http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
#
 | 
			
		||||
# Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
# distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
# See the License for the specific language governing permissions and
 | 
			
		||||
# limitations under the License.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
set(rclcpp_node_main_SRC "${rclcpp_DIR}/../../../src/rclcpp/node_main.cpp")
 | 
			
		||||
 | 
			
		||||
function(rclcpp_create_node_main node_library_target)
 | 
			
		||||
  if(NOT TARGET ${node_library_target})
 | 
			
		||||
    message(FATAL_ERROR "rclcpp_create_node_main() the first argument must be a valid target name")
 | 
			
		||||
  endif()
 | 
			
		||||
  set(executable_name_ ${node_library_target}_node)
 | 
			
		||||
  add_executable(${executable_name_} ${rclcpp_node_main_SRC})
 | 
			
		||||
  target_link_libraries(${executable_name_} ${node_library_target})
 | 
			
		||||
  install(TARGETS ${executable_name_} DESTINATION bin)
 | 
			
		||||
endfunction()
 | 
			
		||||
| 
						 | 
				
			
			@ -1,17 +0,0 @@
 | 
			
		|||
# Copyright 2016 Open Source Robotics Foundation, Inc.
 | 
			
		||||
#
 | 
			
		||||
# Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
# you may not use this file except in compliance with the License.
 | 
			
		||||
# You may obtain a copy of the License at
 | 
			
		||||
#
 | 
			
		||||
#     http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
#
 | 
			
		||||
# Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
# distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
# See the License for the specific language governing permissions and
 | 
			
		||||
# limitations under the License.
 | 
			
		||||
 | 
			
		||||
# register node plugins
 | 
			
		||||
ament_index_register_resource(
 | 
			
		||||
  "node_plugin" CONTENT "${_RCLCPP__NODE_PLUGINS}")
 | 
			
		||||
| 
						 | 
				
			
			@ -1,61 +0,0 @@
 | 
			
		|||
# Copyright 2016 Open Source Robotics Foundation, Inc.
 | 
			
		||||
#
 | 
			
		||||
# Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
# you may not use this file except in compliance with the License.
 | 
			
		||||
# You may obtain a copy of the License at
 | 
			
		||||
#
 | 
			
		||||
#     http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
#
 | 
			
		||||
# Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
# distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
# See the License for the specific language governing permissions and
 | 
			
		||||
# limitations under the License.
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Register a node plugin with the ament resource index.
 | 
			
		||||
#
 | 
			
		||||
# The passed library can contain multiple plugins extending the node interface.
 | 
			
		||||
#
 | 
			
		||||
# :param target: the shared library target
 | 
			
		||||
# :type target: string
 | 
			
		||||
# :param ARGN: the unique plugin names being exported using class_loader
 | 
			
		||||
# :type ARGN: list of strings
 | 
			
		||||
#
 | 
			
		||||
macro(rclcpp_register_node_plugins target)
 | 
			
		||||
  if(NOT TARGET ${target})
 | 
			
		||||
    message(
 | 
			
		||||
      FATAL_ERROR
 | 
			
		||||
      "rclcpp_register_node_plugins() first argument "
 | 
			
		||||
      "'${target}' is not a target")
 | 
			
		||||
  endif()
 | 
			
		||||
  get_target_property(_target_type ${target} TYPE)
 | 
			
		||||
  if(NOT _target_type STREQUAL "SHARED_LIBRARY")
 | 
			
		||||
    message(
 | 
			
		||||
      FATAL_ERROR
 | 
			
		||||
      "rclcpp_register_node_plugins() first argument "
 | 
			
		||||
      "'${target}' is not a shared library target")
 | 
			
		||||
  endif()
 | 
			
		||||
 | 
			
		||||
  if(${ARGC} GREATER 0)
 | 
			
		||||
    _rclcpp_register_package_hook()
 | 
			
		||||
    set(_unique_names)
 | 
			
		||||
    foreach(_arg ${ARGN})
 | 
			
		||||
      if(_arg IN_LIST _unique_names)
 | 
			
		||||
        message(
 | 
			
		||||
          FATAL_ERROR
 | 
			
		||||
          "rclcpp_register_node_plugins() the plugin names "
 | 
			
		||||
          "must be unique (multiple '${_arg}')")
 | 
			
		||||
      endif()
 | 
			
		||||
      list(APPEND _unique_names "${_arg}")
 | 
			
		||||
 | 
			
		||||
      if(WIN32)
 | 
			
		||||
        set(_path "bin")
 | 
			
		||||
      else()
 | 
			
		||||
        set(_path "lib")
 | 
			
		||||
      endif()
 | 
			
		||||
      set(_RCLCPP__NODE_PLUGINS
 | 
			
		||||
        "${_RCLCPP__NODE_PLUGINS}${_arg};${_path}/$<TARGET_FILE_NAME:${target}>\n")
 | 
			
		||||
    endforeach()
 | 
			
		||||
  endif()
 | 
			
		||||
endmacro()
 | 
			
		||||
| 
						 | 
				
			
			@ -1,29 +0,0 @@
 | 
			
		|||
# Copyright 2015 Open Source Robotics Foundation, Inc.
 | 
			
		||||
#
 | 
			
		||||
# Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
# you may not use this file except in compliance with the License.
 | 
			
		||||
# You may obtain a copy of the License at
 | 
			
		||||
#
 | 
			
		||||
#     http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
#
 | 
			
		||||
# Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
# distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
# See the License for the specific language governing permissions and
 | 
			
		||||
# limitations under the License.
 | 
			
		||||
 | 
			
		||||
# copied from rclcpp/rclcpp-extras.cmake
 | 
			
		||||
 | 
			
		||||
# register ament_package() hook for node plugins once
 | 
			
		||||
macro(_rclcpp_register_package_hook)
 | 
			
		||||
  if(NOT DEFINED _RCLCPP_PACKAGE_HOOK_REGISTERED)
 | 
			
		||||
    set(_RCLCPP_PACKAGE_HOOK_REGISTERED TRUE)
 | 
			
		||||
 | 
			
		||||
    find_package(ament_cmake_core QUIET REQUIRED)
 | 
			
		||||
    ament_register_extension("ament_package" "rclcpp"
 | 
			
		||||
      "rclcpp_package_hook.cmake")
 | 
			
		||||
  endif()
 | 
			
		||||
endmacro()
 | 
			
		||||
 | 
			
		||||
include("${rclcpp_DIR}/rclcpp_create_node_main.cmake")
 | 
			
		||||
include("${rclcpp_DIR}/rclcpp_register_node_plugins.cmake")
 | 
			
		||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue