Skip to content

Odd parameter overrides' ordering when using wildcards Β #953

@hidmic

Description

@hidmic

Bug report

Required Info:

  • Operating System:
    • Ubuntu 18.04
  • Installation type:
    • Binaries
  • Version or commit hash:
    • Eloquent (mostly 0.8.1)
  • Client library (if applicable):
    • rclcpp

Steps to reproduce issue

  1. Write a parameter YAML file, explicit_params.yaml, setting use_sim_time explicitly referring to a node:

    talker:
        ros__parameters:
            use_sim_time: false    
  2. Write a parameter YAML file, wildcard_params.yaml, setting use_sim_time implicitly using wildcards:

    /**:
        ros__parameters:
            use_sim_time: true    
  3. Run a talker node:

    • Passing the parameter YAML file using wildcards first:

      ros2 run demo_nodes_cpp talker --ros-args --params-file path/to/wildcard_params.yaml --params-file path/to/explicit_params.yaml
    • Passing the parameter YAML file being explicit first:

      ros2 run demo_nodes_cpp talker --ros-args --params-file path/to/explicit_params.yaml --params-file path/to/wildcard_params.yaml

Expected behavior

I'm not sure if we've ever fully specified behavior when using wildcards.

  • If wildcards have lower precedence than fully qualified names, command line order should not matter i.e. use_sim_time always false.

  • If command line order is respected, use_sim_time should be false in the first case, true in the second case.

Actual behavior

First given override wins.

Additional information

This is inconsistent with how it works for rclpy nodes, where command line order is respected. Looking at both rclpy and rclcpp implementations, it looks behavior emerged by pure chance. We should probably be matching wildcards where we can enforce a consistent precedence, down in rcl.

Metadata

Metadata

Assignees

Labels

bugSomething isn't working

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions