zhangkaifeng 1 місяць тому
батько
коміт
27dcabe76d
100 змінених файлів з 7145 додано та 0 видалено
  1. 1 0
      install/.colcon_install_layout
  2. 0 0
      install/COLCON_IGNORE
  3. 407 0
      install/_local_setup_util_ps1.py
  4. 407 0
      install/_local_setup_util_sh.py
  5. 42 0
      install/interface/include/interface/interface/msg/rosidl_generator_c__visibility_control.h
  6. 42 0
      install/interface/include/interface/interface/msg/rosidl_generator_cpp__visibility_control.hpp
  7. 43 0
      install/interface/include/interface/interface/msg/rosidl_typesupport_fastrtps_c__visibility_control.h
  8. 43 0
      install/interface/include/interface/interface/msg/rosidl_typesupport_fastrtps_cpp__visibility_control.h
  9. 43 0
      install/interface/include/interface/interface/msg/rosidl_typesupport_introspection_c__visibility_control.h
  10. 114 0
      install/interface/include/interface/interface/srv/detail/scene_controls__builder.hpp
  11. 483 0
      install/interface/include/interface/interface/srv/detail/scene_controls__functions.c
  12. 329 0
      install/interface/include/interface/interface/srv/detail/scene_controls__functions.h
  13. 89 0
      install/interface/include/interface/interface/srv/detail/scene_controls__rosidl_typesupport_fastrtps_c.h
  14. 177 0
      install/interface/include/interface/interface/srv/detail/scene_controls__rosidl_typesupport_fastrtps_cpp.hpp
  15. 47 0
      install/interface/include/interface/interface/srv/detail/scene_controls__rosidl_typesupport_introspection_c.h
  16. 67 0
      install/interface/include/interface/interface/srv/detail/scene_controls__rosidl_typesupport_introspection_cpp.hpp
  17. 64 0
      install/interface/include/interface/interface/srv/detail/scene_controls__struct.h
  18. 276 0
      install/interface/include/interface/interface/srv/detail/scene_controls__struct.hpp
  19. 273 0
      install/interface/include/interface/interface/srv/detail/scene_controls__traits.hpp
  20. 249 0
      install/interface/include/interface/interface/srv/detail/scene_controls__type_support.c
  21. 353 0
      install/interface/include/interface/interface/srv/detail/scene_controls__type_support.cpp
  22. 58 0
      install/interface/include/interface/interface/srv/detail/scene_controls__type_support.h
  23. 71 0
      install/interface/include/interface/interface/srv/detail/scene_controls__type_support.hpp
  24. 12 0
      install/interface/include/interface/interface/srv/scene_controls.h
  25. 12 0
      install/interface/include/interface/interface/srv/scene_controls.hpp
  26. 1 0
      install/interface/share/ament_index/resource_index/package_run_dependencies/interface
  27. 0 0
      install/interface/share/ament_index/resource_index/packages/interface
  28. 1 0
      install/interface/share/ament_index/resource_index/parent_prefix_path/interface
  29. 4 0
      install/interface/share/ament_index/resource_index/rosidl_interfaces/interface
  30. 1 0
      install/interface/share/colcon-core/packages/interface
  31. 92 0
      install/interface/share/interface/cmake/ament_cmake_export_dependencies-extras.cmake
  32. 16 0
      install/interface/share/interface/cmake/ament_cmake_export_include_directories-extras.cmake
  33. 141 0
      install/interface/share/interface/cmake/ament_cmake_export_libraries-extras.cmake
  34. 27 0
      install/interface/share/interface/cmake/ament_cmake_export_targets-extras.cmake
  35. 19 0
      install/interface/share/interface/cmake/export_interface__rosidl_generator_cExport-noconfig.cmake
  36. 99 0
      install/interface/share/interface/cmake/export_interface__rosidl_generator_cExport.cmake
  37. 99 0
      install/interface/share/interface/cmake/export_interface__rosidl_generator_cppExport.cmake
  38. 19 0
      install/interface/share/interface/cmake/export_interface__rosidl_generator_pyExport-noconfig.cmake
  39. 114 0
      install/interface/share/interface/cmake/export_interface__rosidl_generator_pyExport.cmake
  40. 19 0
      install/interface/share/interface/cmake/export_interface__rosidl_typesupport_fastrtps_cExport-noconfig.cmake
  41. 115 0
      install/interface/share/interface/cmake/export_interface__rosidl_typesupport_fastrtps_cExport.cmake
  42. 19 0
      install/interface/share/interface/cmake/export_interface__rosidl_typesupport_fastrtps_cppExport-noconfig.cmake
  43. 115 0
      install/interface/share/interface/cmake/export_interface__rosidl_typesupport_fastrtps_cppExport.cmake
  44. 14 0
      install/interface/share/interface/cmake/interfaceConfig-version.cmake
  45. 42 0
      install/interface/share/interface/cmake/interfaceConfig.cmake
  46. 20 0
      install/interface/share/interface/cmake/interface__rosidl_typesupport_cExport-noconfig.cmake
  47. 114 0
      install/interface/share/interface/cmake/interface__rosidl_typesupport_cExport.cmake
  48. 20 0
      install/interface/share/interface/cmake/interface__rosidl_typesupport_cppExport-noconfig.cmake
  49. 114 0
      install/interface/share/interface/cmake/interface__rosidl_typesupport_cppExport.cmake
  50. 19 0
      install/interface/share/interface/cmake/interface__rosidl_typesupport_introspection_cExport-noconfig.cmake
  51. 115 0
      install/interface/share/interface/cmake/interface__rosidl_typesupport_introspection_cExport.cmake
  52. 19 0
      install/interface/share/interface/cmake/interface__rosidl_typesupport_introspection_cppExport-noconfig.cmake
  53. 115 0
      install/interface/share/interface/cmake/interface__rosidl_typesupport_introspection_cppExport.cmake
  54. 4 0
      install/interface/share/interface/cmake/rosidl_cmake-extras.cmake
  55. 49 0
      install/interface/share/interface/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake
  56. 23 0
      install/interface/share/interface/cmake/rosidl_cmake_export_typesupport_targets-extras.cmake
  57. 1 0
      install/interface/share/interface/environment/ament_prefix_path.dsv
  58. 4 0
      install/interface/share/interface/environment/ament_prefix_path.sh
  59. 1 0
      install/interface/share/interface/environment/library_path.dsv
  60. 16 0
      install/interface/share/interface/environment/library_path.sh
  61. 1 0
      install/interface/share/interface/environment/path.dsv
  62. 5 0
      install/interface/share/interface/environment/path.sh
  63. 1 0
      install/interface/share/interface/environment/pythonpath.dsv
  64. 3 0
      install/interface/share/interface/environment/pythonpath.sh
  65. 1 0
      install/interface/share/interface/hook/cmake_prefix_path.dsv
  66. 3 0
      install/interface/share/interface/hook/cmake_prefix_path.ps1
  67. 3 0
      install/interface/share/interface/hook/cmake_prefix_path.sh
  68. 1 0
      install/interface/share/interface/hook/ld_library_path_lib.dsv
  69. 3 0
      install/interface/share/interface/hook/ld_library_path_lib.ps1
  70. 3 0
      install/interface/share/interface/hook/ld_library_path_lib.sh
  71. 46 0
      install/interface/share/interface/local_setup.bash
  72. 4 0
      install/interface/share/interface/local_setup.dsv
  73. 186 0
      install/interface/share/interface/local_setup.sh
  74. 59 0
      install/interface/share/interface/local_setup.zsh
  75. 39 0
      install/interface/share/interface/package.bash
  76. 11 0
      install/interface/share/interface/package.dsv
  77. 117 0
      install/interface/share/interface/package.ps1
  78. 88 0
      install/interface/share/interface/package.sh
  79. 24 0
      install/interface/share/interface/package.xml
  80. 50 0
      install/interface/share/interface/package.zsh
  81. 17 0
      install/interface/share/interface/srv/SceneControls.idl
  82. 4 0
      install/interface/share/interface/srv/SceneControls.srv
  83. 1 0
      install/interface/share/interface/srv/SceneControls_Request.msg
  84. 3 0
      install/interface/share/interface/srv/SceneControls_Response.msg
  85. 121 0
      install/local_setup.bash
  86. 55 0
      install/local_setup.ps1
  87. 137 0
      install/local_setup.sh
  88. 134 0
      install/local_setup.zsh
  89. 31 0
      install/setup.bash
  90. 29 0
      install/setup.ps1
  91. 45 0
      install/setup.sh
  92. 31 0
      install/setup.zsh
  93. 50 0
      install/wheelchair_state_machine/include/wheelchair_state_machine/battery_manager.hpp
  94. 0 0
      install/wheelchair_state_machine/include/wheelchair_state_machine/duiwaiyuju.hpp
  95. 125 0
      install/wheelchair_state_machine/include/wheelchair_state_machine/error_code.hpp
  96. 89 0
      install/wheelchair_state_machine/include/wheelchair_state_machine/event_input.hpp
  97. 45 0
      install/wheelchair_state_machine/include/wheelchair_state_machine/ipad_manager.hpp
  98. 145 0
      install/wheelchair_state_machine/include/wheelchair_state_machine/lidascan_ctrl.hpp
  99. 29 0
      install/wheelchair_state_machine/include/wheelchair_state_machine/recharge_tool.hpp
  100. 113 0
      install/wheelchair_state_machine/include/wheelchair_state_machine/report.hpp

+ 1 - 0
install/.colcon_install_layout

@@ -0,0 +1 @@
+isolated

+ 0 - 0
install/COLCON_IGNORE


+ 407 - 0
install/_local_setup_util_ps1.py

@@ -0,0 +1,407 @@
+# Copyright 2016-2019 Dirk Thomas
+# Licensed under the Apache License, Version 2.0
+
+import argparse
+from collections import OrderedDict
+import os
+from pathlib import Path
+import sys
+
+
+FORMAT_STR_COMMENT_LINE = '# {comment}'
+FORMAT_STR_SET_ENV_VAR = 'Set-Item -Path "Env:{name}" -Value "{value}"'
+FORMAT_STR_USE_ENV_VAR = '$env:{name}'
+FORMAT_STR_INVOKE_SCRIPT = '_colcon_prefix_powershell_source_script "{script_path}"'  # noqa: E501
+FORMAT_STR_REMOVE_LEADING_SEPARATOR = ''  # noqa: E501
+FORMAT_STR_REMOVE_TRAILING_SEPARATOR = ''  # noqa: E501
+
+DSV_TYPE_APPEND_NON_DUPLICATE = 'append-non-duplicate'
+DSV_TYPE_PREPEND_NON_DUPLICATE = 'prepend-non-duplicate'
+DSV_TYPE_PREPEND_NON_DUPLICATE_IF_EXISTS = 'prepend-non-duplicate-if-exists'
+DSV_TYPE_SET = 'set'
+DSV_TYPE_SET_IF_UNSET = 'set-if-unset'
+DSV_TYPE_SOURCE = 'source'
+
+
+def main(argv=sys.argv[1:]):  # noqa: D103
+    parser = argparse.ArgumentParser(
+        description='Output shell commands for the packages in topological '
+                    'order')
+    parser.add_argument(
+        'primary_extension',
+        help='The file extension of the primary shell')
+    parser.add_argument(
+        'additional_extension', nargs='?',
+        help='The additional file extension to be considered')
+    parser.add_argument(
+        '--merged-install', action='store_true',
+        help='All install prefixes are merged into a single location')
+    args = parser.parse_args(argv)
+
+    packages = get_packages(Path(__file__).parent, args.merged_install)
+
+    ordered_packages = order_packages(packages)
+    for pkg_name in ordered_packages:
+        if _include_comments():
+            print(
+                FORMAT_STR_COMMENT_LINE.format_map(
+                    {'comment': 'Package: ' + pkg_name}))
+        prefix = os.path.abspath(os.path.dirname(__file__))
+        if not args.merged_install:
+            prefix = os.path.join(prefix, pkg_name)
+        for line in get_commands(
+            pkg_name, prefix, args.primary_extension,
+            args.additional_extension
+        ):
+            print(line)
+
+    for line in _remove_ending_separators():
+        print(line)
+
+
+def get_packages(prefix_path, merged_install):
+    """
+    Find packages based on colcon-specific files created during installation.
+
+    :param Path prefix_path: The install prefix path of all packages
+    :param bool merged_install: The flag if the packages are all installed
+      directly in the prefix or if each package is installed in a subdirectory
+      named after the package
+    :returns: A mapping from the package name to the set of runtime
+      dependencies
+    :rtype: dict
+    """
+    packages = {}
+    # since importing colcon_core isn't feasible here the following constant
+    # must match colcon_core.location.get_relative_package_index_path()
+    subdirectory = 'share/colcon-core/packages'
+    if merged_install:
+        # return if workspace is empty
+        if not (prefix_path / subdirectory).is_dir():
+            return packages
+        # find all files in the subdirectory
+        for p in (prefix_path / subdirectory).iterdir():
+            if not p.is_file():
+                continue
+            if p.name.startswith('.'):
+                continue
+            add_package_runtime_dependencies(p, packages)
+    else:
+        # for each subdirectory look for the package specific file
+        for p in prefix_path.iterdir():
+            if not p.is_dir():
+                continue
+            if p.name.startswith('.'):
+                continue
+            p = p / subdirectory / p.name
+            if p.is_file():
+                add_package_runtime_dependencies(p, packages)
+
+    # remove unknown dependencies
+    pkg_names = set(packages.keys())
+    for k in packages.keys():
+        packages[k] = {d for d in packages[k] if d in pkg_names}
+
+    return packages
+
+
+def add_package_runtime_dependencies(path, packages):
+    """
+    Check the path and if it exists extract the packages runtime dependencies.
+
+    :param Path path: The resource file containing the runtime dependencies
+    :param dict packages: A mapping from package names to the sets of runtime
+      dependencies to add to
+    """
+    content = path.read_text()
+    dependencies = set(content.split(os.pathsep) if content else [])
+    packages[path.name] = dependencies
+
+
+def order_packages(packages):
+    """
+    Order packages topologically.
+
+    :param dict packages: A mapping from package name to the set of runtime
+      dependencies
+    :returns: The package names
+    :rtype: list
+    """
+    # select packages with no dependencies in alphabetical order
+    to_be_ordered = list(packages.keys())
+    ordered = []
+    while to_be_ordered:
+        pkg_names_without_deps = [
+            name for name in to_be_ordered if not packages[name]]
+        if not pkg_names_without_deps:
+            reduce_cycle_set(packages)
+            raise RuntimeError(
+                'Circular dependency between: ' + ', '.join(sorted(packages)))
+        pkg_names_without_deps.sort()
+        pkg_name = pkg_names_without_deps[0]
+        to_be_ordered.remove(pkg_name)
+        ordered.append(pkg_name)
+        # remove item from dependency lists
+        for k in list(packages.keys()):
+            if pkg_name in packages[k]:
+                packages[k].remove(pkg_name)
+    return ordered
+
+
+def reduce_cycle_set(packages):
+    """
+    Reduce the set of packages to the ones part of the circular dependency.
+
+    :param dict packages: A mapping from package name to the set of runtime
+      dependencies which is modified in place
+    """
+    last_depended = None
+    while len(packages) > 0:
+        # get all remaining dependencies
+        depended = set()
+        for pkg_name, dependencies in packages.items():
+            depended = depended.union(dependencies)
+        # remove all packages which are not dependent on
+        for name in list(packages.keys()):
+            if name not in depended:
+                del packages[name]
+        if last_depended:
+            # if remaining packages haven't changed return them
+            if last_depended == depended:
+                return packages.keys()
+        # otherwise reduce again
+        last_depended = depended
+
+
+def _include_comments():
+    # skipping comment lines when COLCON_TRACE is not set speeds up the
+    # processing especially on Windows
+    return bool(os.environ.get('COLCON_TRACE'))
+
+
+def get_commands(pkg_name, prefix, primary_extension, additional_extension):
+    commands = []
+    package_dsv_path = os.path.join(prefix, 'share', pkg_name, 'package.dsv')
+    if os.path.exists(package_dsv_path):
+        commands += process_dsv_file(
+            package_dsv_path, prefix, primary_extension, additional_extension)
+    return commands
+
+
+def process_dsv_file(
+    dsv_path, prefix, primary_extension=None, additional_extension=None
+):
+    commands = []
+    if _include_comments():
+        commands.append(FORMAT_STR_COMMENT_LINE.format_map({'comment': dsv_path}))
+    with open(dsv_path, 'r') as h:
+        content = h.read()
+    lines = content.splitlines()
+
+    basenames = OrderedDict()
+    for i, line in enumerate(lines):
+        # skip over empty or whitespace-only lines
+        if not line.strip():
+            continue
+        # skip over comments
+        if line.startswith('#'):
+            continue
+        try:
+            type_, remainder = line.split(';', 1)
+        except ValueError:
+            raise RuntimeError(
+                "Line %d in '%s' doesn't contain a semicolon separating the "
+                'type from the arguments' % (i + 1, dsv_path))
+        if type_ != DSV_TYPE_SOURCE:
+            # handle non-source lines
+            try:
+                commands += handle_dsv_types_except_source(
+                    type_, remainder, prefix)
+            except RuntimeError as e:
+                raise RuntimeError(
+                    "Line %d in '%s' %s" % (i + 1, dsv_path, e)) from e
+        else:
+            # group remaining source lines by basename
+            path_without_ext, ext = os.path.splitext(remainder)
+            if path_without_ext not in basenames:
+                basenames[path_without_ext] = set()
+            assert ext.startswith('.')
+            ext = ext[1:]
+            if ext in (primary_extension, additional_extension):
+                basenames[path_without_ext].add(ext)
+
+    # add the dsv extension to each basename if the file exists
+    for basename, extensions in basenames.items():
+        if not os.path.isabs(basename):
+            basename = os.path.join(prefix, basename)
+        if os.path.exists(basename + '.dsv'):
+            extensions.add('dsv')
+
+    for basename, extensions in basenames.items():
+        if not os.path.isabs(basename):
+            basename = os.path.join(prefix, basename)
+        if 'dsv' in extensions:
+            # process dsv files recursively
+            commands += process_dsv_file(
+                basename + '.dsv', prefix, primary_extension=primary_extension,
+                additional_extension=additional_extension)
+        elif primary_extension in extensions and len(extensions) == 1:
+            # source primary-only files
+            commands += [
+                FORMAT_STR_INVOKE_SCRIPT.format_map({
+                    'prefix': prefix,
+                    'script_path': basename + '.' + primary_extension})]
+        elif additional_extension in extensions:
+            # source non-primary files
+            commands += [
+                FORMAT_STR_INVOKE_SCRIPT.format_map({
+                    'prefix': prefix,
+                    'script_path': basename + '.' + additional_extension})]
+
+    return commands
+
+
+def handle_dsv_types_except_source(type_, remainder, prefix):
+    commands = []
+    if type_ in (DSV_TYPE_SET, DSV_TYPE_SET_IF_UNSET):
+        try:
+            env_name, value = remainder.split(';', 1)
+        except ValueError:
+            raise RuntimeError(
+                "doesn't contain a semicolon separating the environment name "
+                'from the value')
+        try_prefixed_value = os.path.join(prefix, value) if value else prefix
+        if os.path.exists(try_prefixed_value):
+            value = try_prefixed_value
+        if type_ == DSV_TYPE_SET:
+            commands += _set(env_name, value)
+        elif type_ == DSV_TYPE_SET_IF_UNSET:
+            commands += _set_if_unset(env_name, value)
+        else:
+            assert False
+    elif type_ in (
+        DSV_TYPE_APPEND_NON_DUPLICATE,
+        DSV_TYPE_PREPEND_NON_DUPLICATE,
+        DSV_TYPE_PREPEND_NON_DUPLICATE_IF_EXISTS
+    ):
+        try:
+            env_name_and_values = remainder.split(';')
+        except ValueError:
+            raise RuntimeError(
+                "doesn't contain a semicolon separating the environment name "
+                'from the values')
+        env_name = env_name_and_values[0]
+        values = env_name_and_values[1:]
+        for value in values:
+            if not value:
+                value = prefix
+            elif not os.path.isabs(value):
+                value = os.path.join(prefix, value)
+            if (
+                type_ == DSV_TYPE_PREPEND_NON_DUPLICATE_IF_EXISTS and
+                not os.path.exists(value)
+            ):
+                comment = f'skip extending {env_name} with not existing ' \
+                    f'path: {value}'
+                if _include_comments():
+                    commands.append(
+                        FORMAT_STR_COMMENT_LINE.format_map({'comment': comment}))
+            elif type_ == DSV_TYPE_APPEND_NON_DUPLICATE:
+                commands += _append_unique_value(env_name, value)
+            else:
+                commands += _prepend_unique_value(env_name, value)
+    else:
+        raise RuntimeError(
+            'contains an unknown environment hook type: ' + type_)
+    return commands
+
+
+env_state = {}
+
+
+def _append_unique_value(name, value):
+    global env_state
+    if name not in env_state:
+        if os.environ.get(name):
+            env_state[name] = set(os.environ[name].split(os.pathsep))
+        else:
+            env_state[name] = set()
+    # append even if the variable has not been set yet, in case a shell script sets the
+    # same variable without the knowledge of this Python script.
+    # later _remove_ending_separators() will cleanup any unintentional leading separator
+    extend = FORMAT_STR_USE_ENV_VAR.format_map({'name': name}) + os.pathsep
+    line = FORMAT_STR_SET_ENV_VAR.format_map(
+        {'name': name, 'value': extend + value})
+    if value not in env_state[name]:
+        env_state[name].add(value)
+    else:
+        if not _include_comments():
+            return []
+        line = FORMAT_STR_COMMENT_LINE.format_map({'comment': line})
+    return [line]
+
+
+def _prepend_unique_value(name, value):
+    global env_state
+    if name not in env_state:
+        if os.environ.get(name):
+            env_state[name] = set(os.environ[name].split(os.pathsep))
+        else:
+            env_state[name] = set()
+    # prepend even if the variable has not been set yet, in case a shell script sets the
+    # same variable without the knowledge of this Python script.
+    # later _remove_ending_separators() will cleanup any unintentional trailing separator
+    extend = os.pathsep + FORMAT_STR_USE_ENV_VAR.format_map({'name': name})
+    line = FORMAT_STR_SET_ENV_VAR.format_map(
+        {'name': name, 'value': value + extend})
+    if value not in env_state[name]:
+        env_state[name].add(value)
+    else:
+        if not _include_comments():
+            return []
+        line = FORMAT_STR_COMMENT_LINE.format_map({'comment': line})
+    return [line]
+
+
+# generate commands for removing prepended underscores
+def _remove_ending_separators():
+    # do nothing if the shell extension does not implement the logic
+    if FORMAT_STR_REMOVE_TRAILING_SEPARATOR is None:
+        return []
+
+    global env_state
+    commands = []
+    for name in env_state:
+        # skip variables that already had values before this script started prepending
+        if name in os.environ:
+            continue
+        commands += [
+            FORMAT_STR_REMOVE_LEADING_SEPARATOR.format_map({'name': name}),
+            FORMAT_STR_REMOVE_TRAILING_SEPARATOR.format_map({'name': name})]
+    return commands
+
+
+def _set(name, value):
+    global env_state
+    env_state[name] = value
+    line = FORMAT_STR_SET_ENV_VAR.format_map(
+        {'name': name, 'value': value})
+    return [line]
+
+
+def _set_if_unset(name, value):
+    global env_state
+    line = FORMAT_STR_SET_ENV_VAR.format_map(
+        {'name': name, 'value': value})
+    if env_state.get(name, os.environ.get(name)):
+        line = FORMAT_STR_COMMENT_LINE.format_map({'comment': line})
+    return [line]
+
+
+if __name__ == '__main__':  # pragma: no cover
+    try:
+        rc = main()
+    except RuntimeError as e:
+        print(str(e), file=sys.stderr)
+        rc = 1
+    sys.exit(rc)

+ 407 - 0
install/_local_setup_util_sh.py

@@ -0,0 +1,407 @@
+# Copyright 2016-2019 Dirk Thomas
+# Licensed under the Apache License, Version 2.0
+
+import argparse
+from collections import OrderedDict
+import os
+from pathlib import Path
+import sys
+
+
+FORMAT_STR_COMMENT_LINE = '# {comment}'
+FORMAT_STR_SET_ENV_VAR = 'export {name}="{value}"'
+FORMAT_STR_USE_ENV_VAR = '${name}'
+FORMAT_STR_INVOKE_SCRIPT = 'COLCON_CURRENT_PREFIX="{prefix}" _colcon_prefix_sh_source_script "{script_path}"'  # noqa: E501
+FORMAT_STR_REMOVE_LEADING_SEPARATOR = 'if [ "$(echo -n ${name} | head -c 1)" = ":" ]; then export {name}=${{{name}#?}} ; fi'  # noqa: E501
+FORMAT_STR_REMOVE_TRAILING_SEPARATOR = 'if [ "$(echo -n ${name} | tail -c 1)" = ":" ]; then export {name}=${{{name}%?}} ; fi'  # noqa: E501
+
+DSV_TYPE_APPEND_NON_DUPLICATE = 'append-non-duplicate'
+DSV_TYPE_PREPEND_NON_DUPLICATE = 'prepend-non-duplicate'
+DSV_TYPE_PREPEND_NON_DUPLICATE_IF_EXISTS = 'prepend-non-duplicate-if-exists'
+DSV_TYPE_SET = 'set'
+DSV_TYPE_SET_IF_UNSET = 'set-if-unset'
+DSV_TYPE_SOURCE = 'source'
+
+
+def main(argv=sys.argv[1:]):  # noqa: D103
+    parser = argparse.ArgumentParser(
+        description='Output shell commands for the packages in topological '
+                    'order')
+    parser.add_argument(
+        'primary_extension',
+        help='The file extension of the primary shell')
+    parser.add_argument(
+        'additional_extension', nargs='?',
+        help='The additional file extension to be considered')
+    parser.add_argument(
+        '--merged-install', action='store_true',
+        help='All install prefixes are merged into a single location')
+    args = parser.parse_args(argv)
+
+    packages = get_packages(Path(__file__).parent, args.merged_install)
+
+    ordered_packages = order_packages(packages)
+    for pkg_name in ordered_packages:
+        if _include_comments():
+            print(
+                FORMAT_STR_COMMENT_LINE.format_map(
+                    {'comment': 'Package: ' + pkg_name}))
+        prefix = os.path.abspath(os.path.dirname(__file__))
+        if not args.merged_install:
+            prefix = os.path.join(prefix, pkg_name)
+        for line in get_commands(
+            pkg_name, prefix, args.primary_extension,
+            args.additional_extension
+        ):
+            print(line)
+
+    for line in _remove_ending_separators():
+        print(line)
+
+
+def get_packages(prefix_path, merged_install):
+    """
+    Find packages based on colcon-specific files created during installation.
+
+    :param Path prefix_path: The install prefix path of all packages
+    :param bool merged_install: The flag if the packages are all installed
+      directly in the prefix or if each package is installed in a subdirectory
+      named after the package
+    :returns: A mapping from the package name to the set of runtime
+      dependencies
+    :rtype: dict
+    """
+    packages = {}
+    # since importing colcon_core isn't feasible here the following constant
+    # must match colcon_core.location.get_relative_package_index_path()
+    subdirectory = 'share/colcon-core/packages'
+    if merged_install:
+        # return if workspace is empty
+        if not (prefix_path / subdirectory).is_dir():
+            return packages
+        # find all files in the subdirectory
+        for p in (prefix_path / subdirectory).iterdir():
+            if not p.is_file():
+                continue
+            if p.name.startswith('.'):
+                continue
+            add_package_runtime_dependencies(p, packages)
+    else:
+        # for each subdirectory look for the package specific file
+        for p in prefix_path.iterdir():
+            if not p.is_dir():
+                continue
+            if p.name.startswith('.'):
+                continue
+            p = p / subdirectory / p.name
+            if p.is_file():
+                add_package_runtime_dependencies(p, packages)
+
+    # remove unknown dependencies
+    pkg_names = set(packages.keys())
+    for k in packages.keys():
+        packages[k] = {d for d in packages[k] if d in pkg_names}
+
+    return packages
+
+
+def add_package_runtime_dependencies(path, packages):
+    """
+    Check the path and if it exists extract the packages runtime dependencies.
+
+    :param Path path: The resource file containing the runtime dependencies
+    :param dict packages: A mapping from package names to the sets of runtime
+      dependencies to add to
+    """
+    content = path.read_text()
+    dependencies = set(content.split(os.pathsep) if content else [])
+    packages[path.name] = dependencies
+
+
+def order_packages(packages):
+    """
+    Order packages topologically.
+
+    :param dict packages: A mapping from package name to the set of runtime
+      dependencies
+    :returns: The package names
+    :rtype: list
+    """
+    # select packages with no dependencies in alphabetical order
+    to_be_ordered = list(packages.keys())
+    ordered = []
+    while to_be_ordered:
+        pkg_names_without_deps = [
+            name for name in to_be_ordered if not packages[name]]
+        if not pkg_names_without_deps:
+            reduce_cycle_set(packages)
+            raise RuntimeError(
+                'Circular dependency between: ' + ', '.join(sorted(packages)))
+        pkg_names_without_deps.sort()
+        pkg_name = pkg_names_without_deps[0]
+        to_be_ordered.remove(pkg_name)
+        ordered.append(pkg_name)
+        # remove item from dependency lists
+        for k in list(packages.keys()):
+            if pkg_name in packages[k]:
+                packages[k].remove(pkg_name)
+    return ordered
+
+
+def reduce_cycle_set(packages):
+    """
+    Reduce the set of packages to the ones part of the circular dependency.
+
+    :param dict packages: A mapping from package name to the set of runtime
+      dependencies which is modified in place
+    """
+    last_depended = None
+    while len(packages) > 0:
+        # get all remaining dependencies
+        depended = set()
+        for pkg_name, dependencies in packages.items():
+            depended = depended.union(dependencies)
+        # remove all packages which are not dependent on
+        for name in list(packages.keys()):
+            if name not in depended:
+                del packages[name]
+        if last_depended:
+            # if remaining packages haven't changed return them
+            if last_depended == depended:
+                return packages.keys()
+        # otherwise reduce again
+        last_depended = depended
+
+
+def _include_comments():
+    # skipping comment lines when COLCON_TRACE is not set speeds up the
+    # processing especially on Windows
+    return bool(os.environ.get('COLCON_TRACE'))
+
+
+def get_commands(pkg_name, prefix, primary_extension, additional_extension):
+    commands = []
+    package_dsv_path = os.path.join(prefix, 'share', pkg_name, 'package.dsv')
+    if os.path.exists(package_dsv_path):
+        commands += process_dsv_file(
+            package_dsv_path, prefix, primary_extension, additional_extension)
+    return commands
+
+
+def process_dsv_file(
+    dsv_path, prefix, primary_extension=None, additional_extension=None
+):
+    commands = []
+    if _include_comments():
+        commands.append(FORMAT_STR_COMMENT_LINE.format_map({'comment': dsv_path}))
+    with open(dsv_path, 'r') as h:
+        content = h.read()
+    lines = content.splitlines()
+
+    basenames = OrderedDict()
+    for i, line in enumerate(lines):
+        # skip over empty or whitespace-only lines
+        if not line.strip():
+            continue
+        # skip over comments
+        if line.startswith('#'):
+            continue
+        try:
+            type_, remainder = line.split(';', 1)
+        except ValueError:
+            raise RuntimeError(
+                "Line %d in '%s' doesn't contain a semicolon separating the "
+                'type from the arguments' % (i + 1, dsv_path))
+        if type_ != DSV_TYPE_SOURCE:
+            # handle non-source lines
+            try:
+                commands += handle_dsv_types_except_source(
+                    type_, remainder, prefix)
+            except RuntimeError as e:
+                raise RuntimeError(
+                    "Line %d in '%s' %s" % (i + 1, dsv_path, e)) from e
+        else:
+            # group remaining source lines by basename
+            path_without_ext, ext = os.path.splitext(remainder)
+            if path_without_ext not in basenames:
+                basenames[path_without_ext] = set()
+            assert ext.startswith('.')
+            ext = ext[1:]
+            if ext in (primary_extension, additional_extension):
+                basenames[path_without_ext].add(ext)
+
+    # add the dsv extension to each basename if the file exists
+    for basename, extensions in basenames.items():
+        if not os.path.isabs(basename):
+            basename = os.path.join(prefix, basename)
+        if os.path.exists(basename + '.dsv'):
+            extensions.add('dsv')
+
+    for basename, extensions in basenames.items():
+        if not os.path.isabs(basename):
+            basename = os.path.join(prefix, basename)
+        if 'dsv' in extensions:
+            # process dsv files recursively
+            commands += process_dsv_file(
+                basename + '.dsv', prefix, primary_extension=primary_extension,
+                additional_extension=additional_extension)
+        elif primary_extension in extensions and len(extensions) == 1:
+            # source primary-only files
+            commands += [
+                FORMAT_STR_INVOKE_SCRIPT.format_map({
+                    'prefix': prefix,
+                    'script_path': basename + '.' + primary_extension})]
+        elif additional_extension in extensions:
+            # source non-primary files
+            commands += [
+                FORMAT_STR_INVOKE_SCRIPT.format_map({
+                    'prefix': prefix,
+                    'script_path': basename + '.' + additional_extension})]
+
+    return commands
+
+
+def handle_dsv_types_except_source(type_, remainder, prefix):
+    commands = []
+    if type_ in (DSV_TYPE_SET, DSV_TYPE_SET_IF_UNSET):
+        try:
+            env_name, value = remainder.split(';', 1)
+        except ValueError:
+            raise RuntimeError(
+                "doesn't contain a semicolon separating the environment name "
+                'from the value')
+        try_prefixed_value = os.path.join(prefix, value) if value else prefix
+        if os.path.exists(try_prefixed_value):
+            value = try_prefixed_value
+        if type_ == DSV_TYPE_SET:
+            commands += _set(env_name, value)
+        elif type_ == DSV_TYPE_SET_IF_UNSET:
+            commands += _set_if_unset(env_name, value)
+        else:
+            assert False
+    elif type_ in (
+        DSV_TYPE_APPEND_NON_DUPLICATE,
+        DSV_TYPE_PREPEND_NON_DUPLICATE,
+        DSV_TYPE_PREPEND_NON_DUPLICATE_IF_EXISTS
+    ):
+        try:
+            env_name_and_values = remainder.split(';')
+        except ValueError:
+            raise RuntimeError(
+                "doesn't contain a semicolon separating the environment name "
+                'from the values')
+        env_name = env_name_and_values[0]
+        values = env_name_and_values[1:]
+        for value in values:
+            if not value:
+                value = prefix
+            elif not os.path.isabs(value):
+                value = os.path.join(prefix, value)
+            if (
+                type_ == DSV_TYPE_PREPEND_NON_DUPLICATE_IF_EXISTS and
+                not os.path.exists(value)
+            ):
+                comment = f'skip extending {env_name} with not existing ' \
+                    f'path: {value}'
+                if _include_comments():
+                    commands.append(
+                        FORMAT_STR_COMMENT_LINE.format_map({'comment': comment}))
+            elif type_ == DSV_TYPE_APPEND_NON_DUPLICATE:
+                commands += _append_unique_value(env_name, value)
+            else:
+                commands += _prepend_unique_value(env_name, value)
+    else:
+        raise RuntimeError(
+            'contains an unknown environment hook type: ' + type_)
+    return commands
+
+
+env_state = {}
+
+
+def _append_unique_value(name, value):
+    global env_state
+    if name not in env_state:
+        if os.environ.get(name):
+            env_state[name] = set(os.environ[name].split(os.pathsep))
+        else:
+            env_state[name] = set()
+    # append even if the variable has not been set yet, in case a shell script sets the
+    # same variable without the knowledge of this Python script.
+    # later _remove_ending_separators() will cleanup any unintentional leading separator
+    extend = FORMAT_STR_USE_ENV_VAR.format_map({'name': name}) + os.pathsep
+    line = FORMAT_STR_SET_ENV_VAR.format_map(
+        {'name': name, 'value': extend + value})
+    if value not in env_state[name]:
+        env_state[name].add(value)
+    else:
+        if not _include_comments():
+            return []
+        line = FORMAT_STR_COMMENT_LINE.format_map({'comment': line})
+    return [line]
+
+
+def _prepend_unique_value(name, value):
+    global env_state
+    if name not in env_state:
+        if os.environ.get(name):
+            env_state[name] = set(os.environ[name].split(os.pathsep))
+        else:
+            env_state[name] = set()
+    # prepend even if the variable has not been set yet, in case a shell script sets the
+    # same variable without the knowledge of this Python script.
+    # later _remove_ending_separators() will cleanup any unintentional trailing separator
+    extend = os.pathsep + FORMAT_STR_USE_ENV_VAR.format_map({'name': name})
+    line = FORMAT_STR_SET_ENV_VAR.format_map(
+        {'name': name, 'value': value + extend})
+    if value not in env_state[name]:
+        env_state[name].add(value)
+    else:
+        if not _include_comments():
+            return []
+        line = FORMAT_STR_COMMENT_LINE.format_map({'comment': line})
+    return [line]
+
+
+# generate commands for removing prepended underscores
+def _remove_ending_separators():
+    # do nothing if the shell extension does not implement the logic
+    if FORMAT_STR_REMOVE_TRAILING_SEPARATOR is None:
+        return []
+
+    global env_state
+    commands = []
+    for name in env_state:
+        # skip variables that already had values before this script started prepending
+        if name in os.environ:
+            continue
+        commands += [
+            FORMAT_STR_REMOVE_LEADING_SEPARATOR.format_map({'name': name}),
+            FORMAT_STR_REMOVE_TRAILING_SEPARATOR.format_map({'name': name})]
+    return commands
+
+
+def _set(name, value):
+    global env_state
+    env_state[name] = value
+    line = FORMAT_STR_SET_ENV_VAR.format_map(
+        {'name': name, 'value': value})
+    return [line]
+
+
+def _set_if_unset(name, value):
+    global env_state
+    line = FORMAT_STR_SET_ENV_VAR.format_map(
+        {'name': name, 'value': value})
+    if env_state.get(name, os.environ.get(name)):
+        line = FORMAT_STR_COMMENT_LINE.format_map({'comment': line})
+    return [line]
+
+
+if __name__ == '__main__':  # pragma: no cover
+    try:
+        rc = main()
+    except RuntimeError as e:
+        print(str(e), file=sys.stderr)
+        rc = 1
+    sys.exit(rc)

