Skip to content

frame_id relative namespacing issue #1999

@ethanholter

Description

@ethanholter

Bug Description
When the diff_drive_controller is namespaced (for example /control/diff_drive_controller) The odom_frame_id and base_frame_id always use relative namespaces which can lead to TF frames with names such as /control//odom instead of the expected /odom

To Reproduce
Steps to reproduce the behavior:

# controller_config.yaml
/uirover/control/controller_manager:
  ros__parameters:
    update_rate: 100  # Hz

    ...

    diff_drive_controller:
      type: diff_drive_controller/DiffDriveController

    ...

/uirover/control/diff_drive_controller:
  ros__parameters:
   
    ...

    odom_frame_id: /odom
    base_frame_id: /base_link
# launch file
    ld.add_action(
        Node(
            package="controller_manager",
            executable="spawner",
            namespace="/uirover/control",
            arguments=[
                "diff_drive_controller",
                "-c",
                "controller_manager",
                "--switch-timeout",
                "15",
            ],
            # note: adding remappings had no effect
            remappings=[
                ("odom", "/odom"),
                ("base_link", "/base_link")
            ]
        )
    )

Expected behavior
published transforms should use a frame_id of /odom and /base_link

Screenshots

Image

Environment:

  • OS: Ubuntu 24.04.3 LTS
  • Version Jazzy
  • Binary installation

Additional context
I understand that the obvious fix is to simply not use namespacing for ros2 control nodes. In our use case we have 2 separate systems connected via rmw_zenoh and would prefer to keep the namespacing for more explicit seperation of the two

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions