From 13c4eac4bc4f749617d9a44be9f9b31bb8a6ad02 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20San=20Jos=C3=A9=20Pro?= <42489409+danielsanjosepro@users.noreply.github.com> Date: Sun, 16 Aug 2026 16:28:38 +0200 Subject: [PATCH] feat!: vector-valued nullspace params --- config/control/clipped_cartesian_impedance.yaml | 2 +- config/control/default_cartesian_impedance.yaml | 2 +- .../default_operational_space_controller.yaml | 2 +- config/control/dynaarm_cic_soft.yaml | 12 +++--------- config/control/dynaarm_gravity.yaml | 6 +++--- config/control/gravity_compensation.yaml | 2 +- .../gravity_compensation_on_fix_position.yaml | 2 +- config/control/gravity_compensation_on_plane.yaml | 2 +- config/control/joint_control.yaml | 13 +++---------- config/control/joint_velocity_control.yaml | 13 +++---------- config/control/no_friction_cartesian_impedance.yaml | 2 +- .../config/control/clipped_cartesian_impedance.yaml | 2 +- crisp_py/config/control/default_admittance.yaml | 2 +- .../config/control/default_cartesian_impedance.yaml | 2 +- .../default_operational_space_controller.yaml | 2 +- crisp_py/config/control/gravity_compensation.yaml | 2 +- .../control/gravity_compensation_on_plane.yaml | 2 +- crisp_py/config/control/joint_control.yaml | 13 +++---------- crisp_py/config/control/joint_velocity_control.yaml | 13 +++---------- .../control/no_friction_cartesian_impedance.yaml | 2 +- docs/how_to_crisp.md | 2 +- examples/example_with_iiwa.py | 2 +- 22 files changed, 34 insertions(+), 68 deletions(-) diff --git a/config/control/clipped_cartesian_impedance.yaml b/config/control/clipped_cartesian_impedance.yaml index bea6308..677dff1 100644 --- a/config/control/clipped_cartesian_impedance.yaml +++ b/config/control/clipped_cartesian_impedance.yaml @@ -3,7 +3,7 @@ limit_torques: true max_delta_tau: 0.5 -nullspace.stiffness: 5.0 +nullspace.stiffness: [5.0] stop_commands: false diff --git a/config/control/default_cartesian_impedance.yaml b/config/control/default_cartesian_impedance.yaml index 147af7c..ced5047 100644 --- a/config/control/default_cartesian_impedance.yaml +++ b/config/control/default_cartesian_impedance.yaml @@ -3,7 +3,7 @@ limit_torques: true max_delta_tau: 0.5 -nullspace.stiffness: 5.0 +nullspace.stiffness: [5.0] stop_commands: false diff --git a/config/control/default_operational_space_controller.yaml b/config/control/default_operational_space_controller.yaml index 86cd151..966f5c0 100644 --- a/config/control/default_operational_space_controller.yaml +++ b/config/control/default_operational_space_controller.yaml @@ -3,7 +3,7 @@ limit_torques: true max_delta_tau: 0.5 -nullspace.stiffness: 5.0 +nullspace.stiffness: [5.0] stop_commands: false diff --git a/config/control/dynaarm_cic_soft.yaml b/config/control/dynaarm_cic_soft.yaml index 5814656..c4872ed 100644 --- a/config/control/dynaarm_cic_soft.yaml +++ b/config/control/dynaarm_cic_soft.yaml @@ -22,17 +22,11 @@ log.timing: false max_delta_tau: 0.5 noise.add_random_noise: false noise.amplitude: 0.0 -nullspace.damping: 1.0 -nullspace.max_tau: 5.0 +nullspace.damping: [0.0] +nullspace.max_tau: [5.0] nullspace.projector_type: none nullspace.regularization: 1.0e-06 -nullspace.stiffness: 0.0 -nullspace.weights.elbow_flexion.value: 0.0 -nullspace.weights.forearm_rotation.value: 0.0 -nullspace.weights.shoulder_flexion.value: 0.0 -nullspace.weights.shoulder_rotation.value: 0.0 -nullspace.weights.wrist_flexion.value: 0.0 -nullspace.weights.wrist_rotation.value: 0.0 +nullspace.stiffness: [0.0] operational_space_regularization: 1.0 stop_commands: false diff --git a/config/control/dynaarm_gravity.yaml b/config/control/dynaarm_gravity.yaml index b17e0e1..fc96957 100644 --- a/config/control/dynaarm_gravity.yaml +++ b/config/control/dynaarm_gravity.yaml @@ -9,11 +9,11 @@ log.enabled: false max_delta_tau: 0.5 -nullspace.damping: -1.0 -nullspace.max_tau: 5.0 +nullspace.damping: [-1.0] +nullspace.max_tau: [5.0] nullspace.projector_type: none nullspace.regularization: 1.0e-06 -nullspace.stiffness: 0.0 +nullspace.stiffness: [0.0] operational_space_regularization: 1.0 stop_commands: false diff --git a/config/control/gravity_compensation.yaml b/config/control/gravity_compensation.yaml index 885e1ac..f0ad501 100644 --- a/config/control/gravity_compensation.yaml +++ b/config/control/gravity_compensation.yaml @@ -3,7 +3,7 @@ limit_torques: true max_delta_tau: 0.5 -nullspace.stiffness: 5.0 +nullspace.stiffness: [5.0] stop_commands: false diff --git a/config/control/gravity_compensation_on_fix_position.yaml b/config/control/gravity_compensation_on_fix_position.yaml index 105f8d7..260931c 100644 --- a/config/control/gravity_compensation_on_fix_position.yaml +++ b/config/control/gravity_compensation_on_fix_position.yaml @@ -3,7 +3,7 @@ limit_torques: true max_delta_tau: 0.5 -nullspace.stiffness: 5.0 +nullspace.stiffness: [5.0] stop_commands: false diff --git a/config/control/gravity_compensation_on_plane.yaml b/config/control/gravity_compensation_on_plane.yaml index 8975622..be8dd1d 100644 --- a/config/control/gravity_compensation_on_plane.yaml +++ b/config/control/gravity_compensation_on_plane.yaml @@ -3,7 +3,7 @@ limit_torques: true max_delta_tau: 0.5 -nullspace.stiffness: 5.0 +nullspace.stiffness: [5.0] stop_commands: false diff --git a/config/control/joint_control.yaml b/config/control/joint_control.yaml index 73dae16..93577d1 100644 --- a/config/control/joint_control.yaml +++ b/config/control/joint_control.yaml @@ -5,17 +5,10 @@ max_delta_tau: 0.5 nullspace.projector_type: none # So we are directly controlling the joints! -nullspace.stiffness: 5.0 -nullspace.damping: 1.0 -nullspace.max_tau: 5.0 +nullspace.stiffness: [75.0, 75.0, 40.0, 40.0, 40.0, 25.0, 25.0] +nullspace.damping: [15.0, 15.0, 8.0, 8.0, 8.0, 5.0, 5.0] +nullspace.max_tau: [5.0] nullspace.regularization: 1.0e-06 -nullspace.weights.right_fr3_joint1.value: 15.0 -nullspace.weights.right_fr3_joint2.value: 15.0 -nullspace.weights.right_fr3_joint3.value: 8.0 -nullspace.weights.right_fr3_joint4.value: 8.0 -nullspace.weights.right_fr3_joint5.value: 8.0 -nullspace.weights.right_fr3_joint6.value: 5.0 -nullspace.weights.right_fr3_joint7.value: 5.0 stop_commands: false diff --git a/config/control/joint_velocity_control.yaml b/config/control/joint_velocity_control.yaml index d6157f0..c14d8c7 100644 --- a/config/control/joint_velocity_control.yaml +++ b/config/control/joint_velocity_control.yaml @@ -4,17 +4,10 @@ limit_torques: true max_delta_tau: 0.5 nullspace.projector_type: none # So we are directly controlling the joints! -nullspace.stiffness: 0.0 -nullspace.damping: 10.0 -nullspace.max_tau: 5.0 +nullspace.stiffness: [0.0] +nullspace.damping: [150.0, 150.0, 80.0, 80.0, 80.0, 50.0, 50.0] +nullspace.max_tau: [5.0] nullspace.regularization: 1.0e-06 -nullspace.weights.right_fr3_joint1.value: 15.0 -nullspace.weights.right_fr3_joint2.value: 15.0 -nullspace.weights.right_fr3_joint3.value: 8.0 -nullspace.weights.right_fr3_joint4.value: 8.0 -nullspace.weights.right_fr3_joint5.value: 8.0 -nullspace.weights.right_fr3_joint6.value: 5.0 -nullspace.weights.right_fr3_joint7.value: 5.0 stop_commands: false diff --git a/config/control/no_friction_cartesian_impedance.yaml b/config/control/no_friction_cartesian_impedance.yaml index 43852b1..76b7adf 100644 --- a/config/control/no_friction_cartesian_impedance.yaml +++ b/config/control/no_friction_cartesian_impedance.yaml @@ -33,7 +33,7 @@ limit_torques: true max_delta_tau: 0.5 -nullspace.stiffness: 5.0 +nullspace.stiffness: [5.0] stop_commands: false diff --git a/crisp_py/config/control/clipped_cartesian_impedance.yaml b/crisp_py/config/control/clipped_cartesian_impedance.yaml index bea6308..677dff1 100644 --- a/crisp_py/config/control/clipped_cartesian_impedance.yaml +++ b/crisp_py/config/control/clipped_cartesian_impedance.yaml @@ -3,7 +3,7 @@ limit_torques: true max_delta_tau: 0.5 -nullspace.stiffness: 5.0 +nullspace.stiffness: [5.0] stop_commands: false diff --git a/crisp_py/config/control/default_admittance.yaml b/crisp_py/config/control/default_admittance.yaml index ac51993..6f742c4 100644 --- a/crisp_py/config/control/default_admittance.yaml +++ b/crisp_py/config/control/default_admittance.yaml @@ -4,7 +4,7 @@ limit_error: true limit_torques: true max_delta_tau: 2.0 -nullspace.stiffness: 5.0 +nullspace.stiffness: [5.0] stop_commands: false task.k_pos_x: 900.0 diff --git a/crisp_py/config/control/default_cartesian_impedance.yaml b/crisp_py/config/control/default_cartesian_impedance.yaml index 147af7c..ced5047 100644 --- a/crisp_py/config/control/default_cartesian_impedance.yaml +++ b/crisp_py/config/control/default_cartesian_impedance.yaml @@ -3,7 +3,7 @@ limit_torques: true max_delta_tau: 0.5 -nullspace.stiffness: 5.0 +nullspace.stiffness: [5.0] stop_commands: false diff --git a/crisp_py/config/control/default_operational_space_controller.yaml b/crisp_py/config/control/default_operational_space_controller.yaml index 86cd151..966f5c0 100644 --- a/crisp_py/config/control/default_operational_space_controller.yaml +++ b/crisp_py/config/control/default_operational_space_controller.yaml @@ -3,7 +3,7 @@ limit_torques: true max_delta_tau: 0.5 -nullspace.stiffness: 5.0 +nullspace.stiffness: [5.0] stop_commands: false diff --git a/crisp_py/config/control/gravity_compensation.yaml b/crisp_py/config/control/gravity_compensation.yaml index 885e1ac..f0ad501 100644 --- a/crisp_py/config/control/gravity_compensation.yaml +++ b/crisp_py/config/control/gravity_compensation.yaml @@ -3,7 +3,7 @@ limit_torques: true max_delta_tau: 0.5 -nullspace.stiffness: 5.0 +nullspace.stiffness: [5.0] stop_commands: false diff --git a/crisp_py/config/control/gravity_compensation_on_plane.yaml b/crisp_py/config/control/gravity_compensation_on_plane.yaml index b34d7a0..019004a 100644 --- a/crisp_py/config/control/gravity_compensation_on_plane.yaml +++ b/crisp_py/config/control/gravity_compensation_on_plane.yaml @@ -3,7 +3,7 @@ limit_torques: true max_delta_tau: 0.5 -nullspace.stiffness: 5.0 +nullspace.stiffness: [5.0] stop_commands: false diff --git a/crisp_py/config/control/joint_control.yaml b/crisp_py/config/control/joint_control.yaml index 73dae16..93577d1 100644 --- a/crisp_py/config/control/joint_control.yaml +++ b/crisp_py/config/control/joint_control.yaml @@ -5,17 +5,10 @@ max_delta_tau: 0.5 nullspace.projector_type: none # So we are directly controlling the joints! -nullspace.stiffness: 5.0 -nullspace.damping: 1.0 -nullspace.max_tau: 5.0 +nullspace.stiffness: [75.0, 75.0, 40.0, 40.0, 40.0, 25.0, 25.0] +nullspace.damping: [15.0, 15.0, 8.0, 8.0, 8.0, 5.0, 5.0] +nullspace.max_tau: [5.0] nullspace.regularization: 1.0e-06 -nullspace.weights.right_fr3_joint1.value: 15.0 -nullspace.weights.right_fr3_joint2.value: 15.0 -nullspace.weights.right_fr3_joint3.value: 8.0 -nullspace.weights.right_fr3_joint4.value: 8.0 -nullspace.weights.right_fr3_joint5.value: 8.0 -nullspace.weights.right_fr3_joint6.value: 5.0 -nullspace.weights.right_fr3_joint7.value: 5.0 stop_commands: false diff --git a/crisp_py/config/control/joint_velocity_control.yaml b/crisp_py/config/control/joint_velocity_control.yaml index d6157f0..c14d8c7 100644 --- a/crisp_py/config/control/joint_velocity_control.yaml +++ b/crisp_py/config/control/joint_velocity_control.yaml @@ -4,17 +4,10 @@ limit_torques: true max_delta_tau: 0.5 nullspace.projector_type: none # So we are directly controlling the joints! -nullspace.stiffness: 0.0 -nullspace.damping: 10.0 -nullspace.max_tau: 5.0 +nullspace.stiffness: [0.0] +nullspace.damping: [150.0, 150.0, 80.0, 80.0, 80.0, 50.0, 50.0] +nullspace.max_tau: [5.0] nullspace.regularization: 1.0e-06 -nullspace.weights.right_fr3_joint1.value: 15.0 -nullspace.weights.right_fr3_joint2.value: 15.0 -nullspace.weights.right_fr3_joint3.value: 8.0 -nullspace.weights.right_fr3_joint4.value: 8.0 -nullspace.weights.right_fr3_joint5.value: 8.0 -nullspace.weights.right_fr3_joint6.value: 5.0 -nullspace.weights.right_fr3_joint7.value: 5.0 stop_commands: false diff --git a/crisp_py/config/control/no_friction_cartesian_impedance.yaml b/crisp_py/config/control/no_friction_cartesian_impedance.yaml index 43852b1..76b7adf 100644 --- a/crisp_py/config/control/no_friction_cartesian_impedance.yaml +++ b/crisp_py/config/control/no_friction_cartesian_impedance.yaml @@ -33,7 +33,7 @@ limit_torques: true max_delta_tau: 0.5 -nullspace.stiffness: 5.0 +nullspace.stiffness: [5.0] stop_commands: false diff --git a/docs/how_to_crisp.md b/docs/how_to_crisp.md index 93a8632..293f815 100644 --- a/docs/how_to_crisp.md +++ b/docs/how_to_crisp.md @@ -73,7 +73,7 @@ params = [ ("task.k_rot_x", 20.0), ("task.k_rot_y", 20.0), ("task.k_rot_z", 20.0), - ("nullspace.stiffness", 5.0), + ("nullspace.stiffness", [5.0]), ] robot.cartesian_controller_parameters_client.set_parameters(params) diff --git a/examples/example_with_iiwa.py b/examples/example_with_iiwa.py index c695cce..96798a1 100644 --- a/examples/example_with_iiwa.py +++ b/examples/example_with_iiwa.py @@ -24,7 +24,7 @@ ("task.k_rot_x", 80.0), ("task.k_rot_y", 80.0), ("task.k_rot_z", 80.0), - ("nullspace.stiffness", 5.0), + ("nullspace.stiffness", [5.0]), ] robot.cartesian_controller_parameters_client.set_parameters(params)