+ 42 - 0
install/interface/include/interface/interface/msg/rosidl_generator_c__visibility_control.h

@@ -0,0 +1,42 @@
+// generated from rosidl_generator_c/resource/rosidl_generator_c__visibility_control.h.in
+// generated code does not contain a copyright notice
+
+#ifndef INTERFACE__MSG__ROSIDL_GENERATOR_C__VISIBILITY_CONTROL_H_
+#define INTERFACE__MSG__ROSIDL_GENERATOR_C__VISIBILITY_CONTROL_H_
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+// This logic was borrowed (then namespaced) from the examples on the gcc wiki:
+//     https://gcc.gnu.org/wiki/Visibility
+
+#if defined _WIN32 || defined __CYGWIN__
+  #ifdef __GNUC__
+    #define ROSIDL_GENERATOR_C_EXPORT_interface __attribute__ ((dllexport))
+    #define ROSIDL_GENERATOR_C_IMPORT_interface __attribute__ ((dllimport))
+  #else
+    #define ROSIDL_GENERATOR_C_EXPORT_interface __declspec(dllexport)
+    #define ROSIDL_GENERATOR_C_IMPORT_interface __declspec(dllimport)
+  #endif
+  #ifdef ROSIDL_GENERATOR_C_BUILDING_DLL_interface
+    #define ROSIDL_GENERATOR_C_PUBLIC_interface ROSIDL_GENERATOR_C_EXPORT_interface
+  #else
+    #define ROSIDL_GENERATOR_C_PUBLIC_interface ROSIDL_GENERATOR_C_IMPORT_interface
+  #endif
+#else
+  #define ROSIDL_GENERATOR_C_EXPORT_interface __attribute__ ((visibility("default")))
+  #define ROSIDL_GENERATOR_C_IMPORT_interface
+  #if __GNUC__ >= 4
+    #define ROSIDL_GENERATOR_C_PUBLIC_interface __attribute__ ((visibility("default")))
+  #else
+    #define ROSIDL_GENERATOR_C_PUBLIC_interface
+  #endif
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif  // INTERFACE__MSG__ROSIDL_GENERATOR_C__VISIBILITY_CONTROL_H_

+ 42 - 0
install/interface/include/interface/interface/msg/rosidl_generator_cpp__visibility_control.hpp

@@ -0,0 +1,42 @@
+// generated from rosidl_generator_cpp/resource/rosidl_generator_cpp__visibility_control.hpp.in
+// generated code does not contain a copyright notice
+
+#ifndef INTERFACE__MSG__ROSIDL_GENERATOR_CPP__VISIBILITY_CONTROL_HPP_
+#define INTERFACE__MSG__ROSIDL_GENERATOR_CPP__VISIBILITY_CONTROL_HPP_
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+// This logic was borrowed (then namespaced) from the examples on the gcc wiki:
+//     https://gcc.gnu.org/wiki/Visibility
+
+#if defined _WIN32 || defined __CYGWIN__
+  #ifdef __GNUC__
+    #define ROSIDL_GENERATOR_CPP_EXPORT_interface __attribute__ ((dllexport))
+    #define ROSIDL_GENERATOR_CPP_IMPORT_interface __attribute__ ((dllimport))
+  #else
+    #define ROSIDL_GENERATOR_CPP_EXPORT_interface __declspec(dllexport)
+    #define ROSIDL_GENERATOR_CPP_IMPORT_interface __declspec(dllimport)
+  #endif
+  #ifdef ROSIDL_GENERATOR_CPP_BUILDING_DLL_interface
+    #define ROSIDL_GENERATOR_CPP_PUBLIC_interface ROSIDL_GENERATOR_CPP_EXPORT_interface
+  #else
+    #define ROSIDL_GENERATOR_CPP_PUBLIC_interface ROSIDL_GENERATOR_CPP_IMPORT_interface
+  #endif
+#else
+  #define ROSIDL_GENERATOR_CPP_EXPORT_interface __attribute__ ((visibility("default")))
+  #define ROSIDL_GENERATOR_CPP_IMPORT_interface
+  #if __GNUC__ >= 4
+    #define ROSIDL_GENERATOR_CPP_PUBLIC_interface __attribute__ ((visibility("default")))
+  #else
+    #define ROSIDL_GENERATOR_CPP_PUBLIC_interface
+  #endif
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif  // INTERFACE__MSG__ROSIDL_GENERATOR_CPP__VISIBILITY_CONTROL_HPP_

+ 43 - 0
install/interface/include/interface/interface/msg/rosidl_typesupport_fastrtps_c__visibility_control.h

@@ -0,0 +1,43 @@
+// generated from
+// rosidl_typesupport_fastrtps_c/resource/rosidl_typesupport_fastrtps_c__visibility_control.h.in
+// generated code does not contain a copyright notice
+
+#ifndef INTERFACE__MSG__ROSIDL_TYPESUPPORT_FASTRTPS_C__VISIBILITY_CONTROL_H_
+#define INTERFACE__MSG__ROSIDL_TYPESUPPORT_FASTRTPS_C__VISIBILITY_CONTROL_H_
+
+#if __cplusplus
+extern "C"
+{
+#endif
+
+// This logic was borrowed (then namespaced) from the examples on the gcc wiki:
+//     https://gcc.gnu.org/wiki/Visibility
+
+#if defined _WIN32 || defined __CYGWIN__
+  #ifdef __GNUC__
+    #define ROSIDL_TYPESUPPORT_FASTRTPS_C_EXPORT_interface __attribute__ ((dllexport))
+    #define ROSIDL_TYPESUPPORT_FASTRTPS_C_IMPORT_interface __attribute__ ((dllimport))
+  #else
+    #define ROSIDL_TYPESUPPORT_FASTRTPS_C_EXPORT_interface __declspec(dllexport)
+    #define ROSIDL_TYPESUPPORT_FASTRTPS_C_IMPORT_interface __declspec(dllimport)
+  #endif
+  #ifdef ROSIDL_TYPESUPPORT_FASTRTPS_C_BUILDING_DLL_interface
+    #define ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_interface ROSIDL_TYPESUPPORT_FASTRTPS_C_EXPORT_interface
+  #else
+    #define ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_interface ROSIDL_TYPESUPPORT_FASTRTPS_C_IMPORT_interface
+  #endif
+#else
+  #define ROSIDL_TYPESUPPORT_FASTRTPS_C_EXPORT_interface __attribute__ ((visibility("default")))
+  #define ROSIDL_TYPESUPPORT_FASTRTPS_C_IMPORT_interface
+  #if __GNUC__ >= 4
+    #define ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_interface __attribute__ ((visibility("default")))
+  #else
+    #define ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_interface
+  #endif
+#endif
+
+#if __cplusplus
+}
+#endif
+
+#endif  // INTERFACE__MSG__ROSIDL_TYPESUPPORT_FASTRTPS_C__VISIBILITY_CONTROL_H_

+ 43 - 0
install/interface/include/interface/interface/msg/rosidl_typesupport_fastrtps_cpp__visibility_control.h

@@ -0,0 +1,43 @@
+// generated from
+// rosidl_typesupport_fastrtps_cpp/resource/rosidl_typesupport_fastrtps_cpp__visibility_control.h.in
+// generated code does not contain a copyright notice
+
+#ifndef INTERFACE__MSG__ROSIDL_TYPESUPPORT_FASTRTPS_CPP__VISIBILITY_CONTROL_H_
+#define INTERFACE__MSG__ROSIDL_TYPESUPPORT_FASTRTPS_CPP__VISIBILITY_CONTROL_H_
+
+#if __cplusplus
+extern "C"
+{
+#endif
+
+// This logic was borrowed (then namespaced) from the examples on the gcc wiki:
+//     https://gcc.gnu.org/wiki/Visibility
+
+#if defined _WIN32 || defined __CYGWIN__
+  #ifdef __GNUC__
+    #define ROSIDL_TYPESUPPORT_FASTRTPS_CPP_EXPORT_interface __attribute__ ((dllexport))
+    #define ROSIDL_TYPESUPPORT_FASTRTPS_CPP_IMPORT_interface __attribute__ ((dllimport))
+  #else
+    #define ROSIDL_TYPESUPPORT_FASTRTPS_CPP_EXPORT_interface __declspec(dllexport)
+    #define ROSIDL_TYPESUPPORT_FASTRTPS_CPP_IMPORT_interface __declspec(dllimport)
+  #endif
+  #ifdef ROSIDL_TYPESUPPORT_FASTRTPS_CPP_BUILDING_DLL_interface
+    #define ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_interface ROSIDL_TYPESUPPORT_FASTRTPS_CPP_EXPORT_interface
+  #else
+    #define ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_interface ROSIDL_TYPESUPPORT_FASTRTPS_CPP_IMPORT_interface
+  #endif
+#else
+  #define ROSIDL_TYPESUPPORT_FASTRTPS_CPP_EXPORT_interface __attribute__ ((visibility("default")))
+  #define ROSIDL_TYPESUPPORT_FASTRTPS_CPP_IMPORT_interface
+  #if __GNUC__ >= 4
+    #define ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_interface __attribute__ ((visibility("default")))
+  #else
+    #define ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_interface
+  #endif
+#endif
+
+#if __cplusplus
+}
+#endif
+
+#endif  // INTERFACE__MSG__ROSIDL_TYPESUPPORT_FASTRTPS_CPP__VISIBILITY_CONTROL_H_

+ 43 - 0
install/interface/include/interface/interface/msg/rosidl_typesupport_introspection_c__visibility_control.h

@@ -0,0 +1,43 @@
+// generated from
+// rosidl_typesupport_introspection_c/resource/rosidl_typesupport_introspection_c__visibility_control.h.in
+// generated code does not contain a copyright notice
+
+#ifndef INTERFACE__MSG__ROSIDL_TYPESUPPORT_INTROSPECTION_C__VISIBILITY_CONTROL_H_
+#define INTERFACE__MSG__ROSIDL_TYPESUPPORT_INTROSPECTION_C__VISIBILITY_CONTROL_H_
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+// This logic was borrowed (then namespaced) from the examples on the gcc wiki:
+//     https://gcc.gnu.org/wiki/Visibility
+
+#if defined _WIN32 || defined __CYGWIN__
+  #ifdef __GNUC__
+    #define ROSIDL_TYPESUPPORT_INTROSPECTION_C_EXPORT_interface __attribute__ ((dllexport))
+    #define ROSIDL_TYPESUPPORT_INTROSPECTION_C_IMPORT_interface __attribute__ ((dllimport))
+  #else
+    #define ROSIDL_TYPESUPPORT_INTROSPECTION_C_EXPORT_interface __declspec(dllexport)
+    #define ROSIDL_TYPESUPPORT_INTROSPECTION_C_IMPORT_interface __declspec(dllimport)
+  #endif
+  #ifdef ROSIDL_TYPESUPPORT_INTROSPECTION_C_BUILDING_DLL_interface
+    #define ROSIDL_TYPESUPPORT_INTROSPECTION_C_PUBLIC_interface ROSIDL_TYPESUPPORT_INTROSPECTION_C_EXPORT_interface
+  #else
+    #define ROSIDL_TYPESUPPORT_INTROSPECTION_C_PUBLIC_interface ROSIDL_TYPESUPPORT_INTROSPECTION_C_IMPORT_interface
+  #endif
+#else
+  #define ROSIDL_TYPESUPPORT_INTROSPECTION_C_EXPORT_interface __attribute__ ((visibility("default")))
+  #define ROSIDL_TYPESUPPORT_INTROSPECTION_C_IMPORT_interface
+  #if __GNUC__ >= 4
+    #define ROSIDL_TYPESUPPORT_INTROSPECTION_C_PUBLIC_interface __attribute__ ((visibility("default")))
+  #else
+    #define ROSIDL_TYPESUPPORT_INTROSPECTION_C_PUBLIC_interface
+  #endif
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif  // INTERFACE__MSG__ROSIDL_TYPESUPPORT_INTROSPECTION_C__VISIBILITY_CONTROL_H_

+ 114 - 0
install/interface/include/interface/interface/srv/detail/scene_controls__builder.hpp

@@ -0,0 +1,114 @@
+// generated from rosidl_generator_cpp/resource/idl__builder.hpp.em
+// with input from interface:srv/SceneControls.idl
+// generated code does not contain a copyright notice
+
+#ifndef INTERFACE__SRV__DETAIL__SCENE_CONTROLS__BUILDER_HPP_
+#define INTERFACE__SRV__DETAIL__SCENE_CONTROLS__BUILDER_HPP_
+
+#include <algorithm>
+#include <utility>
+
+#include "interface/srv/detail/scene_controls__struct.hpp"
+#include "rosidl_runtime_cpp/message_initialization.hpp"
+
+
+namespace interface
+{
+
+namespace srv
+{
+
+namespace builder
+{
+
+class Init_SceneControls_Request_start
+{
+public:
+  Init_SceneControls_Request_start()
+  : msg_(::rosidl_runtime_cpp::MessageInitialization::SKIP)
+  {}
+  ::interface::srv::SceneControls_Request start(::interface::srv::SceneControls_Request::_start_type arg)
+  {
+    msg_.start = std::move(arg);
+    return std::move(msg_);
+  }
+
+private:
+  ::interface::srv::SceneControls_Request msg_;
+};
+
+}  // namespace builder
+
+}  // namespace srv
+
+template<typename MessageType>
+auto build();
+
+template<>
+inline
+auto build<::interface::srv::SceneControls_Request>()
+{
+  return interface::srv::builder::Init_SceneControls_Request_start();
+}
+
+}  // namespace interface
+
+
+namespace interface
+{
+
+namespace srv
+{
+
+namespace builder
+{
+
+class Init_SceneControls_Response_message
+{
+public:
+  explicit Init_SceneControls_Response_message(::interface::srv::SceneControls_Response & msg)
+  : msg_(msg)
+  {}
+  ::interface::srv::SceneControls_Response message(::interface::srv::SceneControls_Response::_message_type arg)
+  {
+    msg_.message = std::move(arg);
+    return std::move(msg_);
+  }
+
+private:
+  ::interface::srv::SceneControls_Response msg_;
+};
+
+class Init_SceneControls_Response_code
+{
+public:
+  Init_SceneControls_Response_code()
+  : msg_(::rosidl_runtime_cpp::MessageInitialization::SKIP)
+  {}
+  Init_SceneControls_Response_message code(::interface::srv::SceneControls_Response::_code_type arg)
+  {
+    msg_.code = std::move(arg);
+    return Init_SceneControls_Response_message(msg_);
+  }
+
+private:
+  ::interface::srv::SceneControls_Response msg_;
+};
+
+}  // namespace builder
+
+}  // namespace srv
+
+template<typename MessageType>
+auto build();
+
+template<>
+inline
+auto build<::interface::srv::SceneControls_Response>()
+{
+  return interface::srv::builder::Init_SceneControls_Response_code();
+}
+
+}  // namespace interface
+
+#endif  // INTERFACE__SRV__DETAIL__SCENE_CONTROLS__BUILDER_HPP_

+ 483 - 0
install/interface/include/interface/interface/srv/detail/scene_controls__functions.c

@@ -0,0 +1,483 @@
+// generated from rosidl_generator_c/resource/idl__functions.c.em
+// with input from interface:srv/SceneControls.idl
+// generated code does not contain a copyright notice
+#include "interface/srv/detail/scene_controls__functions.h"
+
+#include <assert.h>
+#include <stdbool.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "rcutils/allocator.h"
+
+bool
+interface__srv__SceneControls_Request__init(interface__srv__SceneControls_Request * msg)
+{
+  if (!msg) {
+    return false;
+  }
+  // start
+  return true;
+}
+
+void
+interface__srv__SceneControls_Request__fini(interface__srv__SceneControls_Request * msg)
+{
+  if (!msg) {
+    return;
+  }
+  // start
+}
+
+bool
+interface__srv__SceneControls_Request__are_equal(const interface__srv__SceneControls_Request * lhs, const interface__srv__SceneControls_Request * rhs)
+{
+  if (!lhs || !rhs) {
+    return false;
+  }
+  // start
+  if (lhs->start != rhs->start) {
+    return false;
+  }
+  return true;
+}
+
+bool
+interface__srv__SceneControls_Request__copy(
+  const interface__srv__SceneControls_Request * input,
+  interface__srv__SceneControls_Request * output)
+{
+  if (!input || !output) {
+    return false;
+  }
+  // start
+  output->start = input->start;
+  return true;
+}
+
+interface__srv__SceneControls_Request *
+interface__srv__SceneControls_Request__create()
+{
+  rcutils_allocator_t allocator = rcutils_get_default_allocator();
+  interface__srv__SceneControls_Request * msg = (interface__srv__SceneControls_Request *)allocator.allocate(sizeof(interface__srv__SceneControls_Request), allocator.state);
+  if (!msg) {
+    return NULL;
+  }
+  memset(msg, 0, sizeof(interface__srv__SceneControls_Request));
+  bool success = interface__srv__SceneControls_Request__init(msg);
+  if (!success) {
+    allocator.deallocate(msg, allocator.state);
+    return NULL;
+  }
+  return msg;
+}
+
+void
+interface__srv__SceneControls_Request__destroy(interface__srv__SceneControls_Request * msg)
+{
+  rcutils_allocator_t allocator = rcutils_get_default_allocator();
+  if (msg) {
+    interface__srv__SceneControls_Request__fini(msg);
+  }
+  allocator.deallocate(msg, allocator.state);
+}
+
+
+bool
+interface__srv__SceneControls_Request__Sequence__init(interface__srv__SceneControls_Request__Sequence * array, size_t size)
+{
+  if (!array) {
+    return false;
+  }
+  rcutils_allocator_t allocator = rcutils_get_default_allocator();
+  interface__srv__SceneControls_Request * data = NULL;
+
+  if (size) {
+    data = (interface__srv__SceneControls_Request *)allocator.zero_allocate(size, sizeof(interface__srv__SceneControls_Request), allocator.state);
+    if (!data) {
+      return false;
+    }
+    // initialize all array elements
+    size_t i;
+    for (i = 0; i < size; ++i) {
+      bool success = interface__srv__SceneControls_Request__init(&data[i]);
+      if (!success) {
+        break;
+      }
+    }
+    if (i < size) {
+      // if initialization failed finalize the already initialized array elements
+      for (; i > 0; --i) {
+        interface__srv__SceneControls_Request__fini(&data[i - 1]);
+      }
+      allocator.deallocate(data, allocator.state);
+      return false;
+    }
+  }
+  array->data = data;
+  array->size = size;
+  array->capacity = size;
+  return true;
+}
+
+void
+interface__srv__SceneControls_Request__Sequence__fini(interface__srv__SceneControls_Request__Sequence * array)
+{
+  if (!array) {
+    return;
+  }
+  rcutils_allocator_t allocator = rcutils_get_default_allocator();
+
+  if (array->data) {
+    // ensure that data and capacity values are consistent
+    assert(array->capacity > 0);
+    // finalize all array elements
+    for (size_t i = 0; i < array->capacity; ++i) {
+      interface__srv__SceneControls_Request__fini(&array->data[i]);
+    }
+    allocator.deallocate(array->data, allocator.state);
+    array->data = NULL;
+    array->size = 0;
+    array->capacity = 0;
+  } else {
+    // ensure that data, size, and capacity values are consistent
+    assert(0 == array->size);
+    assert(0 == array->capacity);
+  }
+}
+
+interface__srv__SceneControls_Request__Sequence *
+interface__srv__SceneControls_Request__Sequence__create(size_t size)
+{
+  rcutils_allocator_t allocator = rcutils_get_default_allocator();
+  interface__srv__SceneControls_Request__Sequence * array = (interface__srv__SceneControls_Request__Sequence *)allocator.allocate(sizeof(interface__srv__SceneControls_Request__Sequence), allocator.state);
+  if (!array) {
+    return NULL;
+  }
+  bool success = interface__srv__SceneControls_Request__Sequence__init(array, size);
+  if (!success) {
+    allocator.deallocate(array, allocator.state);
+    return NULL;
+  }
+  return array;
+}
+
+void
+interface__srv__SceneControls_Request__Sequence__destroy(interface__srv__SceneControls_Request__Sequence * array)
+{
+  rcutils_allocator_t allocator = rcutils_get_default_allocator();
+  if (array) {
+    interface__srv__SceneControls_Request__Sequence__fini(array);
+  }
+  allocator.deallocate(array, allocator.state);
+}
+
+bool
+interface__srv__SceneControls_Request__Sequence__are_equal(const interface__srv__SceneControls_Request__Sequence * lhs, const interface__srv__SceneControls_Request__Sequence * rhs)
+{
+  if (!lhs || !rhs) {
+    return false;
+  }
+  if (lhs->size != rhs->size) {
+    return false;
+  }
+  for (size_t i = 0; i < lhs->size; ++i) {
+    if (!interface__srv__SceneControls_Request__are_equal(&(lhs->data[i]), &(rhs->data[i]))) {
+      return false;
+    }
+  }
+  return true;
+}
+
+bool
+interface__srv__SceneControls_Request__Sequence__copy(
+  const interface__srv__SceneControls_Request__Sequence * input,
+  interface__srv__SceneControls_Request__Sequence * output)
+{
+  if (!input || !output) {
+    return false;
+  }
+  if (output->capacity < input->size) {
+    const size_t allocation_size =
+      input->size * sizeof(interface__srv__SceneControls_Request);
+    rcutils_allocator_t allocator = rcutils_get_default_allocator();
+    interface__srv__SceneControls_Request * data =
+      (interface__srv__SceneControls_Request *)allocator.reallocate(
+      output->data, allocation_size, allocator.state);
+    if (!data) {
+      return false;
+    }
+    // If reallocation succeeded, memory may or may not have been moved
+    // to fulfill the allocation request, invalidating output->data.
+    output->data = data;
+    for (size_t i = output->capacity; i < input->size; ++i) {
+      if (!interface__srv__SceneControls_Request__init(&output->data[i])) {
+        // If initialization of any new item fails, roll back
+        // all previously initialized items. Existing items
+        // in output are to be left unmodified.
+        for (; i-- > output->capacity; ) {
+          interface__srv__SceneControls_Request__fini(&output->data[i]);
+        }
+        return false;
+      }
+    }
+    output->capacity = input->size;
+  }
+  output->size = input->size;
+  for (size_t i = 0; i < input->size; ++i) {
+    if (!interface__srv__SceneControls_Request__copy(
+        &(input->data[i]), &(output->data[i])))
+    {
+      return false;
+    }
+  }
+  return true;
+}
+
+
+// Include directives for member types
+// Member `message`
+#include "rosidl_runtime_c/string_functions.h"
+
+bool
+interface__srv__SceneControls_Response__init(interface__srv__SceneControls_Response * msg)
+{
+  if (!msg) {
+    return false;
+  }
+  // code
+  // message
+  if (!rosidl_runtime_c__String__init(&msg->message)) {
+    interface__srv__SceneControls_Response__fini(msg);
+    return false;
+  }
+  return true;
+}
+
+void
+interface__srv__SceneControls_Response__fini(interface__srv__SceneControls_Response * msg)
+{
+  if (!msg) {
+    return;
+  }
+  // code
+  // message
+  rosidl_runtime_c__String__fini(&msg->message);
+}
+
+bool
+interface__srv__SceneControls_Response__are_equal(const interface__srv__SceneControls_Response * lhs, const interface__srv__SceneControls_Response * rhs)
+{
+  if (!lhs || !rhs) {
+    return false;
+  }
+  // code
+  if (lhs->code != rhs->code) {
+    return false;
+  }
+  // message
+  if (!rosidl_runtime_c__String__are_equal(
+      &(lhs->message), &(rhs->message)))
+  {
+    return false;
+  }
+  return true;
+}
+
+bool
+interface__srv__SceneControls_Response__copy(
+  const interface__srv__SceneControls_Response * input,
+  interface__srv__SceneControls_Response * output)
+{
+  if (!input || !output) {
+    return false;
+  }
+  // code
+  output->code = input->code;
+  // message
+  if (!rosidl_runtime_c__String__copy(
+      &(input->message), &(output->message)))
+  {
+    return false;
+  }
+  return true;
+}
+
+interface__srv__SceneControls_Response *
+interface__srv__SceneControls_Response__create()
+{
+  rcutils_allocator_t allocator = rcutils_get_default_allocator();
+  interface__srv__SceneControls_Response * msg = (interface__srv__SceneControls_Response *)allocator.allocate(sizeof(interface__srv__SceneControls_Response), allocator.state);
+  if (!msg) {
+    return NULL;
+  }
+  memset(msg, 0, sizeof(interface__srv__SceneControls_Response));
+  bool success = interface__srv__SceneControls_Response__init(msg);
+  if (!success) {
+    allocator.deallocate(msg, allocator.state);
+    return NULL;
+  }
+  return msg;
+}
+
+void
+interface__srv__SceneControls_Response__destroy(interface__srv__SceneControls_Response * msg)
+{
+  rcutils_allocator_t allocator = rcutils_get_default_allocator();
+  if (msg) {
+    interface__srv__SceneControls_Response__fini(msg);
+  }
+  allocator.deallocate(msg, allocator.state);
+}
+
+
+bool
+interface__srv__SceneControls_Response__Sequence__init(interface__srv__SceneControls_Response__Sequence * array, size_t size)
+{
+  if (!array) {
+    return false;
+  }
+  rcutils_allocator_t allocator = rcutils_get_default_allocator();
+  interface__srv__SceneControls_Response * data = NULL;
+
+  if (size) {
+    data = (interface__srv__SceneControls_Response *)allocator.zero_allocate(size, sizeof(interface__srv__SceneControls_Response), allocator.state);
+    if (!data) {
+      return false;
+    }
+    // initialize all array elements
+    size_t i;
+    for (i = 0; i < size; ++i) {
+      bool success = interface__srv__SceneControls_Response__init(&data[i]);
+      if (!success) {
+        break;
+      }
+    }
+    if (i < size) {
+      // if initialization failed finalize the already initialized array elements
+      for (; i > 0; --i) {
+        interface__srv__SceneControls_Response__fini(&data[i - 1]);
+      }
+      allocator.deallocate(data, allocator.state);
+      return false;
+    }
+  }
+  array->data = data;
+  array->size = size;
+  array->capacity = size;
+  return true;
+}
+
+void
+interface__srv__SceneControls_Response__Sequence__fini(interface__srv__SceneControls_Response__Sequence * array)
+{
+  if (!array) {
+    return;
+  }
+  rcutils_allocator_t allocator = rcutils_get_default_allocator();
+
+  if (array->data) {
+    // ensure that data and capacity values are consistent
+    assert(array->capacity > 0);
+    // finalize all array elements
+    for (size_t i = 0; i < array->capacity; ++i) {
+      interface__srv__SceneControls_Response__fini(&array->data[i]);
+    }
+    allocator.deallocate(array->data, allocator.state);
+    array->data = NULL;
+    array->size = 0;
+    array->capacity = 0;
+  } else {
+    // ensure that data, size, and capacity values are consistent
+    assert(0 == array->size);
+    assert(0 == array->capacity);
+  }
+}
+
+interface__srv__SceneControls_Response__Sequence *
+interface__srv__SceneControls_Response__Sequence__create(size_t size)
+{
+  rcutils_allocator_t allocator = rcutils_get_default_allocator();
+  interface__srv__SceneControls_Response__Sequence * array = (interface__srv__SceneControls_Response__Sequence *)allocator.allocate(sizeof(interface__srv__SceneControls_Response__Sequence), allocator.state);
+  if (!array) {
+    return NULL;
+  }
+  bool success = interface__srv__SceneControls_Response__Sequence__init(array, size);
+  if (!success) {
+    allocator.deallocate(array, allocator.state);
+    return NULL;
+  }
+  return array;
+}
+
+void
+interface__srv__SceneControls_Response__Sequence__destroy(interface__srv__SceneControls_Response__Sequence * array)
+{
+  rcutils_allocator_t allocator = rcutils_get_default_allocator();
+  if (array) {
+    interface__srv__SceneControls_Response__Sequence__fini(array);
+  }
+  allocator.deallocate(array, allocator.state);
+}
+
+bool
+interface__srv__SceneControls_Response__Sequence__are_equal(const interface__srv__SceneControls_Response__Sequence * lhs, const interface__srv__SceneControls_Response__Sequence * rhs)
+{
+  if (!lhs || !rhs) {
+    return false;
+  }
+  if (lhs->size != rhs->size) {
+    return false;
+  }
+  for (size_t i = 0; i < lhs->size; ++i) {
+    if (!interface__srv__SceneControls_Response__are_equal(&(lhs->data[i]), &(rhs->data[i]))) {
+      return false;
+    }
+  }
+  return true;
+}
+
+bool
+interface__srv__SceneControls_Response__Sequence__copy(
+  const interface__srv__SceneControls_Response__Sequence * input,
+  interface__srv__SceneControls_Response__Sequence * output)
+{
+  if (!input || !output) {
+    return false;
+  }
+  if (output->capacity < input->size) {
+    const size_t allocation_size =
+      input->size * sizeof(interface__srv__SceneControls_Response);
+    rcutils_allocator_t allocator = rcutils_get_default_allocator();
+    interface__srv__SceneControls_Response * data =
+      (interface__srv__SceneControls_Response *)allocator.reallocate(
+      output->data, allocation_size, allocator.state);
+    if (!data) {
+      return false;
+    }
+    // If reallocation succeeded, memory may or may not have been moved
+    // to fulfill the allocation request, invalidating output->data.
+    output->data = data;
+    for (size_t i = output->capacity; i < input->size; ++i) {
+      if (!interface__srv__SceneControls_Response__init(&output->data[i])) {
+        // If initialization of any new item fails, roll back
+        // all previously initialized items. Existing items
+        // in output are to be left unmodified.
+        for (; i-- > output->capacity; ) {
+          interface__srv__SceneControls_Response__fini(&output->data[i]);
+        }
+        return false;
+      }
+    }
+    output->capacity = input->size;
+  }
+  output->size = input->size;
+  for (size_t i = 0; i < input->size; ++i) {
+    if (!interface__srv__SceneControls_Response__copy(
+        &(input->data[i]), &(output->data[i])))
+    {
+      return false;
+    }
+  }
+  return true;
+}

+ 329 - 0
install/interface/include/interface/interface/srv/detail/scene_controls__functions.h

@@ -0,0 +1,329 @@
+// generated from rosidl_generator_c/resource/idl__functions.h.em
+// with input from interface:srv/SceneControls.idl
+// generated code does not contain a copyright notice
+
+#ifndef INTERFACE__SRV__DETAIL__SCENE_CONTROLS__FUNCTIONS_H_
+#define INTERFACE__SRV__DETAIL__SCENE_CONTROLS__FUNCTIONS_H_
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+#include <stdbool.h>
+#include <stdlib.h>
+
+#include "rosidl_runtime_c/visibility_control.h"
+#include "interface/msg/rosidl_generator_c__visibility_control.h"
+
+#include "interface/srv/detail/scene_controls__struct.h"
+
+/// Initialize srv/SceneControls message.
+/**
+ * If the init function is called twice for the same message without
+ * calling fini inbetween previously allocated memory will be leaked.
+ * \param[in,out] msg The previously allocated message pointer.
+ * Fields without a default value will not be initialized by this function.
+ * You might want to call memset(msg, 0, sizeof(
+ * interface__srv__SceneControls_Request
+ * )) before or use
+ * interface__srv__SceneControls_Request__create()
+ * to allocate and initialize the message.
+ * \return true if initialization was successful, otherwise false
+ */
+ROSIDL_GENERATOR_C_PUBLIC_interface
+bool
+interface__srv__SceneControls_Request__init(interface__srv__SceneControls_Request * msg);
+
+/// Finalize srv/SceneControls message.
+/**
+ * \param[in,out] msg The allocated message pointer.
+ */
+ROSIDL_GENERATOR_C_PUBLIC_interface
+void
+interface__srv__SceneControls_Request__fini(interface__srv__SceneControls_Request * msg);
+
+/// Create srv/SceneControls message.
+/**
+ * It allocates the memory for the message, sets the memory to zero, and
+ * calls
+ * interface__srv__SceneControls_Request__init().
+ * \return The pointer to the initialized message if successful,
+ * otherwise NULL
+ */
+ROSIDL_GENERATOR_C_PUBLIC_interface
+interface__srv__SceneControls_Request *
+interface__srv__SceneControls_Request__create();
+
+/// Destroy srv/SceneControls message.
+/**
+ * It calls
+ * interface__srv__SceneControls_Request__fini()
+ * and frees the memory of the message.
+ * \param[in,out] msg The allocated message pointer.
+ */
+ROSIDL_GENERATOR_C_PUBLIC_interface
+void
+interface__srv__SceneControls_Request__destroy(interface__srv__SceneControls_Request * msg);
+
+/// Check for srv/SceneControls message equality.
+/**
+ * \param[in] lhs The message on the left hand size of the equality operator.
+ * \param[in] rhs The message on the right hand size of the equality operator.
+ * \return true if messages are equal, otherwise false.
+ */
+ROSIDL_GENERATOR_C_PUBLIC_interface
+bool
+interface__srv__SceneControls_Request__are_equal(const interface__srv__SceneControls_Request * lhs, const interface__srv__SceneControls_Request * rhs);
+
+/// Copy a srv/SceneControls message.
+/**
+ * This functions performs a deep copy, as opposed to the shallow copy that
+ * plain assignment yields.
+ *
+ * \param[in] input The source message pointer.
+ * \param[out] output The target message pointer, which must
+ *   have been initialized before calling this function.
+ * \return true if successful, or false if either pointer is null
+ *   or memory allocation fails.
+ */
+ROSIDL_GENERATOR_C_PUBLIC_interface
+bool
+interface__srv__SceneControls_Request__copy(
+  const interface__srv__SceneControls_Request * input,
+  interface__srv__SceneControls_Request * output);
+
+/// Initialize array of srv/SceneControls messages.
+/**
+ * It allocates the memory for the number of elements and calls
+ * interface__srv__SceneControls_Request__init()
+ * for each element of the array.
+ * \param[in,out] array The allocated array pointer.
+ * \param[in] size The size / capacity of the array.
+ * \return true if initialization was successful, otherwise false
+ * If the array pointer is valid and the size is zero it is guaranteed
+ # to return true.
+ */
+ROSIDL_GENERATOR_C_PUBLIC_interface
+bool
+interface__srv__SceneControls_Request__Sequence__init(interface__srv__SceneControls_Request__Sequence * array, size_t size);
+
+/// Finalize array of srv/SceneControls messages.
+/**
+ * It calls
+ * interface__srv__SceneControls_Request__fini()
+ * for each element of the array and frees the memory for the number of
+ * elements.
+ * \param[in,out] array The initialized array pointer.
+ */
+ROSIDL_GENERATOR_C_PUBLIC_interface
+void
+interface__srv__SceneControls_Request__Sequence__fini(interface__srv__SceneControls_Request__Sequence * array);
+
+/// Create array of srv/SceneControls messages.
+/**
+ * It allocates the memory for the array and calls
+ * interface__srv__SceneControls_Request__Sequence__init().
+ * \param[in] size The size / capacity of the array.
+ * \return The pointer to the initialized array if successful, otherwise NULL
+ */
+ROSIDL_GENERATOR_C_PUBLIC_interface
+interface__srv__SceneControls_Request__Sequence *
+interface__srv__SceneControls_Request__Sequence__create(size_t size);
+
+/// Destroy array of srv/SceneControls messages.
+/**
+ * It calls
+ * interface__srv__SceneControls_Request__Sequence__fini()
+ * on the array,
+ * and frees the memory of the array.
+ * \param[in,out] array The initialized array pointer.
+ */
+ROSIDL_GENERATOR_C_PUBLIC_interface
+void
+interface__srv__SceneControls_Request__Sequence__destroy(interface__srv__SceneControls_Request__Sequence * array);
+
+/// Check for srv/SceneControls message array equality.
+/**
+ * \param[in] lhs The message array on the left hand size of the equality operator.
+ * \param[in] rhs The message array on the right hand size of the equality operator.
+ * \return true if message arrays are equal in size and content, otherwise false.
+ */
+ROSIDL_GENERATOR_C_PUBLIC_interface
+bool
+interface__srv__SceneControls_Request__Sequence__are_equal(const interface__srv__SceneControls_Request__Sequence * lhs, const interface__srv__SceneControls_Request__Sequence * rhs);
+
+/// Copy an array of srv/SceneControls messages.
+/**
+ * This functions performs a deep copy, as opposed to the shallow copy that
+ * plain assignment yields.
+ *
+ * \param[in] input The source array pointer.
+ * \param[out] output The target array pointer, which must
+ *   have been initialized before calling this function.
+ * \return true if successful, or false if either pointer
+ *   is null or memory allocation fails.
+ */
+ROSIDL_GENERATOR_C_PUBLIC_interface
+bool
+interface__srv__SceneControls_Request__Sequence__copy(
+  const interface__srv__SceneControls_Request__Sequence * input,
+  interface__srv__SceneControls_Request__Sequence * output);
+
+/// Initialize srv/SceneControls message.
+/**
+ * If the init function is called twice for the same message without
+ * calling fini inbetween previously allocated memory will be leaked.
+ * \param[in,out] msg The previously allocated message pointer.
+ * Fields without a default value will not be initialized by this function.
+ * You might want to call memset(msg, 0, sizeof(
+ * interface__srv__SceneControls_Response
+ * )) before or use
+ * interface__srv__SceneControls_Response__create()
+ * to allocate and initialize the message.
+ * \return true if initialization was successful, otherwise false
+ */
+ROSIDL_GENERATOR_C_PUBLIC_interface
+bool
+interface__srv__SceneControls_Response__init(interface__srv__SceneControls_Response * msg);
+
+/// Finalize srv/SceneControls message.
+/**
+ * \param[in,out] msg The allocated message pointer.
+ */
+ROSIDL_GENERATOR_C_PUBLIC_interface
+void
+interface__srv__SceneControls_Response__fini(interface__srv__SceneControls_Response * msg);
+
+/// Create srv/SceneControls message.
+/**
+ * It allocates the memory for the message, sets the memory to zero, and
+ * calls
+ * interface__srv__SceneControls_Response__init().
+ * \return The pointer to the initialized message if successful,
+ * otherwise NULL
+ */
+ROSIDL_GENERATOR_C_PUBLIC_interface
+interface__srv__SceneControls_Response *
+interface__srv__SceneControls_Response__create();
+
+/// Destroy srv/SceneControls message.
+/**
+ * It calls
+ * interface__srv__SceneControls_Response__fini()
+ * and frees the memory of the message.
+ * \param[in,out] msg The allocated message pointer.
+ */
+ROSIDL_GENERATOR_C_PUBLIC_interface
+void
+interface__srv__SceneControls_Response__destroy(interface__srv__SceneControls_Response * msg);
+
+/// Check for srv/SceneControls message equality.
+/**
+ * \param[in] lhs The message on the left hand size of the equality operator.
+ * \param[in] rhs The message on the right hand size of the equality operator.
+ * \return true if messages are equal, otherwise false.
+ */
+ROSIDL_GENERATOR_C_PUBLIC_interface
+bool
+interface__srv__SceneControls_Response__are_equal(const interface__srv__SceneControls_Response * lhs, const interface__srv__SceneControls_Response * rhs);
+
+/// Copy a srv/SceneControls message.
+/**
+ * This functions performs a deep copy, as opposed to the shallow copy that
+ * plain assignment yields.
+ *
+ * \param[in] input The source message pointer.
+ * \param[out] output The target message pointer, which must
+ *   have been initialized before calling this function.
+ * \return true if successful, or false if either pointer is null
+ *   or memory allocation fails.
+ */
+ROSIDL_GENERATOR_C_PUBLIC_interface
+bool
+interface__srv__SceneControls_Response__copy(
+  const interface__srv__SceneControls_Response * input,
+  interface__srv__SceneControls_Response * output);
+
+/// Initialize array of srv/SceneControls messages.
+/**
+ * It allocates the memory for the number of elements and calls
+ * interface__srv__SceneControls_Response__init()
+ * for each element of the array.
+ * \param[in,out] array The allocated array pointer.
+ * \param[in] size The size / capacity of the array.
+ * \return true if initialization was successful, otherwise false
+ * If the array pointer is valid and the size is zero it is guaranteed
+ # to return true.
+ */
+ROSIDL_GENERATOR_C_PUBLIC_interface
+bool
+interface__srv__SceneControls_Response__Sequence__init(interface__srv__SceneControls_Response__Sequence * array, size_t size);
+
+/// Finalize array of srv/SceneControls messages.
+/**
+ * It calls
+ * interface__srv__SceneControls_Response__fini()
+ * for each element of the array and frees the memory for the number of
+ * elements.
+ * \param[in,out] array The initialized array pointer.
+ */
+ROSIDL_GENERATOR_C_PUBLIC_interface
+void
+interface__srv__SceneControls_Response__Sequence__fini(interface__srv__SceneControls_Response__Sequence * array);
+
+/// Create array of srv/SceneControls messages.
+/**
+ * It allocates the memory for the array and calls
+ * interface__srv__SceneControls_Response__Sequence__init().
+ * \param[in] size The size / capacity of the array.
+ * \return The pointer to the initialized array if successful, otherwise NULL
+ */
+ROSIDL_GENERATOR_C_PUBLIC_interface
+interface__srv__SceneControls_Response__Sequence *
+interface__srv__SceneControls_Response__Sequence__create(size_t size);
+
+/// Destroy array of srv/SceneControls messages.
+/**
+ * It calls
+ * interface__srv__SceneControls_Response__Sequence__fini()
+ * on the array,
+ * and frees the memory of the array.
+ * \param[in,out] array The initialized array pointer.
+ */
+ROSIDL_GENERATOR_C_PUBLIC_interface
+void
+interface__srv__SceneControls_Response__Sequence__destroy(interface__srv__SceneControls_Response__Sequence * array);
+
+/// Check for srv/SceneControls message array equality.
+/**
+ * \param[in] lhs The message array on the left hand size of the equality operator.
+ * \param[in] rhs The message array on the right hand size of the equality operator.
+ * \return true if message arrays are equal in size and content, otherwise false.
+ */
+ROSIDL_GENERATOR_C_PUBLIC_interface
+bool
+interface__srv__SceneControls_Response__Sequence__are_equal(const interface__srv__SceneControls_Response__Sequence * lhs, const interface__srv__SceneControls_Response__Sequence * rhs);
+
+/// Copy an array of srv/SceneControls messages.
+/**
+ * This functions performs a deep copy, as opposed to the shallow copy that
+ * plain assignment yields.
+ *
+ * \param[in] input The source array pointer.
+ * \param[out] output The target array pointer, which must
+ *   have been initialized before calling this function.
+ * \return true if successful, or false if either pointer
+ *   is null or memory allocation fails.
+ */
+ROSIDL_GENERATOR_C_PUBLIC_interface
+bool
+interface__srv__SceneControls_Response__Sequence__copy(
+  const interface__srv__SceneControls_Response__Sequence * input,
+  interface__srv__SceneControls_Response__Sequence * output);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif  // INTERFACE__SRV__DETAIL__SCENE_CONTROLS__FUNCTIONS_H_

+ 89 - 0
install/interface/include/interface/interface/srv/detail/scene_controls__rosidl_typesupport_fastrtps_c.h

@@ -0,0 +1,89 @@
+// generated from rosidl_typesupport_fastrtps_c/resource/idl__rosidl_typesupport_fastrtps_c.h.em
+// with input from interface:srv/SceneControls.idl
+// generated code does not contain a copyright notice
+#ifndef INTERFACE__SRV__DETAIL__SCENE_CONTROLS__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_
+#define INTERFACE__SRV__DETAIL__SCENE_CONTROLS__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_
+
+
+#include <stddef.h>
+#include "rosidl_runtime_c/message_type_support_struct.h"
+#include "rosidl_typesupport_interface/macros.h"
+#include "interface/msg/rosidl_typesupport_fastrtps_c__visibility_control.h"
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_interface
+size_t get_serialized_size_interface__srv__SceneControls_Request(
+  const void * untyped_ros_message,
+  size_t current_alignment);
+
+ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_interface
+size_t max_serialized_size_interface__srv__SceneControls_Request(
+  bool & full_bounded,
+  bool & is_plain,
+  size_t current_alignment);
+
+ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_interface
+const rosidl_message_type_support_t *
+ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_c, interface, srv, SceneControls_Request)();
+
+#ifdef __cplusplus
+}
+#endif
+
+// already included above
+// #include <stddef.h>
+// already included above
+// #include "rosidl_runtime_c/message_type_support_struct.h"
+// already included above
+// #include "rosidl_typesupport_interface/macros.h"
+// already included above
+// #include "interface/msg/rosidl_typesupport_fastrtps_c__visibility_control.h"
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_interface
+size_t get_serialized_size_interface__srv__SceneControls_Response(
+  const void * untyped_ros_message,
+  size_t current_alignment);
+
+ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_interface
+size_t max_serialized_size_interface__srv__SceneControls_Response(
+  bool & full_bounded,
+  bool & is_plain,
+  size_t current_alignment);
+
+ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_interface
+const rosidl_message_type_support_t *
+ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_c, interface, srv, SceneControls_Response)();
+
+#ifdef __cplusplus
+}
+#endif
+
+#include "rosidl_runtime_c/service_type_support_struct.h"
+// already included above
+// #include "rosidl_typesupport_interface/macros.h"
+// already included above
+// #include "interface/msg/rosidl_typesupport_fastrtps_c__visibility_control.h"
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+ROSIDL_TYPESUPPORT_FASTRTPS_C_PUBLIC_interface
+const rosidl_service_type_support_t *
+ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_SYMBOL_NAME(rosidl_typesupport_fastrtps_c, interface, srv, SceneControls)();
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif  // INTERFACE__SRV__DETAIL__SCENE_CONTROLS__ROSIDL_TYPESUPPORT_FASTRTPS_C_H_

+ 177 - 0
install/interface/include/interface/interface/srv/detail/scene_controls__rosidl_typesupport_fastrtps_cpp.hpp

@@ -0,0 +1,177 @@
+// generated from rosidl_typesupport_fastrtps_cpp/resource/idl__rosidl_typesupport_fastrtps_cpp.hpp.em
+// with input from interface:srv/SceneControls.idl
+// generated code does not contain a copyright notice
+
+#ifndef INTERFACE__SRV__DETAIL__SCENE_CONTROLS__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_
+#define INTERFACE__SRV__DETAIL__SCENE_CONTROLS__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_
+
+#include "rosidl_runtime_c/message_type_support_struct.h"
+#include "rosidl_typesupport_interface/macros.h"
+#include "interface/msg/rosidl_typesupport_fastrtps_cpp__visibility_control.h"
+#include "interface/srv/detail/scene_controls__struct.hpp"
+
+#ifndef _WIN32
+# pragma GCC diagnostic push
+# pragma GCC diagnostic ignored "-Wunused-parameter"
+# ifdef __clang__
+#  pragma clang diagnostic ignored "-Wdeprecated-register"
+#  pragma clang diagnostic ignored "-Wreturn-type-c-linkage"
+# endif
+#endif
+#ifndef _WIN32
+# pragma GCC diagnostic pop
+#endif
+
+#include "fastcdr/Cdr.h"
+
+namespace interface
+{
+
+namespace srv
+{
+
+namespace typesupport_fastrtps_cpp
+{
+
+bool
+ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_interface
+cdr_serialize(
+  const interface::srv::SceneControls_Request & ros_message,
+  eprosima::fastcdr::Cdr & cdr);
+
+bool
+ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_interface
+cdr_deserialize(
+  eprosima::fastcdr::Cdr & cdr,
+  interface::srv::SceneControls_Request & ros_message);
+
+size_t
+ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_interface
+get_serialized_size(
+  const interface::srv::SceneControls_Request & ros_message,
+  size_t current_alignment);
+
+size_t
+ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_interface
+max_serialized_size_SceneControls_Request(
+  bool & full_bounded,
+  bool & is_plain,
+  size_t current_alignment);
+
+}  // namespace typesupport_fastrtps_cpp
+
+}  // namespace srv
+
+}  // namespace interface
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_interface
+const rosidl_message_type_support_t *
+  ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_cpp, interface, srv, SceneControls_Request)();
+
+#ifdef __cplusplus
+}
+#endif
+
+// already included above
+// #include "rosidl_runtime_c/message_type_support_struct.h"
+// already included above
+// #include "rosidl_typesupport_interface/macros.h"
+// already included above
+// #include "interface/msg/rosidl_typesupport_fastrtps_cpp__visibility_control.h"
+// already included above
+// #include "interface/srv/detail/scene_controls__struct.hpp"
+
+#ifndef _WIN32
+# pragma GCC diagnostic push
+# pragma GCC diagnostic ignored "-Wunused-parameter"
+# ifdef __clang__
+#  pragma clang diagnostic ignored "-Wdeprecated-register"
+#  pragma clang diagnostic ignored "-Wreturn-type-c-linkage"
+# endif
+#endif
+#ifndef _WIN32
+# pragma GCC diagnostic pop
+#endif
+
+// already included above
+// #include "fastcdr/Cdr.h"
+
+namespace interface
+{
+
+namespace srv
+{
+
+namespace typesupport_fastrtps_cpp
+{
+
+bool
+ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_interface
+cdr_serialize(
+  const interface::srv::SceneControls_Response & ros_message,
+  eprosima::fastcdr::Cdr & cdr);
+
+bool
+ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_interface
+cdr_deserialize(
+  eprosima::fastcdr::Cdr & cdr,
+  interface::srv::SceneControls_Response & ros_message);
+
+size_t
+ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_interface
+get_serialized_size(
+  const interface::srv::SceneControls_Response & ros_message,
+  size_t current_alignment);
+
+size_t
+ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_interface
+max_serialized_size_SceneControls_Response(
+  bool & full_bounded,
+  bool & is_plain,
+  size_t current_alignment);
+
+}  // namespace typesupport_fastrtps_cpp
+
+}  // namespace srv
+
+}  // namespace interface
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_interface
+const rosidl_message_type_support_t *
+  ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_fastrtps_cpp, interface, srv, SceneControls_Response)();
+
+#ifdef __cplusplus
+}
+#endif
+
+#include "rmw/types.h"
+#include "rosidl_typesupport_cpp/service_type_support.hpp"
+// already included above
+// #include "rosidl_typesupport_interface/macros.h"
+// already included above
+// #include "interface/msg/rosidl_typesupport_fastrtps_cpp__visibility_control.h"
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+ROSIDL_TYPESUPPORT_FASTRTPS_CPP_PUBLIC_interface
+const rosidl_service_type_support_t *
+  ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_SYMBOL_NAME(rosidl_typesupport_fastrtps_cpp, interface, srv, SceneControls)();
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif  // INTERFACE__SRV__DETAIL__SCENE_CONTROLS__ROSIDL_TYPESUPPORT_FASTRTPS_CPP_HPP_

+ 47 - 0
install/interface/include/interface/interface/srv/detail/scene_controls__rosidl_typesupport_introspection_c.h

@@ -0,0 +1,47 @@
+// generated from rosidl_typesupport_introspection_c/resource/idl__rosidl_typesupport_introspection_c.h.em
+// with input from interface:srv/SceneControls.idl
+// generated code does not contain a copyright notice
+
+#ifndef INTERFACE__SRV__DETAIL__SCENE_CONTROLS__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_
+#define INTERFACE__SRV__DETAIL__SCENE_CONTROLS__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+
+#include "rosidl_runtime_c/message_type_support_struct.h"
+#include "rosidl_typesupport_interface/macros.h"
+#include "interface/msg/rosidl_typesupport_introspection_c__visibility_control.h"
+
+ROSIDL_TYPESUPPORT_INTROSPECTION_C_PUBLIC_interface
+const rosidl_message_type_support_t *
+ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, interface, srv, SceneControls_Request)();
+
+// already included above
+// #include "rosidl_runtime_c/message_type_support_struct.h"
+// already included above
+// #include "rosidl_typesupport_interface/macros.h"
+// already included above
+// #include "interface/msg/rosidl_typesupport_introspection_c__visibility_control.h"
+
+ROSIDL_TYPESUPPORT_INTROSPECTION_C_PUBLIC_interface
+const rosidl_message_type_support_t *
+ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, interface, srv, SceneControls_Response)();
+
+#include "rosidl_runtime_c/service_type_support_struct.h"
+// already included above
+// #include "rosidl_typesupport_interface/macros.h"
+// already included above
+// #include "interface/msg/rosidl_typesupport_introspection_c__visibility_control.h"
+
+ROSIDL_TYPESUPPORT_INTROSPECTION_C_PUBLIC_interface
+const rosidl_service_type_support_t *
+ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_SYMBOL_NAME(rosidl_typesupport_introspection_c, interface, srv, SceneControls)();
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif  // INTERFACE__SRV__DETAIL__SCENE_CONTROLS__ROSIDL_TYPESUPPORT_INTROSPECTION_C_H_

+ 67 - 0
install/interface/include/interface/interface/srv/detail/scene_controls__rosidl_typesupport_introspection_cpp.hpp

@@ -0,0 +1,67 @@
+// generated from rosidl_typesupport_introspection_cpp/resource/idl__rosidl_typesupport_introspection_cpp.h.em
+// with input from interface:srv/SceneControls.idl
+// generated code does not contain a copyright notice
+
+#ifndef INTERFACE__SRV__DETAIL__SCENE_CONTROLS__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_
+#define INTERFACE__SRV__DETAIL__SCENE_CONTROLS__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_
+
+
+#include "rosidl_runtime_c/message_type_support_struct.h"
+#include "rosidl_typesupport_interface/macros.h"
+#include "rosidl_typesupport_introspection_cpp/visibility_control.h"
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+// TODO(dirk-thomas) these visibility macros should be message package specific
+ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC
+const rosidl_message_type_support_t *
+  ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, interface, srv, SceneControls_Request)();
+
+#ifdef __cplusplus
+}
+#endif
+
+// already included above
+// #include "rosidl_runtime_c/message_type_support_struct.h"
+// already included above
+// #include "rosidl_typesupport_interface/macros.h"
+// already included above
+// #include "rosidl_typesupport_introspection_cpp/visibility_control.h"
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+// TODO(dirk-thomas) these visibility macros should be message package specific
+ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC
+const rosidl_message_type_support_t *
+  ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, interface, srv, SceneControls_Response)();
+
+#ifdef __cplusplus
+}
+#endif
+
+#include "rosidl_runtime_c/service_type_support_struct.h"
+// already included above
+// #include "rosidl_typesupport_interface/macros.h"
+// already included above
+// #include "rosidl_typesupport_introspection_cpp/visibility_control.h"
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC
+const rosidl_service_type_support_t *
+  ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, interface, srv, SceneControls)();
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif  // INTERFACE__SRV__DETAIL__SCENE_CONTROLS__ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_HPP_

+ 64 - 0
install/interface/include/interface/interface/srv/detail/scene_controls__struct.h

@@ -0,0 +1,64 @@
+// generated from rosidl_generator_c/resource/idl__struct.h.em
+// with input from interface:srv/SceneControls.idl
+// generated code does not contain a copyright notice
+
+#ifndef INTERFACE__SRV__DETAIL__SCENE_CONTROLS__STRUCT_H_
+#define INTERFACE__SRV__DETAIL__SCENE_CONTROLS__STRUCT_H_
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+#include <stdbool.h>
+#include <stddef.h>
+#include <stdint.h>
+
+
+// Constants defined in the message
+
+/// Struct defined in srv/SceneControls in the package interface.
+typedef struct interface__srv__SceneControls_Request
+{
+  int32_t start;
+} interface__srv__SceneControls_Request;
+
+// Struct for a sequence of interface__srv__SceneControls_Request.
+typedef struct interface__srv__SceneControls_Request__Sequence
+{
+  interface__srv__SceneControls_Request * data;
+  /// The number of valid items in data
+  size_t size;
+  /// The number of allocated items in data
+  size_t capacity;
+} interface__srv__SceneControls_Request__Sequence;
+
+
+// Constants defined in the message
+
+// Include directives for member types
+// Member 'message'
+#include "rosidl_runtime_c/string.h"
+
+/// Struct defined in srv/SceneControls in the package interface.
+typedef struct interface__srv__SceneControls_Response
+{
+  int32_t code;
+  rosidl_runtime_c__String message;
+} interface__srv__SceneControls_Response;
+
+// Struct for a sequence of interface__srv__SceneControls_Response.
+typedef struct interface__srv__SceneControls_Response__Sequence
+{
+  interface__srv__SceneControls_Response * data;
+  /// The number of valid items in data
+  size_t size;
+  /// The number of allocated items in data
+  size_t capacity;
+} interface__srv__SceneControls_Response__Sequence;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif  // INTERFACE__SRV__DETAIL__SCENE_CONTROLS__STRUCT_H_

+ 276 - 0
install/interface/include/interface/interface/srv/detail/scene_controls__struct.hpp

@@ -0,0 +1,276 @@
+// generated from rosidl_generator_cpp/resource/idl__struct.hpp.em
+// with input from interface:srv/SceneControls.idl
+// generated code does not contain a copyright notice
+
+#ifndef INTERFACE__SRV__DETAIL__SCENE_CONTROLS__STRUCT_HPP_
+#define INTERFACE__SRV__DETAIL__SCENE_CONTROLS__STRUCT_HPP_
+
+#include <algorithm>
+#include <array>
+#include <cstdint>
+#include <memory>
+#include <string>
+#include <vector>
+
+#include "rosidl_runtime_cpp/bounded_vector.hpp"
+#include "rosidl_runtime_cpp/message_initialization.hpp"
+
+
+#ifndef _WIN32
+# define DEPRECATED__interface__srv__SceneControls_Request __attribute__((deprecated))
+#else
+# define DEPRECATED__interface__srv__SceneControls_Request __declspec(deprecated)
+#endif
+
+namespace interface
+{
+
+namespace srv
+{
+
+// message struct
+template<class ContainerAllocator>
+struct SceneControls_Request_
+{
+  using Type = SceneControls_Request_<ContainerAllocator>;
+
+  explicit SceneControls_Request_(rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL)
+  {
+    if (rosidl_runtime_cpp::MessageInitialization::ALL == _init ||
+      rosidl_runtime_cpp::MessageInitialization::ZERO == _init)
+    {
+      this->start = 0l;
+    }
+  }
+
+  explicit SceneControls_Request_(const ContainerAllocator & _alloc, rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL)
+  {
+    (void)_alloc;
+    if (rosidl_runtime_cpp::MessageInitialization::ALL == _init ||
+      rosidl_runtime_cpp::MessageInitialization::ZERO == _init)
+    {
+      this->start = 0l;
+    }
+  }
+
+  // field types and members
+  using _start_type =
+    int32_t;
+  _start_type start;
+
+  // setters for named parameter idiom
+  Type & set__start(
+    const int32_t & _arg)
+  {
+    this->start = _arg;
+    return *this;
+  }
+
+  // constant declarations
+
+  // pointer types
+  using RawPtr =
+    interface::srv::SceneControls_Request_<ContainerAllocator> *;
+  using ConstRawPtr =
+    const interface::srv::SceneControls_Request_<ContainerAllocator> *;
+  using SharedPtr =
+    std::shared_ptr<interface::srv::SceneControls_Request_<ContainerAllocator>>;
+  using ConstSharedPtr =
+    std::shared_ptr<interface::srv::SceneControls_Request_<ContainerAllocator> const>;
+
+  template<typename Deleter = std::default_delete<
+      interface::srv::SceneControls_Request_<ContainerAllocator>>>
+  using UniquePtrWithDeleter =
+    std::unique_ptr<interface::srv::SceneControls_Request_<ContainerAllocator>, Deleter>;
+
+  using UniquePtr = UniquePtrWithDeleter<>;
+
+  template<typename Deleter = std::default_delete<
+      interface::srv::SceneControls_Request_<ContainerAllocator>>>
+  using ConstUniquePtrWithDeleter =
+    std::unique_ptr<interface::srv::SceneControls_Request_<ContainerAllocator> const, Deleter>;
+  using ConstUniquePtr = ConstUniquePtrWithDeleter<>;
+
+  using WeakPtr =
+    std::weak_ptr<interface::srv::SceneControls_Request_<ContainerAllocator>>;
+  using ConstWeakPtr =
+    std::weak_ptr<interface::srv::SceneControls_Request_<ContainerAllocator> const>;
+
+  // pointer types similar to ROS 1, use SharedPtr / ConstSharedPtr instead
+  // NOTE: Can't use 'using' here because GNU C++ can't parse attributes properly
+  typedef DEPRECATED__interface__srv__SceneControls_Request
+    std::shared_ptr<interface::srv::SceneControls_Request_<ContainerAllocator>>
+    Ptr;
+  typedef DEPRECATED__interface__srv__SceneControls_Request
+    std::shared_ptr<interface::srv::SceneControls_Request_<ContainerAllocator> const>
+    ConstPtr;
+
+  // comparison operators
+  bool operator==(const SceneControls_Request_ & other) const
+  {
+    if (this->start != other.start) {
+      return false;
+    }
+    return true;
+  }
+  bool operator!=(const SceneControls_Request_ & other) const
+  {
+    return !this->operator==(other);
+  }
+};  // struct SceneControls_Request_
+
+// alias to use template instance with default allocator
+using SceneControls_Request =
+  interface::srv::SceneControls_Request_<std::allocator<void>>;
+
+// constant definitions
+
+}  // namespace srv
+
+}  // namespace interface
+
+
+#ifndef _WIN32
+# define DEPRECATED__interface__srv__SceneControls_Response __attribute__((deprecated))
+#else
+# define DEPRECATED__interface__srv__SceneControls_Response __declspec(deprecated)
+#endif
+
+namespace interface
+{
+
+namespace srv
+{
+
+// message struct
+template<class ContainerAllocator>
+struct SceneControls_Response_
+{
+  using Type = SceneControls_Response_<ContainerAllocator>;
+
+  explicit SceneControls_Response_(rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL)
+  {
+    if (rosidl_runtime_cpp::MessageInitialization::ALL == _init ||
+      rosidl_runtime_cpp::MessageInitialization::ZERO == _init)
+    {
+      this->code = 0l;
+      this->message = "";
+    }
+  }
+
+  explicit SceneControls_Response_(const ContainerAllocator & _alloc, rosidl_runtime_cpp::MessageInitialization _init = rosidl_runtime_cpp::MessageInitialization::ALL)
+  : message(_alloc)
+  {
+    if (rosidl_runtime_cpp::MessageInitialization::ALL == _init ||
+      rosidl_runtime_cpp::MessageInitialization::ZERO == _init)
+    {
+      this->code = 0l;
+      this->message = "";
+    }
+  }
+
+  // field types and members
+  using _code_type =
+    int32_t;
+  _code_type code;
+  using _message_type =
+    std::basic_string<char, std::char_traits<char>, typename std::allocator_traits<ContainerAllocator>::template rebind_alloc<char>>;
+  _message_type message;
+
+  // setters for named parameter idiom
+  Type & set__code(
+    const int32_t & _arg)
+  {
+    this->code = _arg;
+    return *this;
+  }
+  Type & set__message(
+    const std::basic_string<char, std::char_traits<char>, typename std::allocator_traits<ContainerAllocator>::template rebind_alloc<char>> & _arg)
+  {
+    this->message = _arg;
+    return *this;
+  }
+
+  // constant declarations
+
+  // pointer types
+  using RawPtr =
+    interface::srv::SceneControls_Response_<ContainerAllocator> *;
+  using ConstRawPtr =
+    const interface::srv::SceneControls_Response_<ContainerAllocator> *;
+  using SharedPtr =
+    std::shared_ptr<interface::srv::SceneControls_Response_<ContainerAllocator>>;
+  using ConstSharedPtr =
+    std::shared_ptr<interface::srv::SceneControls_Response_<ContainerAllocator> const>;
+
+  template<typename Deleter = std::default_delete<
+      interface::srv::SceneControls_Response_<ContainerAllocator>>>
+  using UniquePtrWithDeleter =
+    std::unique_ptr<interface::srv::SceneControls_Response_<ContainerAllocator>, Deleter>;
+
+  using UniquePtr = UniquePtrWithDeleter<>;
+
+  template<typename Deleter = std::default_delete<
+      interface::srv::SceneControls_Response_<ContainerAllocator>>>
+  using ConstUniquePtrWithDeleter =
+    std::unique_ptr<interface::srv::SceneControls_Response_<ContainerAllocator> const, Deleter>;
+  using ConstUniquePtr = ConstUniquePtrWithDeleter<>;
+
+  using WeakPtr =
+    std::weak_ptr<interface::srv::SceneControls_Response_<ContainerAllocator>>;
+  using ConstWeakPtr =
+    std::weak_ptr<interface::srv::SceneControls_Response_<ContainerAllocator> const>;
+
+  // pointer types similar to ROS 1, use SharedPtr / ConstSharedPtr instead
+  // NOTE: Can't use 'using' here because GNU C++ can't parse attributes properly
+  typedef DEPRECATED__interface__srv__SceneControls_Response
+    std::shared_ptr<interface::srv::SceneControls_Response_<ContainerAllocator>>
+    Ptr;
+  typedef DEPRECATED__interface__srv__SceneControls_Response
+    std::shared_ptr<interface::srv::SceneControls_Response_<ContainerAllocator> const>
+    ConstPtr;
+
+  // comparison operators
+  bool operator==(const SceneControls_Response_ & other) const
+  {
+    if (this->code != other.code) {
+      return false;
+    }
+    if (this->message != other.message) {
+      return false;
+    }
+    return true;
+  }
+  bool operator!=(const SceneControls_Response_ & other) const
+  {
+    return !this->operator==(other);
+  }
+};  // struct SceneControls_Response_
+
+// alias to use template instance with default allocator
+using SceneControls_Response =
+  interface::srv::SceneControls_Response_<std::allocator<void>>;
+
+// constant definitions
+
+}  // namespace srv
+
+}  // namespace interface
+
+namespace interface
+{
+
+namespace srv
+{
+
+struct SceneControls
+{
+  using Request = interface::srv::SceneControls_Request;
+  using Response = interface::srv::SceneControls_Response;
+};
+
+}  // namespace srv
+
+}  // namespace interface
+
+#endif  // INTERFACE__SRV__DETAIL__SCENE_CONTROLS__STRUCT_HPP_

+ 273 - 0
install/interface/include/interface/interface/srv/detail/scene_controls__traits.hpp

@@ -0,0 +1,273 @@
+// generated from rosidl_generator_cpp/resource/idl__traits.hpp.em
+// with input from interface:srv/SceneControls.idl
+// generated code does not contain a copyright notice
+
+#ifndef INTERFACE__SRV__DETAIL__SCENE_CONTROLS__TRAITS_HPP_
+#define INTERFACE__SRV__DETAIL__SCENE_CONTROLS__TRAITS_HPP_
+
+#include <stdint.h>
+
+#include <sstream>
+#include <string>
+#include <type_traits>
+
+#include "interface/srv/detail/scene_controls__struct.hpp"
+#include "rosidl_runtime_cpp/traits.hpp"
+
+namespace interface
+{
+
+namespace srv
+{
+
+inline void to_flow_style_yaml(
+  const SceneControls_Request & msg,
+  std::ostream & out)
+{
+  out << "{";
+  // member: start
+  {
+    out << "start: ";
+    rosidl_generator_traits::value_to_yaml(msg.start, out);
+  }
+  out << "}";
+}  // NOLINT(readability/fn_size)
+
+inline void to_block_style_yaml(
+  const SceneControls_Request & msg,
+  std::ostream & out, size_t indentation = 0)
+{
+  // member: start
+  {
+    if (indentation > 0) {
+      out << std::string(indentation, ' ');
+    }
+    out << "start: ";
+    rosidl_generator_traits::value_to_yaml(msg.start, out);
+    out << "\n";
+  }
+}  // NOLINT(readability/fn_size)
+
+inline std::string to_yaml(const SceneControls_Request & msg, bool use_flow_style = false)
+{
+  std::ostringstream out;
+  if (use_flow_style) {
+    to_flow_style_yaml(msg, out);
+  } else {
+    to_block_style_yaml(msg, out);
+  }
+  return out.str();
+}
+
+}  // namespace srv
+
+}  // namespace interface
+
+namespace rosidl_generator_traits
+{
+
+[[deprecated("use interface::srv::to_block_style_yaml() instead")]]
+inline void to_yaml(
+  const interface::srv::SceneControls_Request & msg,
+  std::ostream & out, size_t indentation = 0)
+{
+  interface::srv::to_block_style_yaml(msg, out, indentation);
+}
+
+[[deprecated("use interface::srv::to_yaml() instead")]]
+inline std::string to_yaml(const interface::srv::SceneControls_Request & msg)
+{
+  return interface::srv::to_yaml(msg);
+}
+
+template<>
+inline const char * data_type<interface::srv::SceneControls_Request>()
+{
+  return "interface::srv::SceneControls_Request";
+}
+
+template<>
+inline const char * name<interface::srv::SceneControls_Request>()
+{
+  return "interface/srv/SceneControls_Request";
+}
+
+template<>
+struct has_fixed_size<interface::srv::SceneControls_Request>
+  : std::integral_constant<bool, true> {};
+
+template<>
+struct has_bounded_size<interface::srv::SceneControls_Request>
+  : std::integral_constant<bool, true> {};
+
+template<>
+struct is_message<interface::srv::SceneControls_Request>
+  : std::true_type {};
+
+}  // namespace rosidl_generator_traits
+
+namespace interface
+{
+
+namespace srv
+{
+
+inline void to_flow_style_yaml(
+  const SceneControls_Response & msg,
+  std::ostream & out)
+{
+  out << "{";
+  // member: code
+  {
+    out << "code: ";
+    rosidl_generator_traits::value_to_yaml(msg.code, out);
+    out << ", ";
+  }
+
+  // member: message
+  {
+    out << "message: ";
+    rosidl_generator_traits::value_to_yaml(msg.message, out);
+  }
+  out << "}";
+}  // NOLINT(readability/fn_size)
+
+inline void to_block_style_yaml(
+  const SceneControls_Response & msg,
+  std::ostream & out, size_t indentation = 0)
+{
+  // member: code
+  {
+    if (indentation > 0) {
+      out << std::string(indentation, ' ');
+    }
+    out << "code: ";
+    rosidl_generator_traits::value_to_yaml(msg.code, out);
+    out << "\n";
+  }
+
+  // member: message
+  {
+    if (indentation > 0) {
+      out << std::string(indentation, ' ');
+    }
+    out << "message: ";
+    rosidl_generator_traits::value_to_yaml(msg.message, out);
+    out << "\n";
+  }
+}  // NOLINT(readability/fn_size)
+
+inline std::string to_yaml(const SceneControls_Response & msg, bool use_flow_style = false)
+{
+  std::ostringstream out;
+  if (use_flow_style) {
+    to_flow_style_yaml(msg, out);
+  } else {
+    to_block_style_yaml(msg, out);
+  }
+  return out.str();
+}
+
+}  // namespace srv
+
+}  // namespace interface
+
+namespace rosidl_generator_traits
+{
+
+[[deprecated("use interface::srv::to_block_style_yaml() instead")]]
+inline void to_yaml(
+  const interface::srv::SceneControls_Response & msg,
+  std::ostream & out, size_t indentation = 0)
+{
+  interface::srv::to_block_style_yaml(msg, out, indentation);
+}
+
+[[deprecated("use interface::srv::to_yaml() instead")]]
+inline std::string to_yaml(const interface::srv::SceneControls_Response & msg)
+{
+  return interface::srv::to_yaml(msg);
+}
+
+template<>
+inline const char * data_type<interface::srv::SceneControls_Response>()
+{
+  return "interface::srv::SceneControls_Response";
+}
+
+template<>
+inline const char * name<interface::srv::SceneControls_Response>()
+{
+  return "interface/srv/SceneControls_Response";
+}
+
+template<>
+struct has_fixed_size<interface::srv::SceneControls_Response>
+  : std::integral_constant<bool, false> {};
+
+template<>
+struct has_bounded_size<interface::srv::SceneControls_Response>
+  : std::integral_constant<bool, false> {};
+
+template<>
+struct is_message<interface::srv::SceneControls_Response>
+  : std::true_type {};
+
+}  // namespace rosidl_generator_traits
+
+namespace rosidl_generator_traits
+{
+
+template<>
+inline const char * data_type<interface::srv::SceneControls>()
+{
+  return "interface::srv::SceneControls";
+}
+
+template<>
+inline const char * name<interface::srv::SceneControls>()
+{
+  return "interface/srv/SceneControls";
+}
+
+template<>
+struct has_fixed_size<interface::srv::SceneControls>
+  : std::integral_constant<
+    bool,
+    has_fixed_size<interface::srv::SceneControls_Request>::value &&
+    has_fixed_size<interface::srv::SceneControls_Response>::value
+  >
+{
+};
+
+template<>
+struct has_bounded_size<interface::srv::SceneControls>
+  : std::integral_constant<
+    bool,
+    has_bounded_size<interface::srv::SceneControls_Request>::value &&
+    has_bounded_size<interface::srv::SceneControls_Response>::value
+  >
+{
+};
+
+template<>
+struct is_service<interface::srv::SceneControls>
+  : std::true_type
+{
+};
+
+template<>
+struct is_service_request<interface::srv::SceneControls_Request>
+  : std::true_type
+{
+};
+
+template<>
+struct is_service_response<interface::srv::SceneControls_Response>
+  : std::true_type
+{
+};
+
+}  // namespace rosidl_generator_traits
+
+#endif  // INTERFACE__SRV__DETAIL__SCENE_CONTROLS__TRAITS_HPP_

