# joint_state_publisher *This file is ai generated. Do not edit this file directly. Instead, edit the node source code and run the generate-node-docs command to update this file.* ## Description The `joint_state_publisher` node publishes `sensor_msgs/JointState` messages for a robot described with URDF, SDF, or COLLADA formats. It reads the robot description from the `robot_description` topic or a file and publishes joint states for all non-fixed joints. The node can operate in several modes: publishing default/zero positions, subscribing to external joint state sources, or automatically updating joint positions with a configurable delta for animation. ## Publishers - **joint_states** (`sensor_msgs/msg/JointState`) - Publishes the current state of all robot joints including positions, velocities, and efforts depending on configuration ## Subscribers - **robot_description** (`std_msgs/msg/String`) - Receives robot description in URDF, SDF, or COLLADA format - QoS: Depth 1, Transient Local durability - **{source_topics}** (`sensor_msgs/msg/JointState`) - Dynamically subscribes to topics specified in the `source_list` parameter - Updates joint states from external sources ## Parameters - **publish_default_efforts** (bool, default: `false`) - Whether to publish default effort values (0.0) for all joints - **publish_default_positions** (bool, default: `true`) - Whether to publish default position values (zero position) for all joints - **publish_default_velocities** (bool, default: `false`) - Whether to publish default velocity values (0.0) for all joints - **rate** (int, default: `10`) - Publishing rate in Hz for joint state messages - **source_list** (string[], default: `[]`) - List of topics to subscribe to for joint state updates - Joint states from these sources override default values - **use_mimic_tags** (bool, default: `true`) - Whether to process and use mimic joint tags from the robot description - **use_smallest_joint_limits** (bool, default: `true`) - Whether to use safety controller soft limits when available (reduces joint range) - **delta** (double, default: `0.0`) - Amount to increment joint positions each publish cycle - When > 0, joints automatically move within their limits for animation - Joints reverse direction at limits (continuous joints wrap around) - **zeros.{joint_name}** (double) - Set the zero/center position for a specific joint - Example: `zeros.joint1:=0.5` sets joint1's zero position to 0.5 radians - **dependent_joints.{joint_name}.parent** (string) - Specifies the parent joint for a dependent/mimic joint relationship - Required for each dependent joint - **dependent_joints.{joint_name}.factor** (double, default: `1.0`) - Multiplier for the dependent joint position relative to parent - **dependent_joints.{joint_name}.offset** (double, default: `0.0`) - Offset added to the dependent joint position ## Example Usage ### Basic usage with URDF file ```bash ros2 run joint_state_publisher joint_state_publisher /path/to/robot.urdf ``` ### Using robot_description topic ```bash ros2 run joint_state_publisher joint_state_publisher ``` ### With custom parameters ```bash ros2 run joint_state_publisher joint_state_publisher \ --ros-args \ -p rate:=50 \ -p publish_default_velocities:=true \ -p use_mimic_tags:=false ``` ### With animation (auto-moving joints) ```bash ros2 run joint_state_publisher joint_state_publisher \ --ros-args \ -p delta:=0.01 ``` ### With custom zero positions ```bash ros2 run joint_state_publisher joint_state_publisher \ --ros-args \ -p zeros.shoulder_pan_joint:=1.57 \ -p zeros.elbow_joint:=0.785 ``` ### Subscribing to external joint sources ```bash ros2 run joint_state_publisher joint_state_publisher \ --ros-args \ -p source_list:=['arm_controller/joint_states','gripper_controller/joint_states'] ``` ### Launch file example ```python from launch import LaunchDescription from launch_ros.actions import Node def generate_launch_description(): return LaunchDescription([ Node( package='joint_state_publisher', executable='joint_state_publisher', name='joint_state_publisher', parameters=[{ 'rate': 50, 'publish_default_positions': True, 'use_mimic_tags': True, 'source_list': ['controller/joint_states'] }] ) ]) ```