Skip to content

joint_state_broadcaster fails to load with "Couldn't parse trailing --params-file flag. No file path provided." on ROS 2 Jazzy #2309

Open
@lhbmv

Description

@lhbmv

Description

Environment:

  • ROS 2 Distribution: Jazzy
  • OS: Ubuntu 24.04 (noble) / [your arch, e.g. arm64]
  • ros2_control: [e.g. 4.25.0-1noble]
  • joint_state_broadcaster: [e.g. 4.25.0-1noble]
  • Installed via: apt
  • Workspace build: colcon build --symlink-install

Problem:

When launching a minimal ros2_control setup with only joint_state_broadcaster in the controller YAML, the controller fails to load with the following error:

[controller_manager]: Controller 'joint_state_broadcaster' node arguments: --ros-args --params-file 
[controller_manager]: Caught exception of type : N6rclcpp10exceptions22RCLInvalidROSArgsErrorE while initializing controller 'joint_state_broadcaster': failed to parse arguments: Couldn't parse trailing --params-file flag. No file path provided., at ./src/rcl/arguments.c:419

controllers.yaml:

controller_manager:
  ros__parameters:
    update_rate: 50
    joint_state_broadcaster:
      type: joint_state_broadcaster/JointStateBroadcaster

launch file (excerpt):

robot_controllers = PathJoinSubstitution([
    FindPackageShare("planar_robot_description"),
    "config",
    "controllers.yaml"
])
control_node = Node(
    package="controller_manager",
    executable="ros2_control_node",
    parameters=[robot_controllers],
    output="both"
)
joint_state_broadcaster_spawner = Node(
    package="controller_manager",
    executable="spawner",
    arguments=["joint_state_broadcaster"]
)

What I tried:

  • Checked YAML formatting, encoding (UTF-8, no BOM), and indentation (spaces only).
  • Cleaned and rebuilt workspace (rm -rf build/ install/ log/).
  • Used both PathJoinSubstitution and absolute path for the YAML file.
  • Confirmed the controller type is available via ros2 control list_controller_types.
  • Confirmed hardware and interfaces are available.
  • The error persists regardless of these changes.

Expected behavior:
joint_state_broadcaster should load successfully as in previous ROS 2 distributions (e.g. Humble).

Actual behavior:
Controller fails to load due to a missing params file argument, even though the YAML is present and correct.


Steps To Reproduce

  1. Use the minimal YAML and launch file above in a clean ROS 2 Jazzy workspace.
  2. Build and source the workspace.
  3. Launch the file:
    ros2 launch planar_robot_description control_only.launch.py
  4. Observe the error in the controller_manager logs.

Additional Info

  • This issue does not occur on ROS 2 Humble or Rolling with the same setup.
  • Other controllers (e.g. joint_trajectory_controller) exhibit similar issues.
  • This blocks basic usage of ros2_control on Jazzy.

Thank you for your help!

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