+ 249 - 0
install/interface/include/interface/interface/srv/detail/scene_controls__type_support.c

@@ -0,0 +1,249 @@
+// generated from rosidl_typesupport_introspection_c/resource/idl__type_support.c.em
+// with input from interface:srv/SceneControls.idl
+// generated code does not contain a copyright notice
+
+#include <stddef.h>
+#include "interface/srv/detail/scene_controls__rosidl_typesupport_introspection_c.h"
+#include "interface/msg/rosidl_typesupport_introspection_c__visibility_control.h"
+#include "rosidl_typesupport_introspection_c/field_types.h"
+#include "rosidl_typesupport_introspection_c/identifier.h"
+#include "rosidl_typesupport_introspection_c/message_introspection.h"
+#include "interface/srv/detail/scene_controls__functions.h"
+#include "interface/srv/detail/scene_controls__struct.h"
+
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+void interface__srv__SceneControls_Request__rosidl_typesupport_introspection_c__SceneControls_Request_init_function(
+  void * message_memory, enum rosidl_runtime_c__message_initialization _init)
+{
+  // TODO(karsten1987): initializers are not yet implemented for typesupport c
+  // see https://github.com/ros2/ros2/issues/397
+  (void) _init;
+  interface__srv__SceneControls_Request__init(message_memory);
+}
+
+void interface__srv__SceneControls_Request__rosidl_typesupport_introspection_c__SceneControls_Request_fini_function(void * message_memory)
+{
+  interface__srv__SceneControls_Request__fini(message_memory);
+}
+
+static rosidl_typesupport_introspection_c__MessageMember interface__srv__SceneControls_Request__rosidl_typesupport_introspection_c__SceneControls_Request_message_member_array[1] = {
+  {
+    "start",  // name
+    rosidl_typesupport_introspection_c__ROS_TYPE_INT32,  // type
+    0,  // upper bound of string
+    NULL,  // members of sub message
+    false,  // is array
+    0,  // array size
+    false,  // is upper bound
+    offsetof(interface__srv__SceneControls_Request, start),  // bytes offset in struct
+    NULL,  // default value
+    NULL,  // size() function pointer
+    NULL,  // get_const(index) function pointer
+    NULL,  // get(index) function pointer
+    NULL,  // fetch(index, &value) function pointer
+    NULL,  // assign(index, value) function pointer
+    NULL  // resize(index) function pointer
+  }
+};
+
+static const rosidl_typesupport_introspection_c__MessageMembers interface__srv__SceneControls_Request__rosidl_typesupport_introspection_c__SceneControls_Request_message_members = {
+  "interface__srv",  // message namespace
+  "SceneControls_Request",  // message name
+  1,  // number of fields
+  sizeof(interface__srv__SceneControls_Request),
+  interface__srv__SceneControls_Request__rosidl_typesupport_introspection_c__SceneControls_Request_message_member_array,  // message members
+  interface__srv__SceneControls_Request__rosidl_typesupport_introspection_c__SceneControls_Request_init_function,  // function to initialize message memory (memory has to be allocated)
+  interface__srv__SceneControls_Request__rosidl_typesupport_introspection_c__SceneControls_Request_fini_function  // function to terminate message instance (will not free memory)
+};
+
+// this is not const since it must be initialized on first access
+// since C does not allow non-integral compile-time constants
+static rosidl_message_type_support_t interface__srv__SceneControls_Request__rosidl_typesupport_introspection_c__SceneControls_Request_message_type_support_handle = {
+  0,
+  &interface__srv__SceneControls_Request__rosidl_typesupport_introspection_c__SceneControls_Request_message_members,
+  get_message_typesupport_handle_function,
+};
+
+ROSIDL_TYPESUPPORT_INTROSPECTION_C_EXPORT_interface
+const rosidl_message_type_support_t *
+ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, interface, srv, SceneControls_Request)() {
+  if (!interface__srv__SceneControls_Request__rosidl_typesupport_introspection_c__SceneControls_Request_message_type_support_handle.typesupport_identifier) {
+    interface__srv__SceneControls_Request__rosidl_typesupport_introspection_c__SceneControls_Request_message_type_support_handle.typesupport_identifier =
+      rosidl_typesupport_introspection_c__identifier;
+  }
+  return &interface__srv__SceneControls_Request__rosidl_typesupport_introspection_c__SceneControls_Request_message_type_support_handle;
+}
+#ifdef __cplusplus
+}
+#endif
+
+// already included above
+// #include <stddef.h>
+// already included above
+// #include "interface/srv/detail/scene_controls__rosidl_typesupport_introspection_c.h"
+// already included above
+// #include "interface/msg/rosidl_typesupport_introspection_c__visibility_control.h"
+// already included above
+// #include "rosidl_typesupport_introspection_c/field_types.h"
+// already included above
+// #include "rosidl_typesupport_introspection_c/identifier.h"
+// already included above
+// #include "rosidl_typesupport_introspection_c/message_introspection.h"
+// already included above
+// #include "interface/srv/detail/scene_controls__functions.h"
+// already included above
+// #include "interface/srv/detail/scene_controls__struct.h"
+
+
+// Include directives for member types
+// Member `message`
+#include "rosidl_runtime_c/string_functions.h"
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+void interface__srv__SceneControls_Response__rosidl_typesupport_introspection_c__SceneControls_Response_init_function(
+  void * message_memory, enum rosidl_runtime_c__message_initialization _init)
+{
+  // TODO(karsten1987): initializers are not yet implemented for typesupport c
+  // see https://github.com/ros2/ros2/issues/397
+  (void) _init;
+  interface__srv__SceneControls_Response__init(message_memory);
+}
+
+void interface__srv__SceneControls_Response__rosidl_typesupport_introspection_c__SceneControls_Response_fini_function(void * message_memory)
+{
+  interface__srv__SceneControls_Response__fini(message_memory);
+}
+
+static rosidl_typesupport_introspection_c__MessageMember interface__srv__SceneControls_Response__rosidl_typesupport_introspection_c__SceneControls_Response_message_member_array[2] = {
+  {
+    "code",  // name
+    rosidl_typesupport_introspection_c__ROS_TYPE_INT32,  // type
+    0,  // upper bound of string
+    NULL,  // members of sub message
+    false,  // is array
+    0,  // array size
+    false,  // is upper bound
+    offsetof(interface__srv__SceneControls_Response, code),  // bytes offset in struct
+    NULL,  // default value
+    NULL,  // size() function pointer
+    NULL,  // get_const(index) function pointer
+    NULL,  // get(index) function pointer
+    NULL,  // fetch(index, &value) function pointer
+    NULL,  // assign(index, value) function pointer
+    NULL  // resize(index) function pointer
+  },
+  {
+    "message",  // name
+    rosidl_typesupport_introspection_c__ROS_TYPE_STRING,  // type
+    0,  // upper bound of string
+    NULL,  // members of sub message
+    false,  // is array
+    0,  // array size
+    false,  // is upper bound
+    offsetof(interface__srv__SceneControls_Response, message),  // bytes offset in struct
+    NULL,  // default value
+    NULL,  // size() function pointer
+    NULL,  // get_const(index) function pointer
+    NULL,  // get(index) function pointer
+    NULL,  // fetch(index, &value) function pointer
+    NULL,  // assign(index, value) function pointer
+    NULL  // resize(index) function pointer
+  }
+};
+
+static const rosidl_typesupport_introspection_c__MessageMembers interface__srv__SceneControls_Response__rosidl_typesupport_introspection_c__SceneControls_Response_message_members = {
+  "interface__srv",  // message namespace
+  "SceneControls_Response",  // message name
+  2,  // number of fields
+  sizeof(interface__srv__SceneControls_Response),
+  interface__srv__SceneControls_Response__rosidl_typesupport_introspection_c__SceneControls_Response_message_member_array,  // message members
+  interface__srv__SceneControls_Response__rosidl_typesupport_introspection_c__SceneControls_Response_init_function,  // function to initialize message memory (memory has to be allocated)
+  interface__srv__SceneControls_Response__rosidl_typesupport_introspection_c__SceneControls_Response_fini_function  // function to terminate message instance (will not free memory)
+};
+
+// this is not const since it must be initialized on first access
+// since C does not allow non-integral compile-time constants
+static rosidl_message_type_support_t interface__srv__SceneControls_Response__rosidl_typesupport_introspection_c__SceneControls_Response_message_type_support_handle = {
+  0,
+  &interface__srv__SceneControls_Response__rosidl_typesupport_introspection_c__SceneControls_Response_message_members,
+  get_message_typesupport_handle_function,
+};
+
+ROSIDL_TYPESUPPORT_INTROSPECTION_C_EXPORT_interface
+const rosidl_message_type_support_t *
+ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, interface, srv, SceneControls_Response)() {
+  if (!interface__srv__SceneControls_Response__rosidl_typesupport_introspection_c__SceneControls_Response_message_type_support_handle.typesupport_identifier) {
+    interface__srv__SceneControls_Response__rosidl_typesupport_introspection_c__SceneControls_Response_message_type_support_handle.typesupport_identifier =
+      rosidl_typesupport_introspection_c__identifier;
+  }
+  return &interface__srv__SceneControls_Response__rosidl_typesupport_introspection_c__SceneControls_Response_message_type_support_handle;
+}
+#ifdef __cplusplus
+}
+#endif
+
+#include "rosidl_runtime_c/service_type_support_struct.h"
+// already included above
+// #include "interface/msg/rosidl_typesupport_introspection_c__visibility_control.h"
+// already included above
+// #include "interface/srv/detail/scene_controls__rosidl_typesupport_introspection_c.h"
+// already included above
+// #include "rosidl_typesupport_introspection_c/identifier.h"
+#include "rosidl_typesupport_introspection_c/service_introspection.h"
+
+// this is intentionally not const to allow initialization later to prevent an initialization race
+static rosidl_typesupport_introspection_c__ServiceMembers interface__srv__detail__scene_controls__rosidl_typesupport_introspection_c__SceneControls_service_members = {
+  "interface__srv",  // service namespace
+  "SceneControls",  // service name
+  // these two fields are initialized below on the first access
+  NULL,  // request message
+  // interface__srv__detail__scene_controls__rosidl_typesupport_introspection_c__SceneControls_Request_message_type_support_handle,
+  NULL  // response message
+  // interface__srv__detail__scene_controls__rosidl_typesupport_introspection_c__SceneControls_Response_message_type_support_handle
+};
+
+static rosidl_service_type_support_t interface__srv__detail__scene_controls__rosidl_typesupport_introspection_c__SceneControls_service_type_support_handle = {
+  0,
+  &interface__srv__detail__scene_controls__rosidl_typesupport_introspection_c__SceneControls_service_members,
+  get_service_typesupport_handle_function,
+};
+
+// Forward declaration of request/response type support functions
+const rosidl_message_type_support_t *
+ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, interface, srv, SceneControls_Request)();
+
+const rosidl_message_type_support_t *
+ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, interface, srv, SceneControls_Response)();
+
+ROSIDL_TYPESUPPORT_INTROSPECTION_C_EXPORT_interface
+const rosidl_service_type_support_t *
+ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_SYMBOL_NAME(rosidl_typesupport_introspection_c, interface, srv, SceneControls)() {
+  if (!interface__srv__detail__scene_controls__rosidl_typesupport_introspection_c__SceneControls_service_type_support_handle.typesupport_identifier) {
+    interface__srv__detail__scene_controls__rosidl_typesupport_introspection_c__SceneControls_service_type_support_handle.typesupport_identifier =
+      rosidl_typesupport_introspection_c__identifier;
+  }
+  rosidl_typesupport_introspection_c__ServiceMembers * service_members =
+    (rosidl_typesupport_introspection_c__ServiceMembers *)interface__srv__detail__scene_controls__rosidl_typesupport_introspection_c__SceneControls_service_type_support_handle.data;
+
+  if (!service_members->request_members_) {
+    service_members->request_members_ =
+      (const rosidl_typesupport_introspection_c__MessageMembers *)
+      ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, interface, srv, SceneControls_Request)()->data;
+  }
+  if (!service_members->response_members_) {
+    service_members->response_members_ =
+      (const rosidl_typesupport_introspection_c__MessageMembers *)
+      ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_c, interface, srv, SceneControls_Response)()->data;
+  }
+
+  return &interface__srv__detail__scene_controls__rosidl_typesupport_introspection_c__SceneControls_service_type_support_handle;
+}

+ 353 - 0
install/interface/include/interface/interface/srv/detail/scene_controls__type_support.cpp

@@ -0,0 +1,353 @@
+// generated from rosidl_typesupport_introspection_cpp/resource/idl__type_support.cpp.em
+// with input from interface:srv/SceneControls.idl
+// generated code does not contain a copyright notice
+
+#include "array"
+#include "cstddef"
+#include "string"
+#include "vector"
+#include "rosidl_runtime_c/message_type_support_struct.h"
+#include "rosidl_typesupport_cpp/message_type_support.hpp"
+#include "rosidl_typesupport_interface/macros.h"
+#include "interface/srv/detail/scene_controls__struct.hpp"
+#include "rosidl_typesupport_introspection_cpp/field_types.hpp"
+#include "rosidl_typesupport_introspection_cpp/identifier.hpp"
+#include "rosidl_typesupport_introspection_cpp/message_introspection.hpp"
+#include "rosidl_typesupport_introspection_cpp/message_type_support_decl.hpp"
+#include "rosidl_typesupport_introspection_cpp/visibility_control.h"
+
+namespace interface
+{
+
+namespace srv
+{
+
+namespace rosidl_typesupport_introspection_cpp
+{
+
+void SceneControls_Request_init_function(
+  void * message_memory, rosidl_runtime_cpp::MessageInitialization _init)
+{
+  new (message_memory) interface::srv::SceneControls_Request(_init);
+}
+
+void SceneControls_Request_fini_function(void * message_memory)
+{
+  auto typed_message = static_cast<interface::srv::SceneControls_Request *>(message_memory);
+  typed_message->~SceneControls_Request();
+}
+
+static const ::rosidl_typesupport_introspection_cpp::MessageMember SceneControls_Request_message_member_array[1] = {
+  {
+    "start",  // name
+    ::rosidl_typesupport_introspection_cpp::ROS_TYPE_INT32,  // type
+    0,  // upper bound of string
+    nullptr,  // members of sub message
+    false,  // is array
+    0,  // array size
+    false,  // is upper bound
+    offsetof(interface::srv::SceneControls_Request, start),  // bytes offset in struct
+    nullptr,  // default value
+    nullptr,  // size() function pointer
+    nullptr,  // get_const(index) function pointer
+    nullptr,  // get(index) function pointer
+    nullptr,  // fetch(index, &value) function pointer
+    nullptr,  // assign(index, value) function pointer
+    nullptr  // resize(index) function pointer
+  }
+};
+
+static const ::rosidl_typesupport_introspection_cpp::MessageMembers SceneControls_Request_message_members = {
+  "interface::srv",  // message namespace
+  "SceneControls_Request",  // message name
+  1,  // number of fields
+  sizeof(interface::srv::SceneControls_Request),
+  SceneControls_Request_message_member_array,  // message members
+  SceneControls_Request_init_function,  // function to initialize message memory (memory has to be allocated)
+  SceneControls_Request_fini_function  // function to terminate message instance (will not free memory)
+};
+
+static const rosidl_message_type_support_t SceneControls_Request_message_type_support_handle = {
+  ::rosidl_typesupport_introspection_cpp::typesupport_identifier,
+  &SceneControls_Request_message_members,
+  get_message_typesupport_handle_function,
+};
+
+}  // namespace rosidl_typesupport_introspection_cpp
+
+}  // namespace srv
+
+}  // namespace interface
+
+
+namespace rosidl_typesupport_introspection_cpp
+{
+
+template<>
+ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC
+const rosidl_message_type_support_t *
+get_message_type_support_handle<interface::srv::SceneControls_Request>()
+{
+  return &::interface::srv::rosidl_typesupport_introspection_cpp::SceneControls_Request_message_type_support_handle;
+}
+
+}  // namespace rosidl_typesupport_introspection_cpp
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC
+const rosidl_message_type_support_t *
+ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, interface, srv, SceneControls_Request)() {
+  return &::interface::srv::rosidl_typesupport_introspection_cpp::SceneControls_Request_message_type_support_handle;
+}
+
+#ifdef __cplusplus
+}
+#endif
+
+// already included above
+// #include "array"
+// already included above
+// #include "cstddef"
+// already included above
+// #include "string"
+// already included above
+// #include "vector"
+// already included above
+// #include "rosidl_runtime_c/message_type_support_struct.h"
+// already included above
+// #include "rosidl_typesupport_cpp/message_type_support.hpp"
+// already included above
+// #include "rosidl_typesupport_interface/macros.h"
+// already included above
+// #include "interface/srv/detail/scene_controls__struct.hpp"
+// already included above
+// #include "rosidl_typesupport_introspection_cpp/field_types.hpp"
+// already included above
+// #include "rosidl_typesupport_introspection_cpp/identifier.hpp"
+// already included above
+// #include "rosidl_typesupport_introspection_cpp/message_introspection.hpp"
+// already included above
+// #include "rosidl_typesupport_introspection_cpp/message_type_support_decl.hpp"
+// already included above
+// #include "rosidl_typesupport_introspection_cpp/visibility_control.h"
+
+namespace interface
+{
+
+namespace srv
+{
+
+namespace rosidl_typesupport_introspection_cpp
+{
+
+void SceneControls_Response_init_function(
+  void * message_memory, rosidl_runtime_cpp::MessageInitialization _init)
+{
+  new (message_memory) interface::srv::SceneControls_Response(_init);
+}
+
+void SceneControls_Response_fini_function(void * message_memory)
+{
+  auto typed_message = static_cast<interface::srv::SceneControls_Response *>(message_memory);
+  typed_message->~SceneControls_Response();
+}
+
+static const ::rosidl_typesupport_introspection_cpp::MessageMember SceneControls_Response_message_member_array[2] = {
+  {
+    "code",  // name
+    ::rosidl_typesupport_introspection_cpp::ROS_TYPE_INT32,  // type
+    0,  // upper bound of string
+    nullptr,  // members of sub message
+    false,  // is array
+    0,  // array size
+    false,  // is upper bound
+    offsetof(interface::srv::SceneControls_Response, code),  // bytes offset in struct
+    nullptr,  // default value
+    nullptr,  // size() function pointer
+    nullptr,  // get_const(index) function pointer
+    nullptr,  // get(index) function pointer
+    nullptr,  // fetch(index, &value) function pointer
+    nullptr,  // assign(index, value) function pointer
+    nullptr  // resize(index) function pointer
+  },
+  {
+    "message",  // name
+    ::rosidl_typesupport_introspection_cpp::ROS_TYPE_STRING,  // type
+    0,  // upper bound of string
+    nullptr,  // members of sub message
+    false,  // is array
+    0,  // array size
+    false,  // is upper bound
+    offsetof(interface::srv::SceneControls_Response, message),  // bytes offset in struct
+    nullptr,  // default value
+    nullptr,  // size() function pointer
+    nullptr,  // get_const(index) function pointer
+    nullptr,  // get(index) function pointer
+    nullptr,  // fetch(index, &value) function pointer
+    nullptr,  // assign(index, value) function pointer
+    nullptr  // resize(index) function pointer
+  }
+};
+
+static const ::rosidl_typesupport_introspection_cpp::MessageMembers SceneControls_Response_message_members = {
+  "interface::srv",  // message namespace
+  "SceneControls_Response",  // message name
+  2,  // number of fields
+  sizeof(interface::srv::SceneControls_Response),
+  SceneControls_Response_message_member_array,  // message members
+  SceneControls_Response_init_function,  // function to initialize message memory (memory has to be allocated)
+  SceneControls_Response_fini_function  // function to terminate message instance (will not free memory)
+};
+
+static const rosidl_message_type_support_t SceneControls_Response_message_type_support_handle = {
+  ::rosidl_typesupport_introspection_cpp::typesupport_identifier,
+  &SceneControls_Response_message_members,
+  get_message_typesupport_handle_function,
+};
+
+}  // namespace rosidl_typesupport_introspection_cpp
+
+}  // namespace srv
+
+}  // namespace interface
+
+
+namespace rosidl_typesupport_introspection_cpp
+{
+
+template<>
+ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC
+const rosidl_message_type_support_t *
+get_message_type_support_handle<interface::srv::SceneControls_Response>()
+{
+  return &::interface::srv::rosidl_typesupport_introspection_cpp::SceneControls_Response_message_type_support_handle;
+}
+
+}  // namespace rosidl_typesupport_introspection_cpp
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC
+const rosidl_message_type_support_t *
+ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, interface, srv, SceneControls_Response)() {
+  return &::interface::srv::rosidl_typesupport_introspection_cpp::SceneControls_Response_message_type_support_handle;
+}
+
+#ifdef __cplusplus
+}
+#endif
+
+#include "rosidl_runtime_c/service_type_support_struct.h"
+// already included above
+// #include "rosidl_typesupport_cpp/message_type_support.hpp"
+#include "rosidl_typesupport_cpp/service_type_support.hpp"
+// already included above
+// #include "rosidl_typesupport_interface/macros.h"
+// already included above
+// #include "rosidl_typesupport_introspection_cpp/visibility_control.h"
+// already included above
+// #include "interface/srv/detail/scene_controls__struct.hpp"
+// already included above
+// #include "rosidl_typesupport_introspection_cpp/identifier.hpp"
+// already included above
+// #include "rosidl_typesupport_introspection_cpp/message_type_support_decl.hpp"
+#include "rosidl_typesupport_introspection_cpp/service_introspection.hpp"
+#include "rosidl_typesupport_introspection_cpp/service_type_support_decl.hpp"
+
+namespace interface
+{
+
+namespace srv
+{
+
+namespace rosidl_typesupport_introspection_cpp
+{
+
+// this is intentionally not const to allow initialization later to prevent an initialization race
+static ::rosidl_typesupport_introspection_cpp::ServiceMembers SceneControls_service_members = {
+  "interface::srv",  // service namespace
+  "SceneControls",  // service name
+  // these two fields are initialized below on the first access
+  // see get_service_type_support_handle<interface::srv::SceneControls>()
+  nullptr,  // request message
+  nullptr  // response message
+};
+
+static const rosidl_service_type_support_t SceneControls_service_type_support_handle = {
+  ::rosidl_typesupport_introspection_cpp::typesupport_identifier,
+  &SceneControls_service_members,
+  get_service_typesupport_handle_function,
+};
+
+}  // namespace rosidl_typesupport_introspection_cpp
+
+}  // namespace srv
+
+}  // namespace interface
+
+
+namespace rosidl_typesupport_introspection_cpp
+{
+
+template<>
+ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC
+const rosidl_service_type_support_t *
+get_service_type_support_handle<interface::srv::SceneControls>()
+{
+  // get a handle to the value to be returned
+  auto service_type_support =
+    &::interface::srv::rosidl_typesupport_introspection_cpp::SceneControls_service_type_support_handle;
+  // get a non-const and properly typed version of the data void *
+  auto service_members = const_cast<::rosidl_typesupport_introspection_cpp::ServiceMembers *>(
+    static_cast<const ::rosidl_typesupport_introspection_cpp::ServiceMembers *>(
+      service_type_support->data));
+  // make sure that both the request_members_ and the response_members_ are initialized
+  // if they are not, initialize them
+  if (
+    service_members->request_members_ == nullptr ||
+    service_members->response_members_ == nullptr)
+  {
+    // initialize the request_members_ with the static function from the external library
+    service_members->request_members_ = static_cast<
+      const ::rosidl_typesupport_introspection_cpp::MessageMembers *
+      >(
+      ::rosidl_typesupport_introspection_cpp::get_message_type_support_handle<
+        ::interface::srv::SceneControls_Request
+      >()->data
+      );
+    // initialize the response_members_ with the static function from the external library
+    service_members->response_members_ = static_cast<
+      const ::rosidl_typesupport_introspection_cpp::MessageMembers *
+      >(
+      ::rosidl_typesupport_introspection_cpp::get_message_type_support_handle<
+        ::interface::srv::SceneControls_Response
+      >()->data
+      );
+  }
+  // finally return the properly initialized service_type_support handle
+  return service_type_support;
+}
+
+}  // namespace rosidl_typesupport_introspection_cpp
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_PUBLIC
+const rosidl_service_type_support_t *
+ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_SYMBOL_NAME(rosidl_typesupport_introspection_cpp, interface, srv, SceneControls)() {
+  return ::rosidl_typesupport_introspection_cpp::get_service_type_support_handle<interface::srv::SceneControls>();
+}
+
+#ifdef __cplusplus
+}
+#endif

+ 58 - 0
install/interface/include/interface/interface/srv/detail/scene_controls__type_support.h

@@ -0,0 +1,58 @@
+// generated from rosidl_generator_c/resource/idl__type_support.h.em
+// with input from interface:srv/SceneControls.idl
+// generated code does not contain a copyright notice
+
+#ifndef INTERFACE__SRV__DETAIL__SCENE_CONTROLS__TYPE_SUPPORT_H_
+#define INTERFACE__SRV__DETAIL__SCENE_CONTROLS__TYPE_SUPPORT_H_
+
+#include "rosidl_typesupport_interface/macros.h"
+
+#include "interface/msg/rosidl_generator_c__visibility_control.h"
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+#include "rosidl_runtime_c/message_type_support_struct.h"
+
+// Forward declare the get type support functions for this type.
+ROSIDL_GENERATOR_C_PUBLIC_interface
+const rosidl_message_type_support_t *
+ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(
+  rosidl_typesupport_c,
+  interface,
+  srv,
+  SceneControls_Request
+)();
+
+// already included above
+// #include "rosidl_runtime_c/message_type_support_struct.h"
+
+// Forward declare the get type support functions for this type.
+ROSIDL_GENERATOR_C_PUBLIC_interface
+const rosidl_message_type_support_t *
+ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(
+  rosidl_typesupport_c,
+  interface,
+  srv,
+  SceneControls_Response
+)();
+
+#include "rosidl_runtime_c/service_type_support_struct.h"
+
+// Forward declare the get type support functions for this type.
+ROSIDL_GENERATOR_C_PUBLIC_interface
+const rosidl_service_type_support_t *
+ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_SYMBOL_NAME(
+  rosidl_typesupport_c,
+  interface,
+  srv,
+  SceneControls
+)();
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif  // INTERFACE__SRV__DETAIL__SCENE_CONTROLS__TYPE_SUPPORT_H_

+ 71 - 0
install/interface/include/interface/interface/srv/detail/scene_controls__type_support.hpp

@@ -0,0 +1,71 @@
+// generated from rosidl_generator_cpp/resource/idl__type_support.hpp.em
+// with input from interface:srv/SceneControls.idl
+// generated code does not contain a copyright notice
+
+#ifndef INTERFACE__SRV__DETAIL__SCENE_CONTROLS__TYPE_SUPPORT_HPP_
+#define INTERFACE__SRV__DETAIL__SCENE_CONTROLS__TYPE_SUPPORT_HPP_
+
+#include "rosidl_typesupport_interface/macros.h"
+
+#include "interface/msg/rosidl_generator_cpp__visibility_control.hpp"
+
+#include "rosidl_typesupport_cpp/service_type_support.hpp"
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+// Forward declare the get type support functions for this type.
+ROSIDL_GENERATOR_CPP_PUBLIC_interface
+const rosidl_service_type_support_t *
+  ROSIDL_TYPESUPPORT_INTERFACE__SERVICE_SYMBOL_NAME(
+  rosidl_typesupport_cpp,
+  interface,
+  srv,
+  SceneControls
+)();
+#ifdef __cplusplus
+}
+#endif
+
+#include "rosidl_typesupport_cpp/message_type_support.hpp"
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+// Forward declare the get type support functions for this type.
+ROSIDL_GENERATOR_CPP_PUBLIC_interface
+const rosidl_message_type_support_t *
+  ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(
+  rosidl_typesupport_cpp,
+  interface,
+  srv,
+  SceneControls_Request
+)();
+#ifdef __cplusplus
+}
+#endif
+
+// already included above
+// #include "rosidl_typesupport_cpp/message_type_support.hpp"
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+// Forward declare the get type support functions for this type.
+ROSIDL_GENERATOR_CPP_PUBLIC_interface
+const rosidl_message_type_support_t *
+  ROSIDL_TYPESUPPORT_INTERFACE__MESSAGE_SYMBOL_NAME(
+  rosidl_typesupport_cpp,
+  interface,
+  srv,
+  SceneControls_Response
+)();
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif  // INTERFACE__SRV__DETAIL__SCENE_CONTROLS__TYPE_SUPPORT_HPP_

+ 12 - 0
install/interface/include/interface/interface/srv/scene_controls.h

@@ -0,0 +1,12 @@
+// generated from rosidl_generator_c/resource/idl.h.em
+// with input from interface:srv/SceneControls.idl
+// generated code does not contain a copyright notice
+
+#ifndef INTERFACE__SRV__SCENE_CONTROLS_H_
+#define INTERFACE__SRV__SCENE_CONTROLS_H_
+
+#include "interface/srv/detail/scene_controls__struct.h"
+#include "interface/srv/detail/scene_controls__functions.h"
+#include "interface/srv/detail/scene_controls__type_support.h"
+
+#endif  // INTERFACE__SRV__SCENE_CONTROLS_H_

+ 12 - 0
install/interface/include/interface/interface/srv/scene_controls.hpp

@@ -0,0 +1,12 @@
+// generated from rosidl_generator_cpp/resource/idl.hpp.em
+// generated code does not contain a copyright notice
+
+#ifndef INTERFACE__SRV__SCENE_CONTROLS_HPP_
+#define INTERFACE__SRV__SCENE_CONTROLS_HPP_
+
+#include "interface/srv/detail/scene_controls__struct.hpp"
+#include "interface/srv/detail/scene_controls__builder.hpp"
+#include "interface/srv/detail/scene_controls__traits.hpp"
+#include "interface/srv/detail/scene_controls__type_support.hpp"
+
+#endif  // INTERFACE__SRV__SCENE_CONTROLS_HPP_

+ 1 - 0
install/interface/share/ament_index/resource_index/package_run_dependencies/interface

@@ -0,0 +1 @@
+std_msgs;rosidl_default_runtime;ament_lint_auto;ament_lint_common

+ 0 - 0
install/interface/share/ament_index/resource_index/packages/interface


+ 1 - 0
install/interface/share/ament_index/resource_index/parent_prefix_path/interface

@@ -0,0 +1 @@
+/home/wljy/zkf/recharge/install/wheelchair_state_machine:/home/wljy/zkf/recharge/install/interface:/opt/ros/humble

+ 4 - 0
install/interface/share/ament_index/resource_index/rosidl_interfaces/interface

@@ -0,0 +1,4 @@
+srv/SceneControls.idl
+srv/SceneControls.srv
+srv/SceneControls_Request.msg
+srv/SceneControls_Response.msg

+ 1 - 0
install/interface/share/colcon-core/packages/interface

@@ -0,0 +1 @@
+rosidl_default_runtime:std_msgs

+ 92 - 0
install/interface/share/interface/cmake/ament_cmake_export_dependencies-extras.cmake

@@ -0,0 +1,92 @@
+# generated from ament_cmake_export_dependencies/cmake/ament_cmake_export_dependencies-extras.cmake.in
+
+set(_exported_dependencies "std_msgs;rosidl_runtime_c;rosidl_typesupport_interface;rcutils;fastrtps_cmake_module;fastcdr;rosidl_runtime_c;rosidl_runtime_cpp;rosidl_typesupport_fastrtps_c;rosidl_typesupport_fastrtps_cpp;rosidl_typesupport_interface;rosidl_runtime_cpp;fastrtps_cmake_module;fastcdr;rmw;rosidl_runtime_c;rosidl_runtime_cpp;rosidl_typesupport_fastrtps_cpp;rosidl_typesupport_interface;rosidl_runtime_c;rosidl_typesupport_c;rosidl_typesupport_interface;rosidl_runtime_c;rosidl_runtime_cpp;rosidl_typesupport_c;rosidl_typesupport_cpp;rosidl_typesupport_interface")
+
+find_package(ament_cmake_libraries QUIET REQUIRED)
+
+# find_package() all dependencies
+# and append their DEFINITIONS INCLUDE_DIRS, LIBRARIES, and LINK_FLAGS
+# variables to interface_DEFINITIONS, interface_INCLUDE_DIRS,
+# interface_LIBRARIES, and interface_LINK_FLAGS.
+# Additionally collect the direct dependency names in
+# interface_DEPENDENCIES as well as the recursive dependency names
+# in interface_RECURSIVE_DEPENDENCIES.
+if(NOT _exported_dependencies STREQUAL "")
+  find_package(ament_cmake_core QUIET REQUIRED)
+  set(interface_DEPENDENCIES ${_exported_dependencies})
+  set(interface_RECURSIVE_DEPENDENCIES ${_exported_dependencies})
+  set(_libraries)
+  foreach(_dep ${_exported_dependencies})
+    if(NOT ${_dep}_FOUND)
+      find_package("${_dep}" QUIET REQUIRED)
+    endif()
+    # if a package provides modern CMake interface targets use them
+    # exclusively assuming the classic CMake variables only exist for
+    # backward compatibility
+    set(use_modern_cmake FALSE)
+    if(NOT "${${_dep}_TARGETS}" STREQUAL "")
+      foreach(_target ${${_dep}_TARGETS})
+        # only use actual targets
+        # in case a package uses this variable for other content
+        if(TARGET "${_target}")
+          get_target_property(_include_dirs ${_target} INTERFACE_INCLUDE_DIRECTORIES)
+          if(_include_dirs)
+            list_append_unique(interface_INCLUDE_DIRS "${_include_dirs}")
+          endif()
+
+          get_target_property(_imported_configurations ${_target} IMPORTED_CONFIGURATIONS)
+          if(_imported_configurations)
+            string(TOUPPER "${_imported_configurations}" _imported_configurations)
+            if(DEBUG_CONFIGURATIONS)
+              string(TOUPPER "${DEBUG_CONFIGURATIONS}" _debug_configurations_uppercase)
+            else()
+              set(_debug_configurations_uppercase "DEBUG")
+            endif()
+            foreach(_imported_config ${_imported_configurations})
+              get_target_property(_imported_implib ${_target} IMPORTED_IMPLIB_${_imported_config})
+              if(_imported_implib)
+                set(_imported_implib_config "optimized")
+                if(${_imported_config} IN_LIST _debug_configurations_uppercase)
+                  set(_imported_implib_config "debug")
+                endif()
+                list(APPEND _libraries ${_imported_implib_config} ${_imported_implib})
+              else()
+                get_target_property(_imported_location ${_target} IMPORTED_LOCATION_${_imported_config})
+                if(_imported_location)
+                  list(APPEND _libraries "${_imported_location}")
+                endif()
+              endif()
+            endforeach()
+          endif()
+
+          get_target_property(_link_libraries ${_target} INTERFACE_LINK_LIBRARIES)
+          if(_link_libraries)
+            list(APPEND _libraries "${_link_libraries}")
+          endif()
+          set(use_modern_cmake TRUE)
+        endif()
+      endforeach()
+    endif()
+    if(NOT use_modern_cmake)
+      if(${_dep}_DEFINITIONS)
+        list_append_unique(interface_DEFINITIONS "${${_dep}_DEFINITIONS}")
+      endif()
+      if(${_dep}_INCLUDE_DIRS)
+        list_append_unique(interface_INCLUDE_DIRS "${${_dep}_INCLUDE_DIRS}")
+      endif()
+      if(${_dep}_LIBRARIES)
+        list(APPEND _libraries "${${_dep}_LIBRARIES}")
+      endif()
+      if(${_dep}_LINK_FLAGS)
+        list_append_unique(interface_LINK_FLAGS "${${_dep}_LINK_FLAGS}")
+      endif()
+      if(${_dep}_RECURSIVE_DEPENDENCIES)
+        list_append_unique(interface_RECURSIVE_DEPENDENCIES "${${_dep}_RECURSIVE_DEPENDENCIES}")
+      endif()
+    endif()
+    if(_libraries)
+      ament_libraries_deduplicate(_libraries "${_libraries}")
+      list(APPEND interface_LIBRARIES "${_libraries}")
+    endif()
+  endforeach()
+endif()

+ 16 - 0
install/interface/share/interface/cmake/ament_cmake_export_include_directories-extras.cmake

@@ -0,0 +1,16 @@
+# generated from ament_cmake_export_include_directories/cmake/ament_cmake_export_include_directories-extras.cmake.in
+
+set(_exported_include_dirs "${interface_DIR}/../../../include/interface")
+
+# append include directories to interface_INCLUDE_DIRS
+# warn about not existing paths
+if(NOT _exported_include_dirs STREQUAL "")
+  find_package(ament_cmake_core QUIET REQUIRED)
+  foreach(_exported_include_dir ${_exported_include_dirs})
+    if(NOT IS_DIRECTORY "${_exported_include_dir}")
+      message(WARNING "Package 'interface' exports the include directory '${_exported_include_dir}' which doesn't exist")
+    endif()
+    normalize_path(_exported_include_dir "${_exported_include_dir}")
+    list(APPEND interface_INCLUDE_DIRS "${_exported_include_dir}")
+  endforeach()
+endif()

+ 141 - 0
install/interface/share/interface/cmake/ament_cmake_export_libraries-extras.cmake

@@ -0,0 +1,141 @@
+# generated from ament_cmake_export_libraries/cmake/template/ament_cmake_export_libraries.cmake.in
+
+set(_exported_libraries "interface__rosidl_generator_c;interface__rosidl_typesupport_c;interface__rosidl_typesupport_cpp")
+set(_exported_library_names "")
+
+# populate interface_LIBRARIES
+if(NOT _exported_libraries STREQUAL "")
+  # loop over libraries, either target names or absolute paths
+  list(LENGTH _exported_libraries _length)
+  set(_i 0)
+  while(_i LESS _length)
+    list(GET _exported_libraries ${_i} _arg)
+
+    # pass linker flags along
+    if("${_arg}" MATCHES "^-" AND NOT "${_arg}" MATCHES "^-[l|framework]")
+      list(APPEND interface_LIBRARIES "${_arg}")
+      math(EXPR _i "${_i} + 1")
+      continue()
+    endif()
+
+    if("${_arg}" MATCHES "^(debug|optimized|general)$")
+      # remember build configuration keyword
+      # and get following library
+      set(_cfg "${_arg}")
+      math(EXPR _i "${_i} + 1")
+      if(_i EQUAL _length)
+        message(FATAL_ERROR "Package 'interface' passes the build configuration keyword '${_cfg}' as the last exported library")
+      endif()
+      list(GET _exported_libraries ${_i} _library)
+    else()
+      # the value is a library without a build configuration keyword
+      set(_cfg "")
+      set(_library "${_arg}")
+    endif()
+    math(EXPR _i "${_i} + 1")
+
+    if(NOT IS_ABSOLUTE "${_library}")
+      # search for library target relative to this CMake file
+      set(_lib "NOTFOUND")
+      find_library(
+        _lib NAMES "${_library}"
+        PATHS "${interface_DIR}/../../../lib"
+        NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH
+      )
+
+      if(NOT _lib)
+        # warn about not existing library and ignore it
+        message(FATAL_ERROR "Package 'interface' exports the library '${_library}' which couldn't be found")
+      elseif(NOT IS_ABSOLUTE "${_lib}")
+        # the found library must be an absolute path
+        message(FATAL_ERROR "Package 'interface' found the library '${_library}' at '${_lib}' which is not an absolute path")
+      elseif(NOT EXISTS "${_lib}")
+        # the found library must exist
+        message(FATAL_ERROR "Package 'interface' found the library '${_lib}' which doesn't exist")
+      else()
+        list(APPEND interface_LIBRARIES ${_cfg} "${_lib}")
+      endif()
+
+    else()
+      if(NOT EXISTS "${_library}")
+        # the found library must exist
+        message(WARNING "Package 'interface' exports the library '${_library}' which doesn't exist")
+      else()
+        list(APPEND interface_LIBRARIES ${_cfg} "${_library}")
+      endif()
+    endif()
+  endwhile()
+endif()
+
+# find_library() library names with optional LIBRARY_DIRS
+# and add the libraries to interface_LIBRARIES
+if(NOT _exported_library_names STREQUAL "")
+  # loop over library names
+  # but remember related build configuration keyword if available
+  list(LENGTH _exported_library_names _length)
+  set(_i 0)
+  while(_i LESS _length)
+    list(GET _exported_library_names ${_i} _arg)
+    # pass linker flags along
+    if("${_arg}" MATCHES "^-" AND NOT "${_arg}" MATCHES "^-[l|framework]")
+      list(APPEND interface_LIBRARIES "${_arg}")
+      math(EXPR _i "${_i} + 1")
+      continue()
+    endif()
+
+    if("${_arg}" MATCHES "^(debug|optimized|general)$")
+      # remember build configuration keyword
+      # and get following library name
+      set(_cfg "${_arg}")
+      math(EXPR _i "${_i} + 1")
+      if(_i EQUAL _length)
+        message(FATAL_ERROR "Package 'interface' passes the build configuration keyword '${_cfg}' as the last exported target")
+      endif()
+      list(GET _exported_library_names ${_i} _library)
+    else()
+      # the value is a library target without a build configuration keyword
+      set(_cfg "")
+      set(_library "${_arg}")
+    endif()
+    math(EXPR _i "${_i} + 1")
+
+    # extract optional LIBRARY_DIRS from library name
+    string(REPLACE ":" ";" _library_dirs "${_library}")
+    list(GET _library_dirs 0 _library_name)
+    list(REMOVE_AT _library_dirs 0)
+
+    set(_lib "NOTFOUND")
+    if(NOT _library_dirs)
+      # search for library in the common locations
+      find_library(
+        _lib
+        NAMES "${_library_name}"
+      )
+      if(NOT _lib)
+        # warn about not existing library and later ignore it
+        message(WARNING "Package 'interface' exports library '${_library_name}' which couldn't be found")
+      endif()
+    else()
+      # search for library in the specified directories
+      find_library(
+        _lib
+        NAMES "${_library_name}"
+        PATHS ${_library_dirs}
+        NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH
+      )
+      if(NOT _lib)
+        # warn about not existing library and later ignore it
+        message(WARNING
+          "Package 'interface' exports library '${_library_name}' with LIBRARY_DIRS '${_library_dirs}' which couldn't be found")
+      endif()
+    endif()
+    if(_lib)
+      list(APPEND interface_LIBRARIES ${_cfg} "${_lib}")
+    endif()
+  endwhile()
+endif()
+
+# TODO(dirk-thomas) deduplicate interface_LIBRARIES
+# while maintaining library order
+# as well as build configuration keywords
+# as well as linker flags

+ 27 - 0
install/interface/share/interface/cmake/ament_cmake_export_targets-extras.cmake

@@ -0,0 +1,27 @@
+# generated from ament_cmake_export_targets/cmake/ament_cmake_export_targets-extras.cmake.in
+
+set(_exported_targets "export_interface__rosidl_generator_c;export_interface__rosidl_typesupport_fastrtps_c;export_interface__rosidl_generator_cpp;export_interface__rosidl_typesupport_fastrtps_cpp;interface__rosidl_typesupport_introspection_c;interface__rosidl_typesupport_c;interface__rosidl_typesupport_introspection_cpp;interface__rosidl_typesupport_cpp;export_interface__rosidl_generator_py")
+
+# include all exported targets
+if(NOT _exported_targets STREQUAL "")
+  foreach(_target ${_exported_targets})
+    set(_export_file "${interface_DIR}/${_target}Export.cmake")
+    include("${_export_file}")
+
+    # extract the target names associated with the export
+    set(_regex "foreach\\((_cmake)?_expected_?[Tt]arget (IN ITEMS )?(.+)\\)")
+    file(
+      STRINGS "${_export_file}" _foreach_targets
+      REGEX "${_regex}")
+    list(LENGTH _foreach_targets _matches)
+    if(NOT _matches EQUAL 1)
+      message(FATAL_ERROR
+        "Failed to find exported target names in '${_export_file}'")
+    endif()
+    string(REGEX REPLACE "${_regex}" "\\3" _targets "${_foreach_targets}")
+    string(REPLACE " " ";" _targets "${_targets}")
+    list(LENGTH _targets _length)
+
+    list(APPEND interface_TARGETS ${_targets})
+  endforeach()
+endif()

+ 19 - 0
install/interface/share/interface/cmake/export_interface__rosidl_generator_cExport-noconfig.cmake

@@ -0,0 +1,19 @@
+#----------------------------------------------------------------
+# Generated CMake target import file.
+#----------------------------------------------------------------
+
+# Commands may need to know the format version.
+set(CMAKE_IMPORT_FILE_VERSION 1)
+
+# Import target "interface::interface__rosidl_generator_c" for configuration ""
+set_property(TARGET interface::interface__rosidl_generator_c APPEND PROPERTY IMPORTED_CONFIGURATIONS NOCONFIG)
+set_target_properties(interface::interface__rosidl_generator_c PROPERTIES
+  IMPORTED_LOCATION_NOCONFIG "${_IMPORT_PREFIX}/lib/libinterface__rosidl_generator_c.so"
+  IMPORTED_SONAME_NOCONFIG "libinterface__rosidl_generator_c.so"
+  )
+
+list(APPEND _IMPORT_CHECK_TARGETS interface::interface__rosidl_generator_c )
+list(APPEND _IMPORT_CHECK_FILES_FOR_interface::interface__rosidl_generator_c "${_IMPORT_PREFIX}/lib/libinterface__rosidl_generator_c.so" )
+
+# Commands beyond this point should not need to know the version.
+set(CMAKE_IMPORT_FILE_VERSION)

+ 99 - 0
install/interface/share/interface/cmake/export_interface__rosidl_generator_cExport.cmake

