|
| 1 | +sync_group_velocity_to_position_controller: |
| 2 | + # --- Joint topology ------------------------------------------------------- |
| 3 | + joints: {type: string_array, default_value: [], description: Name of the joints to control} |
| 4 | + |
| 5 | + # Per-joint group label (must be empty or have exactly one entry per joint). |
| 6 | + # Joints sharing a label form a synchronous group; pairs in the same group |
| 7 | + # hold their relative offset while receiving identical velocity commands. |
| 8 | + synchronous_groups: {type: string_array, default_value: [], description: Per-joint group label for pairwise synchronization} |
| 9 | + |
| 10 | + # Optional upstream chain controller. If set, command interfaces are claimed |
| 11 | + # as "<passthrough_controller>/<joint>/position" instead of "<joint>/position". |
| 12 | + passthrough_controller: {type: string, default_value: '', description: Name of passthrough controller exposing the position command interfaces} |
| 13 | + |
| 14 | + # --- Safety --------------------------------------------------------------- |
| 15 | + # Hard e-stop subscription. While true, all joints freeze in place. |
| 16 | + e_stop_topic: {type: string, default_value: estop_board/hard_estop, description: Topic for hard e-stop (std_msgs/Bool). When true all joints are stopped.} |
| 17 | + |
| 18 | + # Zero reference interfaces if no non-zero command is received for this many |
| 19 | + # seconds. 0 disables (rely on upstream SafetyForwardController instead). |
| 20 | + velocity_command_timeout: {type: double, default_value: 0.0, description: Auto-zero references if no non-zero command for N seconds (0 = disabled)} |
| 21 | + |
| 22 | + # --- Per-joint PD (velocity tracking) ------------------------------------- |
| 23 | + # The control law integrates the velocity reference into a target position |
| 24 | + # and adds a PD term on velocity error. kp scales (vel_cmd - vel_state); |
| 25 | + # kd damps current velocity. Both terms are scaled by dt internally. |
| 26 | + kp: {type: double, default_value: 1.0, description: P gain on velocity error (vel_cmd - vel_state)} |
| 27 | + kd: {type: double, default_value: 0.1, description: D gain damping current velocity} |
| 28 | + |
| 29 | + # --- Pair synchronization ------------------------------------------------- |
| 30 | + # When two joints in the same group receive identical non-zero velocity |
| 31 | + # commands, their relative offset at that instant is captured and a PD |
| 32 | + # correction pulls them back toward that offset. Offset is frozen until |
| 33 | + # commands diverge again. |
| 34 | + kp_sync: {type: double, default_value: 1.0, description: P gain on pair offset error} |
| 35 | + kd_sync: {type: double, default_value: 0.1, description: D gain on pair velocity difference} |
| 36 | + |
| 37 | + # Sync correction is clamped to max(|vel_cmd| * factor, min_threshold) rad/s. |
| 38 | + # The factor lets correction grow with commanded speed; the min_threshold |
| 39 | + # ensures non-zero correction at low speeds (set 0 to disable that floor). |
| 40 | + sync_velocity_factor: {type: double, default_value: 1.0, description: Sync correction cap as a fraction of commanded velocity} |
| 41 | + sync_velocity_min_threshold: {type: double, default_value: 0.1, description: Minimum sync correction cap in rad/s (floor for the factor-based cap)} |
| 42 | + |
| 43 | + # --- Motion limits -------------------------------------------------------- |
| 44 | + # Velocity references are clamped to [-max_velocity, max_velocity]. |
| 45 | + # Acceleration / deceleration shape the trapezoidal profiles used for the |
| 46 | + # action interfaces (drive/sync) and for stopping when vel_cmd hits zero. |
| 47 | + # Deceleration is typically larger than acceleration for snappier stops. |
| 48 | + max_velocity: {type: double, default_value: 1.0, description: Velocity clamp (rad/s) and cruise speed for action profiles} |
| 49 | + max_acceleration: {type: double, default_value: 2.0, description: Trapezoidal accel for drive/sync action profiles (rad/s^2)} |
| 50 | + max_deceleration: {type: double, default_value: 4.0, description: Trapezoidal decel for braking on vel_cmd -> 0 (rad/s^2)} |
| 51 | + |
| 52 | + # --- Misc ---------------------------------------------------------------- |
| 53 | + # Below this measured velocity a joint is treated as "at rest" for state |
| 54 | + # transitions out of STOPPING. Mostly affects edge cases at very low speeds. |
| 55 | + stopping_velocity_threshold: {type: double, default_value: 0.005, description: abs(vel_state) below which a joint is considered stopped} |
| 56 | + |
| 57 | + # If true, publishes ~/debug_in_joint_states, ~/debug_out_joint_states, |
| 58 | + # and ~/sync_status for tuning. Off by default to avoid extra traffic. |
| 59 | + publish_debug_joint_states: {type: bool, default_value: false, description: Enable RT debug publishers (in/out joint states + sync status)} |
| 60 | + |
| 61 | + # Default target for the upright group action (used when the action goal |
| 62 | + # leaves target_position unset). |
| 63 | + upright_position: {type: double, default_value: 1.517, description: Default upright-action target position in radians} |
0 commit comments