[ros-users] [Discourse.ros.org] [Next Generation ROS] Custom metadata in package.xml

Brett Ponsler ros.discourse at gmail.com
Sat Jul 1 01:26:09 UTC 2017

I am interested in adding custom metadata to the ROS-2 package.xml and providing a way to validate that other packages correctly define that metadata. However, when I attempt to add a new XML tag (e.g., 'my_custom_tag') ament fails during the validation process, with the following error:

    $ ament build
    Traceback (most recent call last):
      File "/ros2_ws/install/bin/ament", line 9, in <module>
        load_entry_point('ament-tools==0.0.0', 'console_scripts', 'ament')()
      File "/ros2_ws/install/lib/python3.5/site-packages/ament_tools/commands/ament.py", line 86, in main
        rc = args.main(args)
      File "/ros2_ws/install/lib/python3.5/site-packages/ament_tools/verbs/build/cli.py", line 154, in main
        packages = topological_order(opts.basepath)
      File "/ros2_ws/install/lib/python3.5/site-packages/ament_tools/topological_order.py", line 102, in topological_order
        packages = _find_unique_packages(root_dir)
      File "/ros2_ws/install/lib/python3.5/site-packages/ament_tools/packages.py", line 81, in find_unique_packages
        packages = find_packages(basepath, exclude_paths=exclude_paths)
      File "/ros2_ws/install/lib/python3.5/site-packages/ament_tools/packages.py", line 66, in find_packages
    packages[path] = parse_package(os.path.join(basepath, path))
      File "/ros2_ws/install/lib/python3.5/site-packages/ament_tools/package_types/__init__.py", line 31, in parse_package
        pkg = package_type['parse_package'](path)
      File "/ros2_ws/install/lib/python3.5/site-packages/ament_package/__init__.py", line 60, in parse_package
    return parse_package_string(f.read(), filename=filename)
      File "/ros2_ws/install/lib/python3.5/site-packages/ament_package/__init__.py", line 292, in parse_package_string
        (filename, ''.join(['\n- %s' % e for e in errors])))
    ament_package.exceptions.InvalidPackage: Invalid package manifest './src/custom_package/package.xml': Error(s) in ./src/custom_package/package.xml:
    - The 'url' tag must not contain the following children: my_custom_tag

Is there a recommended way to get around the validation that the package.xml contains no unknown tags? Is this even possible? I'd prefer not to have to branch ament_package.

It may make sense for companies/organizations to add their own custom metadata to packages and ideally they would not need to modify ament_package. In some/most cases this metadata is not something that would make sense to include in ament_package (e.g., company specific).

One option is to include the custom metadata in a separate XML file, but I would prefer to have a single file for package information.

Assuming I can get ament to accept the custom metadata (or I use a separate XML file), are there are suggestions on how best to validate the metadata at build/compile time? My plan is to provide some custom cmake scripts to perform the validation, but was curious if there are better approaches.

[Visit Topic](https://discourse.ros.org/t/custom-metadata-in-package-xml/2102/1) or reply to this email to respond.

More information about the ros-users mailing list