@@ -0,0 +1,99 @@
+# Generated by CMake
+
+if("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}" LESS 2.6)
+   message(FATAL_ERROR "CMake >= 2.6.0 required")
+endif()
+cmake_policy(PUSH)
+cmake_policy(VERSION 2.6...3.20)
+#----------------------------------------------------------------
+# Generated CMake target import file.
+#----------------------------------------------------------------
+
+# Commands may need to know the format version.
+set(CMAKE_IMPORT_FILE_VERSION 1)
+
+# Protect against multiple inclusion, which would fail when already imported targets are added once more.
+set(_targetsDefined)
+set(_targetsNotDefined)
+set(_expectedTargets)
+foreach(_expectedTarget interface::interface__rosidl_generator_c)
+  list(APPEND _expectedTargets ${_expectedTarget})
+  if(NOT TARGET ${_expectedTarget})
+    list(APPEND _targetsNotDefined ${_expectedTarget})
+  endif()
+  if(TARGET ${_expectedTarget})
+    list(APPEND _targetsDefined ${_expectedTarget})
+  endif()
+endforeach()
+if("${_targetsDefined}" STREQUAL "${_expectedTargets}")
+  unset(_targetsDefined)
+  unset(_targetsNotDefined)
+  unset(_expectedTargets)
+  set(CMAKE_IMPORT_FILE_VERSION)
+  cmake_policy(POP)
+  return()
+endif()
+if(NOT "${_targetsDefined}" STREQUAL "")
+  message(FATAL_ERROR "Some (but not all) targets in this export set were already defined.\nTargets Defined: ${_targetsDefined}\nTargets not yet defined: ${_targetsNotDefined}\n")
+endif()
+unset(_targetsDefined)
+unset(_targetsNotDefined)
+unset(_expectedTargets)
+
+
+# Compute the installation prefix relative to this file.
+get_filename_component(_IMPORT_PREFIX "${CMAKE_CURRENT_LIST_FILE}" PATH)
+get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
+get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
+get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
+if(_IMPORT_PREFIX STREQUAL "/")
+  set(_IMPORT_PREFIX "")
+endif()
+
+# Create imported target interface::interface__rosidl_generator_c
+add_library(interface::interface__rosidl_generator_c SHARED IMPORTED)
+
+set_target_properties(interface::interface__rosidl_generator_c PROPERTIES
+  INTERFACE_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include/interface"
+  INTERFACE_LINK_LIBRARIES "std_msgs::std_msgs__rosidl_generator_c;builtin_interfaces::builtin_interfaces__rosidl_generator_c;rosidl_runtime_c::rosidl_runtime_c;rosidl_typesupport_interface::rosidl_typesupport_interface;rcutils::rcutils"
+)
+
+if(CMAKE_VERSION VERSION_LESS 2.8.12)
+  message(FATAL_ERROR "This file relies on consumers using CMake 2.8.12 or greater.")
+endif()
+
+# Load information for each installed configuration.
+get_filename_component(_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH)
+file(GLOB CONFIG_FILES "${_DIR}/export_interface__rosidl_generator_cExport-*.cmake")
+foreach(f ${CONFIG_FILES})
+  include(${f})
+endforeach()
+
+# Cleanup temporary variables.
+set(_IMPORT_PREFIX)
+
+# Loop over all imported files and verify that they actually exist
+foreach(target ${_IMPORT_CHECK_TARGETS} )
+  foreach(file ${_IMPORT_CHECK_FILES_FOR_${target}} )
+    if(NOT EXISTS "${file}" )
+      message(FATAL_ERROR "The imported target \"${target}\" references the file
+   \"${file}\"
+but this file does not exist.  Possible reasons include:
+* The file was deleted, renamed, or moved to another location.
+* An install or uninstall procedure did not complete successfully.
+* The installation package was faulty and contained
+   \"${CMAKE_CURRENT_LIST_FILE}\"
+but not all the files it references.
+")
+    endif()
+  endforeach()
+  unset(_IMPORT_CHECK_FILES_FOR_${target})
+endforeach()
+unset(_IMPORT_CHECK_TARGETS)
+
+# This file does not depend on other imported targets which have
+# been exported from the same project but in a separate export set.
+
+# Commands beyond this point should not need to know the version.
+set(CMAKE_IMPORT_FILE_VERSION)
+cmake_policy(POP)

+ 99 - 0
install/interface/share/interface/cmake/export_interface__rosidl_generator_cppExport.cmake

@@ -0,0 +1,99 @@
+# Generated by CMake
+
+if("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}" LESS 2.6)
+   message(FATAL_ERROR "CMake >= 2.6.0 required")
+endif()
+cmake_policy(PUSH)
+cmake_policy(VERSION 2.6...3.20)
+#----------------------------------------------------------------
+# Generated CMake target import file.
+#----------------------------------------------------------------
+
+# Commands may need to know the format version.
+set(CMAKE_IMPORT_FILE_VERSION 1)
+
+# Protect against multiple inclusion, which would fail when already imported targets are added once more.
+set(_targetsDefined)
+set(_targetsNotDefined)
+set(_expectedTargets)
+foreach(_expectedTarget interface::interface__rosidl_generator_cpp)
+  list(APPEND _expectedTargets ${_expectedTarget})
+  if(NOT TARGET ${_expectedTarget})
+    list(APPEND _targetsNotDefined ${_expectedTarget})
+  endif()
+  if(TARGET ${_expectedTarget})
+    list(APPEND _targetsDefined ${_expectedTarget})
+  endif()
+endforeach()
+if("${_targetsDefined}" STREQUAL "${_expectedTargets}")
+  unset(_targetsDefined)
+  unset(_targetsNotDefined)
+  unset(_expectedTargets)
+  set(CMAKE_IMPORT_FILE_VERSION)
+  cmake_policy(POP)
+  return()
+endif()
+if(NOT "${_targetsDefined}" STREQUAL "")
+  message(FATAL_ERROR "Some (but not all) targets in this export set were already defined.\nTargets Defined: ${_targetsDefined}\nTargets not yet defined: ${_targetsNotDefined}\n")
+endif()
+unset(_targetsDefined)
+unset(_targetsNotDefined)
+unset(_expectedTargets)
+
+
+# Compute the installation prefix relative to this file.
+get_filename_component(_IMPORT_PREFIX "${CMAKE_CURRENT_LIST_FILE}" PATH)
+get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
+get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
+get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
+if(_IMPORT_PREFIX STREQUAL "/")
+  set(_IMPORT_PREFIX "")
+endif()
+
+# Create imported target interface::interface__rosidl_generator_cpp
+add_library(interface::interface__rosidl_generator_cpp INTERFACE IMPORTED)
+
+set_target_properties(interface::interface__rosidl_generator_cpp PROPERTIES
+  INTERFACE_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include/interface"
+  INTERFACE_LINK_LIBRARIES "std_msgs::std_msgs__rosidl_generator_cpp;builtin_interfaces::builtin_interfaces__rosidl_generator_cpp;rosidl_runtime_cpp::rosidl_runtime_cpp"
+)
+
+if(CMAKE_VERSION VERSION_LESS 3.0.0)
+  message(FATAL_ERROR "This file relies on consumers using CMake 3.0.0 or greater.")
+endif()
+
+# Load information for each installed configuration.
+get_filename_component(_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH)
+file(GLOB CONFIG_FILES "${_DIR}/export_interface__rosidl_generator_cppExport-*.cmake")
+foreach(f ${CONFIG_FILES})
+  include(${f})
+endforeach()
+
+# Cleanup temporary variables.
+set(_IMPORT_PREFIX)
+
+# Loop over all imported files and verify that they actually exist
+foreach(target ${_IMPORT_CHECK_TARGETS} )
+  foreach(file ${_IMPORT_CHECK_FILES_FOR_${target}} )
+    if(NOT EXISTS "${file}" )
+      message(FATAL_ERROR "The imported target \"${target}\" references the file
+   \"${file}\"
+but this file does not exist.  Possible reasons include:
+* The file was deleted, renamed, or moved to another location.
+* An install or uninstall procedure did not complete successfully.
+* The installation package was faulty and contained
+   \"${CMAKE_CURRENT_LIST_FILE}\"
+but not all the files it references.
+")
+    endif()
+  endforeach()
+  unset(_IMPORT_CHECK_FILES_FOR_${target})
+endforeach()
+unset(_IMPORT_CHECK_TARGETS)
+
+# This file does not depend on other imported targets which have
+# been exported from the same project but in a separate export set.
+
+# Commands beyond this point should not need to know the version.
+set(CMAKE_IMPORT_FILE_VERSION)
+cmake_policy(POP)

+ 19 - 0
install/interface/share/interface/cmake/export_interface__rosidl_generator_pyExport-noconfig.cmake

@@ -0,0 +1,19 @@
+#----------------------------------------------------------------
+# Generated CMake target import file.
+#----------------------------------------------------------------
+
+# Commands may need to know the format version.
+set(CMAKE_IMPORT_FILE_VERSION 1)
+
+# Import target "interface::interface__rosidl_generator_py" for configuration ""
+set_property(TARGET interface::interface__rosidl_generator_py APPEND PROPERTY IMPORTED_CONFIGURATIONS NOCONFIG)
+set_target_properties(interface::interface__rosidl_generator_py PROPERTIES
+  IMPORTED_LOCATION_NOCONFIG "${_IMPORT_PREFIX}/lib/libinterface__rosidl_generator_py.so"
+  IMPORTED_SONAME_NOCONFIG "libinterface__rosidl_generator_py.so"
+  )
+
+list(APPEND _IMPORT_CHECK_TARGETS interface::interface__rosidl_generator_py )
+list(APPEND _IMPORT_CHECK_FILES_FOR_interface::interface__rosidl_generator_py "${_IMPORT_PREFIX}/lib/libinterface__rosidl_generator_py.so" )
+
+# Commands beyond this point should not need to know the version.
+set(CMAKE_IMPORT_FILE_VERSION)

+ 114 - 0
install/interface/share/interface/cmake/export_interface__rosidl_generator_pyExport.cmake

@@ -0,0 +1,114 @@
+# Generated by CMake
+
+if("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}" LESS 2.6)
+   message(FATAL_ERROR "CMake >= 2.6.0 required")
+endif()
+cmake_policy(PUSH)
+cmake_policy(VERSION 2.6...3.20)
+#----------------------------------------------------------------
+# Generated CMake target import file.
+#----------------------------------------------------------------
+
+# Commands may need to know the format version.
+set(CMAKE_IMPORT_FILE_VERSION 1)
+
+# Protect against multiple inclusion, which would fail when already imported targets are added once more.
+set(_targetsDefined)
+set(_targetsNotDefined)
+set(_expectedTargets)
+foreach(_expectedTarget interface::interface__rosidl_generator_py)
+  list(APPEND _expectedTargets ${_expectedTarget})
+  if(NOT TARGET ${_expectedTarget})
+    list(APPEND _targetsNotDefined ${_expectedTarget})
+  endif()
+  if(TARGET ${_expectedTarget})
+    list(APPEND _targetsDefined ${_expectedTarget})
+  endif()
+endforeach()
+if("${_targetsDefined}" STREQUAL "${_expectedTargets}")
+  unset(_targetsDefined)
+  unset(_targetsNotDefined)
+  unset(_expectedTargets)
+  set(CMAKE_IMPORT_FILE_VERSION)
+  cmake_policy(POP)
+  return()
+endif()
+if(NOT "${_targetsDefined}" STREQUAL "")
+  message(FATAL_ERROR "Some (but not all) targets in this export set were already defined.\nTargets Defined: ${_targetsDefined}\nTargets not yet defined: ${_targetsNotDefined}\n")
+endif()
+unset(_targetsDefined)
+unset(_targetsNotDefined)
+unset(_expectedTargets)
+
+
+# Compute the installation prefix relative to this file.
+get_filename_component(_IMPORT_PREFIX "${CMAKE_CURRENT_LIST_FILE}" PATH)
+get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
+get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
+get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
+if(_IMPORT_PREFIX STREQUAL "/")
+  set(_IMPORT_PREFIX "")
+endif()
+
+# Create imported target interface::interface__rosidl_generator_py
+add_library(interface::interface__rosidl_generator_py SHARED IMPORTED)
+
+set_target_properties(interface::interface__rosidl_generator_py PROPERTIES
+  INTERFACE_LINK_LIBRARIES "interface::interface__rosidl_generator_c;/usr/lib/aarch64-linux-gnu/libpython3.10.so;interface::interface__rosidl_typesupport_c;std_msgs::std_msgs__rosidl_generator_py;builtin_interfaces::builtin_interfaces__rosidl_generator_py"
+)
+
+if(CMAKE_VERSION VERSION_LESS 2.8.12)
+  message(FATAL_ERROR "This file relies on consumers using CMake 2.8.12 or greater.")
+endif()
+
+# Load information for each installed configuration.
+get_filename_component(_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH)
+file(GLOB CONFIG_FILES "${_DIR}/export_interface__rosidl_generator_pyExport-*.cmake")
+foreach(f ${CONFIG_FILES})
+  include(${f})
+endforeach()
+
+# Cleanup temporary variables.
+set(_IMPORT_PREFIX)
+
+# Loop over all imported files and verify that they actually exist
+foreach(target ${_IMPORT_CHECK_TARGETS} )
+  foreach(file ${_IMPORT_CHECK_FILES_FOR_${target}} )
+    if(NOT EXISTS "${file}" )
+      message(FATAL_ERROR "The imported target \"${target}\" references the file
+   \"${file}\"
+but this file does not exist.  Possible reasons include:
+* The file was deleted, renamed, or moved to another location.
+* An install or uninstall procedure did not complete successfully.
+* The installation package was faulty and contained
+   \"${CMAKE_CURRENT_LIST_FILE}\"
+but not all the files it references.
+")
+    endif()
+  endforeach()
+  unset(_IMPORT_CHECK_FILES_FOR_${target})
+endforeach()
+unset(_IMPORT_CHECK_TARGETS)
+
+# Make sure the targets which have been exported in some other
+# export set exist.
+unset(${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE_targets)
+foreach(_target "interface::interface__rosidl_generator_c" "interface::interface__rosidl_typesupport_c" )
+  if(NOT TARGET "${_target}" )
+    set(${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE_targets "${${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE_targets} ${_target}")
+  endif()
+endforeach()
+
+if(DEFINED ${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE_targets)
+  if(CMAKE_FIND_PACKAGE_NAME)
+    set( ${CMAKE_FIND_PACKAGE_NAME}_FOUND FALSE)
+    set( ${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE "The following imported targets are referenced, but are missing: ${${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE_targets}")
+  else()
+    message(FATAL_ERROR "The following imported targets are referenced, but are missing: ${${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE_targets}")
+  endif()
+endif()
+unset(${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE_targets)
+
+# Commands beyond this point should not need to know the version.
+set(CMAKE_IMPORT_FILE_VERSION)
+cmake_policy(POP)

+ 19 - 0
install/interface/share/interface/cmake/export_interface__rosidl_typesupport_fastrtps_cExport-noconfig.cmake

@@ -0,0 +1,19 @@
+#----------------------------------------------------------------
+# Generated CMake target import file.
+#----------------------------------------------------------------
+
+# Commands may need to know the format version.
+set(CMAKE_IMPORT_FILE_VERSION 1)
+
+# Import target "interface::interface__rosidl_typesupport_fastrtps_c" for configuration ""
+set_property(TARGET interface::interface__rosidl_typesupport_fastrtps_c APPEND PROPERTY IMPORTED_CONFIGURATIONS NOCONFIG)
+set_target_properties(interface::interface__rosidl_typesupport_fastrtps_c PROPERTIES
+  IMPORTED_LOCATION_NOCONFIG "${_IMPORT_PREFIX}/lib/libinterface__rosidl_typesupport_fastrtps_c.so"
+  IMPORTED_SONAME_NOCONFIG "libinterface__rosidl_typesupport_fastrtps_c.so"
+  )
+
+list(APPEND _IMPORT_CHECK_TARGETS interface::interface__rosidl_typesupport_fastrtps_c )
+list(APPEND _IMPORT_CHECK_FILES_FOR_interface::interface__rosidl_typesupport_fastrtps_c "${_IMPORT_PREFIX}/lib/libinterface__rosidl_typesupport_fastrtps_c.so" )
+
+# Commands beyond this point should not need to know the version.
+set(CMAKE_IMPORT_FILE_VERSION)

+ 115 - 0
install/interface/share/interface/cmake/export_interface__rosidl_typesupport_fastrtps_cExport.cmake

@@ -0,0 +1,115 @@
+# Generated by CMake
+
+if("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}" LESS 2.6)
+   message(FATAL_ERROR "CMake >= 2.6.0 required")
+endif()
+cmake_policy(PUSH)
+cmake_policy(VERSION 2.6...3.20)
+#----------------------------------------------------------------
+# Generated CMake target import file.
+#----------------------------------------------------------------
+
+# Commands may need to know the format version.
+set(CMAKE_IMPORT_FILE_VERSION 1)
+
+# Protect against multiple inclusion, which would fail when already imported targets are added once more.
+set(_targetsDefined)
+set(_targetsNotDefined)
+set(_expectedTargets)
+foreach(_expectedTarget interface::interface__rosidl_typesupport_fastrtps_c)
+  list(APPEND _expectedTargets ${_expectedTarget})
+  if(NOT TARGET ${_expectedTarget})
+    list(APPEND _targetsNotDefined ${_expectedTarget})
+  endif()
+  if(TARGET ${_expectedTarget})
+    list(APPEND _targetsDefined ${_expectedTarget})
+  endif()
+endforeach()
+if("${_targetsDefined}" STREQUAL "${_expectedTargets}")
+  unset(_targetsDefined)
+  unset(_targetsNotDefined)
+  unset(_expectedTargets)
+  set(CMAKE_IMPORT_FILE_VERSION)
+  cmake_policy(POP)
+  return()
+endif()
+if(NOT "${_targetsDefined}" STREQUAL "")
+  message(FATAL_ERROR "Some (but not all) targets in this export set were already defined.\nTargets Defined: ${_targetsDefined}\nTargets not yet defined: ${_targetsNotDefined}\n")
+endif()
+unset(_targetsDefined)
+unset(_targetsNotDefined)
+unset(_expectedTargets)
+
+
+# Compute the installation prefix relative to this file.
+get_filename_component(_IMPORT_PREFIX "${CMAKE_CURRENT_LIST_FILE}" PATH)
+get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
+get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
+get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
+if(_IMPORT_PREFIX STREQUAL "/")
+  set(_IMPORT_PREFIX "")
+endif()
+
+# Create imported target interface::interface__rosidl_typesupport_fastrtps_c
+add_library(interface::interface__rosidl_typesupport_fastrtps_c SHARED IMPORTED)
+
+set_target_properties(interface::interface__rosidl_typesupport_fastrtps_c PROPERTIES
+  INTERFACE_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include/interface"
+  INTERFACE_LINK_LIBRARIES "fastcdr;rosidl_runtime_c::rosidl_runtime_c;rosidl_runtime_cpp::rosidl_runtime_cpp;rosidl_typesupport_interface::rosidl_typesupport_interface;rosidl_typesupport_fastrtps_cpp::rosidl_typesupport_fastrtps_cpp;rosidl_typesupport_fastrtps_c::rosidl_typesupport_fastrtps_c;interface::interface__rosidl_generator_c;std_msgs::std_msgs__rosidl_typesupport_fastrtps_c;builtin_interfaces::builtin_interfaces__rosidl_typesupport_fastrtps_c"
+)
+
+if(CMAKE_VERSION VERSION_LESS 2.8.12)
+  message(FATAL_ERROR "This file relies on consumers using CMake 2.8.12 or greater.")
+endif()
+
+# Load information for each installed configuration.
+get_filename_component(_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH)
+file(GLOB CONFIG_FILES "${_DIR}/export_interface__rosidl_typesupport_fastrtps_cExport-*.cmake")
+foreach(f ${CONFIG_FILES})
+  include(${f})
+endforeach()
+
+# Cleanup temporary variables.
+set(_IMPORT_PREFIX)
+
+# Loop over all imported files and verify that they actually exist
+foreach(target ${_IMPORT_CHECK_TARGETS} )
+  foreach(file ${_IMPORT_CHECK_FILES_FOR_${target}} )
+    if(NOT EXISTS "${file}" )
+      message(FATAL_ERROR "The imported target \"${target}\" references the file
+   \"${file}\"
+but this file does not exist.  Possible reasons include:
+* The file was deleted, renamed, or moved to another location.
+* An install or uninstall procedure did not complete successfully.
+* The installation package was faulty and contained
+   \"${CMAKE_CURRENT_LIST_FILE}\"
+but not all the files it references.
+")
+    endif()
+  endforeach()
+  unset(_IMPORT_CHECK_FILES_FOR_${target})
+endforeach()
+unset(_IMPORT_CHECK_TARGETS)
+
+# Make sure the targets which have been exported in some other
+# export set exist.
+unset(${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE_targets)
+foreach(_target "interface::interface__rosidl_generator_c" )
+  if(NOT TARGET "${_target}" )
+    set(${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE_targets "${${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE_targets} ${_target}")
+  endif()
+endforeach()
+
+if(DEFINED ${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE_targets)
+  if(CMAKE_FIND_PACKAGE_NAME)
+    set( ${CMAKE_FIND_PACKAGE_NAME}_FOUND FALSE)
+    set( ${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE "The following imported targets are referenced, but are missing: ${${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE_targets}")
+  else()
+    message(FATAL_ERROR "The following imported targets are referenced, but are missing: ${${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE_targets}")
+  endif()
+endif()
+unset(${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE_targets)
+
+# Commands beyond this point should not need to know the version.
+set(CMAKE_IMPORT_FILE_VERSION)
+cmake_policy(POP)

+ 19 - 0
install/interface/share/interface/cmake/export_interface__rosidl_typesupport_fastrtps_cppExport-noconfig.cmake

@@ -0,0 +1,19 @@
+#----------------------------------------------------------------
+# Generated CMake target import file.
+#----------------------------------------------------------------
+
+# Commands may need to know the format version.
+set(CMAKE_IMPORT_FILE_VERSION 1)
+
+# Import target "interface::interface__rosidl_typesupport_fastrtps_cpp" for configuration ""
+set_property(TARGET interface::interface__rosidl_typesupport_fastrtps_cpp APPEND PROPERTY IMPORTED_CONFIGURATIONS NOCONFIG)
+set_target_properties(interface::interface__rosidl_typesupport_fastrtps_cpp PROPERTIES
+  IMPORTED_LOCATION_NOCONFIG "${_IMPORT_PREFIX}/lib/libinterface__rosidl_typesupport_fastrtps_cpp.so"
+  IMPORTED_SONAME_NOCONFIG "libinterface__rosidl_typesupport_fastrtps_cpp.so"
+  )
+
+list(APPEND _IMPORT_CHECK_TARGETS interface::interface__rosidl_typesupport_fastrtps_cpp )
+list(APPEND _IMPORT_CHECK_FILES_FOR_interface::interface__rosidl_typesupport_fastrtps_cpp "${_IMPORT_PREFIX}/lib/libinterface__rosidl_typesupport_fastrtps_cpp.so" )
+
+# Commands beyond this point should not need to know the version.
+set(CMAKE_IMPORT_FILE_VERSION)

+ 115 - 0
install/interface/share/interface/cmake/export_interface__rosidl_typesupport_fastrtps_cppExport.cmake

@@ -0,0 +1,115 @@
+# Generated by CMake
+
+if("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}" LESS 2.6)
+   message(FATAL_ERROR "CMake >= 2.6.0 required")
+endif()
+cmake_policy(PUSH)
+cmake_policy(VERSION 2.6...3.20)
+#----------------------------------------------------------------
+# Generated CMake target import file.
+#----------------------------------------------------------------
+
+# Commands may need to know the format version.
+set(CMAKE_IMPORT_FILE_VERSION 1)
+
+# Protect against multiple inclusion, which would fail when already imported targets are added once more.
+set(_targetsDefined)
+set(_targetsNotDefined)
+set(_expectedTargets)
+foreach(_expectedTarget interface::interface__rosidl_typesupport_fastrtps_cpp)
+  list(APPEND _expectedTargets ${_expectedTarget})
+  if(NOT TARGET ${_expectedTarget})
+    list(APPEND _targetsNotDefined ${_expectedTarget})
+  endif()
+  if(TARGET ${_expectedTarget})
+    list(APPEND _targetsDefined ${_expectedTarget})
+  endif()
+endforeach()
+if("${_targetsDefined}" STREQUAL "${_expectedTargets}")
+  unset(_targetsDefined)
+  unset(_targetsNotDefined)
+  unset(_expectedTargets)
+  set(CMAKE_IMPORT_FILE_VERSION)
+  cmake_policy(POP)
+  return()
+endif()
+if(NOT "${_targetsDefined}" STREQUAL "")
+  message(FATAL_ERROR "Some (but not all) targets in this export set were already defined.\nTargets Defined: ${_targetsDefined}\nTargets not yet defined: ${_targetsNotDefined}\n")
+endif()
+unset(_targetsDefined)
+unset(_targetsNotDefined)
+unset(_expectedTargets)
+
+
+# Compute the installation prefix relative to this file.
+get_filename_component(_IMPORT_PREFIX "${CMAKE_CURRENT_LIST_FILE}" PATH)
+get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
+get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
+get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
+if(_IMPORT_PREFIX STREQUAL "/")
+  set(_IMPORT_PREFIX "")
+endif()
+
+# Create imported target interface::interface__rosidl_typesupport_fastrtps_cpp
+add_library(interface::interface__rosidl_typesupport_fastrtps_cpp SHARED IMPORTED)
+
+set_target_properties(interface::interface__rosidl_typesupport_fastrtps_cpp PROPERTIES
+  INTERFACE_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include/interface"
+  INTERFACE_LINK_LIBRARIES "fastcdr;rmw::rmw;rosidl_runtime_c::rosidl_runtime_c;rosidl_runtime_cpp::rosidl_runtime_cpp;rosidl_typesupport_interface::rosidl_typesupport_interface;rosidl_typesupport_fastrtps_cpp::rosidl_typesupport_fastrtps_cpp;std_msgs::std_msgs__rosidl_typesupport_fastrtps_cpp;builtin_interfaces::builtin_interfaces__rosidl_typesupport_fastrtps_cpp;interface::interface__rosidl_generator_cpp"
+)
+
+if(CMAKE_VERSION VERSION_LESS 2.8.12)
+  message(FATAL_ERROR "This file relies on consumers using CMake 2.8.12 or greater.")
+endif()
+
+# Load information for each installed configuration.
+get_filename_component(_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH)
+file(GLOB CONFIG_FILES "${_DIR}/export_interface__rosidl_typesupport_fastrtps_cppExport-*.cmake")
+foreach(f ${CONFIG_FILES})
+  include(${f})
+endforeach()
+
+# Cleanup temporary variables.
+set(_IMPORT_PREFIX)
+
+# Loop over all imported files and verify that they actually exist
+foreach(target ${_IMPORT_CHECK_TARGETS} )
+  foreach(file ${_IMPORT_CHECK_FILES_FOR_${target}} )
+    if(NOT EXISTS "${file}" )
+      message(FATAL_ERROR "The imported target \"${target}\" references the file
+   \"${file}\"
+but this file does not exist.  Possible reasons include:
+* The file was deleted, renamed, or moved to another location.
+* An install or uninstall procedure did not complete successfully.
+* The installation package was faulty and contained
+   \"${CMAKE_CURRENT_LIST_FILE}\"
+but not all the files it references.
+")
+    endif()
+  endforeach()
+  unset(_IMPORT_CHECK_FILES_FOR_${target})
+endforeach()
+unset(_IMPORT_CHECK_TARGETS)
+
+# Make sure the targets which have been exported in some other
+# export set exist.
+unset(${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE_targets)
+foreach(_target "interface::interface__rosidl_generator_cpp" )
+  if(NOT TARGET "${_target}" )
+    set(${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE_targets "${${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE_targets} ${_target}")
+  endif()
+endforeach()
+
+if(DEFINED ${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE_targets)
+  if(CMAKE_FIND_PACKAGE_NAME)
+    set( ${CMAKE_FIND_PACKAGE_NAME}_FOUND FALSE)
+    set( ${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE "The following imported targets are referenced, but are missing: ${${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE_targets}")
+  else()
+    message(FATAL_ERROR "The following imported targets are referenced, but are missing: ${${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE_targets}")
+  endif()
+endif()
+unset(${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE_targets)
+
+# Commands beyond this point should not need to know the version.
+set(CMAKE_IMPORT_FILE_VERSION)
+cmake_policy(POP)

+ 14 - 0
install/interface/share/interface/cmake/interfaceConfig-version.cmake

@@ -0,0 +1,14 @@
+# generated from ament/cmake/core/templates/nameConfig-version.cmake.in
+set(PACKAGE_VERSION "0.0.0")
+
+set(PACKAGE_VERSION_EXACT False)
+set(PACKAGE_VERSION_COMPATIBLE False)
+
+if("${PACKAGE_FIND_VERSION}" VERSION_EQUAL "${PACKAGE_VERSION}")
+  set(PACKAGE_VERSION_EXACT True)
+  set(PACKAGE_VERSION_COMPATIBLE True)
+endif()
+
+if("${PACKAGE_FIND_VERSION}" VERSION_LESS "${PACKAGE_VERSION}")
+  set(PACKAGE_VERSION_COMPATIBLE True)
+endif()

+ 42 - 0
install/interface/share/interface/cmake/interfaceConfig.cmake

@@ -0,0 +1,42 @@
+# generated from ament/cmake/core/templates/nameConfig.cmake.in
+
+# prevent multiple inclusion
+if(_interface_CONFIG_INCLUDED)
+  # ensure to keep the found flag the same
+  if(NOT DEFINED interface_FOUND)
+    # explicitly set it to FALSE, otherwise CMake will set it to TRUE
+    set(interface_FOUND FALSE)
+  elseif(NOT interface_FOUND)
+    # use separate condition to avoid uninitialized variable warning
+    set(interface_FOUND FALSE)
+  endif()
+  return()
+endif()
+set(_interface_CONFIG_INCLUDED TRUE)
+
+# output package information
+if(NOT interface_FIND_QUIETLY)
+  message(STATUS "Found interface: 0.0.0 (${interface_DIR})")
+endif()
+
+# warn when using a deprecated package
+if(NOT "" STREQUAL "")
+  set(_msg "Package 'interface' is deprecated")
+  # append custom deprecation text if available
+  if(NOT "" STREQUAL "TRUE")
+    set(_msg "${_msg} ()")
+  endif()
+  # optionally quiet the deprecation message
+  if(NOT ${interface_DEPRECATED_QUIET})
+    message(DEPRECATION "${_msg}")
+  endif()
+endif()
+
+# flag package as ament-based to distinguish it after being find_package()-ed
+set(interface_FOUND_AMENT_PACKAGE TRUE)
+
+# include all config extra files
+set(_extras "rosidl_cmake-extras.cmake;ament_cmake_export_dependencies-extras.cmake;ament_cmake_export_include_directories-extras.cmake;ament_cmake_export_libraries-extras.cmake;ament_cmake_export_targets-extras.cmake;rosidl_cmake_export_typesupport_targets-extras.cmake;rosidl_cmake_export_typesupport_libraries-extras.cmake")
+foreach(_extra ${_extras})
+  include("${interface_DIR}/${_extra}")
+endforeach()

+ 20 - 0
install/interface/share/interface/cmake/interface__rosidl_typesupport_cExport-noconfig.cmake

@@ -0,0 +1,20 @@
+#----------------------------------------------------------------
+# Generated CMake target import file.
+#----------------------------------------------------------------
+
+# Commands may need to know the format version.
+set(CMAKE_IMPORT_FILE_VERSION 1)
+
+# Import target "interface::interface__rosidl_typesupport_c" for configuration ""
+set_property(TARGET interface::interface__rosidl_typesupport_c APPEND PROPERTY IMPORTED_CONFIGURATIONS NOCONFIG)
+set_target_properties(interface::interface__rosidl_typesupport_c PROPERTIES
+  IMPORTED_LINK_DEPENDENT_LIBRARIES_NOCONFIG "rosidl_runtime_c::rosidl_runtime_c;rosidl_typesupport_c::rosidl_typesupport_c"
+  IMPORTED_LOCATION_NOCONFIG "${_IMPORT_PREFIX}/lib/libinterface__rosidl_typesupport_c.so"
+  IMPORTED_SONAME_NOCONFIG "libinterface__rosidl_typesupport_c.so"
+  )
+
+list(APPEND _IMPORT_CHECK_TARGETS interface::interface__rosidl_typesupport_c )
+list(APPEND _IMPORT_CHECK_FILES_FOR_interface::interface__rosidl_typesupport_c "${_IMPORT_PREFIX}/lib/libinterface__rosidl_typesupport_c.so" )
+
+# Commands beyond this point should not need to know the version.
+set(CMAKE_IMPORT_FILE_VERSION)

+ 114 - 0
install/interface/share/interface/cmake/interface__rosidl_typesupport_cExport.cmake

@@ -0,0 +1,114 @@
+# Generated by CMake
+
+if("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}" LESS 2.6)
+   message(FATAL_ERROR "CMake >= 2.6.0 required")
+endif()
+cmake_policy(PUSH)
+cmake_policy(VERSION 2.6...3.20)
+#----------------------------------------------------------------
+# Generated CMake target import file.
+#----------------------------------------------------------------
+
+# Commands may need to know the format version.
+set(CMAKE_IMPORT_FILE_VERSION 1)
+
+# Protect against multiple inclusion, which would fail when already imported targets are added once more.
+set(_targetsDefined)
+set(_targetsNotDefined)
+set(_expectedTargets)
+foreach(_expectedTarget interface::interface__rosidl_typesupport_c)
+  list(APPEND _expectedTargets ${_expectedTarget})
+  if(NOT TARGET ${_expectedTarget})
+    list(APPEND _targetsNotDefined ${_expectedTarget})
+  endif()
+  if(TARGET ${_expectedTarget})
+    list(APPEND _targetsDefined ${_expectedTarget})
+  endif()
+endforeach()
+if("${_targetsDefined}" STREQUAL "${_expectedTargets}")
+  unset(_targetsDefined)
+  unset(_targetsNotDefined)
+  unset(_expectedTargets)
+  set(CMAKE_IMPORT_FILE_VERSION)
+  cmake_policy(POP)
+  return()
+endif()
+if(NOT "${_targetsDefined}" STREQUAL "")
+  message(FATAL_ERROR "Some (but not all) targets in this export set were already defined.\nTargets Defined: ${_targetsDefined}\nTargets not yet defined: ${_targetsNotDefined}\n")
+endif()
+unset(_targetsDefined)
+unset(_targetsNotDefined)
+unset(_expectedTargets)
+
+
+# Compute the installation prefix relative to this file.
+get_filename_component(_IMPORT_PREFIX "${CMAKE_CURRENT_LIST_FILE}" PATH)
+get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
+get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
+get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
+if(_IMPORT_PREFIX STREQUAL "/")
+  set(_IMPORT_PREFIX "")
+endif()
+
+# Create imported target interface::interface__rosidl_typesupport_c
+add_library(interface::interface__rosidl_typesupport_c SHARED IMPORTED)
+
+set_target_properties(interface::interface__rosidl_typesupport_c PROPERTIES
+  INTERFACE_LINK_LIBRARIES "interface::interface__rosidl_generator_c;std_msgs::std_msgs__rosidl_typesupport_c;builtin_interfaces::builtin_interfaces__rosidl_typesupport_c"
+)
+
+if(CMAKE_VERSION VERSION_LESS 2.8.12)
+  message(FATAL_ERROR "This file relies on consumers using CMake 2.8.12 or greater.")
+endif()
+
+# Load information for each installed configuration.
+get_filename_component(_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH)
+file(GLOB CONFIG_FILES "${_DIR}/interface__rosidl_typesupport_cExport-*.cmake")
+foreach(f ${CONFIG_FILES})
+  include(${f})
+endforeach()
+
+# Cleanup temporary variables.
+set(_IMPORT_PREFIX)
+
+# Loop over all imported files and verify that they actually exist
+foreach(target ${_IMPORT_CHECK_TARGETS} )
+  foreach(file ${_IMPORT_CHECK_FILES_FOR_${target}} )
+    if(NOT EXISTS "${file}" )
+      message(FATAL_ERROR "The imported target \"${target}\" references the file
+   \"${file}\"
+but this file does not exist.  Possible reasons include:
+* The file was deleted, renamed, or moved to another location.
+* An install or uninstall procedure did not complete successfully.
+* The installation package was faulty and contained
+   \"${CMAKE_CURRENT_LIST_FILE}\"
+but not all the files it references.
+")
+    endif()
+  endforeach()
+  unset(_IMPORT_CHECK_FILES_FOR_${target})
+endforeach()
+unset(_IMPORT_CHECK_TARGETS)
+
+# Make sure the targets which have been exported in some other
+# export set exist.
+unset(${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE_targets)
+foreach(_target "interface::interface__rosidl_generator_c" )
+  if(NOT TARGET "${_target}" )
+    set(${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE_targets "${${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE_targets} ${_target}")
+  endif()
+endforeach()
+
+if(DEFINED ${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE_targets)
+  if(CMAKE_FIND_PACKAGE_NAME)
+    set( ${CMAKE_FIND_PACKAGE_NAME}_FOUND FALSE)
+    set( ${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE "The following imported targets are referenced, but are missing: ${${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE_targets}")
+  else()
+    message(FATAL_ERROR "The following imported targets are referenced, but are missing: ${${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE_targets}")
+  endif()
+endif()
+unset(${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE_targets)
+
+# Commands beyond this point should not need to know the version.
+set(CMAKE_IMPORT_FILE_VERSION)
+cmake_policy(POP)

+ 20 - 0
install/interface/share/interface/cmake/interface__rosidl_typesupport_cppExport-noconfig.cmake

@@ -0,0 +1,20 @@
+#----------------------------------------------------------------
+# Generated CMake target import file.
+#----------------------------------------------------------------
+
+# Commands may need to know the format version.
+set(CMAKE_IMPORT_FILE_VERSION 1)
+
+# Import target "interface::interface__rosidl_typesupport_cpp" for configuration ""
+set_property(TARGET interface::interface__rosidl_typesupport_cpp APPEND PROPERTY IMPORTED_CONFIGURATIONS NOCONFIG)
+set_target_properties(interface::interface__rosidl_typesupport_cpp PROPERTIES
+  IMPORTED_LINK_DEPENDENT_LIBRARIES_NOCONFIG "rosidl_runtime_c::rosidl_runtime_c;rosidl_typesupport_cpp::rosidl_typesupport_cpp;rosidl_typesupport_c::rosidl_typesupport_c"
+  IMPORTED_LOCATION_NOCONFIG "${_IMPORT_PREFIX}/lib/libinterface__rosidl_typesupport_cpp.so"
+  IMPORTED_SONAME_NOCONFIG "libinterface__rosidl_typesupport_cpp.so"
+  )
+
+list(APPEND _IMPORT_CHECK_TARGETS interface::interface__rosidl_typesupport_cpp )
+list(APPEND _IMPORT_CHECK_FILES_FOR_interface::interface__rosidl_typesupport_cpp "${_IMPORT_PREFIX}/lib/libinterface__rosidl_typesupport_cpp.so" )
+
+# Commands beyond this point should not need to know the version.
+set(CMAKE_IMPORT_FILE_VERSION)

+ 114 - 0
install/interface/share/interface/cmake/interface__rosidl_typesupport_cppExport.cmake

@@ -0,0 +1,114 @@
+# Generated by CMake
+
+if("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}" LESS 2.6)
+   message(FATAL_ERROR "CMake >= 2.6.0 required")
+endif()
+cmake_policy(PUSH)
+cmake_policy(VERSION 2.6...3.20)
+#----------------------------------------------------------------
+# Generated CMake target import file.
+#----------------------------------------------------------------
+
+# Commands may need to know the format version.
+set(CMAKE_IMPORT_FILE_VERSION 1)
+
+# Protect against multiple inclusion, which would fail when already imported targets are added once more.
+set(_targetsDefined)
+set(_targetsNotDefined)
+set(_expectedTargets)
+foreach(_expectedTarget interface::interface__rosidl_typesupport_cpp)
+  list(APPEND _expectedTargets ${_expectedTarget})
+  if(NOT TARGET ${_expectedTarget})
+    list(APPEND _targetsNotDefined ${_expectedTarget})
+  endif()
+  if(TARGET ${_expectedTarget})
+    list(APPEND _targetsDefined ${_expectedTarget})
+  endif()
+endforeach()
+if("${_targetsDefined}" STREQUAL "${_expectedTargets}")
+  unset(_targetsDefined)
+  unset(_targetsNotDefined)
+  unset(_expectedTargets)
+  set(CMAKE_IMPORT_FILE_VERSION)
+  cmake_policy(POP)
+  return()
+endif()
+if(NOT "${_targetsDefined}" STREQUAL "")
+  message(FATAL_ERROR "Some (but not all) targets in this export set were already defined.\nTargets Defined: ${_targetsDefined}\nTargets not yet defined: ${_targetsNotDefined}\n")
+endif()
+unset(_targetsDefined)
+unset(_targetsNotDefined)
+unset(_expectedTargets)
+
+
+# Compute the installation prefix relative to this file.
+get_filename_component(_IMPORT_PREFIX "${CMAKE_CURRENT_LIST_FILE}" PATH)
+get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
+get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
+get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
+if(_IMPORT_PREFIX STREQUAL "/")
+  set(_IMPORT_PREFIX "")
+endif()
+
+# Create imported target interface::interface__rosidl_typesupport_cpp
+add_library(interface::interface__rosidl_typesupport_cpp SHARED IMPORTED)
+
+set_target_properties(interface::interface__rosidl_typesupport_cpp PROPERTIES
+  INTERFACE_LINK_LIBRARIES "interface::interface__rosidl_generator_cpp;std_msgs::std_msgs__rosidl_typesupport_cpp;builtin_interfaces::builtin_interfaces__rosidl_typesupport_cpp"
+)
+
+if(CMAKE_VERSION VERSION_LESS 2.8.12)
+  message(FATAL_ERROR "This file relies on consumers using CMake 2.8.12 or greater.")
+endif()
+
+# Load information for each installed configuration.
+get_filename_component(_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH)
+file(GLOB CONFIG_FILES "${_DIR}/interface__rosidl_typesupport_cppExport-*.cmake")
+foreach(f ${CONFIG_FILES})
+  include(${f})
+endforeach()
+
+# Cleanup temporary variables.
+set(_IMPORT_PREFIX)
+
+# Loop over all imported files and verify that they actually exist
+foreach(target ${_IMPORT_CHECK_TARGETS} )
+  foreach(file ${_IMPORT_CHECK_FILES_FOR_${target}} )
+    if(NOT EXISTS "${file}" )
+      message(FATAL_ERROR "The imported target \"${target}\" references the file
+   \"${file}\"
+but this file does not exist.  Possible reasons include:
+* The file was deleted, renamed, or moved to another location.
+* An install or uninstall procedure did not complete successfully.
+* The installation package was faulty and contained
+   \"${CMAKE_CURRENT_LIST_FILE}\"
+but not all the files it references.
+")
+    endif()
+  endforeach()
+  unset(_IMPORT_CHECK_FILES_FOR_${target})
+endforeach()
+unset(_IMPORT_CHECK_TARGETS)
+
+# Make sure the targets which have been exported in some other
+# export set exist.
+unset(${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE_targets)
+foreach(_target "interface::interface__rosidl_generator_cpp" )
+  if(NOT TARGET "${_target}" )
+    set(${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE_targets "${${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE_targets} ${_target}")
+  endif()
+endforeach()
+
+if(DEFINED ${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE_targets)
+  if(CMAKE_FIND_PACKAGE_NAME)
+    set( ${CMAKE_FIND_PACKAGE_NAME}_FOUND FALSE)
+    set( ${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE "The following imported targets are referenced, but are missing: ${${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE_targets}")
+  else()
+    message(FATAL_ERROR "The following imported targets are referenced, but are missing: ${${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE_targets}")
+  endif()
+endif()
+unset(${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE_targets)
+
+# Commands beyond this point should not need to know the version.
+set(CMAKE_IMPORT_FILE_VERSION)
+cmake_policy(POP)

+ 19 - 0
install/interface/share/interface/cmake/interface__rosidl_typesupport_introspection_cExport-noconfig.cmake

@@ -0,0 +1,19 @@
+#----------------------------------------------------------------
+# Generated CMake target import file.
+#----------------------------------------------------------------
+
+# Commands may need to know the format version.
+set(CMAKE_IMPORT_FILE_VERSION 1)
+
+# Import target "interface::interface__rosidl_typesupport_introspection_c" for configuration ""
+set_property(TARGET interface::interface__rosidl_typesupport_introspection_c APPEND PROPERTY IMPORTED_CONFIGURATIONS NOCONFIG)
+set_target_properties(interface::interface__rosidl_typesupport_introspection_c PROPERTIES
+  IMPORTED_LOCATION_NOCONFIG "${_IMPORT_PREFIX}/lib/libinterface__rosidl_typesupport_introspection_c.so"
+  IMPORTED_SONAME_NOCONFIG "libinterface__rosidl_typesupport_introspection_c.so"
+  )
+
+list(APPEND _IMPORT_CHECK_TARGETS interface::interface__rosidl_typesupport_introspection_c )
+list(APPEND _IMPORT_CHECK_FILES_FOR_interface::interface__rosidl_typesupport_introspection_c "${_IMPORT_PREFIX}/lib/libinterface__rosidl_typesupport_introspection_c.so" )
+
+# Commands beyond this point should not need to know the version.
+set(CMAKE_IMPORT_FILE_VERSION)

+ 115 - 0
install/interface/share/interface/cmake/interface__rosidl_typesupport_introspection_cExport.cmake

@@ -0,0 +1,115 @@
+# Generated by CMake
+
+if("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}" LESS 2.6)
+   message(FATAL_ERROR "CMake >= 2.6.0 required")
+endif()
+cmake_policy(PUSH)
+cmake_policy(VERSION 2.6...3.20)
+#----------------------------------------------------------------
+# Generated CMake target import file.
+#----------------------------------------------------------------
+
+# Commands may need to know the format version.
+set(CMAKE_IMPORT_FILE_VERSION 1)
+
+# Protect against multiple inclusion, which would fail when already imported targets are added once more.
+set(_targetsDefined)
+set(_targetsNotDefined)
+set(_expectedTargets)
+foreach(_expectedTarget interface::interface__rosidl_typesupport_introspection_c)
+  list(APPEND _expectedTargets ${_expectedTarget})
+  if(NOT TARGET ${_expectedTarget})
+    list(APPEND _targetsNotDefined ${_expectedTarget})
+  endif()
+  if(TARGET ${_expectedTarget})
+    list(APPEND _targetsDefined ${_expectedTarget})
+  endif()
+endforeach()
+if("${_targetsDefined}" STREQUAL "${_expectedTargets}")
+  unset(_targetsDefined)
+  unset(_targetsNotDefined)
+  unset(_expectedTargets)
+  set(CMAKE_IMPORT_FILE_VERSION)
+  cmake_policy(POP)
+  return()
+endif()
+if(NOT "${_targetsDefined}" STREQUAL "")
+  message(FATAL_ERROR "Some (but not all) targets in this export set were already defined.\nTargets Defined: ${_targetsDefined}\nTargets not yet defined: ${_targetsNotDefined}\n")
+endif()
+unset(_targetsDefined)
+unset(_targetsNotDefined)
+unset(_expectedTargets)
+
+
+# Compute the installation prefix relative to this file.
+get_filename_component(_IMPORT_PREFIX "${CMAKE_CURRENT_LIST_FILE}" PATH)
+get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
+get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
+get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
+if(_IMPORT_PREFIX STREQUAL "/")
+  set(_IMPORT_PREFIX "")
+endif()
+
+# Create imported target interface::interface__rosidl_typesupport_introspection_c
+add_library(interface::interface__rosidl_typesupport_introspection_c SHARED IMPORTED)
+
+set_target_properties(interface::interface__rosidl_typesupport_introspection_c PROPERTIES
+  INTERFACE_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include/interface"
+  INTERFACE_LINK_LIBRARIES "interface::interface__rosidl_generator_c;rosidl_typesupport_introspection_c::rosidl_typesupport_introspection_c;std_msgs::std_msgs__rosidl_typesupport_introspection_c;builtin_interfaces::builtin_interfaces__rosidl_typesupport_introspection_c"
+)
+
+if(CMAKE_VERSION VERSION_LESS 2.8.12)
+  message(FATAL_ERROR "This file relies on consumers using CMake 2.8.12 or greater.")
+endif()
+
+# Load information for each installed configuration.
+get_filename_component(_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH)
+file(GLOB CONFIG_FILES "${_DIR}/interface__rosidl_typesupport_introspection_cExport-*.cmake")
+foreach(f ${CONFIG_FILES})
+  include(${f})
+endforeach()
+
+# Cleanup temporary variables.
+set(_IMPORT_PREFIX)
+
+# Loop over all imported files and verify that they actually exist
+foreach(target ${_IMPORT_CHECK_TARGETS} )
+  foreach(file ${_IMPORT_CHECK_FILES_FOR_${target}} )
+    if(NOT EXISTS "${file}" )
+      message(FATAL_ERROR "The imported target \"${target}\" references the file
+   \"${file}\"
+but this file does not exist.  Possible reasons include:
+* The file was deleted, renamed, or moved to another location.
+* An install or uninstall procedure did not complete successfully.
+* The installation package was faulty and contained
+   \"${CMAKE_CURRENT_LIST_FILE}\"
+but not all the files it references.
+")
+    endif()
+  endforeach()
+  unset(_IMPORT_CHECK_FILES_FOR_${target})
+endforeach()
+unset(_IMPORT_CHECK_TARGETS)
+
+# Make sure the targets which have been exported in some other
+# export set exist.
+unset(${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE_targets)
+foreach(_target "interface::interface__rosidl_generator_c" )
+  if(NOT TARGET "${_target}" )
+    set(${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE_targets "${${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE_targets} ${_target}")
+  endif()
+endforeach()
+
+if(DEFINED ${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE_targets)
+  if(CMAKE_FIND_PACKAGE_NAME)
+    set( ${CMAKE_FIND_PACKAGE_NAME}_FOUND FALSE)
+    set( ${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE "The following imported targets are referenced, but are missing: ${${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE_targets}")
+  else()
+    message(FATAL_ERROR "The following imported targets are referenced, but are missing: ${${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE_targets}")
+  endif()
+endif()
+unset(${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE_targets)
+
+# Commands beyond this point should not need to know the version.
+set(CMAKE_IMPORT_FILE_VERSION)
+cmake_policy(POP)

+ 19 - 0
install/interface/share/interface/cmake/interface__rosidl_typesupport_introspection_cppExport-noconfig.cmake

@@ -0,0 +1,19 @@
+#----------------------------------------------------------------
+# Generated CMake target import file.
+#----------------------------------------------------------------
+
+# Commands may need to know the format version.
+set(CMAKE_IMPORT_FILE_VERSION 1)
+
+# Import target "interface::interface__rosidl_typesupport_introspection_cpp" for configuration ""
+set_property(TARGET interface::interface__rosidl_typesupport_introspection_cpp APPEND PROPERTY IMPORTED_CONFIGURATIONS NOCONFIG)
+set_target_properties(interface::interface__rosidl_typesupport_introspection_cpp PROPERTIES
+  IMPORTED_LOCATION_NOCONFIG "${_IMPORT_PREFIX}/lib/libinterface__rosidl_typesupport_introspection_cpp.so"
+  IMPORTED_SONAME_NOCONFIG "libinterface__rosidl_typesupport_introspection_cpp.so"
+  )
+
+list(APPEND _IMPORT_CHECK_TARGETS interface::interface__rosidl_typesupport_introspection_cpp )
+list(APPEND _IMPORT_CHECK_FILES_FOR_interface::interface__rosidl_typesupport_introspection_cpp "${_IMPORT_PREFIX}/lib/libinterface__rosidl_typesupport_introspection_cpp.so" )
+
+# Commands beyond this point should not need to know the version.
+set(CMAKE_IMPORT_FILE_VERSION)

+ 115 - 0
install/interface/share/interface/cmake/interface__rosidl_typesupport_introspection_cppExport.cmake

@@ -0,0 +1,115 @@
+# Generated by CMake
+
+if("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}" LESS 2.6)
+   message(FATAL_ERROR "CMake >= 2.6.0 required")
+endif()
+cmake_policy(PUSH)
+cmake_policy(VERSION 2.6...3.20)
+#----------------------------------------------------------------
+# Generated CMake target import file.
+#----------------------------------------------------------------
+
+# Commands may need to know the format version.
+set(CMAKE_IMPORT_FILE_VERSION 1)
+
+# Protect against multiple inclusion, which would fail when already imported targets are added once more.
+set(_targetsDefined)
+set(_targetsNotDefined)
+set(_expectedTargets)
+foreach(_expectedTarget interface::interface__rosidl_typesupport_introspection_cpp)
+  list(APPEND _expectedTargets ${_expectedTarget})
+  if(NOT TARGET ${_expectedTarget})
+    list(APPEND _targetsNotDefined ${_expectedTarget})
+  endif()
+  if(TARGET ${_expectedTarget})
+    list(APPEND _targetsDefined ${_expectedTarget})
+  endif()
+endforeach()
+if("${_targetsDefined}" STREQUAL "${_expectedTargets}")
+  unset(_targetsDefined)
+  unset(_targetsNotDefined)
+  unset(_expectedTargets)
+  set(CMAKE_IMPORT_FILE_VERSION)
+  cmake_policy(POP)
+  return()
+endif()
+if(NOT "${_targetsDefined}" STREQUAL "")
+  message(FATAL_ERROR "Some (but not all) targets in this export set were already defined.\nTargets Defined: ${_targetsDefined}\nTargets not yet defined: ${_targetsNotDefined}\n")
+endif()
+unset(_targetsDefined)
+unset(_targetsNotDefined)
+unset(_expectedTargets)
+
+
+# Compute the installation prefix relative to this file.
+get_filename_component(_IMPORT_PREFIX "${CMAKE_CURRENT_LIST_FILE}" PATH)
+get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
+get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
+get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
+if(_IMPORT_PREFIX STREQUAL "/")
+  set(_IMPORT_PREFIX "")
+endif()
+
+# Create imported target interface::interface__rosidl_typesupport_introspection_cpp
+add_library(interface::interface__rosidl_typesupport_introspection_cpp SHARED IMPORTED)
+
+set_target_properties(interface::interface__rosidl_typesupport_introspection_cpp PROPERTIES
+  INTERFACE_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include/interface"
+  INTERFACE_LINK_LIBRARIES "interface::interface__rosidl_generator_cpp;rosidl_runtime_c::rosidl_runtime_c;rosidl_typesupport_interface::rosidl_typesupport_interface;rosidl_typesupport_introspection_cpp::rosidl_typesupport_introspection_cpp;std_msgs::std_msgs__rosidl_typesupport_introspection_cpp;builtin_interfaces::builtin_interfaces__rosidl_typesupport_introspection_cpp"
+)
+
+if(CMAKE_VERSION VERSION_LESS 2.8.12)
+  message(FATAL_ERROR "This file relies on consumers using CMake 2.8.12 or greater.")
+endif()
+
+# Load information for each installed configuration.
+get_filename_component(_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH)
+file(GLOB CONFIG_FILES "${_DIR}/interface__rosidl_typesupport_introspection_cppExport-*.cmake")
+foreach(f ${CONFIG_FILES})
+  include(${f})
+endforeach()
+
+# Cleanup temporary variables.
+set(_IMPORT_PREFIX)
+
+# Loop over all imported files and verify that they actually exist
+foreach(target ${_IMPORT_CHECK_TARGETS} )
+  foreach(file ${_IMPORT_CHECK_FILES_FOR_${target}} )
+    if(NOT EXISTS "${file}" )
+      message(FATAL_ERROR "The imported target \"${target}\" references the file
+   \"${file}\"
+but this file does not exist.  Possible reasons include:
+* The file was deleted, renamed, or moved to another location.
+* An install or uninstall procedure did not complete successfully.
+* The installation package was faulty and contained
+   \"${CMAKE_CURRENT_LIST_FILE}\"
+but not all the files it references.
+")
+    endif()
+  endforeach()
+  unset(_IMPORT_CHECK_FILES_FOR_${target})
+endforeach()
+unset(_IMPORT_CHECK_TARGETS)
+
+# Make sure the targets which have been exported in some other
+# export set exist.
+unset(${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE_targets)
+foreach(_target "interface::interface__rosidl_generator_cpp" )
+  if(NOT TARGET "${_target}" )
+    set(${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE_targets "${${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE_targets} ${_target}")
+  endif()
+endforeach()
+
+if(DEFINED ${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE_targets)
+  if(CMAKE_FIND_PACKAGE_NAME)
+    set( ${CMAKE_FIND_PACKAGE_NAME}_FOUND FALSE)
+    set( ${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE "The following imported targets are referenced, but are missing: ${${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE_targets}")
+  else()
+    message(FATAL_ERROR "The following imported targets are referenced, but are missing: ${${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE_targets}")
+  endif()
+endif()
+unset(${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE_targets)
+
+# Commands beyond this point should not need to know the version.
+set(CMAKE_IMPORT_FILE_VERSION)
+cmake_policy(POP)

+ 4 - 0
install/interface/share/interface/cmake/rosidl_cmake-extras.cmake

@@ -0,0 +1,4 @@
+# generated from rosidl_cmake/cmake/rosidl_cmake-extras.cmake.in
+
+set(interface_IDL_FILES "srv/SceneControls.idl")
+set(interface_INTERFACE_FILES "srv/SceneControls.srv;srv/SceneControls_Request.msg;srv/SceneControls_Response.msg")

+ 49 - 0
install/interface/share/interface/cmake/rosidl_cmake_export_typesupport_libraries-extras.cmake

@@ -0,0 +1,49 @@
+# generated from
+# rosidl_cmake/cmake/template/rosidl_cmake_export_typesupport_libraries.cmake.in
+
+set(_exported_typesupport_libraries
+  "__rosidl_typesupport_fastrtps_c:interface__rosidl_typesupport_fastrtps_c;__rosidl_typesupport_fastrtps_cpp:interface__rosidl_typesupport_fastrtps_cpp")
+
+# populate interface_LIBRARIES_<suffix>
+if(NOT _exported_typesupport_libraries STREQUAL "")
+  # loop over typesupport libraries
+  foreach(_tuple ${_exported_typesupport_libraries})
+    string(REPLACE ":" ";" _tuple "${_tuple}")
+    list(GET _tuple 0 _suffix)
+    list(GET _tuple 1 _library)
+
+    if(NOT IS_ABSOLUTE "${_library}")
+      # search for library target relative to this CMake file
+      set(_lib "NOTFOUND")
+      find_library(
+        _lib NAMES "${_library}"
+        PATHS "${interface_DIR}/../../../lib"
+        NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH
+      )
+
+      if(NOT _lib)
+        # the library wasn't found
+        message(FATAL_ERROR
+          "Package 'interface' exports the typesupport library '${_library}' which couldn't be found")
+      elseif(NOT IS_ABSOLUTE "${_lib}")
+        # the found library must be an absolute path
+        message(FATAL_ERROR
+          "Package 'interface' found the typesupport library '${_library}' at '${_lib}' "
+          "which is not an absolute path")
+      elseif(NOT EXISTS "${_lib}")
+        # the found library must exist
+        message(FATAL_ERROR "Package 'interface' found the typesupport library '${_lib}' which doesn't exist")
+      else()
+        list(APPEND interface_LIBRARIES${_suffix} ${_cfg} "${_lib}")
+      endif()
+
+    else()
+      if(NOT EXISTS "${_library}")
+        # the found library must exist
+        message(WARNING "Package 'interface' exports the typesupport library '${_library}' which doesn't exist")
+      else()
+        list(APPEND interface_LIBRARIES${_suffix} "${_library}")
+      endif()
+    endif()
+  endforeach()
+endif()

+ 23 - 0
install/interface/share/interface/cmake/rosidl_cmake_export_typesupport_targets-extras.cmake

@@ -0,0 +1,23 @@
+# generated from
+# rosidl_cmake/cmake/template/rosidl_cmake_export_typesupport_targets.cmake.in
+
+set(_exported_typesupport_targets
+  "__rosidl_generator_c:interface__rosidl_generator_c;__rosidl_typesupport_fastrtps_c:interface__rosidl_typesupport_fastrtps_c;__rosidl_generator_cpp:interface__rosidl_generator_cpp;__rosidl_typesupport_fastrtps_cpp:interface__rosidl_typesupport_fastrtps_cpp;__rosidl_typesupport_introspection_c:interface__rosidl_typesupport_introspection_c;__rosidl_typesupport_c:interface__rosidl_typesupport_c;__rosidl_typesupport_introspection_cpp:interface__rosidl_typesupport_introspection_cpp;__rosidl_typesupport_cpp:interface__rosidl_typesupport_cpp;__rosidl_generator_py:interface__rosidl_generator_py")
+
+# populate interface_TARGETS_<suffix>
+if(NOT _exported_typesupport_targets STREQUAL "")
+  # loop over typesupport targets
+  foreach(_tuple ${_exported_typesupport_targets})
+    string(REPLACE ":" ";" _tuple "${_tuple}")
+    list(GET _tuple 0 _suffix)
+    list(GET _tuple 1 _target)
+
+    set(_target "interface::${_target}")
+    if(NOT TARGET "${_target}")
+      # the exported target must exist
+      message(WARNING "Package 'interface' exports the typesupport target '${_target}' which doesn't exist")
+    else()
+      list(APPEND interface_TARGETS${_suffix} "${_target}")
+    endif()
+  endforeach()
+endif()

+ 1 - 0
install/interface/share/interface/environment/ament_prefix_path.dsv

@@ -0,0 +1 @@
+prepend-non-duplicate;AMENT_PREFIX_PATH;

+ 4 - 0
install/interface/share/interface/environment/ament_prefix_path.sh

@@ -0,0 +1,4 @@
+# copied from
+# ament_cmake_core/cmake/environment_hooks/environment/ament_prefix_path.sh
+
+ament_prepend_unique_value AMENT_PREFIX_PATH "$AMENT_CURRENT_PREFIX"

+ 1 - 0
install/interface/share/interface/environment/library_path.dsv

@@ -0,0 +1 @@
+prepend-non-duplicate;LD_LIBRARY_PATH;lib

+ 16 - 0
install/interface/share/interface/environment/library_path.sh

@@ -0,0 +1,16 @@
+# copied from ament_package/template/environment_hook/library_path.sh
+
+# detect if running on Darwin platform
+_UNAME=`uname -s`
+_IS_DARWIN=0
+if [ "$_UNAME" = "Darwin" ]; then
+  _IS_DARWIN=1
+fi
+unset _UNAME
+
+if [ $_IS_DARWIN -eq 0 ]; then
+  ament_prepend_unique_value LD_LIBRARY_PATH "$AMENT_CURRENT_PREFIX/lib"
+else
+  ament_prepend_unique_value DYLD_LIBRARY_PATH "$AMENT_CURRENT_PREFIX/lib"
+fi
+unset _IS_DARWIN

+ 1 - 0
install/interface/share/interface/environment/path.dsv

@@ -0,0 +1 @@
+prepend-non-duplicate-if-exists;PATH;bin

+ 5 - 0
install/interface/share/interface/environment/path.sh

@@ -0,0 +1,5 @@
+# copied from ament_cmake_core/cmake/environment_hooks/environment/path.sh
+
+if [ -d "$AMENT_CURRENT_PREFIX/bin" ]; then
+  ament_prepend_unique_value PATH "$AMENT_CURRENT_PREFIX/bin"
+fi

+ 1 - 0
install/interface/share/interface/environment/pythonpath.dsv

@@ -0,0 +1 @@
+prepend-non-duplicate;PYTHONPATH;local/lib/python3.10/dist-packages

+ 3 - 0
install/interface/share/interface/environment/pythonpath.sh

@@ -0,0 +1,3 @@
+# generated from ament_package/template/environment_hook/pythonpath.sh.in
+
+ament_prepend_unique_value PYTHONPATH "$AMENT_CURRENT_PREFIX/local/lib/python3.10/dist-packages"

+ 1 - 0
install/interface/share/interface/hook/cmake_prefix_path.dsv

@@ -0,0 +1 @@
+prepend-non-duplicate;CMAKE_PREFIX_PATH;

+ 3 - 0
install/interface/share/interface/hook/cmake_prefix_path.ps1

@@ -0,0 +1,3 @@
+# generated from colcon_powershell/shell/template/hook_prepend_value.ps1.em
+
+colcon_prepend_unique_value CMAKE_PREFIX_PATH "$env:COLCON_CURRENT_PREFIX"

+ 3 - 0
install/interface/share/interface/hook/cmake_prefix_path.sh

@@ -0,0 +1,3 @@
+# generated from colcon_core/shell/template/hook_prepend_value.sh.em
+
+_colcon_prepend_unique_value CMAKE_PREFIX_PATH "$COLCON_CURRENT_PREFIX"

+ 1 - 0
install/interface/share/interface/hook/ld_library_path_lib.dsv

@@ -0,0 +1 @@
+prepend-non-duplicate;LD_LIBRARY_PATH;lib

+ 3 - 0
install/interface/share/interface/hook/ld_library_path_lib.ps1

@@ -0,0 +1,3 @@
+# generated from colcon_powershell/shell/template/hook_prepend_value.ps1.em
+
+colcon_prepend_unique_value LD_LIBRARY_PATH "$env:COLCON_CURRENT_PREFIX\lib"

+ 3 - 0
install/interface/share/interface/hook/ld_library_path_lib.sh

@@ -0,0 +1,3 @@
+# generated from colcon_core/shell/template/hook_prepend_value.sh.em
+
+_colcon_prepend_unique_value LD_LIBRARY_PATH "$COLCON_CURRENT_PREFIX/lib"

+ 46 - 0
install/interface/share/interface/local_setup.bash

@@ -0,0 +1,46 @@
+# generated from ament_package/template/package_level/local_setup.bash.in
+
+# source local_setup.sh from same directory as this file
+_this_path=$(builtin cd "`dirname "${BASH_SOURCE[0]}"`" && pwd)
+# provide AMENT_CURRENT_PREFIX to shell script
+AMENT_CURRENT_PREFIX=$(builtin cd "`dirname "${BASH_SOURCE[0]}"`/../.." && pwd)
+# store AMENT_CURRENT_PREFIX to restore it before each environment hook
+_package_local_setup_AMENT_CURRENT_PREFIX=$AMENT_CURRENT_PREFIX
+
+# trace output
+if [ -n "$AMENT_TRACE_SETUP_FILES" ]; then
+  echo "# . \"$_this_path/local_setup.sh\""
+fi
+. "$_this_path/local_setup.sh"
+unset _this_path
+
+# unset AMENT_ENVIRONMENT_HOOKS
+# if not appending to them for return
+if [ -z "$AMENT_RETURN_ENVIRONMENT_HOOKS" ]; then
+  unset AMENT_ENVIRONMENT_HOOKS
+fi
+
+# restore AMENT_CURRENT_PREFIX before evaluating the environment hooks
+AMENT_CURRENT_PREFIX=$_package_local_setup_AMENT_CURRENT_PREFIX
+# list all environment hooks of this package
+
+# source all shell-specific environment hooks of this package
+# if not returning them
+if [ -z "$AMENT_RETURN_ENVIRONMENT_HOOKS" ]; then
+  _package_local_setup_IFS=$IFS
+  IFS=":"
+  for _hook in $AMENT_ENVIRONMENT_HOOKS; do
+    # restore AMENT_CURRENT_PREFIX for each environment hook
+    AMENT_CURRENT_PREFIX=$_package_local_setup_AMENT_CURRENT_PREFIX
+    # restore IFS before sourcing other files
+    IFS=$_package_local_setup_IFS
+    . "$_hook"
+  done
+  unset _hook
+  IFS=$_package_local_setup_IFS
+  unset _package_local_setup_IFS
+  unset AMENT_ENVIRONMENT_HOOKS
+fi
+
+unset _package_local_setup_AMENT_CURRENT_PREFIX
+unset AMENT_CURRENT_PREFIX

+ 4 - 0
install/interface/share/interface/local_setup.dsv

@@ -0,0 +1,4 @@
+source;share/interface/environment/ament_prefix_path.sh
+source;share/interface/environment/library_path.sh
+source;share/interface/environment/path.sh
+source;share/interface/environment/pythonpath.sh

+ 186 - 0
install/interface/share/interface/local_setup.sh

@@ -0,0 +1,186 @@
+# generated from ament_package/template/package_level/local_setup.sh.in
+
+# since this file is sourced use either the provided AMENT_CURRENT_PREFIX
+# or fall back to the destination set at configure time
+: ${AMENT_CURRENT_PREFIX:="/home/wljy/zkf/recharge/install/interface"}
+if [ ! -d "$AMENT_CURRENT_PREFIX" ]; then
+  if [ -z "$COLCON_CURRENT_PREFIX" ]; then
+    echo "The compile time prefix path '$AMENT_CURRENT_PREFIX' doesn't " \
+      "exist. Consider sourcing a different extension than '.sh'." 1>&2
+  else
+    AMENT_CURRENT_PREFIX="$COLCON_CURRENT_PREFIX"
+  fi
+fi
+
+# function to append values to environment variables
+# using colons as separators and avoiding leading separators
+ament_append_value() {
+  # arguments
+  _listname="$1"
+  _value="$2"
+  #echo "listname $_listname"
+  #eval echo "list value \$$_listname"
+  #echo "value $_value"
+
+  # avoid leading separator
+  eval _values=\"\$$_listname\"
+  if [ -z "$_values" ]; then
+    eval export $_listname=\"$_value\"
+    #eval echo "set list \$$_listname"
+  else
+    # field separator must not be a colon
+    _ament_append_value_IFS=$IFS
+    unset IFS
+    eval export $_listname=\"\$$_listname:$_value\"
+    #eval echo "append list \$$_listname"
+    IFS=$_ament_append_value_IFS
+    unset _ament_append_value_IFS
+  fi
+  unset _values
+
+  unset _value
+  unset _listname
+}
+
+# function to append non-duplicate values to environment variables
+# using colons as separators and avoiding leading separators
+ament_append_unique_value() {
+  # arguments
+  _listname=$1
+  _value=$2
+  #echo "listname $_listname"
+  #eval echo "list value \$$_listname"
+  #echo "value $_value"
+
+  # check if the list contains the value
+  eval _values=\$$_listname
+  _duplicate=
+  _ament_append_unique_value_IFS=$IFS
+  IFS=":"
+  if [ "$AMENT_SHELL" = "zsh" ]; then
+    ament_zsh_to_array _values
+  fi
+  for _item in $_values; do
+    # ignore empty strings
+    if [ -z "$_item" ]; then
+      continue
+    fi
+    if [ $_item = $_value ]; then
+      _duplicate=1
+    fi
+  done
+  unset _item
+
+  # append only non-duplicates
+  if [ -z "$_duplicate" ]; then
+    # avoid leading separator
+    if [ -z "$_values" ]; then
+      eval $_listname=\"$_value\"
+      #eval echo "set list \$$_listname"
+    else
+      # field separator must not be a colon
+      unset IFS
+      eval $_listname=\"\$$_listname:$_value\"
+      #eval echo "append list \$$_listname"
+    fi
+  fi
+  IFS=$_ament_append_unique_value_IFS
+  unset _ament_append_unique_value_IFS
+  unset _duplicate
+  unset _values
+
+  unset _value
+  unset _listname
+}
+
+# function to prepend non-duplicate values to environment variables
+# using colons as separators and avoiding trailing separators
+ament_prepend_unique_value() {
+  # arguments
+  _listname="$1"
+  _value="$2"
+  #echo "listname $_listname"
+  #eval echo "list value \$$_listname"
+  #echo "value $_value"
+
+  # check if the list contains the value
+  eval _values=\"\$$_listname\"
+  _duplicate=
+  _ament_prepend_unique_value_IFS=$IFS
+  IFS=":"
+  if [ "$AMENT_SHELL" = "zsh" ]; then
+    ament_zsh_to_array _values
+  fi
+  for _item in $_values; do
+    # ignore empty strings
+    if [ -z "$_item" ]; then
+      continue
+    fi
+    if [ "$_item" = "$_value" ]; then
+      _duplicate=1
+    fi
+  done
+  unset _item
+
+  # prepend only non-duplicates
+  if [ -z "$_duplicate" ]; then
+    # avoid trailing separator
+    if [ -z "$_values" ]; then
+      eval export $_listname=\"$_value\"
+      #eval echo "set list \$$_listname"
+    else
+      # field separator must not be a colon
+      unset IFS
+      eval export $_listname=\"$_value:\$$_listname\"
+      #eval echo "prepend list \$$_listname"
+    fi
+  fi
+  IFS=$_ament_prepend_unique_value_IFS
+  unset _ament_prepend_unique_value_IFS
+  unset _duplicate
+  unset _values
+
+  unset _value
+  unset _listname
+}
+
+# unset AMENT_ENVIRONMENT_HOOKS
+# if not appending to them for return
+if [ -z "$AMENT_RETURN_ENVIRONMENT_HOOKS" ]; then
+  unset AMENT_ENVIRONMENT_HOOKS
+fi
+
+# list all environment hooks of this package
+ament_append_value AMENT_ENVIRONMENT_HOOKS "$AMENT_CURRENT_PREFIX/share/interface/environment/ament_prefix_path.sh"
+ament_append_value AMENT_ENVIRONMENT_HOOKS "$AMENT_CURRENT_PREFIX/share/interface/environment/library_path.sh"
+ament_append_value AMENT_ENVIRONMENT_HOOKS "$AMENT_CURRENT_PREFIX/share/interface/environment/path.sh"
+ament_append_value AMENT_ENVIRONMENT_HOOKS "$AMENT_CURRENT_PREFIX/share/interface/environment/pythonpath.sh"
+
+# source all shell-specific environment hooks of this package
+# if not returning them
+if [ -z "$AMENT_RETURN_ENVIRONMENT_HOOKS" ]; then
+  _package_local_setup_IFS=$IFS
+  IFS=":"
+  if [ "$AMENT_SHELL" = "zsh" ]; then
+    ament_zsh_to_array AMENT_ENVIRONMENT_HOOKS
+  fi
+  for _hook in $AMENT_ENVIRONMENT_HOOKS; do
+    if [ -f "$_hook" ]; then
+      # restore IFS before sourcing other files
+      IFS=$_package_local_setup_IFS
+      # trace output
+      if [ -n "$AMENT_TRACE_SETUP_FILES" ]; then
+        echo "# . \"$_hook\""
+      fi
+      . "$_hook"
+    fi
+  done
+  unset _hook
+  IFS=$_package_local_setup_IFS
+  unset _package_local_setup_IFS
+  unset AMENT_ENVIRONMENT_HOOKS
+fi
+
+# reset AMENT_CURRENT_PREFIX after each package
+# allowing to source multiple package-level setup files
+unset AMENT_CURRENT_PREFIX

+ 59 - 0
install/interface/share/interface/local_setup.zsh

@@ -0,0 +1,59 @@
+# generated from ament_package/template/package_level/local_setup.zsh.in
+
+AMENT_SHELL=zsh
+
+# source local_setup.sh from same directory as this file
+_this_path=$(builtin cd -q "`dirname "${(%):-%N}"`" > /dev/null && pwd)
+# provide AMENT_CURRENT_PREFIX to shell script
+AMENT_CURRENT_PREFIX=$(builtin cd -q "`dirname "${(%):-%N}"`/../.." > /dev/null && pwd)
+# store AMENT_CURRENT_PREFIX to restore it before each environment hook
+_package_local_setup_AMENT_CURRENT_PREFIX=$AMENT_CURRENT_PREFIX
+
+# function to convert array-like strings into arrays
+# to wordaround SH_WORD_SPLIT not being set
+ament_zsh_to_array() {
+  local _listname=$1
+  local _dollar="$"
+  local _split="{="
+  local _to_array="(\"$_dollar$_split$_listname}\")"
+  eval $_listname=$_to_array
+}
+
+# trace output
+if [ -n "$AMENT_TRACE_SETUP_FILES" ]; then
+  echo "# . \"$_this_path/local_setup.sh\""
+fi
+# the package-level local_setup file unsets AMENT_CURRENT_PREFIX
+. "$_this_path/local_setup.sh"
+unset _this_path
+
+# unset AMENT_ENVIRONMENT_HOOKS
+# if not appending to them for return
+if [ -z "$AMENT_RETURN_ENVIRONMENT_HOOKS" ]; then
+  unset AMENT_ENVIRONMENT_HOOKS
+fi
+
+# restore AMENT_CURRENT_PREFIX before evaluating the environment hooks
+AMENT_CURRENT_PREFIX=$_package_local_setup_AMENT_CURRENT_PREFIX
+# list all environment hooks of this package
+
+# source all shell-specific environment hooks of this package
+# if not returning them
+if [ -z "$AMENT_RETURN_ENVIRONMENT_HOOKS" ]; then
+  _package_local_setup_IFS=$IFS
+  IFS=":"
+  for _hook in $AMENT_ENVIRONMENT_HOOKS; do
+    # restore AMENT_CURRENT_PREFIX for each environment hook
+    AMENT_CURRENT_PREFIX=$_package_local_setup_AMENT_CURRENT_PREFIX
+    # restore IFS before sourcing other files
+    IFS=$_package_local_setup_IFS
+    . "$_hook"
+  done
+  unset _hook
+  IFS=$_package_local_setup_IFS
+  unset _package_local_setup_IFS
+  unset AMENT_ENVIRONMENT_HOOKS
+fi
+
+unset _package_local_setup_AMENT_CURRENT_PREFIX
+unset AMENT_CURRENT_PREFIX

+ 39 - 0
install/interface/share/interface/package.bash

@@ -0,0 +1,39 @@
+# generated from colcon_bash/shell/template/package.bash.em
+
+# This script extends the environment for this package.
+
+# a bash script is able to determine its own path if necessary
+if [ -z "$COLCON_CURRENT_PREFIX" ]; then
+  # the prefix is two levels up from the package specific share directory
+  _colcon_package_bash_COLCON_CURRENT_PREFIX="$(builtin cd "`dirname "${BASH_SOURCE[0]}"`/../.." > /dev/null && pwd)"
+else
+  _colcon_package_bash_COLCON_CURRENT_PREFIX="$COLCON_CURRENT_PREFIX"
+fi
+
+# function to source another script with conditional trace output
+# first argument: the path of the script
+# additional arguments: arguments to the script
+_colcon_package_bash_source_script() {
+  if [ -f "$1" ]; then
+    if [ -n "$COLCON_TRACE" ]; then
+      echo "# . \"$1\""
+    fi
+    . "$@"
+  else
+    echo "not found: \"$1\"" 1>&2
+  fi
+}
+
+# source sh script of this package
+_colcon_package_bash_source_script "$_colcon_package_bash_COLCON_CURRENT_PREFIX/share/interface/package.sh"
+
+# setting COLCON_CURRENT_PREFIX avoids determining the prefix in the sourced scripts
+COLCON_CURRENT_PREFIX="$_colcon_package_bash_COLCON_CURRENT_PREFIX"
+
+# source bash hooks
+_colcon_package_bash_source_script "$COLCON_CURRENT_PREFIX/share/interface/local_setup.bash"
+
+unset COLCON_CURRENT_PREFIX
+
+unset _colcon_package_bash_source_script
+unset _colcon_package_bash_COLCON_CURRENT_PREFIX

+ 11 - 0
install/interface/share/interface/package.dsv

@@ -0,0 +1,11 @@
+source;share/interface/hook/cmake_prefix_path.ps1
+source;share/interface/hook/cmake_prefix_path.dsv
+source;share/interface/hook/cmake_prefix_path.sh
+source;share/interface/hook/ld_library_path_lib.ps1
+source;share/interface/hook/ld_library_path_lib.dsv
+source;share/interface/hook/ld_library_path_lib.sh
+source;share/interface/local_setup.bash
+source;share/interface/local_setup.dsv
+source;share/interface/local_setup.ps1
+source;share/interface/local_setup.sh
+source;share/interface/local_setup.zsh

+ 117 - 0
install/interface/share/interface/package.ps1

@@ -0,0 +1,117 @@
+# generated from colcon_powershell/shell/template/package.ps1.em
+
+# function to append a value to a variable
+# which uses colons as separators
+# duplicates as well as leading separators are avoided
+# first argument: the name of the result variable
+# second argument: the value to be prepended
+function colcon_append_unique_value {
+  param (
+    $_listname,
+    $_value
+  )
+
+  # get values from variable
+  if (Test-Path Env:$_listname) {
+    $_values=(Get-Item env:$_listname).Value
+  } else {
+    $_values=""
+  }
+  $_duplicate=""
+  # start with no values
+  $_all_values=""
+  # iterate over existing values in the variable
+  if ($_values) {
+    $_values.Split(";") | ForEach {
+      # not an empty string
+      if ($_) {
+        # not a duplicate of _value
+        if ($_ -eq $_value) {
+          $_duplicate="1"
+        }
+        if ($_all_values) {
+          $_all_values="${_all_values};$_"
+        } else {
+          $_all_values="$_"
+        }
+      }
+    }
+  }
+  # append only non-duplicates
+  if (!$_duplicate) {
+    # avoid leading separator
+    if ($_all_values) {
+      $_all_values="${_all_values};${_value}"
+    } else {
+      $_all_values="${_value}"
+    }
+  }
+
+  # export the updated variable
+  Set-Item env:\$_listname -Value "$_all_values"
+}
+
+# function to prepend a value to a variable
+# which uses colons as separators
+# duplicates as well as trailing separators are avoided
+# first argument: the name of the result variable
+# second argument: the value to be prepended
+function colcon_prepend_unique_value {
+  param (
+    $_listname,
+    $_value
+  )
+
+  # get values from variable
+  if (Test-Path Env:$_listname) {
+    $_values=(Get-Item env:$_listname).Value
+  } else {
+    $_values=""
+  }
+  # start with the new value
+  $_all_values="$_value"
+  # iterate over existing values in the variable
+  if ($_values) {
+    $_values.Split(";") | ForEach {
+      # not an empty string
+      if ($_) {
+        # not a duplicate of _value
+        if ($_ -ne $_value) {
+          # keep non-duplicate values
+          $_all_values="${_all_values};$_"
+        }
+      }
+    }
+  }
+  # export the updated variable
+  Set-Item env:\$_listname -Value "$_all_values"
+}
+
+# function to source another script with conditional trace output
+# first argument: the path of the script
+# additional arguments: arguments to the script
+function colcon_package_source_powershell_script {
+  param (
+    $_colcon_package_source_powershell_script
+  )
+  # source script with conditional trace output
+  if (Test-Path $_colcon_package_source_powershell_script) {
+    if ($env:COLCON_TRACE) {
+      echo ". '$_colcon_package_source_powershell_script'"
+    }
+    . "$_colcon_package_source_powershell_script"
+  } else {
+    Write-Error "not found: '$_colcon_package_source_powershell_script'"
+  }
+}
+
+
+# a powershell script is able to determine its own path
+# the prefix is two levels up from the package specific share directory
+$env:COLCON_CURRENT_PREFIX=(Get-Item $PSCommandPath).Directory.Parent.Parent.FullName
+
+colcon_package_source_powershell_script "$env:COLCON_CURRENT_PREFIX\share/interface/hook/cmake_prefix_path.ps1"
+colcon_package_source_powershell_script "$env:COLCON_CURRENT_PREFIX\share/interface/hook/ld_library_path_lib.ps1"
+colcon_package_source_powershell_script "$env:COLCON_CURRENT_PREFIX\share/interface/local_setup.ps1"
+
+Remove-Item Env:\COLCON_CURRENT_PREFIX

+ 88 - 0
install/interface/share/interface/package.sh

@@ -0,0 +1,88 @@
+# generated from colcon_core/shell/template/package.sh.em
+
+# This script extends the environment for this package.
+
+# function to prepend a value to a variable
+# which uses colons as separators
+# duplicates as well as trailing separators are avoided
+# first argument: the name of the result variable
+# second argument: the value to be prepended
+_colcon_prepend_unique_value() {
+  # arguments
+  _listname="$1"
+  _value="$2"
+
+  # get values from variable
+  eval _values=\"\$$_listname\"
+  # backup the field separator
+  _colcon_prepend_unique_value_IFS=$IFS
+  IFS=":"
+  # start with the new value
+  _all_values="$_value"
+  # workaround SH_WORD_SPLIT not being set in zsh
+  if [ "$(command -v colcon_zsh_convert_to_array)" ]; then
+    colcon_zsh_convert_to_array _values
+  fi
+  # iterate over existing values in the variable
+  for _item in $_values; do
+    # ignore empty strings
+    if [ -z "$_item" ]; then
+      continue
+    fi
+    # ignore duplicates of _value
+    if [ "$_item" = "$_value" ]; then
+      continue
+    fi
+    # keep non-duplicate values
+    _all_values="$_all_values:$_item"
+  done
+  unset _item
+  # restore the field separator
+  IFS=$_colcon_prepend_unique_value_IFS
+  unset _colcon_prepend_unique_value_IFS
+  # export the updated variable
+  eval export $_listname=\"$_all_values\"
+  unset _all_values
+  unset _values
+
+  unset _value
+  unset _listname
+}
+
+# since a plain shell script can't determine its own path when being sourced
+# either use the provided COLCON_CURRENT_PREFIX
+# or fall back to the build time prefix (if it exists)
+_colcon_package_sh_COLCON_CURRENT_PREFIX="/home/wljy/zkf/recharge/install/interface"
+if [ -z "$COLCON_CURRENT_PREFIX" ]; then
+  if [ ! -d "$_colcon_package_sh_COLCON_CURRENT_PREFIX" ]; then
+    echo "The build time path \"$_colcon_package_sh_COLCON_CURRENT_PREFIX\" doesn't exist. Either source a script for a different shell or set the environment variable \"COLCON_CURRENT_PREFIX\" explicitly." 1>&2
+    unset _colcon_package_sh_COLCON_CURRENT_PREFIX
+    return 1
+  fi
+  COLCON_CURRENT_PREFIX="$_colcon_package_sh_COLCON_CURRENT_PREFIX"
+fi
+unset _colcon_package_sh_COLCON_CURRENT_PREFIX
+
+# function to source another script with conditional trace output
+# first argument: the path of the script
+# additional arguments: arguments to the script
+_colcon_package_sh_source_script() {
+  if [ -f "$1" ]; then
+    if [ -n "$COLCON_TRACE" ]; then
+      echo "# . \"$1\""
+    fi
+    . "$@"
+  else
+    echo "not found: \"$1\"" 1>&2
+  fi
+}
+
+# source sh hooks
+_colcon_package_sh_source_script "$COLCON_CURRENT_PREFIX/share/interface/hook/cmake_prefix_path.sh"
+_colcon_package_sh_source_script "$COLCON_CURRENT_PREFIX/share/interface/hook/ld_library_path_lib.sh"
+_colcon_package_sh_source_script "$COLCON_CURRENT_PREFIX/share/interface/local_setup.sh"
+
+unset _colcon_package_sh_source_script
+unset COLCON_CURRENT_PREFIX
+
+# do not unset _colcon_prepend_unique_value since it might be used by non-primary shell hooks

+ 24 - 0
install/interface/share/interface/package.xml

@@ -0,0 +1,24 @@
+<?xml version="1.0"?>
+<?xml-model href="http://download.ros.org/schema/package_format3.xsd" schematypens="http://www.w3.org/2001/XMLSchema"?>
+<package format="3">
+  <name>interface</name>
+  <version>0.0.0</version>
+  <description>Custom interface package for SceneControls service</description>
+  <maintainer email="zhangkaifeng@users.noreply.github.com">zkf</maintainer>
+  <license>Apache-2.0</license>
+
+  <buildtool_depend>ament_cmake</buildtool_depend>
+  <buildtool_depend>rosidl_default_generators</buildtool_depend>
+
+  <depend>std_msgs</depend>
+  <depend>rosidl_default_runtime</depend>
+  
+  <member_of_group>rosidl_interface_packages</member_of_group>
+  
+  <test_depend>ament_lint_auto</test_depend>
+  <test_depend>ament_lint_common</test_depend>
+
+  <export>
+    <build_type>ament_cmake</build_type>
+  </export>
+</package>

+ 50 - 0
install/interface/share/interface/package.zsh

@@ -0,0 +1,50 @@
+# generated from colcon_zsh/shell/template/package.zsh.em
+
+# This script extends the environment for this package.
+
+# a zsh script is able to determine its own path if necessary
+if [ -z "$COLCON_CURRENT_PREFIX" ]; then
+  # the prefix is two levels up from the package specific share directory
+  _colcon_package_zsh_COLCON_CURRENT_PREFIX="$(builtin cd -q "`dirname "${(%):-%N}"`/../.." > /dev/null && pwd)"
+else
+  _colcon_package_zsh_COLCON_CURRENT_PREFIX="$COLCON_CURRENT_PREFIX"
+fi
+
+# function to source another script with conditional trace output
+# first argument: the path of the script
+# additional arguments: arguments to the script
+_colcon_package_zsh_source_script() {
+  if [ -f "$1" ]; then
+    if [ -n "$COLCON_TRACE" ]; then
+      echo "# . \"$1\""
+    fi
+    . "$@"
+  else
+    echo "not found: \"$1\"" 1>&2
+  fi
+}
+
+# function to convert array-like strings into arrays
+# to workaround SH_WORD_SPLIT not being set
+colcon_zsh_convert_to_array() {
+  local _listname=$1
+  local _dollar="$"
+  local _split="{="
+  local _to_array="(\"$_dollar$_split$_listname}\")"
+  eval $_listname=$_to_array
+}
+
+# source sh script of this package
+_colcon_package_zsh_source_script "$_colcon_package_zsh_COLCON_CURRENT_PREFIX/share/interface/package.sh"
+unset convert_zsh_to_array
+
+# setting COLCON_CURRENT_PREFIX avoids determining the prefix in the sourced scripts
+COLCON_CURRENT_PREFIX="$_colcon_package_zsh_COLCON_CURRENT_PREFIX"
+
+# source zsh hooks
+_colcon_package_zsh_source_script "$COLCON_CURRENT_PREFIX/share/interface/local_setup.zsh"
+
+unset COLCON_CURRENT_PREFIX
+
+unset _colcon_package_zsh_source_script
+unset _colcon_package_zsh_COLCON_CURRENT_PREFIX

+ 17 - 0
install/interface/share/interface/srv/SceneControls.idl

@@ -0,0 +1,17 @@
+// generated from rosidl_adapter/resource/srv.idl.em
+// with input from interface/srv/SceneControls.srv
+// generated code does not contain a copyright notice
+
+
+module interface {
+  module srv {
+    struct SceneControls_Request {
+      int32 start;
+    };
+    struct SceneControls_Response {
+      int32 code;
+
+      string message;
+    };
+  };
+};

+ 4 - 0
install/interface/share/interface/srv/SceneControls.srv

@@ -0,0 +1,4 @@
+int32 start
+---
+int32 code
+string message

+ 1 - 0
install/interface/share/interface/srv/SceneControls_Request.msg

@@ -0,0 +1 @@
+int32 start

+ 3 - 0
install/interface/share/interface/srv/SceneControls_Response.msg

@@ -0,0 +1,3 @@
+
+int32 code
+string message

+ 121 - 0
install/local_setup.bash

@@ -0,0 +1,121 @@
+# generated from colcon_bash/shell/template/prefix.bash.em
+
+# This script extends the environment with all packages contained in this
+# prefix path.
+
+# a bash script is able to determine its own path if necessary
+if [ -z "$COLCON_CURRENT_PREFIX" ]; then
+  _colcon_prefix_bash_COLCON_CURRENT_PREFIX="$(builtin cd "`dirname "${BASH_SOURCE[0]}"`" > /dev/null && pwd)"
+else
+  _colcon_prefix_bash_COLCON_CURRENT_PREFIX="$COLCON_CURRENT_PREFIX"
+fi
+
+# function to prepend a value to a variable
+# which uses colons as separators
+# duplicates as well as trailing separators are avoided
+# first argument: the name of the result variable
+# second argument: the value to be prepended
+_colcon_prefix_bash_prepend_unique_value() {
+  # arguments
+  _listname="$1"
+  _value="$2"
+
+  # get values from variable
+  eval _values=\"\$$_listname\"
+  # backup the field separator
+  _colcon_prefix_bash_prepend_unique_value_IFS="$IFS"
+  IFS=":"
+  # start with the new value
+  _all_values="$_value"
+  _contained_value=""
+  # iterate over existing values in the variable
+  for _item in $_values; do
+    # ignore empty strings
+    if [ -z "$_item" ]; then
+      continue
+    fi
+    # ignore duplicates of _value
+    if [ "$_item" = "$_value" ]; then
+      _contained_value=1
+      continue
+    fi
+    # keep non-duplicate values
+    _all_values="$_all_values:$_item"
+  done
+  unset _item
+  if [ -z "$_contained_value" ]; then
+    if [ -n "$COLCON_TRACE" ]; then
+      if [ "$_all_values" = "$_value" ]; then
+        echo "export $_listname=$_value"
+      else
+        echo "export $_listname=$_value:\$$_listname"
+      fi
+    fi
+  fi
+  unset _contained_value
+  # restore the field separator
+  IFS="$_colcon_prefix_bash_prepend_unique_value_IFS"
+  unset _colcon_prefix_bash_prepend_unique_value_IFS
+  # export the updated variable
+  eval export $_listname=\"$_all_values\"
+  unset _all_values
+  unset _values
+
+  unset _value
+  unset _listname
+}
+
+# add this prefix to the COLCON_PREFIX_PATH
+_colcon_prefix_bash_prepend_unique_value COLCON_PREFIX_PATH "$_colcon_prefix_bash_COLCON_CURRENT_PREFIX"
+unset _colcon_prefix_bash_prepend_unique_value
+
+# check environment variable for custom Python executable
+if [ -n "$COLCON_PYTHON_EXECUTABLE" ]; then
+  if [ ! -f "$COLCON_PYTHON_EXECUTABLE" ]; then
+    echo "error: COLCON_PYTHON_EXECUTABLE '$COLCON_PYTHON_EXECUTABLE' doesn't exist"
+    return 1
+  fi
+  _colcon_python_executable="$COLCON_PYTHON_EXECUTABLE"
+else
+  # try the Python executable known at configure time
+  _colcon_python_executable="/usr/bin/python3"
+  # if it doesn't exist try a fall back
+  if [ ! -f "$_colcon_python_executable" ]; then
+    if ! /usr/bin/env python3 --version > /dev/null 2> /dev/null; then
+      echo "error: unable to find python3 executable"
+      return 1
+    fi
+    _colcon_python_executable=`/usr/bin/env python3 -c "import sys; print(sys.executable)"`
+  fi
+fi
+
+# function to source another script with conditional trace output
+# first argument: the path of the script
+_colcon_prefix_sh_source_script() {
+  if [ -f "$1" ]; then
+    if [ -n "$COLCON_TRACE" ]; then
+      echo "# . \"$1\""
+    fi
+    . "$1"
+  else
+    echo "not found: \"$1\"" 1>&2
+  fi
+}
+
+# get all commands in topological order
+_colcon_ordered_commands="$($_colcon_python_executable "$_colcon_prefix_bash_COLCON_CURRENT_PREFIX/_local_setup_util_sh.py" sh bash)"
+unset _colcon_python_executable
+if [ -n "$COLCON_TRACE" ]; then
+  echo "$(declare -f _colcon_prefix_sh_source_script)"
+  echo "# Execute generated script:"
+  echo "# <<<"
+  echo "${_colcon_ordered_commands}"
+  echo "# >>>"
+  echo "unset _colcon_prefix_sh_source_script"
+fi
+eval "${_colcon_ordered_commands}"
+unset _colcon_ordered_commands
+
+unset _colcon_prefix_sh_source_script
+
+unset _colcon_prefix_bash_COLCON_CURRENT_PREFIX

+ 55 - 0
install/local_setup.ps1

@@ -0,0 +1,55 @@
+# generated from colcon_powershell/shell/template/prefix.ps1.em
+
+# This script extends the environment with all packages contained in this
+# prefix path.
+
+# check environment variable for custom Python executable
+if ($env:COLCON_PYTHON_EXECUTABLE) {
+  if (!(Test-Path "$env:COLCON_PYTHON_EXECUTABLE" -PathType Leaf)) {
+    echo "error: COLCON_PYTHON_EXECUTABLE '$env:COLCON_PYTHON_EXECUTABLE' doesn't exist"
+    exit 1
+  }
+  $_colcon_python_executable="$env:COLCON_PYTHON_EXECUTABLE"
+} else {
+  # use the Python executable known at configure time
+  $_colcon_python_executable="/usr/bin/python3"
+  # if it doesn't exist try a fall back
+  if (!(Test-Path "$_colcon_python_executable" -PathType Leaf)) {
+    if (!(Get-Command "python3" -ErrorAction SilentlyContinue)) {
+      echo "error: unable to find python3 executable"
+      exit 1
+    }
+    $_colcon_python_executable="python3"
+  }
+}
+
+# function to source another script with conditional trace output
+# first argument: the path of the script
+function _colcon_prefix_powershell_source_script {
+  param (
+    $_colcon_prefix_powershell_source_script_param
+  )
+  # source script with conditional trace output
+  if (Test-Path $_colcon_prefix_powershell_source_script_param) {
+    if ($env:COLCON_TRACE) {
+      echo ". '$_colcon_prefix_powershell_source_script_param'"
+    }
+    . "$_colcon_prefix_powershell_source_script_param"
+  } else {
+    Write-Error "not found: '$_colcon_prefix_powershell_source_script_param'"
+  }
+}
+
+# get all commands in topological order
+$_colcon_ordered_commands = & "$_colcon_python_executable" "$(Split-Path $PSCommandPath -Parent)/_local_setup_util_ps1.py" ps1
+
+# execute all commands in topological order
+if ($env:COLCON_TRACE) {
+  echo "Execute generated script:"
+  echo "<<<"
+  $_colcon_ordered_commands.Split([Environment]::NewLine, [StringSplitOptions]::RemoveEmptyEntries) | Write-Output
+  echo ">>>"
+}
+if ($_colcon_ordered_commands) {
+  $_colcon_ordered_commands.Split([Environment]::NewLine, [StringSplitOptions]::RemoveEmptyEntries) | Invoke-Expression
+}

+ 137 - 0
install/local_setup.sh

@@ -0,0 +1,137 @@
+# generated from colcon_core/shell/template/prefix.sh.em
+
+# This script extends the environment with all packages contained in this
+# prefix path.
+
+# since a plain shell script can't determine its own path when being sourced
+# either use the provided COLCON_CURRENT_PREFIX
+# or fall back to the build time prefix (if it exists)
+_colcon_prefix_sh_COLCON_CURRENT_PREFIX="/home/wljy/zkf/recharge/install"
+if [ -z "$COLCON_CURRENT_PREFIX" ]; then
+  if [ ! -d "$_colcon_prefix_sh_COLCON_CURRENT_PREFIX" ]; then
+    echo "The build time path \"$_colcon_prefix_sh_COLCON_CURRENT_PREFIX\" doesn't exist. Either source a script for a different shell or set the environment variable \"COLCON_CURRENT_PREFIX\" explicitly." 1>&2
+    unset _colcon_prefix_sh_COLCON_CURRENT_PREFIX
+    return 1
+  fi
+else
+  _colcon_prefix_sh_COLCON_CURRENT_PREFIX="$COLCON_CURRENT_PREFIX"
+fi
+
+# function to prepend a value to a variable
+# which uses colons as separators
+# duplicates as well as trailing separators are avoided
+# first argument: the name of the result variable
+# second argument: the value to be prepended
+_colcon_prefix_sh_prepend_unique_value() {
+  # arguments
+  _listname="$1"
+  _value="$2"
+
+  # get values from variable
+  eval _values=\"\$$_listname\"
+  # backup the field separator
+  _colcon_prefix_sh_prepend_unique_value_IFS="$IFS"
+  IFS=":"
+  # start with the new value
+  _all_values="$_value"
+  _contained_value=""
+  # iterate over existing values in the variable
+  for _item in $_values; do
+    # ignore empty strings
+    if [ -z "$_item" ]; then
+      continue
+    fi
+    # ignore duplicates of _value
+    if [ "$_item" = "$_value" ]; then
+      _contained_value=1
+      continue
+    fi
+    # keep non-duplicate values
+    _all_values="$_all_values:$_item"
+  done
+  unset _item
+  if [ -z "$_contained_value" ]; then
+    if [ -n "$COLCON_TRACE" ]; then
+      if [ "$_all_values" = "$_value" ]; then
+        echo "export $_listname=$_value"
+      else
+        echo "export $_listname=$_value:\$$_listname"
+      fi
+    fi
+  fi
+  unset _contained_value
+  # restore the field separator
+  IFS="$_colcon_prefix_sh_prepend_unique_value_IFS"
+  unset _colcon_prefix_sh_prepend_unique_value_IFS
+  # export the updated variable
+  eval export $_listname=\"$_all_values\"
+  unset _all_values
+  unset _values
+
+  unset _value
+  unset _listname
+}
+
+# add this prefix to the COLCON_PREFIX_PATH
+_colcon_prefix_sh_prepend_unique_value COLCON_PREFIX_PATH "$_colcon_prefix_sh_COLCON_CURRENT_PREFIX"
+unset _colcon_prefix_sh_prepend_unique_value
+
+# check environment variable for custom Python executable
+if [ -n "$COLCON_PYTHON_EXECUTABLE" ]; then
+  if [ ! -f "$COLCON_PYTHON_EXECUTABLE" ]; then
+    echo "error: COLCON_PYTHON_EXECUTABLE '$COLCON_PYTHON_EXECUTABLE' doesn't exist"
+    return 1
+  fi
+  _colcon_python_executable="$COLCON_PYTHON_EXECUTABLE"
+else
+  # try the Python executable known at configure time
+  _colcon_python_executable="/usr/bin/python3"
+  # if it doesn't exist try a fall back
+  if [ ! -f "$_colcon_python_executable" ]; then
+    if ! /usr/bin/env python3 --version > /dev/null 2> /dev/null; then
+      echo "error: unable to find python3 executable"
+      return 1
+    fi
+    _colcon_python_executable=`/usr/bin/env python3 -c "import sys; print(sys.executable)"`
+  fi
+fi
+
+# function to source another script with conditional trace output
+# first argument: the path of the script
+_colcon_prefix_sh_source_script() {
+  if [ -f "$1" ]; then
+    if [ -n "$COLCON_TRACE" ]; then
+      echo "# . \"$1\""
+    fi
+    . "$1"
+  else
+    echo "not found: \"$1\"" 1>&2
+  fi
+}
+
+# get all commands in topological order
+_colcon_ordered_commands="$($_colcon_python_executable "$_colcon_prefix_sh_COLCON_CURRENT_PREFIX/_local_setup_util_sh.py" sh)"
+unset _colcon_python_executable
+if [ -n "$COLCON_TRACE" ]; then
+  echo "_colcon_prefix_sh_source_script() {
+    if [ -f \"\$1\" ]; then
+      if [ -n \"\$COLCON_TRACE\" ]; then
+        echo \"# . \\\"\$1\\\"\"
+      fi
+      . \"\$1\"
+    else
+      echo \"not found: \\\"\$1\\\"\" 1>&2
+    fi
+  }"
+  echo "# Execute generated script:"
+  echo "# <<<"
+  echo "${_colcon_ordered_commands}"
+  echo "# >>>"
+  echo "unset _colcon_prefix_sh_source_script"
+fi
+eval "${_colcon_ordered_commands}"
+unset _colcon_ordered_commands
+
+unset _colcon_prefix_sh_source_script
+
+unset _colcon_prefix_sh_COLCON_CURRENT_PREFIX

+ 134 - 0
install/local_setup.zsh

@@ -0,0 +1,134 @@
+# generated from colcon_zsh/shell/template/prefix.zsh.em
+
+# This script extends the environment with all packages contained in this
+# prefix path.
+
+# a zsh script is able to determine its own path if necessary
+if [ -z "$COLCON_CURRENT_PREFIX" ]; then
+  _colcon_prefix_zsh_COLCON_CURRENT_PREFIX="$(builtin cd -q "`dirname "${(%):-%N}"`" > /dev/null && pwd)"
+else
+  _colcon_prefix_zsh_COLCON_CURRENT_PREFIX="$COLCON_CURRENT_PREFIX"
+fi
+
+# function to convert array-like strings into arrays
+# to workaround SH_WORD_SPLIT not being set
+_colcon_prefix_zsh_convert_to_array() {
+  local _listname=$1
+  local _dollar="$"
+  local _split="{="
+  local _to_array="(\"$_dollar$_split$_listname}\")"
+  eval $_listname=$_to_array
+}
+
+# function to prepend a value to a variable
+# which uses colons as separators
+# duplicates as well as trailing separators are avoided
+# first argument: the name of the result variable
+# second argument: the value to be prepended
+_colcon_prefix_zsh_prepend_unique_value() {
+  # arguments
+  _listname="$1"
+  _value="$2"
+
+  # get values from variable
+  eval _values=\"\$$_listname\"
+  # backup the field separator
+  _colcon_prefix_zsh_prepend_unique_value_IFS="$IFS"
+  IFS=":"
+  # start with the new value
+  _all_values="$_value"
+  _contained_value=""
+  # workaround SH_WORD_SPLIT not being set
+  _colcon_prefix_zsh_convert_to_array _values
+  # iterate over existing values in the variable
+  for _item in $_values; do
+    # ignore empty strings
+    if [ -z "$_item" ]; then
+      continue
+    fi
+    # ignore duplicates of _value
+    if [ "$_item" = "$_value" ]; then
+      _contained_value=1
+      continue
+    fi
+    # keep non-duplicate values
+    _all_values="$_all_values:$_item"
+  done
+  unset _item
+  if [ -z "$_contained_value" ]; then
+    if [ -n "$COLCON_TRACE" ]; then
+      if [ "$_all_values" = "$_value" ]; then
+        echo "export $_listname=$_value"
+      else
+        echo "export $_listname=$_value:\$$_listname"
+      fi
+    fi
+  fi
+  unset _contained_value
+  # restore the field separator
+  IFS="$_colcon_prefix_zsh_prepend_unique_value_IFS"
+  unset _colcon_prefix_zsh_prepend_unique_value_IFS
+  # export the updated variable
+  eval export $_listname=\"$_all_values\"
+  unset _all_values
+  unset _values
+
+  unset _value
+  unset _listname
+}
+
+# add this prefix to the COLCON_PREFIX_PATH
+_colcon_prefix_zsh_prepend_unique_value COLCON_PREFIX_PATH "$_colcon_prefix_zsh_COLCON_CURRENT_PREFIX"
+unset _colcon_prefix_zsh_prepend_unique_value
+unset _colcon_prefix_zsh_convert_to_array
+
+# check environment variable for custom Python executable
+if [ -n "$COLCON_PYTHON_EXECUTABLE" ]; then
+  if [ ! -f "$COLCON_PYTHON_EXECUTABLE" ]; then
+    echo "error: COLCON_PYTHON_EXECUTABLE '$COLCON_PYTHON_EXECUTABLE' doesn't exist"
+    return 1
+  fi
+  _colcon_python_executable="$COLCON_PYTHON_EXECUTABLE"
+else
+  # try the Python executable known at configure time
+  _colcon_python_executable="/usr/bin/python3"
+  # if it doesn't exist try a fall back
+  if [ ! -f "$_colcon_python_executable" ]; then
+    if ! /usr/bin/env python3 --version > /dev/null 2> /dev/null; then
+      echo "error: unable to find python3 executable"
+      return 1
+    fi
+    _colcon_python_executable=`/usr/bin/env python3 -c "import sys; print(sys.executable)"`
+  fi
+fi
+
+# function to source another script with conditional trace output
+# first argument: the path of the script
+_colcon_prefix_sh_source_script() {
+  if [ -f "$1" ]; then
+    if [ -n "$COLCON_TRACE" ]; then
+      echo "# . \"$1\""
+    fi
+    . "$1"
+  else
+    echo "not found: \"$1\"" 1>&2
+  fi
+}
+
+# get all commands in topological order
+_colcon_ordered_commands="$($_colcon_python_executable "$_colcon_prefix_zsh_COLCON_CURRENT_PREFIX/_local_setup_util_sh.py" sh zsh)"
+unset _colcon_python_executable
+if [ -n "$COLCON_TRACE" ]; then
+  echo "$(declare -f _colcon_prefix_sh_source_script)"
+  echo "# Execute generated script:"
+  echo "# <<<"
+  echo "${_colcon_ordered_commands}"
+  echo "# >>>"
+  echo "unset _colcon_prefix_sh_source_script"
+fi
+eval "${_colcon_ordered_commands}"
+unset _colcon_ordered_commands
+
+unset _colcon_prefix_sh_source_script
+
+unset _colcon_prefix_zsh_COLCON_CURRENT_PREFIX

+ 31 - 0
install/setup.bash

@@ -0,0 +1,31 @@
+# generated from colcon_bash/shell/template/prefix_chain.bash.em
+
+# This script extends the environment with the environment of other prefix
+# paths which were sourced when this file was generated as well as all packages
+# contained in this prefix path.
+
+# function to source another script with conditional trace output
+# first argument: the path of the script
+_colcon_prefix_chain_bash_source_script() {
+  if [ -f "$1" ]; then
+    if [ -n "$COLCON_TRACE" ]; then
+      echo "# . \"$1\""
+    fi
+    . "$1"
+  else
+    echo "not found: \"$1\"" 1>&2
+  fi
+}
+
+# source chained prefixes
+# setting COLCON_CURRENT_PREFIX avoids determining the prefix in the sourced script
+COLCON_CURRENT_PREFIX="/opt/ros/humble"
+_colcon_prefix_chain_bash_source_script "$COLCON_CURRENT_PREFIX/local_setup.bash"
+
+# source this prefix
+# setting COLCON_CURRENT_PREFIX avoids determining the prefix in the sourced script
+COLCON_CURRENT_PREFIX="$(builtin cd "`dirname "${BASH_SOURCE[0]}"`" > /dev/null && pwd)"
+_colcon_prefix_chain_bash_source_script "$COLCON_CURRENT_PREFIX/local_setup.bash"
+
+unset COLCON_CURRENT_PREFIX
+unset _colcon_prefix_chain_bash_source_script

+ 29 - 0
install/setup.ps1

@@ -0,0 +1,29 @@
+# generated from colcon_powershell/shell/template/prefix_chain.ps1.em
+
+# This script extends the environment with the environment of other prefix
+# paths which were sourced when this file was generated as well as all packages
+# contained in this prefix path.
+
+# function to source another script with conditional trace output
+# first argument: the path of the script
+function _colcon_prefix_chain_powershell_source_script {
+  param (
+    $_colcon_prefix_chain_powershell_source_script_param
+  )
+  # source script with conditional trace output
+  if (Test-Path $_colcon_prefix_chain_powershell_source_script_param) {
+    if ($env:COLCON_TRACE) {
+      echo ". '$_colcon_prefix_chain_powershell_source_script_param'"
+    }
+    . "$_colcon_prefix_chain_powershell_source_script_param"
+  } else {
+    Write-Error "not found: '$_colcon_prefix_chain_powershell_source_script_param'"
+  }
+}
+
+# source chained prefixes
+_colcon_prefix_chain_powershell_source_script "/opt/ros/humble\local_setup.ps1"
+
+# source this prefix
+$env:COLCON_CURRENT_PREFIX=(Split-Path $PSCommandPath -Parent)
+_colcon_prefix_chain_powershell_source_script "$env:COLCON_CURRENT_PREFIX\local_setup.ps1"

+ 45 - 0
install/setup.sh

@@ -0,0 +1,45 @@
+# generated from colcon_core/shell/template/prefix_chain.sh.em
+
+# This script extends the environment with the environment of other prefix
+# paths which were sourced when this file was generated as well as all packages
+# contained in this prefix path.
+
+# since a plain shell script can't determine its own path when being sourced
+# either use the provided COLCON_CURRENT_PREFIX
+# or fall back to the build time prefix (if it exists)
+_colcon_prefix_chain_sh_COLCON_CURRENT_PREFIX=/home/wljy/zkf/recharge/install
+if [ ! -z "$COLCON_CURRENT_PREFIX" ]; then
+  _colcon_prefix_chain_sh_COLCON_CURRENT_PREFIX="$COLCON_CURRENT_PREFIX"
+elif [ ! -d "$_colcon_prefix_chain_sh_COLCON_CURRENT_PREFIX" ]; then
+  echo "The build time path \"$_colcon_prefix_chain_sh_COLCON_CURRENT_PREFIX\" doesn't exist. Either source a script for a different shell or set the environment variable \"COLCON_CURRENT_PREFIX\" explicitly." 1>&2
+  unset _colcon_prefix_chain_sh_COLCON_CURRENT_PREFIX
+  return 1
+fi
+
+# function to source another script with conditional trace output
+# first argument: the path of the script
+_colcon_prefix_chain_sh_source_script() {
+  if [ -f "$1" ]; then
+    if [ -n "$COLCON_TRACE" ]; then
+      echo "# . \"$1\""
+    fi
+    . "$1"
+  else
+    echo "not found: \"$1\"" 1>&2
+  fi
+}
+
+# source chained prefixes
+# setting COLCON_CURRENT_PREFIX avoids relying on the build time prefix of the sourced script
+COLCON_CURRENT_PREFIX="/opt/ros/humble"
+_colcon_prefix_chain_sh_source_script "$COLCON_CURRENT_PREFIX/local_setup.sh"
+
+
+# source this prefix
+# setting COLCON_CURRENT_PREFIX avoids relying on the build time prefix of the sourced script
+COLCON_CURRENT_PREFIX="$_colcon_prefix_chain_sh_COLCON_CURRENT_PREFIX"
+_colcon_prefix_chain_sh_source_script "$COLCON_CURRENT_PREFIX/local_setup.sh"
+
+unset _colcon_prefix_chain_sh_COLCON_CURRENT_PREFIX
+unset _colcon_prefix_chain_sh_source_script
+unset COLCON_CURRENT_PREFIX

+ 31 - 0
install/setup.zsh

@@ -0,0 +1,31 @@
+# generated from colcon_zsh/shell/template/prefix_chain.zsh.em
+
+# This script extends the environment with the environment of other prefix
+# paths which were sourced when this file was generated as well as all packages
+# contained in this prefix path.
+
+# function to source another script with conditional trace output
+# first argument: the path of the script
+_colcon_prefix_chain_zsh_source_script() {
+  if [ -f "$1" ]; then
+    if [ -n "$COLCON_TRACE" ]; then
+      echo "# . \"$1\""
+    fi
+    . "$1"
+  else
+    echo "not found: \"$1\"" 1>&2
+  fi
+}
+
+# source chained prefixes
+# setting COLCON_CURRENT_PREFIX avoids determining the prefix in the sourced script
+COLCON_CURRENT_PREFIX="/opt/ros/humble"
+_colcon_prefix_chain_zsh_source_script "$COLCON_CURRENT_PREFIX/local_setup.zsh"
+
+# source this prefix
+# setting COLCON_CURRENT_PREFIX avoids determining the prefix in the sourced script
+COLCON_CURRENT_PREFIX="$(builtin cd -q "`dirname "${(%):-%N}"`" > /dev/null && pwd)"
+_colcon_prefix_chain_zsh_source_script "$COLCON_CURRENT_PREFIX/local_setup.zsh"
+
+unset COLCON_CURRENT_PREFIX
+unset _colcon_prefix_chain_zsh_source_script

+ 50 - 0
install/wheelchair_state_machine/include/wheelchair_state_machine/battery_manager.hpp

@@ -0,0 +1,50 @@
+// battery_manager.hpp
+#ifndef BATTERY_MANAGER_HPP
+#define BATTERY_MANAGER_HPP
+
+#include <rclcpp/rclcpp.hpp>
+#include <sensor_msgs/msg/battery_state.hpp>
+#include "wheelchair_types.hpp"
+#include <functional>
+
+class BatteryManager
+{
+public:
+    using BatteryStateCallback = std::function<void(BatteryState, float)>;
+    using LowBatteryCallback = std::function<void(BatteryState, float)>;
+
+    BatteryManager(rclcpp::Node *node,
+                   float low_threshold = 20.0f,
+                   float critical_threshold = 10.0f);
+
+    void initialize();
+    void updateFromMessage(const sensor_msgs::msg::BatteryState::SharedPtr msg);
+    void setBatteryStateCallback(BatteryStateCallback callback);
+    void setLowBatteryCallback(LowBatteryCallback callback);
+
+    BatteryState getBatteryState() const { return battery_state_; }
+    float getBatteryPercentage() const { return battery_percentage_; }
+    float getLowThreshold() const { return low_battery_threshold_; }
+    float getCriticalThreshold() const { return critical_battery_threshold_; }
+
+    std::string stateToString() const;
+
+private:
+    rclcpp::Node *node_;
+    rclcpp::Subscription<sensor_msgs::msg::BatteryState>::SharedPtr battery_sub_;
+
+    BatteryState battery_state_;
+    float battery_percentage_;
+    float low_battery_threshold_;
+    float critical_battery_threshold_;
+
+    BatteryStateCallback battery_state_callback_;
+    LowBatteryCallback low_battery_callback_;
+
+    void batteryStateCallback(const sensor_msgs::msg::BatteryState::SharedPtr msg);
+    void updateBatteryState(float percentage);
+    void checkBatteryThresholds();
+    std::string batteryStateToString(BatteryState state) const;
+};
+
+#endif // BATTERY_MANAGER_HPPs

+ 0 - 0
install/wheelchair_state_machine/include/wheelchair_state_machine/duiwaiyuju.hpp


+ 125 - 0
install/wheelchair_state_machine/include/wheelchair_state_machine/error_code.hpp

@@ -0,0 +1,125 @@
+// error_code.hpp
+#ifndef ERROR_CODE_HPP
+#define ERROR_CODE_HPP
+
+#include <string>
+#include <cstdint>
+
+// 错误码模块定义(与文档对应)
+enum class ErrorModule : uint8_t
+{
+    SYSTEM = 0x01,   // 系统
+    IMU = 0x10,      // IMU
+    GPS = 0x11,      // GPS
+    LIDAR1 = 0x12,   // 左雷达
+    LIDAR2 = 0x13,   // 右雷达
+    LIDAR3 = 0x14,   // 左斜雷达
+    LIDAR4 = 0x15,   // 右斜雷达
+    LIDAR5 = 0x16,   // 后雷达
+    CAN0 = 0x02,     // CAN0
+    CAN1 = 0x03,     // CAN1
+    CAN2 = 0x04,     // CAN2
+    DRIVER = 0x20,   // 电机驱动器
+    TOP = 0x21,      // TOP驱动器
+    OBSTACLE = 0x50, // 避障功能
+    RECHARGE = 0x51  // 回充功能
+};
+
+// 错误码子模块定义
+enum class ErrorSubModule : uint8_t
+{
+    HARDWARE = 0x01,      // 硬件
+    DATA = 0x02,          // 数据
+    TIMING = 0x03,        // 时间同步
+    CONFIG = 0x04,        // 配置
+    COMMUNICATION = 0x05, // 通信
+    CALIBRATION = 0x06,   // 标定
+    PERFORMANCE = 0x07,   // 性能
+    POWER = 0x08,         // 电源
+    TEMPERATURE = 0x09,   // 温度
+    OTHER = 0x0A          // 其他
+};
+
+// 通用错误编号
+enum class ErrorCode : uint16_t
+{
+    NO_ERROR = 0x0000,
+    DEVICE_NOT_FOUND = 0x0001,
+    DATA_INVALID = 0x0002,
+    TIMEOUT = 0x0003,
+    CONFIG_INVALID = 0x0004,
+    COMMUNICATION_FAIL = 0x0005,
+    CALIBRATION_FAIL = 0x0006,
+    PERFORMANCE_LOW = 0x0007,
+    POWER_ABNORMAL = 0x0008,
+    TEMPERATURE_HIGH = 0x0009,
+    UNKNOWN_ERROR = 0x000A
+};
+
+// 错误码数据结构
+struct ErrorInfo
+{
+    uint32_t error_code;         // 完整错误码 0xMMSSEEEE
+    std::string module_name;     // 模块名称
+    std::string sub_module_name; // 子模块名称
+    std::string description;     // 错误描述
+    uint64_t timestamp;          // 时间戳(毫秒)
+    bool is_recovered;           // 是否已恢复
+
+    // 解析错误码
+    ErrorModule getModule() const
+    {
+        return static_cast<ErrorModule>((error_code >> 24) & 0xFF);
+    }
+
+    ErrorSubModule getSubModule() const
+    {
+        return static_cast<ErrorSubModule>((error_code >> 16) & 0xFF);
+    }
+
+    uint16_t getErrorNumber() const
+    {
+        return error_code & 0xFFFF;
+    }
+
+    // 判断是否为严重错误
+    bool isCritical() const
+    {
+        // 根据文档,硬件错误和部分功能错误为严重错误
+        auto sub = getSubModule();
+        auto module = getModule();
+
+        // 硬件错误总是严重
+        if (sub == ErrorSubModule::HARDWARE)
+            return true;
+
+        // 关键模块的通信错误
+        if (sub == ErrorSubModule::COMMUNICATION)
+        {
+            return (module == ErrorModule::IMU ||
+                    module == ErrorModule::LIDAR1 ||
+                    module == ErrorModule::DRIVER);
+        }
+
+        // 回充功能相关的错误
+        if (module == ErrorModule::RECHARGE)
+        {
+            uint16_t error_num = getErrorNumber();
+            // 根据文档,回充功能错误码 0x0001-0x0003 为严重错误
+            return (error_num >= 0x0001 && error_num <= 0x0003);
+        }
+
+        return false;
+    }
+};
+
+// 错误码消息类型(用于ROS topic)
+struct ErrorCodeMsg
+{
+    uint32_t error_code;
+    uint64_t timestamp;
+    uint8_t error_level; // 0: INFO, 1: WARNING, 2: ERROR, 3: CRITICAL
+    std::string description;
+};
+
+#endif // ERROR_CODE_HPP

+ 89 - 0
install/wheelchair_state_machine/include/wheelchair_state_machine/event_input.hpp

@@ -0,0 +1,89 @@
+// event_input.hpp
+#ifndef EVENT_INPUT_HANDLER_HPP
+#define EVENT_INPUT_HANDLER_HPP
+
+#include <rclcpp/rclcpp.hpp>
+#include <string>
+#include <functional>
+#include <map>
+#include <memory>
+#include "wheelchair_types.hpp"
+#include "battery_manager.hpp"
+#include "lidascan_ctrl.hpp"
+#include "ipad_manager.hpp"
+#include "workflow.hpp"
+#include "report.hpp"
+#include <std_msgs/msg/bool.hpp>
+#include <std_msgs/msg/string.hpp>
+
+class EventInputHandler
+{
+public:
+    using EventCallback = std::function<void(const std::string &)>;
+
+    EventInputHandler(rclcpp::Node *node);
+
+    // 初始化接口
+    void initializeModules();
+
+    // 事件注册接口
+    void registerEvent(const std::string &event_name, EventCallback callback);
+
+    // 事件触发接口
+    void triggerEvent(const std::string &event_name);
+    void triggerEvent(const std::string &event_name, const std::string &data);
+
+    // 特定事件触发(仅外部输入事件)
+    void triggerIpadStart();
+    void triggerIpadCancel();
+    void triggerBluetoothDisconnected();
+    void triggerBluetoothConnected();
+    void triggerBaseStationPowerOff();
+    void triggerLowBattery(BatteryState state, float percentage);
+    void triggerLockVehicle();
+    void triggerUnlockVehicle();
+    void triggerJoystickPullBack();
+    void triggerJoystickStop();
+    void triggerPushStart();
+    void triggerPushStop();
+    void triggerBatteryStartCharging();
+    void triggerBatteryStopCharging();
+    void triggerBatteryFull();
+    void triggerBaseStationLost();
+    void triggerSearchTimeout();
+
+    // 系统状态查询
+    std::string getCurrentState() const;
+    bool isRechargeActive() const;
+
+    // 系统状态显示
+    void displaySystemStatus();
+
+private:
+    rclcpp::Node *node_;
+
+    // 模块化组件
+    std::unique_ptr<BatteryManager> battery_manager_;
+    std::unique_ptr<LidarScanController> lidar_controller_;
+    std::unique_ptr<IpadManager> ipad_manager_;
+    std::unique_ptr<WorkflowManager> workflow_manager_;
+    std::unique_ptr<ReportManager> report_manager_;
+
+    // ROS订阅者
+    rclcpp::Subscription<std_msgs::msg::String>::SharedPtr cmd_enable_sub_;
+
+    // 事件回调映射
+    std::map<std::string, EventCallback> event_callbacks_;
+
+    // 状态标志
+    bool interface_active_ = false;
+
+    // 私有方法
+    void setupModuleCallbacks();
+    void setupSubscriptions();
+    void startNavigationControl();
+    void stopNavigationControl();
+    void logEvent(const std::string &event_name, const std::string &details = "");
+};
+
+#endif // EVENT_INPUT_HANDLER_HPP

+ 45 - 0
install/wheelchair_state_machine/include/wheelchair_state_machine/ipad_manager.hpp

@@ -0,0 +1,45 @@
+// ipad_manager.hpp
+#ifndef IPAD_MANAGER_HPP
+#define IPAD_MANAGER_HPP
+
+#include <rclcpp/rclcpp.hpp>
+#include <std_msgs/msg/string.hpp>
+#include <functional>
+
+class IpadManager
+{
+public:
+    // 回调函数类型
+    using RechargeStartCallback = std::function<void()>;
+    using RechargeCancelCallback = std::function<void()>;
+
+    IpadManager(rclcpp::Node *node);
+
+    // 核心接口 - 只处理开始和结束
+    void onCmdEnable(const std_msgs::msg::String::SharedPtr msg);
+
+    // 回调设置
+    void setRechargeStartCallback(RechargeStartCallback callback);
+    void setRechargeCancelCallback(RechargeCancelCallback callback);
+
+    // 状态查询(可选)
+    bool isRechargeActive() const { return recharge_active_; }
+
+private:
+    rclcpp::Node *node_;
+
+    // 回调函数
+    RechargeStartCallback recharge_start_callback_;
+    RechargeCancelCallback recharge_cancel_callback_;
+
+    // 状态
+    bool recharge_active_;
+    std::string cmd_enable_;
+
+    // 内部方法
+    void startRecharge();
+    void cancelRecharge();
+    void logInfo(const std::string &message);
+};
+
+#endif // IPAD_MANAGER_HPP

+ 145 - 0
install/wheelchair_state_machine/include/wheelchair_state_machine/lidascan_ctrl.hpp

@@ -0,0 +1,145 @@
+// lidascan_ctrl.hpp
+#ifndef LIDAR_SCAN_CONTROLLER_HPP
+#define LIDAR_SCAN_CONTROLLER_HPP
+
+#include <rclcpp/rclcpp.hpp>
+#include <sensor_msgs/msg/laser_scan.hpp>
+#include <geometry_msgs/msg/twist.hpp>
+#include <visualization_msgs/msg/marker_array.hpp>
+#include "wheelchair_types.hpp"
+#include "recharge_tool.hpp"
+#include <map>
+#include <memory>
+#include <tuple>
+#include <std_msgs/msg/bool.hpp>
+#include <std_msgs/msg/string.hpp>
+#include<sstream>
+class LidarScanController
+{
+public:
+    using LaserScan = sensor_msgs::msg::LaserScan;
+    using LaserScanSharedPtr = sensor_msgs::msg::LaserScan::SharedPtr;
+
+    LidarScanController(rclcpp::Node *node);
+    ~LidarScanController();
+
+    // 初始化
+    void initialize();
+
+    // 新增:获取当前检测到的角平分线信息
+    std::pair<double, double> getAngleBisectorInfo() const { return {current_angle_bisector_k_, current_angle_bisector_b_}; }
+
+    // 导航控制接口(外部调用)
+    void startNavigation();
+    void stopNavigation();
+    void stopMotion();
+
+    // 充电电压检测接口
+    void setChargingVoltage(bool value);
+    bool getChargingVoltage() const;
+
+    // 状态查询
+    bool isActive() const { return active_; }
+    ChargingState getChargingState() const { return charging_state_; };
+
+    void publishStationDetected(bool detected);
+
+    void resetStationDetection();
+
+private:
+    rclcpp::Node *node_;
+
+    // 新增:存储当前角平分线信息
+    double current_angle_bisector_k_;
+    double current_angle_bisector_b_;
+    bool has_angle_bisector_;
+
+    // ROS2 订阅者和发布者
+    rclcpp::Subscription<sensor_msgs::msg::LaserScan>::SharedPtr scan_sub_;
+    rclcpp::Publisher<geometry_msgs::msg::Twist>::SharedPtr pub_ctrl_;
+    rclcpp::Publisher<visualization_msgs::msg::MarkerArray>::SharedPtr pub_rviz_;
+    rclcpp::TimerBase::SharedPtr navigation_timer_;
+    rclcpp::Publisher<sensor_msgs::msg::LaserScan>::SharedPtr pub_filtered_;
+    rclcpp::Publisher<sensor_msgs::msg::LaserScan>::SharedPtr pub_line_;
+    rclcpp::Publisher<std_msgs::msg::Bool>::SharedPtr pub_station_detected_; 
+    rclcpp::Publisher<std_msgs::msg::String>::SharedPtr pub_charging_voltage_;
+    rclcpp::Publisher<std_msgs::msg::String>::SharedPtr pub_;//对外
+    rclcpp::Publisher<std_msgs::msg::String>::SharedPtr pub2_;//对外
+    // 状态变量
+    bool active_;
+    ChargingState charging_state_;
+    geometry_msgs::msg::Twist ctrl_twist_;
+    rclcpp::Time ctrl_twist_time_;
+    rclcpp::Time detect_station_time_;
+
+    bool station_detected_;
+    rclcpp::Time last_station_publish_time_;
+
+    // 参数
+    ScanFilterParam param_;
+    double distance_threshold_;
+    int fit_window_size_;
+    double fit_residual_threshold_;
+    int frame_index_;
+
+    // 充电检测
+    bool detect_charging_voltage_;
+    rclcpp::Time detect_charging_voltage_time_;
+
+    // ========== 核心算法函数 ==========
+
+    // 激光数据处理
+    void processLaserScan(const LaserScanSharedPtr &msg);
+    bool processSegmentData(const LaserScanSharedPtr &msg, int begin_index, int end_index);
+    void procData(RechargeResult &result);
+
+    // 运动控制算法
+    void controlRechargeMotion(const RechargeResult &result);
+
+    // 过滤算法
+    void filterScanModify0(LaserScanSharedPtr msg);
+    void filterScanModify1(LaserScanSharedPtr msg);
+    void filterScanModify2(LaserScanSharedPtr msg);
+    void filterScanModify3(LaserScanSharedPtr msg);
+    std::pair<int, int> filterScanModify4(LaserScanSharedPtr msg);
+
+    // 坐标转换
+    std::map<int, std::pair<double, double>> laserScanToXY(const LaserScanSharedPtr &scan_msg);
+    std::map<int, std::pair<double, double>> laserScanToXY1(int begin_index, int end_index,
+                                                            const LaserScanSharedPtr &scan_msg);
+
+    // 分段处理算法
+    std::vector<std::pair<int, int>> getSections(
+        int begin_index, int end_index,
+        const LaserScanSharedPtr &msg,
+        const std::map<int, std::pair<double, double>> &xy_list);
+
+    std::map<int, std::tuple<int, int, double, double, double, double, double, int>>
+    getSegments(const std::map<int, std::pair<double, double>> &xy_points_map);
+
+    std::map<int, std::tuple<int, int, double, double, double, double, double, int>>
+    filterSegments(const std::map<int, std::tuple<int, int, double, double, double, double, double, int>> &turn_segments);
+
+    // 可视化
+    void publishRechargeVisualization(const RechargeResult &result);
+
+    // ========== 辅助函数 ==========
+    void publishFilteredScan(const LaserScanSharedPtr &original_msg,
+                             const std::vector<float> &filtered_ranges);
+    LaserScanSharedPtr resetLaserData(LaserScanSharedPtr msg, int b_index, int e_index);
+    bool isValid(float value) const;
+    int getFixedIndex(const LaserScanSharedPtr &msg, int i) const;
+    int getFixed() const { return 0; }
+    Eigen::MatrixXd getPointList(const std::vector<IndexPoint> &points);
+
+    // 定时器回调
+    void navigationTimerCallback();
+
+    // 控制发布
+    void publishControl();
+
+    //判断误差函数
+    bool checkStationAlignment(double dx,double dy,double yaw_diff);
+};
+
+#endif // LIDAR_SCAN_CONTROLLER_HPP

+ 29 - 0
install/wheelchair_state_machine/include/wheelchair_state_machine/recharge_tool.hpp

@@ -0,0 +1,29 @@
+// recharge_tool.hpp
+#ifndef RECHARGE_TOOL_HPP
+#define RECHARGE_TOOL_HPP
+
+#include "wheelchair_types.hpp"
+#include <vector>
+#include <Eigen/Dense>
+
+class RechargeTool
+{
+public:
+    static double angleBetween(const IndexPoint &p1, const IndexPoint &p2);
+    static double angleDiff(double a1, double a2);
+    static double averageAngle(const std::vector<double> &angles);
+
+    static std::vector<std::vector<IndexPoint>> splitPointsToSegments(
+        const std::vector<IndexPoint> &points,
+        double angle_threshold_deg = 15.0,
+        int history_window_size = 3);
+
+    static std::pair<double, double> calculateAngleBisector(double k1, double b1, double k2, double b2);
+    static std::pair<double, double> fitLineLeastSquares(const Eigen::MatrixXd &points);
+    static std::pair<double, double> computeDockingVelocity(double dx, double dy, double yaw_error);
+
+    // 直线拟合(简化版,用于基础功能)
+    static std::pair<double, double> simpleFitLine(const std::vector<IndexPoint> &points);
+};
+
+#endif // RECHARGE_TOOL_HPP

+ 113 - 0
install/wheelchair_state_machine/include/wheelchair_state_machine/report.hpp

@@ -0,0 +1,113 @@
+// report.hpp
+#ifndef REPORT_MANAGER_HPP
+#define REPORT_MANAGER_HPP
+
+#include <rclcpp/rclcpp.hpp>
+#include <string>
+#include <functional>
+#include <memory>
+#include <map>
+#include <vector>
+#include <mutex>
+#include "wheelchair_types.hpp"
+#include "error_code.hpp"
+#include <std_msgs/msg/string.hpp>
+#include <std_msgs/msg/u_int32.hpp>
+
+class ReportManager
+{
+public:
+    using StatusReportCallback = std::function<void(const std::string &)>;
+    using ErrorCallback = std::function<void(const ErrorInfo &)>;
+
+    ReportManager(rclcpp::Node *node);
+
+    // 报告生成接口
+    std::string generateSystemStatusReport(
+        WheelchairState wheelchair_state,
+        BatteryState battery_state,
+        float battery_percentage,
+        ChargingState charging_state,
+        bool charging_voltage_detected,
+        bool recharge_active,
+        const std::string &control_mode);
+
+    // 状态报告发布
+    void publishStatusReport(const std::string &report);
+
+    // 特定状态报告
+    void reportSystemStatus(
+        WheelchairState wheelchair_state,
+        BatteryState battery_state,
+        float battery_percentage,
+        ChargingState charging_state,
+        bool charging_voltage_detected,
+        bool recharge_active,
+        const std::string &control_mode);
+
+    void reportBatteryStatus(BatteryState state, float percentage);
+    void reportChargingStatus(ChargingState state);
+    void reportNavigationStatus(const std::string &status);
+    void reportError(const std::string &error_message);
+    void reportWarning(const std::string &warning_message);
+    void reportInfo(const std::string &info_message);
+
+    // 错误处理接口
+    void processErrorCode(uint32_t error_code);
+    void processErrorCode(const ErrorInfo &error_info);
+    void notifyErrorRecovered(uint32_t error_code);
+
+    // 错误查询接口
+    bool hasCriticalErrors() const;
+    bool hasError(uint32_t error_code) const;
+    std::vector<ErrorInfo> getActiveErrors() const;
+    std::vector<ErrorInfo> getCriticalErrors() const;
+
+    // 回调设置
+    void setStatusReportCallback(StatusReportCallback callback);
+    void setErrorCallback(ErrorCallback callback);
+    void setCriticalErrorCallback(ErrorCallback callback);
+    void setRecoveryCallback(ErrorCallback callback);
+
+private:
+    rclcpp::Node *node_;
+    rclcpp::Publisher<std_msgs::msg::String>::SharedPtr report_publisher_;
+
+    // 错误订阅者
+    rclcpp::Subscription<std_msgs::msg::UInt32>::SharedPtr error_sub_;
+
+    StatusReportCallback status_report_callback_;
+
+    // 错误管理相关
+    std::map<uint32_t, ErrorInfo> active_errors_;
+    mutable std::mutex error_mutex_;
+
+    ErrorCallback error_callback_;
+    ErrorCallback critical_error_callback_;
+    ErrorCallback recovery_callback_;
+
+    // 错误码映射
+    static std::map<uint32_t, std::string> error_descriptions_;
+    static std::map<ErrorModule, std::string> module_names_;
+    static std::map<ErrorSubModule, std::string> sub_module_names_;
+
+    // 辅助函数
+    std::string wheelchairStateToString(WheelchairState state) const;
+    std::string batteryStateToString(BatteryState state) const;
+    std::string chargingStateToString(ChargingState state) const;
+
+    // 错误处理函数
+    void errorCodeCallback(const std_msgs::msg::UInt32::SharedPtr msg);
+    ErrorInfo parseErrorCode(uint32_t error_code);
+    void handleNewError(const ErrorInfo &error_info);
+    void handleErrorRecovery(const ErrorInfo &error_info);
+
+    static std::string getErrorDescription(uint32_t error_code);
+    static std::string getModuleName(ErrorModule module);
+    static std::string getSubModuleName(ErrorSubModule sub_module);
+    static void initializeErrorMaps();
+
+    void logReport(const std::string &category, const std::string &message);
+};
+
+#endif // REPORT_MANAGER_HPP

Деякі файли не було показано, через те що забагато файлів було змінено