Skip to content
RobotWorld
Back to Papers

PAPER DEEP DIVE

变阻抗Variable Impedance顺应

Plug, Play, and Comply: A Modular Framework for Online Variable Impedance with Arbitrarily Oriented Compliance Axes

The paper proposes a robot-agnostic compliant-control framework that extends the ROS control ecosystem with standardized joint and Cartesian command interfaces. It addresses a key limitation of existing control software: no reusable infrastructure for implementing compliant-control algorithms across different manipulators while preserving a common interface to higher-level applications. A plugin-based architecture separates controller infrastructure from control-law implementation. Generic wrappers use existing hardware abstractions to interface with different manipulators, while runtime-loaded plugins implement only the control law. Command interfaces support joint- and Cartesian-space references, stiffness and damping gains, nullspace targets, and feedforward terms, enabling variable impedance and diverse compliant-control formulations. Robot kinematics and dynamics are computed from URDF models using Pinocchio. The architecture facilitates the development of compliant-control strategies and enables the same implementation to be deployed across platforms unchanged. The complete framework, including reference controllers, high-level task interfaces, and example configurations for various manipulators, is open-sourced. The reference Cartesian impedance controller supports task-dependent compliance by rotating translational and rotational stiffness and damping, allowing the principal compliance directions to be updated online according to local task geometry rather than remaining fixed in the robot base or TCP frame. This is particularly important in contact-rich manipulation, where the desired directions of motion, constraints, and compliance directions may vary throughout task execution. Real-robot experiments demonstrate task-dependent compliance in contact-rich manipulation, while simulations show portability across manipulators with distinct kinematic and dynamic characteristics.

Mihael Simonič, Xiaocong LiJuly 24, 20268 min read
中文

Plug, Play, and Comply: A Modular Framework for Online Variable Impedance Control

Paper: Plug, Play, and Comply: A Modular Framework for Online Variable Impedance Control with Generic Force Tracking
Authors: (see arXiv:2607.22483)
Link: arXiv:2607.22483 | Platform: Franka FR3 (1kHz FCI) | Framework: RobotBlockset

One-line summary: A plugin architecture separates controller infrastructure from control law implementations, enabling online stiffness/damping updates and rotation of compliance principal axes to arbitrary task-frame directions, with the same controller deployable across different manipulators unchanged.

Background and Motivation

Compliant control — particularly impedance and admittance control — is essential for contact-rich manipulation tasks such as surface following, assembly, and human-robot interaction. While impedance control laws themselves have been mature since the foundational work of Hogan and Albu-Schäffer, the engineering problem of reusable deployment remains unsolved: every robot platform requires reimplementing initialization, command buffering, compensation, filtering, and torque validation infrastructure from scratch. Existing robot control frameworks (e.g., ros_control) provide hardware abstraction layers, but tight coupling between control laws and framework internals makes cross-platform portability difficult.

The core insight of this work is that the reuse challenge in compliant control is not about the control law being insufficiently good, but about every robot needing to rebuild the surrounding infrastructure. The solution is a plugin architecture that makes control law implementations runtime-loadable, ROS-agnostic libraries, with wrappers uniformly handling platform-specific logic. This separation enables the same control law implementation to run on any manipulator supporting the standard interface — true "write once, deploy anywhere" compliant control reuse.

Method Details

1. Architecture Overview

The framework separates concerns into two layers: infrastructure wrappers and control law plugins. Wrappers handle initialization, command buffering, gravity/friction/payload compensation, filtering, and torque validation — all platform-specific logic. Control law plugins (e.g., Cartesian impedance, joint impedance) are compiled as shared libraries loaded at runtime, exposing a uniform interface. This decoupling means a new robot only requires a new wrapper, while control laws are reused unchanged.

Framework overview

Figure 1: Plugin architecture separating controller infrastructure (wrappers) from control law implementations (plugins).

2. Standardized Command Interface

The command interface exposes stiffness and damping as online-updatable parameters — external applications can adjust impedance across task phases during execution without modifying the controller or restarting it. The interface includes Cartesian position/orientation references, velocity references, position/orientation stiffness, damping, feedforward wrenches, and task-frame orientation. This streaming design allows complex tasks to be decomposed into sequences of motion primitives, each carrying its own impedance parameters and task-frame definition.

Command FieldTypeUpdate Rate
Cartesian pose referenceSE(3)Per-cycle
Position stiffness6×6 matrixOnline
Orientation stiffness6×6 matrixOnline
Dampingscalar/matrixOnline
Feedforward wrenchR^6Per-cycle
Task frame orientationSO(3)Per-cycle

3. Cartesian Impedance Controller Plugin

The Cartesian impedance controller implements the classical Albu-Schäffer formulation. The pose error combines position and orientation components:

$$\mathbf{e}=\begin{bmatrix}\mathbf{p}-\mathbf{p}_{d}\\-\mathbf{R}\boldsymbol{\phi}\end{bmatrix},\qquad\mathbf{e}_{v}=\mathbf{J}\dot{\mathbf{q}}-\mathbf{v}_{d}$$

where $\mathbf{p}$ and $\mathbf{p}_d$ are current and desired position, $\mathbf{R}\boldsymbol{\phi}$ is the orientation error expressed via the rotation matrix, $\mathbf{J}$ is the Jacobian, and $\mathbf{v}_d$ is the desired twist. The Cartesian impedance torque is:

$$\boldsymbol{\tau}_{\mathrm{cart}}=\mathbf{J}^{\top}\left(-\mathbf{K}\mathbf{e}-\mathbf{D}\mathbf{e}_{v}+\mathbf{w}_{\mathrm{ff}}\right)+\boldsymbol{\tau}_{\mathrm{ns}}$$

where $\mathbf{K}$ and $\mathbf{D}$ are stiffness and damping matrices, $\mathbf{w}_{\text{ff}}$ is the feedforward wrench, and $\boldsymbol{\tau}_{\text{ns}}$ handles nullspace torques for redundancy resolution.

4. Task-Dependent Compliance

The key geometric insight: the impedance controller's stiffness matrix defines compliance principal axes. Traditional implementations fix diagonal stiffness in world or base coordinates. But in surface-following tasks, the desired compliance direction varies continuously along the surface tangent — if stiffness principal axes cannot rotate with it, the controller is either too stiff along the tangent (cannot follow the surface) or too compliant along the normal (loses contact force control). By defining diagonal stiffness in the task frame and rotating to the world frame:

$$\mathbf{K}_{\mathrm{pos}}=\mathbf{R}_{\mathrm{task}}\,\mathbf{K}_{\mathrm{pos,diag}}\,\mathbf{R}_{\mathrm{task}}^{\top}$$

$$\mathbf{K}_{\mathrm{ori}}=\mathbf{R}_{\mathrm{task}}\,\mathbf{K}_{\mathrm{ori,diag}}\,\mathbf{R}_{\mathrm{task}}^{\top}$$

the compliance principal axes align with task geometry every control cycle. This rotation preserves stiffness eigenvalues — the "softness" magnitude is unchanged, only its direction dynamically adjusts to task requirements.

graph TD
  A[External task source] --> B[Task frame orientation R_task]
  B --> C[Diagonal stiffness K_diag in task frame]
  C --> D[Rotate: K = R_task * K_diag * R_task^T]
  D --> E[Cartesian impedance torque]
  F[Plugin: Cartesian impedance] --> E
  E --> G[Wrapper: compensation + filtering + torque validation]
  G --> H[Robot joint torques]
  style D fill:#f5a623,stroke:#b97316,color:#fff
  style F fill:#4a90d9,stroke:#2c5f8a,color:#fff
  style G fill:#7ed321,stroke:#4a8a14,color:#fff

5. Compensation, Joint Limits, and Filtering

The final commanded torque aggregates the controller output with compensation terms:

$$\boldsymbol{\tau}_{\mathrm{cmd}}=\boldsymbol{\tau}_{\mathrm{impl}}+\boldsymbol{\tau}_{g}+\boldsymbol{\tau}_{\mathrm{frc}}+\boldsymbol{\tau}_{\mathrm{load}}+\boldsymbol{\tau}_{\mathrm{lim}}$$

where $\boldsymbol{\tau}_{\text{impl}}$ is the plugin output, $\boldsymbol{\tau}_g$ is gravity compensation, $\boldsymbol{\tau}_{\text{frc}}$ is friction compensation, $\boldsymbol{\tau}_{\text{load}}$ is payload compensation, and $\boldsymbol{\tau}_{\text{lim}}$ is the joint-limit avoidance term. The joint-limit term operates directly in joint space and may affect task tracking when the robot approaches limits — it is configurable and serves as a software-level safety supplement, not a replacement for hardware-level joint limit enforcement.

6. Simulink-to-Plugin Pipeline

The Simulink-to-plugin pipeline automatically converts MathWorks Simulink models into loadable plugins. Developers design control laws graphically in Simulink with simulation validation, then the pipeline compiles the model to C++ code wrapped in the standard plugin interface. This lowers the barrier for model-driven development — control law designers need not manually implement C++ or handle framework initialization, buffering, and compensation logic. The pipeline connects Simulink's rapid prototyping with the framework's production deployment, though this advantage also means dependency on the Simulink toolchain.

Simulink to plugin pipeline

Figure 2: Simulink-to-plugin pipeline converting graphical control law models into runtime-loadable framework plugins.

Experimental Results

Cross-Platform Portability

The same controller interface was deployed on multiple manipulator models with different kinematic and dynamic properties. The same plugin implementation runs on different robots by swapping URDF and configuration, without modifying the control law code. This validates the core portability claim — infrastructure separation enables true cross-platform reuse.

Contact-Rich Manipulation

Contact-rich manipulation experiments

Figure 3: Contact-rich manipulation experiments showing compliant contact performance in erasing and wiping tasks.

Two task experiments were conducted on Franka FR3 (1kHz FCI torque control):

TaskCompliance StrategyResult
Curved surface followingMoving compliance frame (Frenet-Serret)Compliant direction follows surface tangent, constrained direction maintains stiffness
Quick-connect dockingSearch-phase compliant + post-contact stiffeningSuccessful docking under pose偏差

The curved surface following task uses a Frenet-Serret moving compliance frame — the tangent, normal, and binormal of the surface parameterization curve define the task coordinate system. The compliant direction follows the surface tangent absorbing position deviations, while the constrained direction maintains stiffness ensuring the tool stays on the surface. The quick-connect docking task uses a two-phase strategy: the search phase lowers stiffness allowing compliant exploration under pose偏差, and after contact confirmation stiffness increases to lock the docking position. The stiffness switch between phases is performed online via the standardized command interface without stopping or restarting the controller.

Commands are generated via the RobotBlockset Python interface, with motion primitives streaming Cartesian pose and twist references, position and orientation stiffness, feedforward wrenches, and task-frame orientation. The streaming design decomposes complex tasks into continuous motion primitive sequences, each carrying its own impedance parameters and task-frame definition. The 1kHz Franka FCI torque control frequency ensures high-bandwidth torque execution, with compensation terms (gravity, friction, payload) updated every control cycle.

Limitations

Author-stated: The joint-limit term operates directly in joint space and may affect task tracking near limits. It is configurable and serves as a software-level safety supplement, not a replacement for hardware joint limit enforcement.

Analysis: The framework focuses on control architecture rather than novel control laws — the Cartesian impedance law itself is the classical Albu-Schäffer formulation; the innovation is engineering integration rather than theoretical breakthrough. The Simulink-to-plugin pipeline lowers model-driven development barriers but depends on the Simulink toolchain, offering no direct value to non-MATLAB users. Real robot experiments are only on Franka FR3; other manipulators' hardware validation is simulation-only. The 1kHz torque control frequency depends on FCI; applicability to arms without torque-level interfaces is undiscussed. Task-frame construction is entirely the external task source's responsibility — if the external frame is computed incorrectly or with latency, compliance directions deviate from task geometry. Friction compensation uses experimentally calibrated parameters; adaptability to parameter drift from wear is undiscussed.

Conclusion and Outlook

The core contribution is liberating compliant control's reusable infrastructure from robot-specific implementations. The plugin architecture makes control law implementations (Cartesian impedance, joint impedance) runtime-loadable ROS-agnostic libraries, with wrappers uniformly handling initialization, command buffering, compensation, filtering, and torque validation. The standardized command interface exposes stiffness and damping as online-updatable parameters. Task-dependent compliance rotates compliance principal axes to arbitrary task-frame directions every control cycle. While the Cartesian impedance law is classical, engineering it into a pluggable, online-tunable, cross-platform framework has practical significance for lowering compliant control deployment barriers.

The reuse challenge in compliant control is not that the control law isn't good enough — it's that every robot rebuilds the infrastructure from scratch. Making control laws into pluggable plugins and letting stiffness directions rotate with task geometry lets the same code run on any manipulator.