# ros2_controllers joint-state broadcaster implementation

Official C++ ros2_control plugin that claims no command interfaces, reads configured DOUBLE state interfaces and publishes JointState plus optional DynamicJointState ROS messages. Interface mapping, URDF filtering and incomplete readings have explicit source-defined behavior; runtime and hardware behavior remain untested.

ID: `ros2-joint-state-broadcaster`

Record version: `source-f0326808b19a0c89835e068b2974c92ff77c99610735c0c97d9056ef62fa26b4`

Hub commit: `578f502ed4c408e0a4777e504a5cad7b2cc29209`

## Access

Read the immutable source/header, complete license and package/CMake/plugin registration, then review the upstream parameter definitions and configured controller-manager host before integration. This source-only reference supplies no build, install or execution adapter.

Optional inert file retrieval: `python /PATH_TO_SKILL/scripts/rsh.py fetch-source ros2-joint-state-broadcaster --expected-source-revision 8ce934536c6404750fb8aafc0b62b7d365049143 --expected-source-sha256 f0326808b19a0c89835e068b2974c92ff77c99610735c0c97d9056ef62fa26b4 --project ./experiment --json`. This verifies one file, preserves provenance and never installs or runs it. See [source-file retrieval](https://hub.superfastrobotics.com/source-files.md).

Hub preparation adapter: **false**. Runtime verification: **not_run**.

Upstream setup: https://github.com/ros-controls/ros2_controllers/blob/8ce934536c6404750fb8aafc0b62b7d365049143/joint_state_broadcaster/CMakeLists.txt

## Source and license

- Repository: https://github.com/ros-controls/ros2_controllers
- Pinned source: https://github.com/ros-controls/ros2_controllers/blob/8ce934536c6404750fb8aafc0b62b7d365049143/joint_state_broadcaster/src/joint_state_broadcaster.cpp
- Revision: `8ce934536c6404750fb8aafc0b62b7d365049143`
- Path: `joint_state_broadcaster/src/joint_state_broadcaster.cpp`
- Source SHA256: `f0326808b19a0c89835e068b2974c92ff77c99610735c0c97d9056ef62fa26b4`
- Source bytes: 15833
- Original authors: ros2_control development team, Jordan Palacios, Karsten Knese
- License: [Apache-2.0](https://github.com/ros-controls/ros2_controllers/blob/8ce934536c6404750fb8aafc0b62b7d365049143/LICENSE)
- License scope: Selected C++ source: Copyright 2021 ros2_control development team, Apache License 2.0. Package authors Jordan Palacios and Karsten Knese are preserved separately from the reviewed header notice (Copyright 2017 Open Source Robotics Foundation, Inc.). The complete pinned root Apache 2.0 license and matching package declaration were read. Preserve applicable copyright, license, modification and notice obligations. Review covers these selected texts, not all dependencies, generated code, binaries, hardware drivers or deployment.

## Artifact

```json
{
  "kind": "code",
  "format": "cpp"
}
```

## Requirements

```json
{
  "python": null,
  "packages": [
    "Complete pinned joint_state_broadcaster package, generated parameter header/YAML and a C++17 toolchain",
    "ament_cmake",
    "ros2_control_cmake",
    "backward_ros",
    "builtin_interfaces",
    "control_msgs",
    "controller_interface",
    "generate_parameter_library",
    "pluginlib",
    "rclcpp_lifecycle",
    "rclcpp",
    "realtime_tools",
    "sensor_msgs",
    "urdf",
    "hardware_interface",
    "std_msgs"
  ],
  "hardware": [],
  "system": [
    "Configured ros2_control controller manager/lifecycle host and DOUBLE joint state interfaces",
    "Matching joint/interface selections, topic namespace, frame and mapping parameters; robot description for optional URDF-based filtering"
  ],
  "notes": "command_interface_configuration returns NONE; the plugin reads loaned state interfaces and publishes ROS messages. Empty joints or interfaces selects all available state interfaces; otherwise the configured cross-product is requested. Non-DOUBLE interfaces are ignored. The selected source supports custom interface mapping, optional URDF filtering/order and configured extra joints initialized to zero. update attempts get_optional(0) once per DOUBLE interface and retains prior values on failed reads; never-read values can remain NaN. JointState carries position/velocity/effort; DynamicJointState is conditional. Unprefixed or ~/ topic names depend on use_local_topics. Complete source/header/package/CMake/plugin XML were read; parameter YAML/generated header and dependency implementations were not. Parameter defaults, timing, publication success, data freshness and physical compatibility were not tested. CMake >=3.16, C++17 and package 4.43.0 are declarations, not tested environment combinations. Optional BUILD_TESTING has additional declared dependencies."
}
```

## Invocation

```json
{
  "entrypoint": "pluginlib joint_state_broadcaster/JointStateBroadcaster (controller_interface::ControllerInterface)",
  "notes": "joint_state_plugin.xml registers type joint_state_broadcaster::JointStateBroadcaster, base controller_interface::ControllerInterface and shared library joint_state_broadcaster. This selected source exports that same pair with PLUGINLIB_EXPORT_CLASS; CMake builds that shared library and exports the XML. A configured controller manager invokes its lifecycle and update callbacks. This is not a standalone executable or Hub adapter. Loading it can expose hardware state through joint_states and optional dynamic_joint_states ROS topics; this source requests no command interface. Fetching the reference neither loads the plugin nor executes it."
}
```

## Compatibility

```json
[]
```

Missing environment fields remain unknown. Source discovery labels do not establish robot compatibility.

## Evidence

Level: **source_reviewed**. Runtime verification: **not_run**.

Complete selected C++ source, required class header, package XML, CMake and plugin XML read as inert text. Five new anonymous pinned raw GETs, all HTTP 200; every body matches the existing complete 768-entry official Git tree by path, byte count and Git blob SHA-1, with SHA-256 preserved. Existing canonical repository/commit/tree evidence and complete root Apache 2.0 license were rechecked offline and reused without refetch. No compilation, installation, plugin load, ROS/simulator/robot execution, compatibility measurement or automatic plugin-importer validation was performed.

Source review and contributor reports do not establish task completion. Preserve upstream attribution and licenses.
