No version for distro humble showing lyrical. Known supported distros are highlighted in the buttons above.
Package symbol

linear_feedback_controller package from linear_feedback_controller repo

linear_feedback_controller

ROS Distro
lyrical

Package Summary

Version 3.2.0
License BSD-2-Clause
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/loco-3d/linear-feedback-controller.git
VCS Type git
VCS Version main
Last Updated 2026-05-15
Dev Status MAINTAINED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

roscontrol controller package conputing a linear feedback. The user needs to provide a model of the robot and a list of controlled joint and the controller computes a linear feedback on the user defined state.

Additional Links

Maintainers

  • Guilhem Saurel

Authors

  • Maximilien Naveau

pre-commit.ci status

linear-feedback-controller

A ros2_control package implementing linear feedback control strategies for robotic systems. It supports both fixed-base and free-flying robot configurations and is designed to integrate with external model predictive controllers.

The public message interface is defined in linear_feedback_controller_msgs.

Both packages are released under the BSD-2 license. Current versions are tracked in their respective package.xml files and must have an associated git tag of the form vX.Y.Z.

Full documentation is available on DeepWiki.

Controllers

The package provides three ros2_control controller plugins:

Controller Base class Role
LinearFeedbackControllerRos ChainableControllerInterface Main control loop: PD → linear feedback transition with external MPC
JointStateEstimator ControllerInterface Joint state filtering and velocity estimation
PassthroughController ChainableControllerInterface Interface renaming / forwarding for hardware–simulation parity

LinearFeedbackControllerRos

The main controller implements a two-phase control strategy:

  1. PD phase — Proportional-derivative control for initial stabilization using configurable per-joint gains (p_gains, d_gains).
  2. LF phase — Linear feedback control driven by an external controller (e.g. a whole-body MPC based on Crocoddyl).

The transition between phases is time-based and configurable via pd_to_lf_transition_duration.

The controller publishes sensor data on a ROS 2 topic:

  • Base pose and velocity (free-flying robots; identity for fixed-base robots)
  • Joint positions, velocities, and efforts

It receives control commands containing:

  • A feedback gain matrix
  • A feedforward torque term
  • The linearization state

JointStateEstimator

Reads hardware state interfaces, applies exponential smoothing to joint velocities, and writes the filtered values to command interfaces. This makes raw sensor data suitable for downstream chainable controllers.

PassthroughController

Forwards and renames reference interfaces to command interfaces. Useful when simulation and hardware use different interface names but share the same parameter file.

Dependencies

Package Role
ros2_control Controller framework and hardware abstraction
pinocchio Rigid body dynamics and URDF model loading
Eigen3 Linear algebra
linear_feedback_controller_msgs ROS topic message definitions and Eigen/NumPy conversions

Build

mkdir -p workspace/src
git -C workspace/src clone https://github.com/loco-3d/linear-feedback-controller.git
colcon build

With CMake directly

git clone https://github.com/loco-3d/linear-feedback-controller.git
cd linear-feedback-controller
mkdir _build && cd _build
cmake .. -DCMAKE_INSTALL_PREFIX=/path/to/your/install/folder
make install

With Nix

git clone https://github.com/loco-3d/linear-feedback-controller.git
cd linear-feedback-controller

# Check (build + tests)
nix flake check -L

# Build only
nix build -L

# Enter development shell
nix develop

nix-direnv is also supported for automatic shell activation.

Configuration

An example YAML configuration for the Tiago Pro robot is available at config/tiago_pro_lfc_params.yaml.

Real-world usage can be found in the agimus-demos repository, in particular in the agimus_demos_common package.

File truncated at 100 lines see the full file

CHANGELOG

Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

Releases are available on the github repository.

Unreleased

  • PDController: use pinocchio::difference in pd controller to handle SO2 joint

3.2.0 - 2026-04-09

  • implement continuous joint support
  • add JointModelRevoluteUnalignedb for tiago pro

3.1.0 - 2026-03-11

  • add support for rolling

3.0.1 - 2025-11-04

  • add jrl_cmakemodules to package.xml

3.0.0 - 2025-10-23

added

  • A passthrough_controller to simulate controllers on partial interface sets. Example in a certain robot there is one controller per joint on the robot but not in simulation. This passthrough controller helps the user to create a seemless interface for both the real robot and the simulation.

changed

  • Breaking API! The in and out interfaces can now be twicked interface by interface.

2.0.0 - 2025-04-14

Changed

  • Breaking change: migration ROS2
  • Splitting the ROS vs none ROS part of the code.

Added

  • Added unit-test for the math.

1.0.2 - 2023-04-03

Added

  • pal_statistics introspection.
  • computation of the ZMP in the controller for debugging
  • computation of the position of the pendulum base fro debugging.
  • computation of the CoM acceleration from the measured forces.

1.0.1 - 2023-03-21

Fixed

  • Fix the averaging filter implementation.

Changed

  • Update the usage of the Eigen API to save some code lines.

1.0.0 - 2023-03-17

Changed

Remove the msgs package and mv the lfc at the root of the git repository. msgs are now here: https://github.com/loco-3d/linear-feedback-controller-msgs

0.1.0 - 2023-03-17

Implementation of linear-feedback-controller in ROS1 for Talos PAL-Robotics robot.

Git changelogs

Launch files

  • launch/talos_linear_feedback_controller.launch
      • spawn [default: true]
      • simulation [default: false]
      • ns [default: linear_feedback_controller]
      • debug_log [default: false]
      • default_params [default: false]
  • launch/talos_params.launch
      • simulation [default: false]
      • ns [default: linear_feedback_controller]
      • arm_left_control_type [default: no_control]
      • arm_right_control_type [default: no_control]
      • legs_control_type [default: inertia_shaping_effort_analytic_dob_control]
      • torso_control_type [default: inertia_shaping_effort_analytic_dob_control]
      • head_control_type [default: no_control]
      • head_local_joint_control_pkg [default: pal_local_joint_control]
      • wrists_control_type [default: no_control]
      • wrists_local_joint_control_pkg [default: pal_local_joint_control]
      • arm_left_local_joint_control_pkg [default: inertia_shaping_effort_control]
      • arm_left_local_joint_control_pkg [default: pal_local_joint_control]
      • arm_right_local_joint_control_pkg [default: inertia_shaping_effort_control]
      • arm_right_local_joint_control_pkg [default: pal_local_joint_control]
      • legs_local_joint_control_pkg [default: inertia_shaping_effort_control]
      • legs_local_joint_control_pkg [default: pal_local_joint_control]
      • torso_local_joint_control_pkg [default: inertia_shaping_effort_control]
      • torso_local_joint_control_pkg [default: pal_local_joint_control]

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged linear_feedback_controller at Robotics Stack Exchange

No version for distro jazzy showing lyrical. Known supported distros are highlighted in the buttons above.
Package symbol

linear_feedback_controller package from linear_feedback_controller repo

linear_feedback_controller

ROS Distro
lyrical

Package Summary

Version 3.2.0
License BSD-2-Clause
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/loco-3d/linear-feedback-controller.git
VCS Type git
VCS Version main
Last Updated 2026-05-15
Dev Status MAINTAINED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

roscontrol controller package conputing a linear feedback. The user needs to provide a model of the robot and a list of controlled joint and the controller computes a linear feedback on the user defined state.

Additional Links

Maintainers

  • Guilhem Saurel

Authors

  • Maximilien Naveau

pre-commit.ci status

linear-feedback-controller

A ros2_control package implementing linear feedback control strategies for robotic systems. It supports both fixed-base and free-flying robot configurations and is designed to integrate with external model predictive controllers.

The public message interface is defined in linear_feedback_controller_msgs.

Both packages are released under the BSD-2 license. Current versions are tracked in their respective package.xml files and must have an associated git tag of the form vX.Y.Z.

Full documentation is available on DeepWiki.

Controllers

The package provides three ros2_control controller plugins:

Controller Base class Role
LinearFeedbackControllerRos ChainableControllerInterface Main control loop: PD → linear feedback transition with external MPC
JointStateEstimator ControllerInterface Joint state filtering and velocity estimation
PassthroughController ChainableControllerInterface Interface renaming / forwarding for hardware–simulation parity

LinearFeedbackControllerRos

The main controller implements a two-phase control strategy:

  1. PD phase — Proportional-derivative control for initial stabilization using configurable per-joint gains (p_gains, d_gains).
  2. LF phase — Linear feedback control driven by an external controller (e.g. a whole-body MPC based on Crocoddyl).

The transition between phases is time-based and configurable via pd_to_lf_transition_duration.

The controller publishes sensor data on a ROS 2 topic:

  • Base pose and velocity (free-flying robots; identity for fixed-base robots)
  • Joint positions, velocities, and efforts

It receives control commands containing:

  • A feedback gain matrix
  • A feedforward torque term
  • The linearization state

JointStateEstimator

Reads hardware state interfaces, applies exponential smoothing to joint velocities, and writes the filtered values to command interfaces. This makes raw sensor data suitable for downstream chainable controllers.

PassthroughController

Forwards and renames reference interfaces to command interfaces. Useful when simulation and hardware use different interface names but share the same parameter file.

Dependencies

Package Role
ros2_control Controller framework and hardware abstraction
pinocchio Rigid body dynamics and URDF model loading
Eigen3 Linear algebra
linear_feedback_controller_msgs ROS topic message definitions and Eigen/NumPy conversions

Build

mkdir -p workspace/src
git -C workspace/src clone https://github.com/loco-3d/linear-feedback-controller.git
colcon build

With CMake directly

git clone https://github.com/loco-3d/linear-feedback-controller.git
cd linear-feedback-controller
mkdir _build && cd _build
cmake .. -DCMAKE_INSTALL_PREFIX=/path/to/your/install/folder
make install

With Nix

git clone https://github.com/loco-3d/linear-feedback-controller.git
cd linear-feedback-controller

# Check (build + tests)
nix flake check -L

# Build only
nix build -L

# Enter development shell
nix develop

nix-direnv is also supported for automatic shell activation.

Configuration

An example YAML configuration for the Tiago Pro robot is available at config/tiago_pro_lfc_params.yaml.

Real-world usage can be found in the agimus-demos repository, in particular in the agimus_demos_common package.

File truncated at 100 lines see the full file

CHANGELOG

Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

Releases are available on the github repository.

Unreleased

  • PDController: use pinocchio::difference in pd controller to handle SO2 joint

3.2.0 - 2026-04-09

  • implement continuous joint support
  • add JointModelRevoluteUnalignedb for tiago pro

3.1.0 - 2026-03-11

  • add support for rolling

3.0.1 - 2025-11-04

  • add jrl_cmakemodules to package.xml

3.0.0 - 2025-10-23

added

  • A passthrough_controller to simulate controllers on partial interface sets. Example in a certain robot there is one controller per joint on the robot but not in simulation. This passthrough controller helps the user to create a seemless interface for both the real robot and the simulation.

changed

  • Breaking API! The in and out interfaces can now be twicked interface by interface.

2.0.0 - 2025-04-14

Changed

  • Breaking change: migration ROS2
  • Splitting the ROS vs none ROS part of the code.

Added

  • Added unit-test for the math.

1.0.2 - 2023-04-03

Added

  • pal_statistics introspection.
  • computation of the ZMP in the controller for debugging
  • computation of the position of the pendulum base fro debugging.
  • computation of the CoM acceleration from the measured forces.

1.0.1 - 2023-03-21

Fixed

  • Fix the averaging filter implementation.

Changed

  • Update the usage of the Eigen API to save some code lines.

1.0.0 - 2023-03-17

Changed

Remove the msgs package and mv the lfc at the root of the git repository. msgs are now here: https://github.com/loco-3d/linear-feedback-controller-msgs

0.1.0 - 2023-03-17

Implementation of linear-feedback-controller in ROS1 for Talos PAL-Robotics robot.

Git changelogs

Launch files

  • launch/talos_linear_feedback_controller.launch
      • spawn [default: true]
      • simulation [default: false]
      • ns [default: linear_feedback_controller]
      • debug_log [default: false]
      • default_params [default: false]
  • launch/talos_params.launch
      • simulation [default: false]
      • ns [default: linear_feedback_controller]
      • arm_left_control_type [default: no_control]
      • arm_right_control_type [default: no_control]
      • legs_control_type [default: inertia_shaping_effort_analytic_dob_control]
      • torso_control_type [default: inertia_shaping_effort_analytic_dob_control]
      • head_control_type [default: no_control]
      • head_local_joint_control_pkg [default: pal_local_joint_control]
      • wrists_control_type [default: no_control]
      • wrists_local_joint_control_pkg [default: pal_local_joint_control]
      • arm_left_local_joint_control_pkg [default: inertia_shaping_effort_control]
      • arm_left_local_joint_control_pkg [default: pal_local_joint_control]
      • arm_right_local_joint_control_pkg [default: inertia_shaping_effort_control]
      • arm_right_local_joint_control_pkg [default: pal_local_joint_control]
      • legs_local_joint_control_pkg [default: inertia_shaping_effort_control]
      • legs_local_joint_control_pkg [default: pal_local_joint_control]
      • torso_local_joint_control_pkg [default: inertia_shaping_effort_control]
      • torso_local_joint_control_pkg [default: pal_local_joint_control]

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged linear_feedback_controller at Robotics Stack Exchange

No version for distro kilted showing lyrical. Known supported distros are highlighted in the buttons above.
Package symbol

linear_feedback_controller package from linear_feedback_controller repo

linear_feedback_controller

ROS Distro
lyrical

Package Summary

Version 3.2.0
License BSD-2-Clause
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/loco-3d/linear-feedback-controller.git
VCS Type git
VCS Version main
Last Updated 2026-05-15
Dev Status MAINTAINED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

roscontrol controller package conputing a linear feedback. The user needs to provide a model of the robot and a list of controlled joint and the controller computes a linear feedback on the user defined state.

Additional Links

Maintainers

  • Guilhem Saurel

Authors

  • Maximilien Naveau

pre-commit.ci status

linear-feedback-controller

A ros2_control package implementing linear feedback control strategies for robotic systems. It supports both fixed-base and free-flying robot configurations and is designed to integrate with external model predictive controllers.

The public message interface is defined in linear_feedback_controller_msgs.

Both packages are released under the BSD-2 license. Current versions are tracked in their respective package.xml files and must have an associated git tag of the form vX.Y.Z.

Full documentation is available on DeepWiki.

Controllers

The package provides three ros2_control controller plugins:

Controller Base class Role
LinearFeedbackControllerRos ChainableControllerInterface Main control loop: PD → linear feedback transition with external MPC
JointStateEstimator ControllerInterface Joint state filtering and velocity estimation
PassthroughController ChainableControllerInterface Interface renaming / forwarding for hardware–simulation parity

LinearFeedbackControllerRos

The main controller implements a two-phase control strategy:

  1. PD phase — Proportional-derivative control for initial stabilization using configurable per-joint gains (p_gains, d_gains).
  2. LF phase — Linear feedback control driven by an external controller (e.g. a whole-body MPC based on Crocoddyl).

The transition between phases is time-based and configurable via pd_to_lf_transition_duration.

The controller publishes sensor data on a ROS 2 topic:

  • Base pose and velocity (free-flying robots; identity for fixed-base robots)
  • Joint positions, velocities, and efforts

It receives control commands containing:

  • A feedback gain matrix
  • A feedforward torque term
  • The linearization state

JointStateEstimator

Reads hardware state interfaces, applies exponential smoothing to joint velocities, and writes the filtered values to command interfaces. This makes raw sensor data suitable for downstream chainable controllers.

PassthroughController

Forwards and renames reference interfaces to command interfaces. Useful when simulation and hardware use different interface names but share the same parameter file.

Dependencies

Package Role
ros2_control Controller framework and hardware abstraction
pinocchio Rigid body dynamics and URDF model loading
Eigen3 Linear algebra
linear_feedback_controller_msgs ROS topic message definitions and Eigen/NumPy conversions

Build

mkdir -p workspace/src
git -C workspace/src clone https://github.com/loco-3d/linear-feedback-controller.git
colcon build

With CMake directly

git clone https://github.com/loco-3d/linear-feedback-controller.git
cd linear-feedback-controller
mkdir _build && cd _build
cmake .. -DCMAKE_INSTALL_PREFIX=/path/to/your/install/folder
make install

With Nix

git clone https://github.com/loco-3d/linear-feedback-controller.git
cd linear-feedback-controller

# Check (build + tests)
nix flake check -L

# Build only
nix build -L

# Enter development shell
nix develop

nix-direnv is also supported for automatic shell activation.

Configuration

An example YAML configuration for the Tiago Pro robot is available at config/tiago_pro_lfc_params.yaml.

Real-world usage can be found in the agimus-demos repository, in particular in the agimus_demos_common package.

File truncated at 100 lines see the full file

CHANGELOG

Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

Releases are available on the github repository.

Unreleased

  • PDController: use pinocchio::difference in pd controller to handle SO2 joint

3.2.0 - 2026-04-09

  • implement continuous joint support
  • add JointModelRevoluteUnalignedb for tiago pro

3.1.0 - 2026-03-11

  • add support for rolling

3.0.1 - 2025-11-04

  • add jrl_cmakemodules to package.xml

3.0.0 - 2025-10-23

added

  • A passthrough_controller to simulate controllers on partial interface sets. Example in a certain robot there is one controller per joint on the robot but not in simulation. This passthrough controller helps the user to create a seemless interface for both the real robot and the simulation.

changed

  • Breaking API! The in and out interfaces can now be twicked interface by interface.

2.0.0 - 2025-04-14

Changed

  • Breaking change: migration ROS2
  • Splitting the ROS vs none ROS part of the code.

Added

  • Added unit-test for the math.

1.0.2 - 2023-04-03

Added

  • pal_statistics introspection.
  • computation of the ZMP in the controller for debugging
  • computation of the position of the pendulum base fro debugging.
  • computation of the CoM acceleration from the measured forces.

1.0.1 - 2023-03-21

Fixed

  • Fix the averaging filter implementation.

Changed

  • Update the usage of the Eigen API to save some code lines.

1.0.0 - 2023-03-17

Changed

Remove the msgs package and mv the lfc at the root of the git repository. msgs are now here: https://github.com/loco-3d/linear-feedback-controller-msgs

0.1.0 - 2023-03-17

Implementation of linear-feedback-controller in ROS1 for Talos PAL-Robotics robot.

Git changelogs

Launch files

  • launch/talos_linear_feedback_controller.launch
      • spawn [default: true]
      • simulation [default: false]
      • ns [default: linear_feedback_controller]
      • debug_log [default: false]
      • default_params [default: false]
  • launch/talos_params.launch
      • simulation [default: false]
      • ns [default: linear_feedback_controller]
      • arm_left_control_type [default: no_control]
      • arm_right_control_type [default: no_control]
      • legs_control_type [default: inertia_shaping_effort_analytic_dob_control]
      • torso_control_type [default: inertia_shaping_effort_analytic_dob_control]
      • head_control_type [default: no_control]
      • head_local_joint_control_pkg [default: pal_local_joint_control]
      • wrists_control_type [default: no_control]
      • wrists_local_joint_control_pkg [default: pal_local_joint_control]
      • arm_left_local_joint_control_pkg [default: inertia_shaping_effort_control]
      • arm_left_local_joint_control_pkg [default: pal_local_joint_control]
      • arm_right_local_joint_control_pkg [default: inertia_shaping_effort_control]
      • arm_right_local_joint_control_pkg [default: pal_local_joint_control]
      • legs_local_joint_control_pkg [default: inertia_shaping_effort_control]
      • legs_local_joint_control_pkg [default: pal_local_joint_control]
      • torso_local_joint_control_pkg [default: inertia_shaping_effort_control]
      • torso_local_joint_control_pkg [default: pal_local_joint_control]

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged linear_feedback_controller at Robotics Stack Exchange

Package symbol

linear_feedback_controller package from linear_feedback_controller repo

linear_feedback_controller

ROS Distro
lyrical

Package Summary

Version 3.2.0
License BSD-2-Clause
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/loco-3d/linear-feedback-controller.git
VCS Type git
VCS Version main
Last Updated 2026-05-15
Dev Status MAINTAINED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

roscontrol controller package conputing a linear feedback. The user needs to provide a model of the robot and a list of controlled joint and the controller computes a linear feedback on the user defined state.

Additional Links

Maintainers

  • Guilhem Saurel

Authors

  • Maximilien Naveau

pre-commit.ci status

linear-feedback-controller

A ros2_control package implementing linear feedback control strategies for robotic systems. It supports both fixed-base and free-flying robot configurations and is designed to integrate with external model predictive controllers.

The public message interface is defined in linear_feedback_controller_msgs.

Both packages are released under the BSD-2 license. Current versions are tracked in their respective package.xml files and must have an associated git tag of the form vX.Y.Z.

Full documentation is available on DeepWiki.

Controllers

The package provides three ros2_control controller plugins:

Controller Base class Role
LinearFeedbackControllerRos ChainableControllerInterface Main control loop: PD → linear feedback transition with external MPC
JointStateEstimator ControllerInterface Joint state filtering and velocity estimation
PassthroughController ChainableControllerInterface Interface renaming / forwarding for hardware–simulation parity

LinearFeedbackControllerRos

The main controller implements a two-phase control strategy:

  1. PD phase — Proportional-derivative control for initial stabilization using configurable per-joint gains (p_gains, d_gains).
  2. LF phase — Linear feedback control driven by an external controller (e.g. a whole-body MPC based on Crocoddyl).

The transition between phases is time-based and configurable via pd_to_lf_transition_duration.

The controller publishes sensor data on a ROS 2 topic:

  • Base pose and velocity (free-flying robots; identity for fixed-base robots)
  • Joint positions, velocities, and efforts

It receives control commands containing:

  • A feedback gain matrix
  • A feedforward torque term
  • The linearization state

JointStateEstimator

Reads hardware state interfaces, applies exponential smoothing to joint velocities, and writes the filtered values to command interfaces. This makes raw sensor data suitable for downstream chainable controllers.

PassthroughController

Forwards and renames reference interfaces to command interfaces. Useful when simulation and hardware use different interface names but share the same parameter file.

Dependencies

Package Role
ros2_control Controller framework and hardware abstraction
pinocchio Rigid body dynamics and URDF model loading
Eigen3 Linear algebra
linear_feedback_controller_msgs ROS topic message definitions and Eigen/NumPy conversions

Build

mkdir -p workspace/src
git -C workspace/src clone https://github.com/loco-3d/linear-feedback-controller.git
colcon build

With CMake directly

git clone https://github.com/loco-3d/linear-feedback-controller.git
cd linear-feedback-controller
mkdir _build && cd _build
cmake .. -DCMAKE_INSTALL_PREFIX=/path/to/your/install/folder
make install

With Nix

git clone https://github.com/loco-3d/linear-feedback-controller.git
cd linear-feedback-controller

# Check (build + tests)
nix flake check -L

# Build only
nix build -L

# Enter development shell
nix develop

nix-direnv is also supported for automatic shell activation.

Configuration

An example YAML configuration for the Tiago Pro robot is available at config/tiago_pro_lfc_params.yaml.

Real-world usage can be found in the agimus-demos repository, in particular in the agimus_demos_common package.

File truncated at 100 lines see the full file

CHANGELOG

Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

Releases are available on the github repository.

Unreleased

  • PDController: use pinocchio::difference in pd controller to handle SO2 joint

3.2.0 - 2026-04-09

  • implement continuous joint support
  • add JointModelRevoluteUnalignedb for tiago pro

3.1.0 - 2026-03-11

  • add support for rolling

3.0.1 - 2025-11-04

  • add jrl_cmakemodules to package.xml

3.0.0 - 2025-10-23

added

  • A passthrough_controller to simulate controllers on partial interface sets. Example in a certain robot there is one controller per joint on the robot but not in simulation. This passthrough controller helps the user to create a seemless interface for both the real robot and the simulation.

changed

  • Breaking API! The in and out interfaces can now be twicked interface by interface.

2.0.0 - 2025-04-14

Changed

  • Breaking change: migration ROS2
  • Splitting the ROS vs none ROS part of the code.

Added

  • Added unit-test for the math.

1.0.2 - 2023-04-03

Added

  • pal_statistics introspection.
  • computation of the ZMP in the controller for debugging
  • computation of the position of the pendulum base fro debugging.
  • computation of the CoM acceleration from the measured forces.

1.0.1 - 2023-03-21

Fixed

  • Fix the averaging filter implementation.

Changed

  • Update the usage of the Eigen API to save some code lines.

1.0.0 - 2023-03-17

Changed

Remove the msgs package and mv the lfc at the root of the git repository. msgs are now here: https://github.com/loco-3d/linear-feedback-controller-msgs

0.1.0 - 2023-03-17

Implementation of linear-feedback-controller in ROS1 for Talos PAL-Robotics robot.

Git changelogs

Launch files

  • launch/talos_linear_feedback_controller.launch
      • spawn [default: true]
      • simulation [default: false]
      • ns [default: linear_feedback_controller]
      • debug_log [default: false]
      • default_params [default: false]
  • launch/talos_params.launch
      • simulation [default: false]
      • ns [default: linear_feedback_controller]
      • arm_left_control_type [default: no_control]
      • arm_right_control_type [default: no_control]
      • legs_control_type [default: inertia_shaping_effort_analytic_dob_control]
      • torso_control_type [default: inertia_shaping_effort_analytic_dob_control]
      • head_control_type [default: no_control]
      • head_local_joint_control_pkg [default: pal_local_joint_control]
      • wrists_control_type [default: no_control]
      • wrists_local_joint_control_pkg [default: pal_local_joint_control]
      • arm_left_local_joint_control_pkg [default: inertia_shaping_effort_control]
      • arm_left_local_joint_control_pkg [default: pal_local_joint_control]
      • arm_right_local_joint_control_pkg [default: inertia_shaping_effort_control]
      • arm_right_local_joint_control_pkg [default: pal_local_joint_control]
      • legs_local_joint_control_pkg [default: inertia_shaping_effort_control]
      • legs_local_joint_control_pkg [default: pal_local_joint_control]
      • torso_local_joint_control_pkg [default: inertia_shaping_effort_control]
      • torso_local_joint_control_pkg [default: pal_local_joint_control]

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged linear_feedback_controller at Robotics Stack Exchange

Package symbol

linear_feedback_controller package from linear_feedback_controller repo

linear_feedback_controller

ROS Distro
rolling

Package Summary

Version 3.2.0
License BSD-2-Clause
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/loco-3d/linear-feedback-controller.git
VCS Type git
VCS Version main
Last Updated 2026-05-15
Dev Status MAINTAINED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

roscontrol controller package conputing a linear feedback. The user needs to provide a model of the robot and a list of controlled joint and the controller computes a linear feedback on the user defined state.

Additional Links

Maintainers

  • Guilhem Saurel

Authors

  • Maximilien Naveau

pre-commit.ci status

linear-feedback-controller

A ros2_control package implementing linear feedback control strategies for robotic systems. It supports both fixed-base and free-flying robot configurations and is designed to integrate with external model predictive controllers.

The public message interface is defined in linear_feedback_controller_msgs.

Both packages are released under the BSD-2 license. Current versions are tracked in their respective package.xml files and must have an associated git tag of the form vX.Y.Z.

Full documentation is available on DeepWiki.

Controllers

The package provides three ros2_control controller plugins:

Controller Base class Role
LinearFeedbackControllerRos ChainableControllerInterface Main control loop: PD → linear feedback transition with external MPC
JointStateEstimator ControllerInterface Joint state filtering and velocity estimation
PassthroughController ChainableControllerInterface Interface renaming / forwarding for hardware–simulation parity

LinearFeedbackControllerRos

The main controller implements a two-phase control strategy:

  1. PD phase — Proportional-derivative control for initial stabilization using configurable per-joint gains (p_gains, d_gains).
  2. LF phase — Linear feedback control driven by an external controller (e.g. a whole-body MPC based on Crocoddyl).

The transition between phases is time-based and configurable via pd_to_lf_transition_duration.

The controller publishes sensor data on a ROS 2 topic:

  • Base pose and velocity (free-flying robots; identity for fixed-base robots)
  • Joint positions, velocities, and efforts

It receives control commands containing:

  • A feedback gain matrix
  • A feedforward torque term
  • The linearization state

JointStateEstimator

Reads hardware state interfaces, applies exponential smoothing to joint velocities, and writes the filtered values to command interfaces. This makes raw sensor data suitable for downstream chainable controllers.

PassthroughController

Forwards and renames reference interfaces to command interfaces. Useful when simulation and hardware use different interface names but share the same parameter file.

Dependencies

Package Role
ros2_control Controller framework and hardware abstraction
pinocchio Rigid body dynamics and URDF model loading
Eigen3 Linear algebra
linear_feedback_controller_msgs ROS topic message definitions and Eigen/NumPy conversions

Build

mkdir -p workspace/src
git -C workspace/src clone https://github.com/loco-3d/linear-feedback-controller.git
colcon build

With CMake directly

git clone https://github.com/loco-3d/linear-feedback-controller.git
cd linear-feedback-controller
mkdir _build && cd _build
cmake .. -DCMAKE_INSTALL_PREFIX=/path/to/your/install/folder
make install

With Nix

git clone https://github.com/loco-3d/linear-feedback-controller.git
cd linear-feedback-controller

# Check (build + tests)
nix flake check -L

# Build only
nix build -L

# Enter development shell
nix develop

nix-direnv is also supported for automatic shell activation.

Configuration

An example YAML configuration for the Tiago Pro robot is available at config/tiago_pro_lfc_params.yaml.

Real-world usage can be found in the agimus-demos repository, in particular in the agimus_demos_common package.

File truncated at 100 lines see the full file

CHANGELOG

Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

Releases are available on the github repository.

Unreleased

  • PDController: use pinocchio::difference in pd controller to handle SO2 joint

3.2.0 - 2026-04-09

  • implement continuous joint support
  • add JointModelRevoluteUnalignedb for tiago pro

3.1.0 - 2026-03-11

  • add support for rolling

3.0.1 - 2025-11-04

  • add jrl_cmakemodules to package.xml

3.0.0 - 2025-10-23

added

  • A passthrough_controller to simulate controllers on partial interface sets. Example in a certain robot there is one controller per joint on the robot but not in simulation. This passthrough controller helps the user to create a seemless interface for both the real robot and the simulation.

changed

  • Breaking API! The in and out interfaces can now be twicked interface by interface.

2.0.0 - 2025-04-14

Changed

  • Breaking change: migration ROS2
  • Splitting the ROS vs none ROS part of the code.

Added

  • Added unit-test for the math.

1.0.2 - 2023-04-03

Added

  • pal_statistics introspection.
  • computation of the ZMP in the controller for debugging
  • computation of the position of the pendulum base fro debugging.
  • computation of the CoM acceleration from the measured forces.

1.0.1 - 2023-03-21

Fixed

  • Fix the averaging filter implementation.

Changed

  • Update the usage of the Eigen API to save some code lines.

1.0.0 - 2023-03-17

Changed

Remove the msgs package and mv the lfc at the root of the git repository. msgs are now here: https://github.com/loco-3d/linear-feedback-controller-msgs

0.1.0 - 2023-03-17

Implementation of linear-feedback-controller in ROS1 for Talos PAL-Robotics robot.

Git changelogs

Launch files

  • launch/talos_linear_feedback_controller.launch
      • spawn [default: true]
      • simulation [default: false]
      • ns [default: linear_feedback_controller]
      • debug_log [default: false]
      • default_params [default: false]
  • launch/talos_params.launch
      • simulation [default: false]
      • ns [default: linear_feedback_controller]
      • arm_left_control_type [default: no_control]
      • arm_right_control_type [default: no_control]
      • legs_control_type [default: inertia_shaping_effort_analytic_dob_control]
      • torso_control_type [default: inertia_shaping_effort_analytic_dob_control]
      • head_control_type [default: no_control]
      • head_local_joint_control_pkg [default: pal_local_joint_control]
      • wrists_control_type [default: no_control]
      • wrists_local_joint_control_pkg [default: pal_local_joint_control]
      • arm_left_local_joint_control_pkg [default: inertia_shaping_effort_control]
      • arm_left_local_joint_control_pkg [default: pal_local_joint_control]
      • arm_right_local_joint_control_pkg [default: inertia_shaping_effort_control]
      • arm_right_local_joint_control_pkg [default: pal_local_joint_control]
      • legs_local_joint_control_pkg [default: inertia_shaping_effort_control]
      • legs_local_joint_control_pkg [default: pal_local_joint_control]
      • torso_local_joint_control_pkg [default: inertia_shaping_effort_control]
      • torso_local_joint_control_pkg [default: pal_local_joint_control]

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged linear_feedback_controller at Robotics Stack Exchange

No version for distro ardent showing lyrical. Known supported distros are highlighted in the buttons above.
Package symbol

linear_feedback_controller package from linear_feedback_controller repo

linear_feedback_controller

ROS Distro
lyrical

Package Summary

Version 3.2.0
License BSD-2-Clause
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/loco-3d/linear-feedback-controller.git
VCS Type git
VCS Version main
Last Updated 2026-05-15
Dev Status MAINTAINED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

roscontrol controller package conputing a linear feedback. The user needs to provide a model of the robot and a list of controlled joint and the controller computes a linear feedback on the user defined state.

Additional Links

Maintainers

  • Guilhem Saurel

Authors

  • Maximilien Naveau

pre-commit.ci status

linear-feedback-controller

A ros2_control package implementing linear feedback control strategies for robotic systems. It supports both fixed-base and free-flying robot configurations and is designed to integrate with external model predictive controllers.

The public message interface is defined in linear_feedback_controller_msgs.

Both packages are released under the BSD-2 license. Current versions are tracked in their respective package.xml files and must have an associated git tag of the form vX.Y.Z.

Full documentation is available on DeepWiki.

Controllers

The package provides three ros2_control controller plugins:

Controller Base class Role
LinearFeedbackControllerRos ChainableControllerInterface Main control loop: PD → linear feedback transition with external MPC
JointStateEstimator ControllerInterface Joint state filtering and velocity estimation
PassthroughController ChainableControllerInterface Interface renaming / forwarding for hardware–simulation parity

LinearFeedbackControllerRos

The main controller implements a two-phase control strategy:

  1. PD phase — Proportional-derivative control for initial stabilization using configurable per-joint gains (p_gains, d_gains).
  2. LF phase — Linear feedback control driven by an external controller (e.g. a whole-body MPC based on Crocoddyl).

The transition between phases is time-based and configurable via pd_to_lf_transition_duration.

The controller publishes sensor data on a ROS 2 topic:

  • Base pose and velocity (free-flying robots; identity for fixed-base robots)
  • Joint positions, velocities, and efforts

It receives control commands containing:

  • A feedback gain matrix
  • A feedforward torque term
  • The linearization state

JointStateEstimator

Reads hardware state interfaces, applies exponential smoothing to joint velocities, and writes the filtered values to command interfaces. This makes raw sensor data suitable for downstream chainable controllers.

PassthroughController

Forwards and renames reference interfaces to command interfaces. Useful when simulation and hardware use different interface names but share the same parameter file.

Dependencies

Package Role
ros2_control Controller framework and hardware abstraction
pinocchio Rigid body dynamics and URDF model loading
Eigen3 Linear algebra
linear_feedback_controller_msgs ROS topic message definitions and Eigen/NumPy conversions

Build

mkdir -p workspace/src
git -C workspace/src clone https://github.com/loco-3d/linear-feedback-controller.git
colcon build

With CMake directly

git clone https://github.com/loco-3d/linear-feedback-controller.git
cd linear-feedback-controller
mkdir _build && cd _build
cmake .. -DCMAKE_INSTALL_PREFIX=/path/to/your/install/folder
make install

With Nix

git clone https://github.com/loco-3d/linear-feedback-controller.git
cd linear-feedback-controller

# Check (build + tests)
nix flake check -L

# Build only
nix build -L

# Enter development shell
nix develop

nix-direnv is also supported for automatic shell activation.

Configuration

An example YAML configuration for the Tiago Pro robot is available at config/tiago_pro_lfc_params.yaml.

Real-world usage can be found in the agimus-demos repository, in particular in the agimus_demos_common package.

File truncated at 100 lines see the full file

CHANGELOG

Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

Releases are available on the github repository.

Unreleased

  • PDController: use pinocchio::difference in pd controller to handle SO2 joint

3.2.0 - 2026-04-09

  • implement continuous joint support
  • add JointModelRevoluteUnalignedb for tiago pro

3.1.0 - 2026-03-11

  • add support for rolling

3.0.1 - 2025-11-04

  • add jrl_cmakemodules to package.xml

3.0.0 - 2025-10-23

added

  • A passthrough_controller to simulate controllers on partial interface sets. Example in a certain robot there is one controller per joint on the robot but not in simulation. This passthrough controller helps the user to create a seemless interface for both the real robot and the simulation.

changed

  • Breaking API! The in and out interfaces can now be twicked interface by interface.

2.0.0 - 2025-04-14

Changed

  • Breaking change: migration ROS2
  • Splitting the ROS vs none ROS part of the code.

Added

  • Added unit-test for the math.

1.0.2 - 2023-04-03

Added

  • pal_statistics introspection.
  • computation of the ZMP in the controller for debugging
  • computation of the position of the pendulum base fro debugging.
  • computation of the CoM acceleration from the measured forces.

1.0.1 - 2023-03-21

Fixed

  • Fix the averaging filter implementation.

Changed

  • Update the usage of the Eigen API to save some code lines.

1.0.0 - 2023-03-17

Changed

Remove the msgs package and mv the lfc at the root of the git repository. msgs are now here: https://github.com/loco-3d/linear-feedback-controller-msgs

0.1.0 - 2023-03-17

Implementation of linear-feedback-controller in ROS1 for Talos PAL-Robotics robot.

Git changelogs

Launch files

  • launch/talos_linear_feedback_controller.launch
      • spawn [default: true]
      • simulation [default: false]
      • ns [default: linear_feedback_controller]
      • debug_log [default: false]
      • default_params [default: false]
  • launch/talos_params.launch
      • simulation [default: false]
      • ns [default: linear_feedback_controller]
      • arm_left_control_type [default: no_control]
      • arm_right_control_type [default: no_control]
      • legs_control_type [default: inertia_shaping_effort_analytic_dob_control]
      • torso_control_type [default: inertia_shaping_effort_analytic_dob_control]
      • head_control_type [default: no_control]
      • head_local_joint_control_pkg [default: pal_local_joint_control]
      • wrists_control_type [default: no_control]
      • wrists_local_joint_control_pkg [default: pal_local_joint_control]
      • arm_left_local_joint_control_pkg [default: inertia_shaping_effort_control]
      • arm_left_local_joint_control_pkg [default: pal_local_joint_control]
      • arm_right_local_joint_control_pkg [default: inertia_shaping_effort_control]
      • arm_right_local_joint_control_pkg [default: pal_local_joint_control]
      • legs_local_joint_control_pkg [default: inertia_shaping_effort_control]
      • legs_local_joint_control_pkg [default: pal_local_joint_control]
      • torso_local_joint_control_pkg [default: inertia_shaping_effort_control]
      • torso_local_joint_control_pkg [default: pal_local_joint_control]

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged linear_feedback_controller at Robotics Stack Exchange

No version for distro bouncy showing lyrical. Known supported distros are highlighted in the buttons above.
Package symbol

linear_feedback_controller package from linear_feedback_controller repo

linear_feedback_controller

ROS Distro
lyrical

Package Summary

Version 3.2.0
License BSD-2-Clause
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/loco-3d/linear-feedback-controller.git
VCS Type git
VCS Version main
Last Updated 2026-05-15
Dev Status MAINTAINED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

roscontrol controller package conputing a linear feedback. The user needs to provide a model of the robot and a list of controlled joint and the controller computes a linear feedback on the user defined state.

Additional Links

Maintainers

  • Guilhem Saurel

Authors

  • Maximilien Naveau

pre-commit.ci status

linear-feedback-controller

A ros2_control package implementing linear feedback control strategies for robotic systems. It supports both fixed-base and free-flying robot configurations and is designed to integrate with external model predictive controllers.

The public message interface is defined in linear_feedback_controller_msgs.

Both packages are released under the BSD-2 license. Current versions are tracked in their respective package.xml files and must have an associated git tag of the form vX.Y.Z.

Full documentation is available on DeepWiki.

Controllers

The package provides three ros2_control controller plugins:

Controller Base class Role
LinearFeedbackControllerRos ChainableControllerInterface Main control loop: PD → linear feedback transition with external MPC
JointStateEstimator ControllerInterface Joint state filtering and velocity estimation
PassthroughController ChainableControllerInterface Interface renaming / forwarding for hardware–simulation parity

LinearFeedbackControllerRos

The main controller implements a two-phase control strategy:

  1. PD phase — Proportional-derivative control for initial stabilization using configurable per-joint gains (p_gains, d_gains).
  2. LF phase — Linear feedback control driven by an external controller (e.g. a whole-body MPC based on Crocoddyl).

The transition between phases is time-based and configurable via pd_to_lf_transition_duration.

The controller publishes sensor data on a ROS 2 topic:

  • Base pose and velocity (free-flying robots; identity for fixed-base robots)
  • Joint positions, velocities, and efforts

It receives control commands containing:

  • A feedback gain matrix
  • A feedforward torque term
  • The linearization state

JointStateEstimator

Reads hardware state interfaces, applies exponential smoothing to joint velocities, and writes the filtered values to command interfaces. This makes raw sensor data suitable for downstream chainable controllers.

PassthroughController

Forwards and renames reference interfaces to command interfaces. Useful when simulation and hardware use different interface names but share the same parameter file.

Dependencies

Package Role
ros2_control Controller framework and hardware abstraction
pinocchio Rigid body dynamics and URDF model loading
Eigen3 Linear algebra
linear_feedback_controller_msgs ROS topic message definitions and Eigen/NumPy conversions

Build

mkdir -p workspace/src
git -C workspace/src clone https://github.com/loco-3d/linear-feedback-controller.git
colcon build

With CMake directly

git clone https://github.com/loco-3d/linear-feedback-controller.git
cd linear-feedback-controller
mkdir _build && cd _build
cmake .. -DCMAKE_INSTALL_PREFIX=/path/to/your/install/folder
make install

With Nix

git clone https://github.com/loco-3d/linear-feedback-controller.git
cd linear-feedback-controller

# Check (build + tests)
nix flake check -L

# Build only
nix build -L

# Enter development shell
nix develop

nix-direnv is also supported for automatic shell activation.

Configuration

An example YAML configuration for the Tiago Pro robot is available at config/tiago_pro_lfc_params.yaml.

Real-world usage can be found in the agimus-demos repository, in particular in the agimus_demos_common package.

File truncated at 100 lines see the full file

CHANGELOG

Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

Releases are available on the github repository.

Unreleased

  • PDController: use pinocchio::difference in pd controller to handle SO2 joint

3.2.0 - 2026-04-09

  • implement continuous joint support
  • add JointModelRevoluteUnalignedb for tiago pro

3.1.0 - 2026-03-11

  • add support for rolling

3.0.1 - 2025-11-04

  • add jrl_cmakemodules to package.xml

3.0.0 - 2025-10-23

added

  • A passthrough_controller to simulate controllers on partial interface sets. Example in a certain robot there is one controller per joint on the robot but not in simulation. This passthrough controller helps the user to create a seemless interface for both the real robot and the simulation.

changed

  • Breaking API! The in and out interfaces can now be twicked interface by interface.

2.0.0 - 2025-04-14

Changed

  • Breaking change: migration ROS2
  • Splitting the ROS vs none ROS part of the code.

Added

  • Added unit-test for the math.

1.0.2 - 2023-04-03

Added

  • pal_statistics introspection.
  • computation of the ZMP in the controller for debugging
  • computation of the position of the pendulum base fro debugging.
  • computation of the CoM acceleration from the measured forces.

1.0.1 - 2023-03-21

Fixed

  • Fix the averaging filter implementation.

Changed

  • Update the usage of the Eigen API to save some code lines.

1.0.0 - 2023-03-17

Changed

Remove the msgs package and mv the lfc at the root of the git repository. msgs are now here: https://github.com/loco-3d/linear-feedback-controller-msgs

0.1.0 - 2023-03-17

Implementation of linear-feedback-controller in ROS1 for Talos PAL-Robotics robot.

Git changelogs

Launch files

  • launch/talos_linear_feedback_controller.launch
      • spawn [default: true]
      • simulation [default: false]
      • ns [default: linear_feedback_controller]
      • debug_log [default: false]
      • default_params [default: false]
  • launch/talos_params.launch
      • simulation [default: false]
      • ns [default: linear_feedback_controller]
      • arm_left_control_type [default: no_control]
      • arm_right_control_type [default: no_control]
      • legs_control_type [default: inertia_shaping_effort_analytic_dob_control]
      • torso_control_type [default: inertia_shaping_effort_analytic_dob_control]
      • head_control_type [default: no_control]
      • head_local_joint_control_pkg [default: pal_local_joint_control]
      • wrists_control_type [default: no_control]
      • wrists_local_joint_control_pkg [default: pal_local_joint_control]
      • arm_left_local_joint_control_pkg [default: inertia_shaping_effort_control]
      • arm_left_local_joint_control_pkg [default: pal_local_joint_control]
      • arm_right_local_joint_control_pkg [default: inertia_shaping_effort_control]
      • arm_right_local_joint_control_pkg [default: pal_local_joint_control]
      • legs_local_joint_control_pkg [default: inertia_shaping_effort_control]
      • legs_local_joint_control_pkg [default: pal_local_joint_control]
      • torso_local_joint_control_pkg [default: inertia_shaping_effort_control]
      • torso_local_joint_control_pkg [default: pal_local_joint_control]

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged linear_feedback_controller at Robotics Stack Exchange

No version for distro crystal showing lyrical. Known supported distros are highlighted in the buttons above.
Package symbol

linear_feedback_controller package from linear_feedback_controller repo

linear_feedback_controller

ROS Distro
lyrical

Package Summary

Version 3.2.0
License BSD-2-Clause
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/loco-3d/linear-feedback-controller.git
VCS Type git
VCS Version main
Last Updated 2026-05-15
Dev Status MAINTAINED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

roscontrol controller package conputing a linear feedback. The user needs to provide a model of the robot and a list of controlled joint and the controller computes a linear feedback on the user defined state.

Additional Links

Maintainers

  • Guilhem Saurel

Authors

  • Maximilien Naveau

pre-commit.ci status

linear-feedback-controller

A ros2_control package implementing linear feedback control strategies for robotic systems. It supports both fixed-base and free-flying robot configurations and is designed to integrate with external model predictive controllers.

The public message interface is defined in linear_feedback_controller_msgs.

Both packages are released under the BSD-2 license. Current versions are tracked in their respective package.xml files and must have an associated git tag of the form vX.Y.Z.

Full documentation is available on DeepWiki.

Controllers

The package provides three ros2_control controller plugins:

Controller Base class Role
LinearFeedbackControllerRos ChainableControllerInterface Main control loop: PD → linear feedback transition with external MPC
JointStateEstimator ControllerInterface Joint state filtering and velocity estimation
PassthroughController ChainableControllerInterface Interface renaming / forwarding for hardware–simulation parity

LinearFeedbackControllerRos

The main controller implements a two-phase control strategy:

  1. PD phase — Proportional-derivative control for initial stabilization using configurable per-joint gains (p_gains, d_gains).
  2. LF phase — Linear feedback control driven by an external controller (e.g. a whole-body MPC based on Crocoddyl).

The transition between phases is time-based and configurable via pd_to_lf_transition_duration.

The controller publishes sensor data on a ROS 2 topic:

  • Base pose and velocity (free-flying robots; identity for fixed-base robots)
  • Joint positions, velocities, and efforts

It receives control commands containing:

  • A feedback gain matrix
  • A feedforward torque term
  • The linearization state

JointStateEstimator

Reads hardware state interfaces, applies exponential smoothing to joint velocities, and writes the filtered values to command interfaces. This makes raw sensor data suitable for downstream chainable controllers.

PassthroughController

Forwards and renames reference interfaces to command interfaces. Useful when simulation and hardware use different interface names but share the same parameter file.

Dependencies

Package Role
ros2_control Controller framework and hardware abstraction
pinocchio Rigid body dynamics and URDF model loading
Eigen3 Linear algebra
linear_feedback_controller_msgs ROS topic message definitions and Eigen/NumPy conversions

Build

mkdir -p workspace/src
git -C workspace/src clone https://github.com/loco-3d/linear-feedback-controller.git
colcon build

With CMake directly

git clone https://github.com/loco-3d/linear-feedback-controller.git
cd linear-feedback-controller
mkdir _build && cd _build
cmake .. -DCMAKE_INSTALL_PREFIX=/path/to/your/install/folder
make install

With Nix

git clone https://github.com/loco-3d/linear-feedback-controller.git
cd linear-feedback-controller

# Check (build + tests)
nix flake check -L

# Build only
nix build -L

# Enter development shell
nix develop

nix-direnv is also supported for automatic shell activation.

Configuration

An example YAML configuration for the Tiago Pro robot is available at config/tiago_pro_lfc_params.yaml.

Real-world usage can be found in the agimus-demos repository, in particular in the agimus_demos_common package.

File truncated at 100 lines see the full file

CHANGELOG

Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

Releases are available on the github repository.

Unreleased

  • PDController: use pinocchio::difference in pd controller to handle SO2 joint

3.2.0 - 2026-04-09

  • implement continuous joint support
  • add JointModelRevoluteUnalignedb for tiago pro

3.1.0 - 2026-03-11

  • add support for rolling

3.0.1 - 2025-11-04

  • add jrl_cmakemodules to package.xml

3.0.0 - 2025-10-23

added

  • A passthrough_controller to simulate controllers on partial interface sets. Example in a certain robot there is one controller per joint on the robot but not in simulation. This passthrough controller helps the user to create a seemless interface for both the real robot and the simulation.

changed

  • Breaking API! The in and out interfaces can now be twicked interface by interface.

2.0.0 - 2025-04-14

Changed

  • Breaking change: migration ROS2
  • Splitting the ROS vs none ROS part of the code.

Added

  • Added unit-test for the math.

1.0.2 - 2023-04-03

Added

  • pal_statistics introspection.
  • computation of the ZMP in the controller for debugging
  • computation of the position of the pendulum base fro debugging.
  • computation of the CoM acceleration from the measured forces.

1.0.1 - 2023-03-21

Fixed

  • Fix the averaging filter implementation.

Changed

  • Update the usage of the Eigen API to save some code lines.

1.0.0 - 2023-03-17

Changed

Remove the msgs package and mv the lfc at the root of the git repository. msgs are now here: https://github.com/loco-3d/linear-feedback-controller-msgs

0.1.0 - 2023-03-17

Implementation of linear-feedback-controller in ROS1 for Talos PAL-Robotics robot.

Git changelogs

Launch files

  • launch/talos_linear_feedback_controller.launch
      • spawn [default: true]
      • simulation [default: false]
      • ns [default: linear_feedback_controller]
      • debug_log [default: false]
      • default_params [default: false]
  • launch/talos_params.launch
      • simulation [default: false]
      • ns [default: linear_feedback_controller]
      • arm_left_control_type [default: no_control]
      • arm_right_control_type [default: no_control]
      • legs_control_type [default: inertia_shaping_effort_analytic_dob_control]
      • torso_control_type [default: inertia_shaping_effort_analytic_dob_control]
      • head_control_type [default: no_control]
      • head_local_joint_control_pkg [default: pal_local_joint_control]
      • wrists_control_type [default: no_control]
      • wrists_local_joint_control_pkg [default: pal_local_joint_control]
      • arm_left_local_joint_control_pkg [default: inertia_shaping_effort_control]
      • arm_left_local_joint_control_pkg [default: pal_local_joint_control]
      • arm_right_local_joint_control_pkg [default: inertia_shaping_effort_control]
      • arm_right_local_joint_control_pkg [default: pal_local_joint_control]
      • legs_local_joint_control_pkg [default: inertia_shaping_effort_control]
      • legs_local_joint_control_pkg [default: pal_local_joint_control]
      • torso_local_joint_control_pkg [default: inertia_shaping_effort_control]
      • torso_local_joint_control_pkg [default: pal_local_joint_control]

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged linear_feedback_controller at Robotics Stack Exchange

No version for distro eloquent showing lyrical. Known supported distros are highlighted in the buttons above.
Package symbol

linear_feedback_controller package from linear_feedback_controller repo

linear_feedback_controller

ROS Distro
lyrical

Package Summary

Version 3.2.0
License BSD-2-Clause
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/loco-3d/linear-feedback-controller.git
VCS Type git
VCS Version main
Last Updated 2026-05-15
Dev Status MAINTAINED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

roscontrol controller package conputing a linear feedback. The user needs to provide a model of the robot and a list of controlled joint and the controller computes a linear feedback on the user defined state.

Additional Links

Maintainers

  • Guilhem Saurel

Authors

  • Maximilien Naveau

pre-commit.ci status

linear-feedback-controller

A ros2_control package implementing linear feedback control strategies for robotic systems. It supports both fixed-base and free-flying robot configurations and is designed to integrate with external model predictive controllers.

The public message interface is defined in linear_feedback_controller_msgs.

Both packages are released under the BSD-2 license. Current versions are tracked in their respective package.xml files and must have an associated git tag of the form vX.Y.Z.

Full documentation is available on DeepWiki.

Controllers

The package provides three ros2_control controller plugins:

Controller Base class Role
LinearFeedbackControllerRos ChainableControllerInterface Main control loop: PD → linear feedback transition with external MPC
JointStateEstimator ControllerInterface Joint state filtering and velocity estimation
PassthroughController ChainableControllerInterface Interface renaming / forwarding for hardware–simulation parity

LinearFeedbackControllerRos

The main controller implements a two-phase control strategy:

  1. PD phase — Proportional-derivative control for initial stabilization using configurable per-joint gains (p_gains, d_gains).
  2. LF phase — Linear feedback control driven by an external controller (e.g. a whole-body MPC based on Crocoddyl).

The transition between phases is time-based and configurable via pd_to_lf_transition_duration.

The controller publishes sensor data on a ROS 2 topic:

  • Base pose and velocity (free-flying robots; identity for fixed-base robots)
  • Joint positions, velocities, and efforts

It receives control commands containing:

  • A feedback gain matrix
  • A feedforward torque term
  • The linearization state

JointStateEstimator

Reads hardware state interfaces, applies exponential smoothing to joint velocities, and writes the filtered values to command interfaces. This makes raw sensor data suitable for downstream chainable controllers.

PassthroughController

Forwards and renames reference interfaces to command interfaces. Useful when simulation and hardware use different interface names but share the same parameter file.

Dependencies

Package Role
ros2_control Controller framework and hardware abstraction
pinocchio Rigid body dynamics and URDF model loading
Eigen3 Linear algebra
linear_feedback_controller_msgs ROS topic message definitions and Eigen/NumPy conversions

Build

mkdir -p workspace/src
git -C workspace/src clone https://github.com/loco-3d/linear-feedback-controller.git
colcon build

With CMake directly

git clone https://github.com/loco-3d/linear-feedback-controller.git
cd linear-feedback-controller
mkdir _build && cd _build
cmake .. -DCMAKE_INSTALL_PREFIX=/path/to/your/install/folder
make install

With Nix

git clone https://github.com/loco-3d/linear-feedback-controller.git
cd linear-feedback-controller

# Check (build + tests)
nix flake check -L

# Build only
nix build -L

# Enter development shell
nix develop

nix-direnv is also supported for automatic shell activation.

Configuration

An example YAML configuration for the Tiago Pro robot is available at config/tiago_pro_lfc_params.yaml.

Real-world usage can be found in the agimus-demos repository, in particular in the agimus_demos_common package.

File truncated at 100 lines see the full file

CHANGELOG

Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

Releases are available on the github repository.

Unreleased

  • PDController: use pinocchio::difference in pd controller to handle SO2 joint

3.2.0 - 2026-04-09

  • implement continuous joint support
  • add JointModelRevoluteUnalignedb for tiago pro

3.1.0 - 2026-03-11

  • add support for rolling

3.0.1 - 2025-11-04

  • add jrl_cmakemodules to package.xml

3.0.0 - 2025-10-23

added

  • A passthrough_controller to simulate controllers on partial interface sets. Example in a certain robot there is one controller per joint on the robot but not in simulation. This passthrough controller helps the user to create a seemless interface for both the real robot and the simulation.

changed

  • Breaking API! The in and out interfaces can now be twicked interface by interface.

2.0.0 - 2025-04-14

Changed

  • Breaking change: migration ROS2
  • Splitting the ROS vs none ROS part of the code.

Added

  • Added unit-test for the math.

1.0.2 - 2023-04-03

Added

  • pal_statistics introspection.
  • computation of the ZMP in the controller for debugging
  • computation of the position of the pendulum base fro debugging.
  • computation of the CoM acceleration from the measured forces.

1.0.1 - 2023-03-21

Fixed

  • Fix the averaging filter implementation.

Changed

  • Update the usage of the Eigen API to save some code lines.

1.0.0 - 2023-03-17

Changed

Remove the msgs package and mv the lfc at the root of the git repository. msgs are now here: https://github.com/loco-3d/linear-feedback-controller-msgs

0.1.0 - 2023-03-17

Implementation of linear-feedback-controller in ROS1 for Talos PAL-Robotics robot.

Git changelogs

Launch files

  • launch/talos_linear_feedback_controller.launch
      • spawn [default: true]
      • simulation [default: false]
      • ns [default: linear_feedback_controller]
      • debug_log [default: false]
      • default_params [default: false]
  • launch/talos_params.launch
      • simulation [default: false]
      • ns [default: linear_feedback_controller]
      • arm_left_control_type [default: no_control]
      • arm_right_control_type [default: no_control]
      • legs_control_type [default: inertia_shaping_effort_analytic_dob_control]
      • torso_control_type [default: inertia_shaping_effort_analytic_dob_control]
      • head_control_type [default: no_control]
      • head_local_joint_control_pkg [default: pal_local_joint_control]
      • wrists_control_type [default: no_control]
      • wrists_local_joint_control_pkg [default: pal_local_joint_control]
      • arm_left_local_joint_control_pkg [default: inertia_shaping_effort_control]
      • arm_left_local_joint_control_pkg [default: pal_local_joint_control]
      • arm_right_local_joint_control_pkg [default: inertia_shaping_effort_control]
      • arm_right_local_joint_control_pkg [default: pal_local_joint_control]
      • legs_local_joint_control_pkg [default: inertia_shaping_effort_control]
      • legs_local_joint_control_pkg [default: pal_local_joint_control]
      • torso_local_joint_control_pkg [default: inertia_shaping_effort_control]
      • torso_local_joint_control_pkg [default: pal_local_joint_control]

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged linear_feedback_controller at Robotics Stack Exchange

No version for distro dashing showing lyrical. Known supported distros are highlighted in the buttons above.
Package symbol

linear_feedback_controller package from linear_feedback_controller repo

linear_feedback_controller

ROS Distro
lyrical

Package Summary

Version 3.2.0
License BSD-2-Clause
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/loco-3d/linear-feedback-controller.git
VCS Type git
VCS Version main
Last Updated 2026-05-15
Dev Status MAINTAINED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

roscontrol controller package conputing a linear feedback. The user needs to provide a model of the robot and a list of controlled joint and the controller computes a linear feedback on the user defined state.

Additional Links

Maintainers

  • Guilhem Saurel

Authors

  • Maximilien Naveau

pre-commit.ci status

linear-feedback-controller

A ros2_control package implementing linear feedback control strategies for robotic systems. It supports both fixed-base and free-flying robot configurations and is designed to integrate with external model predictive controllers.

The public message interface is defined in linear_feedback_controller_msgs.

Both packages are released under the BSD-2 license. Current versions are tracked in their respective package.xml files and must have an associated git tag of the form vX.Y.Z.

Full documentation is available on DeepWiki.

Controllers

The package provides three ros2_control controller plugins:

Controller Base class Role
LinearFeedbackControllerRos ChainableControllerInterface Main control loop: PD → linear feedback transition with external MPC
JointStateEstimator ControllerInterface Joint state filtering and velocity estimation
PassthroughController ChainableControllerInterface Interface renaming / forwarding for hardware–simulation parity

LinearFeedbackControllerRos

The main controller implements a two-phase control strategy:

  1. PD phase — Proportional-derivative control for initial stabilization using configurable per-joint gains (p_gains, d_gains).
  2. LF phase — Linear feedback control driven by an external controller (e.g. a whole-body MPC based on Crocoddyl).

The transition between phases is time-based and configurable via pd_to_lf_transition_duration.

The controller publishes sensor data on a ROS 2 topic:

  • Base pose and velocity (free-flying robots; identity for fixed-base robots)
  • Joint positions, velocities, and efforts

It receives control commands containing:

  • A feedback gain matrix
  • A feedforward torque term
  • The linearization state

JointStateEstimator

Reads hardware state interfaces, applies exponential smoothing to joint velocities, and writes the filtered values to command interfaces. This makes raw sensor data suitable for downstream chainable controllers.

PassthroughController

Forwards and renames reference interfaces to command interfaces. Useful when simulation and hardware use different interface names but share the same parameter file.

Dependencies

Package Role
ros2_control Controller framework and hardware abstraction
pinocchio Rigid body dynamics and URDF model loading
Eigen3 Linear algebra
linear_feedback_controller_msgs ROS topic message definitions and Eigen/NumPy conversions

Build

mkdir -p workspace/src
git -C workspace/src clone https://github.com/loco-3d/linear-feedback-controller.git
colcon build

With CMake directly

git clone https://github.com/loco-3d/linear-feedback-controller.git
cd linear-feedback-controller
mkdir _build && cd _build
cmake .. -DCMAKE_INSTALL_PREFIX=/path/to/your/install/folder
make install

With Nix

git clone https://github.com/loco-3d/linear-feedback-controller.git
cd linear-feedback-controller

# Check (build + tests)
nix flake check -L

# Build only
nix build -L

# Enter development shell
nix develop

nix-direnv is also supported for automatic shell activation.

Configuration

An example YAML configuration for the Tiago Pro robot is available at config/tiago_pro_lfc_params.yaml.

Real-world usage can be found in the agimus-demos repository, in particular in the agimus_demos_common package.

File truncated at 100 lines see the full file

CHANGELOG

Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

Releases are available on the github repository.

Unreleased

  • PDController: use pinocchio::difference in pd controller to handle SO2 joint

3.2.0 - 2026-04-09

  • implement continuous joint support
  • add JointModelRevoluteUnalignedb for tiago pro

3.1.0 - 2026-03-11

  • add support for rolling

3.0.1 - 2025-11-04

  • add jrl_cmakemodules to package.xml

3.0.0 - 2025-10-23

added

  • A passthrough_controller to simulate controllers on partial interface sets. Example in a certain robot there is one controller per joint on the robot but not in simulation. This passthrough controller helps the user to create a seemless interface for both the real robot and the simulation.

changed

  • Breaking API! The in and out interfaces can now be twicked interface by interface.

2.0.0 - 2025-04-14

Changed

  • Breaking change: migration ROS2
  • Splitting the ROS vs none ROS part of the code.

Added

  • Added unit-test for the math.

1.0.2 - 2023-04-03

Added

  • pal_statistics introspection.
  • computation of the ZMP in the controller for debugging
  • computation of the position of the pendulum base fro debugging.
  • computation of the CoM acceleration from the measured forces.

1.0.1 - 2023-03-21

Fixed

  • Fix the averaging filter implementation.

Changed

  • Update the usage of the Eigen API to save some code lines.

1.0.0 - 2023-03-17

Changed

Remove the msgs package and mv the lfc at the root of the git repository. msgs are now here: https://github.com/loco-3d/linear-feedback-controller-msgs

0.1.0 - 2023-03-17

Implementation of linear-feedback-controller in ROS1 for Talos PAL-Robotics robot.

Git changelogs

Launch files

  • launch/talos_linear_feedback_controller.launch
      • spawn [default: true]
      • simulation [default: false]
      • ns [default: linear_feedback_controller]
      • debug_log [default: false]
      • default_params [default: false]
  • launch/talos_params.launch
      • simulation [default: false]
      • ns [default: linear_feedback_controller]
      • arm_left_control_type [default: no_control]
      • arm_right_control_type [default: no_control]
      • legs_control_type [default: inertia_shaping_effort_analytic_dob_control]
      • torso_control_type [default: inertia_shaping_effort_analytic_dob_control]
      • head_control_type [default: no_control]
      • head_local_joint_control_pkg [default: pal_local_joint_control]
      • wrists_control_type [default: no_control]
      • wrists_local_joint_control_pkg [default: pal_local_joint_control]
      • arm_left_local_joint_control_pkg [default: inertia_shaping_effort_control]
      • arm_left_local_joint_control_pkg [default: pal_local_joint_control]
      • arm_right_local_joint_control_pkg [default: inertia_shaping_effort_control]
      • arm_right_local_joint_control_pkg [default: pal_local_joint_control]
      • legs_local_joint_control_pkg [default: inertia_shaping_effort_control]
      • legs_local_joint_control_pkg [default: pal_local_joint_control]
      • torso_local_joint_control_pkg [default: inertia_shaping_effort_control]
      • torso_local_joint_control_pkg [default: pal_local_joint_control]

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged linear_feedback_controller at Robotics Stack Exchange

No version for distro galactic showing lyrical. Known supported distros are highlighted in the buttons above.
Package symbol

linear_feedback_controller package from linear_feedback_controller repo

linear_feedback_controller

ROS Distro
lyrical

Package Summary

Version 3.2.0
License BSD-2-Clause
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/loco-3d/linear-feedback-controller.git
VCS Type git
VCS Version main
Last Updated 2026-05-15
Dev Status MAINTAINED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

roscontrol controller package conputing a linear feedback. The user needs to provide a model of the robot and a list of controlled joint and the controller computes a linear feedback on the user defined state.

Additional Links

Maintainers

  • Guilhem Saurel

Authors

  • Maximilien Naveau

pre-commit.ci status

linear-feedback-controller

A ros2_control package implementing linear feedback control strategies for robotic systems. It supports both fixed-base and free-flying robot configurations and is designed to integrate with external model predictive controllers.

The public message interface is defined in linear_feedback_controller_msgs.

Both packages are released under the BSD-2 license. Current versions are tracked in their respective package.xml files and must have an associated git tag of the form vX.Y.Z.

Full documentation is available on DeepWiki.

Controllers

The package provides three ros2_control controller plugins:

Controller Base class Role
LinearFeedbackControllerRos ChainableControllerInterface Main control loop: PD → linear feedback transition with external MPC
JointStateEstimator ControllerInterface Joint state filtering and velocity estimation
PassthroughController ChainableControllerInterface Interface renaming / forwarding for hardware–simulation parity

LinearFeedbackControllerRos

The main controller implements a two-phase control strategy:

  1. PD phase — Proportional-derivative control for initial stabilization using configurable per-joint gains (p_gains, d_gains).
  2. LF phase — Linear feedback control driven by an external controller (e.g. a whole-body MPC based on Crocoddyl).

The transition between phases is time-based and configurable via pd_to_lf_transition_duration.

The controller publishes sensor data on a ROS 2 topic:

  • Base pose and velocity (free-flying robots; identity for fixed-base robots)
  • Joint positions, velocities, and efforts

It receives control commands containing:

  • A feedback gain matrix
  • A feedforward torque term
  • The linearization state

JointStateEstimator

Reads hardware state interfaces, applies exponential smoothing to joint velocities, and writes the filtered values to command interfaces. This makes raw sensor data suitable for downstream chainable controllers.

PassthroughController

Forwards and renames reference interfaces to command interfaces. Useful when simulation and hardware use different interface names but share the same parameter file.

Dependencies

Package Role
ros2_control Controller framework and hardware abstraction
pinocchio Rigid body dynamics and URDF model loading
Eigen3 Linear algebra
linear_feedback_controller_msgs ROS topic message definitions and Eigen/NumPy conversions

Build

mkdir -p workspace/src
git -C workspace/src clone https://github.com/loco-3d/linear-feedback-controller.git
colcon build

With CMake directly

git clone https://github.com/loco-3d/linear-feedback-controller.git
cd linear-feedback-controller
mkdir _build && cd _build
cmake .. -DCMAKE_INSTALL_PREFIX=/path/to/your/install/folder
make install

With Nix

git clone https://github.com/loco-3d/linear-feedback-controller.git
cd linear-feedback-controller

# Check (build + tests)
nix flake check -L

# Build only
nix build -L

# Enter development shell
nix develop

nix-direnv is also supported for automatic shell activation.

Configuration

An example YAML configuration for the Tiago Pro robot is available at config/tiago_pro_lfc_params.yaml.

Real-world usage can be found in the agimus-demos repository, in particular in the agimus_demos_common package.

File truncated at 100 lines see the full file

CHANGELOG

Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

Releases are available on the github repository.

Unreleased

  • PDController: use pinocchio::difference in pd controller to handle SO2 joint

3.2.0 - 2026-04-09

  • implement continuous joint support
  • add JointModelRevoluteUnalignedb for tiago pro

3.1.0 - 2026-03-11

  • add support for rolling

3.0.1 - 2025-11-04

  • add jrl_cmakemodules to package.xml

3.0.0 - 2025-10-23

added

  • A passthrough_controller to simulate controllers on partial interface sets. Example in a certain robot there is one controller per joint on the robot but not in simulation. This passthrough controller helps the user to create a seemless interface for both the real robot and the simulation.

changed

  • Breaking API! The in and out interfaces can now be twicked interface by interface.

2.0.0 - 2025-04-14

Changed

  • Breaking change: migration ROS2
  • Splitting the ROS vs none ROS part of the code.

Added

  • Added unit-test for the math.

1.0.2 - 2023-04-03

Added

  • pal_statistics introspection.
  • computation of the ZMP in the controller for debugging
  • computation of the position of the pendulum base fro debugging.
  • computation of the CoM acceleration from the measured forces.

1.0.1 - 2023-03-21

Fixed

  • Fix the averaging filter implementation.

Changed

  • Update the usage of the Eigen API to save some code lines.

1.0.0 - 2023-03-17

Changed

Remove the msgs package and mv the lfc at the root of the git repository. msgs are now here: https://github.com/loco-3d/linear-feedback-controller-msgs

0.1.0 - 2023-03-17

Implementation of linear-feedback-controller in ROS1 for Talos PAL-Robotics robot.

Git changelogs

Launch files

  • launch/talos_linear_feedback_controller.launch
      • spawn [default: true]
      • simulation [default: false]
      • ns [default: linear_feedback_controller]
      • debug_log [default: false]
      • default_params [default: false]
  • launch/talos_params.launch
      • simulation [default: false]
      • ns [default: linear_feedback_controller]
      • arm_left_control_type [default: no_control]
      • arm_right_control_type [default: no_control]
      • legs_control_type [default: inertia_shaping_effort_analytic_dob_control]
      • torso_control_type [default: inertia_shaping_effort_analytic_dob_control]
      • head_control_type [default: no_control]
      • head_local_joint_control_pkg [default: pal_local_joint_control]
      • wrists_control_type [default: no_control]
      • wrists_local_joint_control_pkg [default: pal_local_joint_control]
      • arm_left_local_joint_control_pkg [default: inertia_shaping_effort_control]
      • arm_left_local_joint_control_pkg [default: pal_local_joint_control]
      • arm_right_local_joint_control_pkg [default: inertia_shaping_effort_control]
      • arm_right_local_joint_control_pkg [default: pal_local_joint_control]
      • legs_local_joint_control_pkg [default: inertia_shaping_effort_control]
      • legs_local_joint_control_pkg [default: pal_local_joint_control]
      • torso_local_joint_control_pkg [default: inertia_shaping_effort_control]
      • torso_local_joint_control_pkg [default: pal_local_joint_control]

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged linear_feedback_controller at Robotics Stack Exchange

No version for distro foxy showing lyrical. Known supported distros are highlighted in the buttons above.
Package symbol

linear_feedback_controller package from linear_feedback_controller repo

linear_feedback_controller

ROS Distro
lyrical

Package Summary

Version 3.2.0
License BSD-2-Clause
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/loco-3d/linear-feedback-controller.git
VCS Type git
VCS Version main
Last Updated 2026-05-15
Dev Status MAINTAINED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

roscontrol controller package conputing a linear feedback. The user needs to provide a model of the robot and a list of controlled joint and the controller computes a linear feedback on the user defined state.

Additional Links

Maintainers

  • Guilhem Saurel

Authors

  • Maximilien Naveau

pre-commit.ci status

linear-feedback-controller

A ros2_control package implementing linear feedback control strategies for robotic systems. It supports both fixed-base and free-flying robot configurations and is designed to integrate with external model predictive controllers.

The public message interface is defined in linear_feedback_controller_msgs.

Both packages are released under the BSD-2 license. Current versions are tracked in their respective package.xml files and must have an associated git tag of the form vX.Y.Z.

Full documentation is available on DeepWiki.

Controllers

The package provides three ros2_control controller plugins:

Controller Base class Role
LinearFeedbackControllerRos ChainableControllerInterface Main control loop: PD → linear feedback transition with external MPC
JointStateEstimator ControllerInterface Joint state filtering and velocity estimation
PassthroughController ChainableControllerInterface Interface renaming / forwarding for hardware–simulation parity

LinearFeedbackControllerRos

The main controller implements a two-phase control strategy:

  1. PD phase — Proportional-derivative control for initial stabilization using configurable per-joint gains (p_gains, d_gains).
  2. LF phase — Linear feedback control driven by an external controller (e.g. a whole-body MPC based on Crocoddyl).

The transition between phases is time-based and configurable via pd_to_lf_transition_duration.

The controller publishes sensor data on a ROS 2 topic:

  • Base pose and velocity (free-flying robots; identity for fixed-base robots)
  • Joint positions, velocities, and efforts

It receives control commands containing:

  • A feedback gain matrix
  • A feedforward torque term
  • The linearization state

JointStateEstimator

Reads hardware state interfaces, applies exponential smoothing to joint velocities, and writes the filtered values to command interfaces. This makes raw sensor data suitable for downstream chainable controllers.

PassthroughController

Forwards and renames reference interfaces to command interfaces. Useful when simulation and hardware use different interface names but share the same parameter file.

Dependencies

Package Role
ros2_control Controller framework and hardware abstraction
pinocchio Rigid body dynamics and URDF model loading
Eigen3 Linear algebra
linear_feedback_controller_msgs ROS topic message definitions and Eigen/NumPy conversions

Build

mkdir -p workspace/src
git -C workspace/src clone https://github.com/loco-3d/linear-feedback-controller.git
colcon build

With CMake directly

git clone https://github.com/loco-3d/linear-feedback-controller.git
cd linear-feedback-controller
mkdir _build && cd _build
cmake .. -DCMAKE_INSTALL_PREFIX=/path/to/your/install/folder
make install

With Nix

git clone https://github.com/loco-3d/linear-feedback-controller.git
cd linear-feedback-controller

# Check (build + tests)
nix flake check -L

# Build only
nix build -L

# Enter development shell
nix develop

nix-direnv is also supported for automatic shell activation.

Configuration

An example YAML configuration for the Tiago Pro robot is available at config/tiago_pro_lfc_params.yaml.

Real-world usage can be found in the agimus-demos repository, in particular in the agimus_demos_common package.

File truncated at 100 lines see the full file

CHANGELOG

Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

Releases are available on the github repository.

Unreleased

  • PDController: use pinocchio::difference in pd controller to handle SO2 joint

3.2.0 - 2026-04-09

  • implement continuous joint support
  • add JointModelRevoluteUnalignedb for tiago pro

3.1.0 - 2026-03-11

  • add support for rolling

3.0.1 - 2025-11-04

  • add jrl_cmakemodules to package.xml

3.0.0 - 2025-10-23

added

  • A passthrough_controller to simulate controllers on partial interface sets. Example in a certain robot there is one controller per joint on the robot but not in simulation. This passthrough controller helps the user to create a seemless interface for both the real robot and the simulation.

changed

  • Breaking API! The in and out interfaces can now be twicked interface by interface.

2.0.0 - 2025-04-14

Changed

  • Breaking change: migration ROS2
  • Splitting the ROS vs none ROS part of the code.

Added

  • Added unit-test for the math.

1.0.2 - 2023-04-03

Added

  • pal_statistics introspection.
  • computation of the ZMP in the controller for debugging
  • computation of the position of the pendulum base fro debugging.
  • computation of the CoM acceleration from the measured forces.

1.0.1 - 2023-03-21

Fixed

  • Fix the averaging filter implementation.

Changed

  • Update the usage of the Eigen API to save some code lines.

1.0.0 - 2023-03-17

Changed

Remove the msgs package and mv the lfc at the root of the git repository. msgs are now here: https://github.com/loco-3d/linear-feedback-controller-msgs

0.1.0 - 2023-03-17

Implementation of linear-feedback-controller in ROS1 for Talos PAL-Robotics robot.

Git changelogs

Launch files

  • launch/talos_linear_feedback_controller.launch
      • spawn [default: true]
      • simulation [default: false]
      • ns [default: linear_feedback_controller]
      • debug_log [default: false]
      • default_params [default: false]
  • launch/talos_params.launch
      • simulation [default: false]
      • ns [default: linear_feedback_controller]
      • arm_left_control_type [default: no_control]
      • arm_right_control_type [default: no_control]
      • legs_control_type [default: inertia_shaping_effort_analytic_dob_control]
      • torso_control_type [default: inertia_shaping_effort_analytic_dob_control]
      • head_control_type [default: no_control]
      • head_local_joint_control_pkg [default: pal_local_joint_control]
      • wrists_control_type [default: no_control]
      • wrists_local_joint_control_pkg [default: pal_local_joint_control]
      • arm_left_local_joint_control_pkg [default: inertia_shaping_effort_control]
      • arm_left_local_joint_control_pkg [default: pal_local_joint_control]
      • arm_right_local_joint_control_pkg [default: inertia_shaping_effort_control]
      • arm_right_local_joint_control_pkg [default: pal_local_joint_control]
      • legs_local_joint_control_pkg [default: inertia_shaping_effort_control]
      • legs_local_joint_control_pkg [default: pal_local_joint_control]
      • torso_local_joint_control_pkg [default: inertia_shaping_effort_control]
      • torso_local_joint_control_pkg [default: pal_local_joint_control]

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged linear_feedback_controller at Robotics Stack Exchange

No version for distro iron showing lyrical. Known supported distros are highlighted in the buttons above.
Package symbol

linear_feedback_controller package from linear_feedback_controller repo

linear_feedback_controller

ROS Distro
lyrical

Package Summary

Version 3.2.0
License BSD-2-Clause
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/loco-3d/linear-feedback-controller.git
VCS Type git
VCS Version main
Last Updated 2026-05-15
Dev Status MAINTAINED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

roscontrol controller package conputing a linear feedback. The user needs to provide a model of the robot and a list of controlled joint and the controller computes a linear feedback on the user defined state.

Additional Links

Maintainers

  • Guilhem Saurel

Authors

  • Maximilien Naveau

pre-commit.ci status

linear-feedback-controller

A ros2_control package implementing linear feedback control strategies for robotic systems. It supports both fixed-base and free-flying robot configurations and is designed to integrate with external model predictive controllers.

The public message interface is defined in linear_feedback_controller_msgs.

Both packages are released under the BSD-2 license. Current versions are tracked in their respective package.xml files and must have an associated git tag of the form vX.Y.Z.

Full documentation is available on DeepWiki.

Controllers

The package provides three ros2_control controller plugins:

Controller Base class Role
LinearFeedbackControllerRos ChainableControllerInterface Main control loop: PD → linear feedback transition with external MPC
JointStateEstimator ControllerInterface Joint state filtering and velocity estimation
PassthroughController ChainableControllerInterface Interface renaming / forwarding for hardware–simulation parity

LinearFeedbackControllerRos

The main controller implements a two-phase control strategy:

  1. PD phase — Proportional-derivative control for initial stabilization using configurable per-joint gains (p_gains, d_gains).
  2. LF phase — Linear feedback control driven by an external controller (e.g. a whole-body MPC based on Crocoddyl).

The transition between phases is time-based and configurable via pd_to_lf_transition_duration.

The controller publishes sensor data on a ROS 2 topic:

  • Base pose and velocity (free-flying robots; identity for fixed-base robots)
  • Joint positions, velocities, and efforts

It receives control commands containing:

  • A feedback gain matrix
  • A feedforward torque term
  • The linearization state

JointStateEstimator

Reads hardware state interfaces, applies exponential smoothing to joint velocities, and writes the filtered values to command interfaces. This makes raw sensor data suitable for downstream chainable controllers.

PassthroughController

Forwards and renames reference interfaces to command interfaces. Useful when simulation and hardware use different interface names but share the same parameter file.

Dependencies

Package Role
ros2_control Controller framework and hardware abstraction
pinocchio Rigid body dynamics and URDF model loading
Eigen3 Linear algebra
linear_feedback_controller_msgs ROS topic message definitions and Eigen/NumPy conversions

Build

mkdir -p workspace/src
git -C workspace/src clone https://github.com/loco-3d/linear-feedback-controller.git
colcon build

With CMake directly

git clone https://github.com/loco-3d/linear-feedback-controller.git
cd linear-feedback-controller
mkdir _build && cd _build
cmake .. -DCMAKE_INSTALL_PREFIX=/path/to/your/install/folder
make install

With Nix

git clone https://github.com/loco-3d/linear-feedback-controller.git
cd linear-feedback-controller

# Check (build + tests)
nix flake check -L

# Build only
nix build -L

# Enter development shell
nix develop

nix-direnv is also supported for automatic shell activation.

Configuration

An example YAML configuration for the Tiago Pro robot is available at config/tiago_pro_lfc_params.yaml.

Real-world usage can be found in the agimus-demos repository, in particular in the agimus_demos_common package.

File truncated at 100 lines see the full file

CHANGELOG

Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

Releases are available on the github repository.

Unreleased

  • PDController: use pinocchio::difference in pd controller to handle SO2 joint

3.2.0 - 2026-04-09

  • implement continuous joint support
  • add JointModelRevoluteUnalignedb for tiago pro

3.1.0 - 2026-03-11

  • add support for rolling

3.0.1 - 2025-11-04

  • add jrl_cmakemodules to package.xml

3.0.0 - 2025-10-23

added

  • A passthrough_controller to simulate controllers on partial interface sets. Example in a certain robot there is one controller per joint on the robot but not in simulation. This passthrough controller helps the user to create a seemless interface for both the real robot and the simulation.

changed

  • Breaking API! The in and out interfaces can now be twicked interface by interface.

2.0.0 - 2025-04-14

Changed

  • Breaking change: migration ROS2
  • Splitting the ROS vs none ROS part of the code.

Added

  • Added unit-test for the math.

1.0.2 - 2023-04-03

Added

  • pal_statistics introspection.
  • computation of the ZMP in the controller for debugging
  • computation of the position of the pendulum base fro debugging.
  • computation of the CoM acceleration from the measured forces.

1.0.1 - 2023-03-21

Fixed

  • Fix the averaging filter implementation.

Changed

  • Update the usage of the Eigen API to save some code lines.

1.0.0 - 2023-03-17

Changed

Remove the msgs package and mv the lfc at the root of the git repository. msgs are now here: https://github.com/loco-3d/linear-feedback-controller-msgs

0.1.0 - 2023-03-17

Implementation of linear-feedback-controller in ROS1 for Talos PAL-Robotics robot.

Git changelogs

Launch files

  • launch/talos_linear_feedback_controller.launch
      • spawn [default: true]
      • simulation [default: false]
      • ns [default: linear_feedback_controller]
      • debug_log [default: false]
      • default_params [default: false]
  • launch/talos_params.launch
      • simulation [default: false]
      • ns [default: linear_feedback_controller]
      • arm_left_control_type [default: no_control]
      • arm_right_control_type [default: no_control]
      • legs_control_type [default: inertia_shaping_effort_analytic_dob_control]
      • torso_control_type [default: inertia_shaping_effort_analytic_dob_control]
      • head_control_type [default: no_control]
      • head_local_joint_control_pkg [default: pal_local_joint_control]
      • wrists_control_type [default: no_control]
      • wrists_local_joint_control_pkg [default: pal_local_joint_control]
      • arm_left_local_joint_control_pkg [default: inertia_shaping_effort_control]
      • arm_left_local_joint_control_pkg [default: pal_local_joint_control]
      • arm_right_local_joint_control_pkg [default: inertia_shaping_effort_control]
      • arm_right_local_joint_control_pkg [default: pal_local_joint_control]
      • legs_local_joint_control_pkg [default: inertia_shaping_effort_control]
      • legs_local_joint_control_pkg [default: pal_local_joint_control]
      • torso_local_joint_control_pkg [default: inertia_shaping_effort_control]
      • torso_local_joint_control_pkg [default: pal_local_joint_control]

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged linear_feedback_controller at Robotics Stack Exchange

No version for distro lunar showing lyrical. Known supported distros are highlighted in the buttons above.
Package symbol

linear_feedback_controller package from linear_feedback_controller repo

linear_feedback_controller

ROS Distro
lyrical

Package Summary

Version 3.2.0
License BSD-2-Clause
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/loco-3d/linear-feedback-controller.git
VCS Type git
VCS Version main
Last Updated 2026-05-15
Dev Status MAINTAINED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

roscontrol controller package conputing a linear feedback. The user needs to provide a model of the robot and a list of controlled joint and the controller computes a linear feedback on the user defined state.

Additional Links

Maintainers

  • Guilhem Saurel

Authors

  • Maximilien Naveau

pre-commit.ci status

linear-feedback-controller

A ros2_control package implementing linear feedback control strategies for robotic systems. It supports both fixed-base and free-flying robot configurations and is designed to integrate with external model predictive controllers.

The public message interface is defined in linear_feedback_controller_msgs.

Both packages are released under the BSD-2 license. Current versions are tracked in their respective package.xml files and must have an associated git tag of the form vX.Y.Z.

Full documentation is available on DeepWiki.

Controllers

The package provides three ros2_control controller plugins:

Controller Base class Role
LinearFeedbackControllerRos ChainableControllerInterface Main control loop: PD → linear feedback transition with external MPC
JointStateEstimator ControllerInterface Joint state filtering and velocity estimation
PassthroughController ChainableControllerInterface Interface renaming / forwarding for hardware–simulation parity

LinearFeedbackControllerRos

The main controller implements a two-phase control strategy:

  1. PD phase — Proportional-derivative control for initial stabilization using configurable per-joint gains (p_gains, d_gains).
  2. LF phase — Linear feedback control driven by an external controller (e.g. a whole-body MPC based on Crocoddyl).

The transition between phases is time-based and configurable via pd_to_lf_transition_duration.

The controller publishes sensor data on a ROS 2 topic:

  • Base pose and velocity (free-flying robots; identity for fixed-base robots)
  • Joint positions, velocities, and efforts

It receives control commands containing:

  • A feedback gain matrix
  • A feedforward torque term
  • The linearization state

JointStateEstimator

Reads hardware state interfaces, applies exponential smoothing to joint velocities, and writes the filtered values to command interfaces. This makes raw sensor data suitable for downstream chainable controllers.

PassthroughController

Forwards and renames reference interfaces to command interfaces. Useful when simulation and hardware use different interface names but share the same parameter file.

Dependencies

Package Role
ros2_control Controller framework and hardware abstraction
pinocchio Rigid body dynamics and URDF model loading
Eigen3 Linear algebra
linear_feedback_controller_msgs ROS topic message definitions and Eigen/NumPy conversions

Build

mkdir -p workspace/src
git -C workspace/src clone https://github.com/loco-3d/linear-feedback-controller.git
colcon build

With CMake directly

git clone https://github.com/loco-3d/linear-feedback-controller.git
cd linear-feedback-controller
mkdir _build && cd _build
cmake .. -DCMAKE_INSTALL_PREFIX=/path/to/your/install/folder
make install

With Nix

git clone https://github.com/loco-3d/linear-feedback-controller.git
cd linear-feedback-controller

# Check (build + tests)
nix flake check -L

# Build only
nix build -L

# Enter development shell
nix develop

nix-direnv is also supported for automatic shell activation.

Configuration

An example YAML configuration for the Tiago Pro robot is available at config/tiago_pro_lfc_params.yaml.

Real-world usage can be found in the agimus-demos repository, in particular in the agimus_demos_common package.

File truncated at 100 lines see the full file

CHANGELOG

Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

Releases are available on the github repository.

Unreleased

  • PDController: use pinocchio::difference in pd controller to handle SO2 joint

3.2.0 - 2026-04-09

  • implement continuous joint support
  • add JointModelRevoluteUnalignedb for tiago pro

3.1.0 - 2026-03-11

  • add support for rolling

3.0.1 - 2025-11-04

  • add jrl_cmakemodules to package.xml

3.0.0 - 2025-10-23

added

  • A passthrough_controller to simulate controllers on partial interface sets. Example in a certain robot there is one controller per joint on the robot but not in simulation. This passthrough controller helps the user to create a seemless interface for both the real robot and the simulation.

changed

  • Breaking API! The in and out interfaces can now be twicked interface by interface.

2.0.0 - 2025-04-14

Changed

  • Breaking change: migration ROS2
  • Splitting the ROS vs none ROS part of the code.

Added

  • Added unit-test for the math.

1.0.2 - 2023-04-03

Added

  • pal_statistics introspection.
  • computation of the ZMP in the controller for debugging
  • computation of the position of the pendulum base fro debugging.
  • computation of the CoM acceleration from the measured forces.

1.0.1 - 2023-03-21

Fixed

  • Fix the averaging filter implementation.

Changed

  • Update the usage of the Eigen API to save some code lines.

1.0.0 - 2023-03-17

Changed

Remove the msgs package and mv the lfc at the root of the git repository. msgs are now here: https://github.com/loco-3d/linear-feedback-controller-msgs

0.1.0 - 2023-03-17

Implementation of linear-feedback-controller in ROS1 for Talos PAL-Robotics robot.

Git changelogs

Launch files

  • launch/talos_linear_feedback_controller.launch
      • spawn [default: true]
      • simulation [default: false]
      • ns [default: linear_feedback_controller]
      • debug_log [default: false]
      • default_params [default: false]
  • launch/talos_params.launch
      • simulation [default: false]
      • ns [default: linear_feedback_controller]
      • arm_left_control_type [default: no_control]
      • arm_right_control_type [default: no_control]
      • legs_control_type [default: inertia_shaping_effort_analytic_dob_control]
      • torso_control_type [default: inertia_shaping_effort_analytic_dob_control]
      • head_control_type [default: no_control]
      • head_local_joint_control_pkg [default: pal_local_joint_control]
      • wrists_control_type [default: no_control]
      • wrists_local_joint_control_pkg [default: pal_local_joint_control]
      • arm_left_local_joint_control_pkg [default: inertia_shaping_effort_control]
      • arm_left_local_joint_control_pkg [default: pal_local_joint_control]
      • arm_right_local_joint_control_pkg [default: inertia_shaping_effort_control]
      • arm_right_local_joint_control_pkg [default: pal_local_joint_control]
      • legs_local_joint_control_pkg [default: inertia_shaping_effort_control]
      • legs_local_joint_control_pkg [default: pal_local_joint_control]
      • torso_local_joint_control_pkg [default: inertia_shaping_effort_control]
      • torso_local_joint_control_pkg [default: pal_local_joint_control]

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged linear_feedback_controller at Robotics Stack Exchange

No version for distro jade showing lyrical. Known supported distros are highlighted in the buttons above.
Package symbol

linear_feedback_controller package from linear_feedback_controller repo

linear_feedback_controller

ROS Distro
lyrical

Package Summary

Version 3.2.0
License BSD-2-Clause
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/loco-3d/linear-feedback-controller.git
VCS Type git
VCS Version main
Last Updated 2026-05-15
Dev Status MAINTAINED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

roscontrol controller package conputing a linear feedback. The user needs to provide a model of the robot and a list of controlled joint and the controller computes a linear feedback on the user defined state.

Additional Links

Maintainers

  • Guilhem Saurel

Authors

  • Maximilien Naveau

pre-commit.ci status

linear-feedback-controller

A ros2_control package implementing linear feedback control strategies for robotic systems. It supports both fixed-base and free-flying robot configurations and is designed to integrate with external model predictive controllers.

The public message interface is defined in linear_feedback_controller_msgs.

Both packages are released under the BSD-2 license. Current versions are tracked in their respective package.xml files and must have an associated git tag of the form vX.Y.Z.

Full documentation is available on DeepWiki.

Controllers

The package provides three ros2_control controller plugins:

Controller Base class Role
LinearFeedbackControllerRos ChainableControllerInterface Main control loop: PD → linear feedback transition with external MPC
JointStateEstimator ControllerInterface Joint state filtering and velocity estimation
PassthroughController ChainableControllerInterface Interface renaming / forwarding for hardware–simulation parity

LinearFeedbackControllerRos

The main controller implements a two-phase control strategy:

  1. PD phase — Proportional-derivative control for initial stabilization using configurable per-joint gains (p_gains, d_gains).
  2. LF phase — Linear feedback control driven by an external controller (e.g. a whole-body MPC based on Crocoddyl).

The transition between phases is time-based and configurable via pd_to_lf_transition_duration.

The controller publishes sensor data on a ROS 2 topic:

  • Base pose and velocity (free-flying robots; identity for fixed-base robots)
  • Joint positions, velocities, and efforts

It receives control commands containing:

  • A feedback gain matrix
  • A feedforward torque term
  • The linearization state

JointStateEstimator

Reads hardware state interfaces, applies exponential smoothing to joint velocities, and writes the filtered values to command interfaces. This makes raw sensor data suitable for downstream chainable controllers.

PassthroughController

Forwards and renames reference interfaces to command interfaces. Useful when simulation and hardware use different interface names but share the same parameter file.

Dependencies

Package Role
ros2_control Controller framework and hardware abstraction
pinocchio Rigid body dynamics and URDF model loading
Eigen3 Linear algebra
linear_feedback_controller_msgs ROS topic message definitions and Eigen/NumPy conversions

Build

mkdir -p workspace/src
git -C workspace/src clone https://github.com/loco-3d/linear-feedback-controller.git
colcon build

With CMake directly

git clone https://github.com/loco-3d/linear-feedback-controller.git
cd linear-feedback-controller
mkdir _build && cd _build
cmake .. -DCMAKE_INSTALL_PREFIX=/path/to/your/install/folder
make install

With Nix

git clone https://github.com/loco-3d/linear-feedback-controller.git
cd linear-feedback-controller

# Check (build + tests)
nix flake check -L

# Build only
nix build -L

# Enter development shell
nix develop

nix-direnv is also supported for automatic shell activation.

Configuration

An example YAML configuration for the Tiago Pro robot is available at config/tiago_pro_lfc_params.yaml.

Real-world usage can be found in the agimus-demos repository, in particular in the agimus_demos_common package.

File truncated at 100 lines see the full file

CHANGELOG

Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

Releases are available on the github repository.

Unreleased

  • PDController: use pinocchio::difference in pd controller to handle SO2 joint

3.2.0 - 2026-04-09

  • implement continuous joint support
  • add JointModelRevoluteUnalignedb for tiago pro

3.1.0 - 2026-03-11

  • add support for rolling

3.0.1 - 2025-11-04

  • add jrl_cmakemodules to package.xml

3.0.0 - 2025-10-23

added

  • A passthrough_controller to simulate controllers on partial interface sets. Example in a certain robot there is one controller per joint on the robot but not in simulation. This passthrough controller helps the user to create a seemless interface for both the real robot and the simulation.

changed

  • Breaking API! The in and out interfaces can now be twicked interface by interface.

2.0.0 - 2025-04-14

Changed

  • Breaking change: migration ROS2
  • Splitting the ROS vs none ROS part of the code.

Added

  • Added unit-test for the math.

1.0.2 - 2023-04-03

Added

  • pal_statistics introspection.
  • computation of the ZMP in the controller for debugging
  • computation of the position of the pendulum base fro debugging.
  • computation of the CoM acceleration from the measured forces.

1.0.1 - 2023-03-21

Fixed

  • Fix the averaging filter implementation.

Changed

  • Update the usage of the Eigen API to save some code lines.

1.0.0 - 2023-03-17

Changed

Remove the msgs package and mv the lfc at the root of the git repository. msgs are now here: https://github.com/loco-3d/linear-feedback-controller-msgs

0.1.0 - 2023-03-17

Implementation of linear-feedback-controller in ROS1 for Talos PAL-Robotics robot.

Git changelogs

Launch files

  • launch/talos_linear_feedback_controller.launch
      • spawn [default: true]
      • simulation [default: false]
      • ns [default: linear_feedback_controller]
      • debug_log [default: false]
      • default_params [default: false]
  • launch/talos_params.launch
      • simulation [default: false]
      • ns [default: linear_feedback_controller]
      • arm_left_control_type [default: no_control]
      • arm_right_control_type [default: no_control]
      • legs_control_type [default: inertia_shaping_effort_analytic_dob_control]
      • torso_control_type [default: inertia_shaping_effort_analytic_dob_control]
      • head_control_type [default: no_control]
      • head_local_joint_control_pkg [default: pal_local_joint_control]
      • wrists_control_type [default: no_control]
      • wrists_local_joint_control_pkg [default: pal_local_joint_control]
      • arm_left_local_joint_control_pkg [default: inertia_shaping_effort_control]
      • arm_left_local_joint_control_pkg [default: pal_local_joint_control]
      • arm_right_local_joint_control_pkg [default: inertia_shaping_effort_control]
      • arm_right_local_joint_control_pkg [default: pal_local_joint_control]
      • legs_local_joint_control_pkg [default: inertia_shaping_effort_control]
      • legs_local_joint_control_pkg [default: pal_local_joint_control]
      • torso_local_joint_control_pkg [default: inertia_shaping_effort_control]
      • torso_local_joint_control_pkg [default: pal_local_joint_control]

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged linear_feedback_controller at Robotics Stack Exchange

No version for distro indigo showing lyrical. Known supported distros are highlighted in the buttons above.
Package symbol

linear_feedback_controller package from linear_feedback_controller repo

linear_feedback_controller

ROS Distro
lyrical

Package Summary

Version 3.2.0
License BSD-2-Clause
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/loco-3d/linear-feedback-controller.git
VCS Type git
VCS Version main
Last Updated 2026-05-15
Dev Status MAINTAINED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

roscontrol controller package conputing a linear feedback. The user needs to provide a model of the robot and a list of controlled joint and the controller computes a linear feedback on the user defined state.

Additional Links

Maintainers

  • Guilhem Saurel

Authors

  • Maximilien Naveau

pre-commit.ci status

linear-feedback-controller

A ros2_control package implementing linear feedback control strategies for robotic systems. It supports both fixed-base and free-flying robot configurations and is designed to integrate with external model predictive controllers.

The public message interface is defined in linear_feedback_controller_msgs.

Both packages are released under the BSD-2 license. Current versions are tracked in their respective package.xml files and must have an associated git tag of the form vX.Y.Z.

Full documentation is available on DeepWiki.

Controllers

The package provides three ros2_control controller plugins:

Controller Base class Role
LinearFeedbackControllerRos ChainableControllerInterface Main control loop: PD → linear feedback transition with external MPC
JointStateEstimator ControllerInterface Joint state filtering and velocity estimation
PassthroughController ChainableControllerInterface Interface renaming / forwarding for hardware–simulation parity

LinearFeedbackControllerRos

The main controller implements a two-phase control strategy:

  1. PD phase — Proportional-derivative control for initial stabilization using configurable per-joint gains (p_gains, d_gains).
  2. LF phase — Linear feedback control driven by an external controller (e.g. a whole-body MPC based on Crocoddyl).

The transition between phases is time-based and configurable via pd_to_lf_transition_duration.

The controller publishes sensor data on a ROS 2 topic:

  • Base pose and velocity (free-flying robots; identity for fixed-base robots)
  • Joint positions, velocities, and efforts

It receives control commands containing:

  • A feedback gain matrix
  • A feedforward torque term
  • The linearization state

JointStateEstimator

Reads hardware state interfaces, applies exponential smoothing to joint velocities, and writes the filtered values to command interfaces. This makes raw sensor data suitable for downstream chainable controllers.

PassthroughController

Forwards and renames reference interfaces to command interfaces. Useful when simulation and hardware use different interface names but share the same parameter file.

Dependencies

Package Role
ros2_control Controller framework and hardware abstraction
pinocchio Rigid body dynamics and URDF model loading
Eigen3 Linear algebra
linear_feedback_controller_msgs ROS topic message definitions and Eigen/NumPy conversions

Build

mkdir -p workspace/src
git -C workspace/src clone https://github.com/loco-3d/linear-feedback-controller.git
colcon build

With CMake directly

git clone https://github.com/loco-3d/linear-feedback-controller.git
cd linear-feedback-controller
mkdir _build && cd _build
cmake .. -DCMAKE_INSTALL_PREFIX=/path/to/your/install/folder
make install

With Nix

git clone https://github.com/loco-3d/linear-feedback-controller.git
cd linear-feedback-controller

# Check (build + tests)
nix flake check -L

# Build only
nix build -L

# Enter development shell
nix develop

nix-direnv is also supported for automatic shell activation.

Configuration

An example YAML configuration for the Tiago Pro robot is available at config/tiago_pro_lfc_params.yaml.

Real-world usage can be found in the agimus-demos repository, in particular in the agimus_demos_common package.

File truncated at 100 lines see the full file

CHANGELOG

Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

Releases are available on the github repository.

Unreleased

  • PDController: use pinocchio::difference in pd controller to handle SO2 joint

3.2.0 - 2026-04-09

  • implement continuous joint support
  • add JointModelRevoluteUnalignedb for tiago pro

3.1.0 - 2026-03-11

  • add support for rolling

3.0.1 - 2025-11-04

  • add jrl_cmakemodules to package.xml

3.0.0 - 2025-10-23

added

  • A passthrough_controller to simulate controllers on partial interface sets. Example in a certain robot there is one controller per joint on the robot but not in simulation. This passthrough controller helps the user to create a seemless interface for both the real robot and the simulation.

changed

  • Breaking API! The in and out interfaces can now be twicked interface by interface.

2.0.0 - 2025-04-14

Changed

  • Breaking change: migration ROS2
  • Splitting the ROS vs none ROS part of the code.

Added

  • Added unit-test for the math.

1.0.2 - 2023-04-03

Added

  • pal_statistics introspection.
  • computation of the ZMP in the controller for debugging
  • computation of the position of the pendulum base fro debugging.
  • computation of the CoM acceleration from the measured forces.

1.0.1 - 2023-03-21

Fixed

  • Fix the averaging filter implementation.

Changed

  • Update the usage of the Eigen API to save some code lines.

1.0.0 - 2023-03-17

Changed

Remove the msgs package and mv the lfc at the root of the git repository. msgs are now here: https://github.com/loco-3d/linear-feedback-controller-msgs

0.1.0 - 2023-03-17

Implementation of linear-feedback-controller in ROS1 for Talos PAL-Robotics robot.

Git changelogs

Launch files

  • launch/talos_linear_feedback_controller.launch
      • spawn [default: true]
      • simulation [default: false]
      • ns [default: linear_feedback_controller]
      • debug_log [default: false]
      • default_params [default: false]
  • launch/talos_params.launch
      • simulation [default: false]
      • ns [default: linear_feedback_controller]
      • arm_left_control_type [default: no_control]
      • arm_right_control_type [default: no_control]
      • legs_control_type [default: inertia_shaping_effort_analytic_dob_control]
      • torso_control_type [default: inertia_shaping_effort_analytic_dob_control]
      • head_control_type [default: no_control]
      • head_local_joint_control_pkg [default: pal_local_joint_control]
      • wrists_control_type [default: no_control]
      • wrists_local_joint_control_pkg [default: pal_local_joint_control]
      • arm_left_local_joint_control_pkg [default: inertia_shaping_effort_control]
      • arm_left_local_joint_control_pkg [default: pal_local_joint_control]
      • arm_right_local_joint_control_pkg [default: inertia_shaping_effort_control]
      • arm_right_local_joint_control_pkg [default: pal_local_joint_control]
      • legs_local_joint_control_pkg [default: inertia_shaping_effort_control]
      • legs_local_joint_control_pkg [default: pal_local_joint_control]
      • torso_local_joint_control_pkg [default: inertia_shaping_effort_control]
      • torso_local_joint_control_pkg [default: pal_local_joint_control]

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged linear_feedback_controller at Robotics Stack Exchange

No version for distro hydro showing lyrical. Known supported distros are highlighted in the buttons above.
Package symbol

linear_feedback_controller package from linear_feedback_controller repo

linear_feedback_controller

ROS Distro
lyrical

Package Summary

Version 3.2.0
License BSD-2-Clause
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/loco-3d/linear-feedback-controller.git
VCS Type git
VCS Version main
Last Updated 2026-05-15
Dev Status MAINTAINED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

roscontrol controller package conputing a linear feedback. The user needs to provide a model of the robot and a list of controlled joint and the controller computes a linear feedback on the user defined state.

Additional Links

Maintainers

  • Guilhem Saurel

Authors

  • Maximilien Naveau

pre-commit.ci status

linear-feedback-controller

A ros2_control package implementing linear feedback control strategies for robotic systems. It supports both fixed-base and free-flying robot configurations and is designed to integrate with external model predictive controllers.

The public message interface is defined in linear_feedback_controller_msgs.

Both packages are released under the BSD-2 license. Current versions are tracked in their respective package.xml files and must have an associated git tag of the form vX.Y.Z.

Full documentation is available on DeepWiki.

Controllers

The package provides three ros2_control controller plugins:

Controller Base class Role
LinearFeedbackControllerRos ChainableControllerInterface Main control loop: PD → linear feedback transition with external MPC
JointStateEstimator ControllerInterface Joint state filtering and velocity estimation
PassthroughController ChainableControllerInterface Interface renaming / forwarding for hardware–simulation parity

LinearFeedbackControllerRos

The main controller implements a two-phase control strategy:

  1. PD phase — Proportional-derivative control for initial stabilization using configurable per-joint gains (p_gains, d_gains).
  2. LF phase — Linear feedback control driven by an external controller (e.g. a whole-body MPC based on Crocoddyl).

The transition between phases is time-based and configurable via pd_to_lf_transition_duration.

The controller publishes sensor data on a ROS 2 topic:

  • Base pose and velocity (free-flying robots; identity for fixed-base robots)
  • Joint positions, velocities, and efforts

It receives control commands containing:

  • A feedback gain matrix
  • A feedforward torque term
  • The linearization state

JointStateEstimator

Reads hardware state interfaces, applies exponential smoothing to joint velocities, and writes the filtered values to command interfaces. This makes raw sensor data suitable for downstream chainable controllers.

PassthroughController

Forwards and renames reference interfaces to command interfaces. Useful when simulation and hardware use different interface names but share the same parameter file.

Dependencies

Package Role
ros2_control Controller framework and hardware abstraction
pinocchio Rigid body dynamics and URDF model loading
Eigen3 Linear algebra
linear_feedback_controller_msgs ROS topic message definitions and Eigen/NumPy conversions

Build

mkdir -p workspace/src
git -C workspace/src clone https://github.com/loco-3d/linear-feedback-controller.git
colcon build

With CMake directly

git clone https://github.com/loco-3d/linear-feedback-controller.git
cd linear-feedback-controller
mkdir _build && cd _build
cmake .. -DCMAKE_INSTALL_PREFIX=/path/to/your/install/folder
make install

With Nix

git clone https://github.com/loco-3d/linear-feedback-controller.git
cd linear-feedback-controller

# Check (build + tests)
nix flake check -L

# Build only
nix build -L

# Enter development shell
nix develop

nix-direnv is also supported for automatic shell activation.

Configuration

An example YAML configuration for the Tiago Pro robot is available at config/tiago_pro_lfc_params.yaml.

Real-world usage can be found in the agimus-demos repository, in particular in the agimus_demos_common package.

File truncated at 100 lines see the full file

CHANGELOG

Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

Releases are available on the github repository.

Unreleased

  • PDController: use pinocchio::difference in pd controller to handle SO2 joint

3.2.0 - 2026-04-09

  • implement continuous joint support
  • add JointModelRevoluteUnalignedb for tiago pro

3.1.0 - 2026-03-11

  • add support for rolling

3.0.1 - 2025-11-04

  • add jrl_cmakemodules to package.xml

3.0.0 - 2025-10-23

added

  • A passthrough_controller to simulate controllers on partial interface sets. Example in a certain robot there is one controller per joint on the robot but not in simulation. This passthrough controller helps the user to create a seemless interface for both the real robot and the simulation.

changed

  • Breaking API! The in and out interfaces can now be twicked interface by interface.

2.0.0 - 2025-04-14

Changed

  • Breaking change: migration ROS2
  • Splitting the ROS vs none ROS part of the code.

Added

  • Added unit-test for the math.

1.0.2 - 2023-04-03

Added

  • pal_statistics introspection.
  • computation of the ZMP in the controller for debugging
  • computation of the position of the pendulum base fro debugging.
  • computation of the CoM acceleration from the measured forces.

1.0.1 - 2023-03-21

Fixed

  • Fix the averaging filter implementation.

Changed

  • Update the usage of the Eigen API to save some code lines.

1.0.0 - 2023-03-17

Changed

Remove the msgs package and mv the lfc at the root of the git repository. msgs are now here: https://github.com/loco-3d/linear-feedback-controller-msgs

0.1.0 - 2023-03-17

Implementation of linear-feedback-controller in ROS1 for Talos PAL-Robotics robot.

Git changelogs

Launch files

  • launch/talos_linear_feedback_controller.launch
      • spawn [default: true]
      • simulation [default: false]
      • ns [default: linear_feedback_controller]
      • debug_log [default: false]
      • default_params [default: false]
  • launch/talos_params.launch
      • simulation [default: false]
      • ns [default: linear_feedback_controller]
      • arm_left_control_type [default: no_control]
      • arm_right_control_type [default: no_control]
      • legs_control_type [default: inertia_shaping_effort_analytic_dob_control]
      • torso_control_type [default: inertia_shaping_effort_analytic_dob_control]
      • head_control_type [default: no_control]
      • head_local_joint_control_pkg [default: pal_local_joint_control]
      • wrists_control_type [default: no_control]
      • wrists_local_joint_control_pkg [default: pal_local_joint_control]
      • arm_left_local_joint_control_pkg [default: inertia_shaping_effort_control]
      • arm_left_local_joint_control_pkg [default: pal_local_joint_control]
      • arm_right_local_joint_control_pkg [default: inertia_shaping_effort_control]
      • arm_right_local_joint_control_pkg [default: pal_local_joint_control]
      • legs_local_joint_control_pkg [default: inertia_shaping_effort_control]
      • legs_local_joint_control_pkg [default: pal_local_joint_control]
      • torso_local_joint_control_pkg [default: inertia_shaping_effort_control]
      • torso_local_joint_control_pkg [default: pal_local_joint_control]

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged linear_feedback_controller at Robotics Stack Exchange

No version for distro kinetic showing lyrical. Known supported distros are highlighted in the buttons above.
Package symbol

linear_feedback_controller package from linear_feedback_controller repo

linear_feedback_controller

ROS Distro
lyrical

Package Summary

Version 3.2.0
License BSD-2-Clause
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/loco-3d/linear-feedback-controller.git
VCS Type git
VCS Version main
Last Updated 2026-05-15
Dev Status MAINTAINED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

roscontrol controller package conputing a linear feedback. The user needs to provide a model of the robot and a list of controlled joint and the controller computes a linear feedback on the user defined state.

Additional Links

Maintainers

  • Guilhem Saurel

Authors

  • Maximilien Naveau

pre-commit.ci status

linear-feedback-controller

A ros2_control package implementing linear feedback control strategies for robotic systems. It supports both fixed-base and free-flying robot configurations and is designed to integrate with external model predictive controllers.

The public message interface is defined in linear_feedback_controller_msgs.

Both packages are released under the BSD-2 license. Current versions are tracked in their respective package.xml files and must have an associated git tag of the form vX.Y.Z.

Full documentation is available on DeepWiki.

Controllers

The package provides three ros2_control controller plugins:

Controller Base class Role
LinearFeedbackControllerRos ChainableControllerInterface Main control loop: PD → linear feedback transition with external MPC
JointStateEstimator ControllerInterface Joint state filtering and velocity estimation
PassthroughController ChainableControllerInterface Interface renaming / forwarding for hardware–simulation parity

LinearFeedbackControllerRos

The main controller implements a two-phase control strategy:

  1. PD phase — Proportional-derivative control for initial stabilization using configurable per-joint gains (p_gains, d_gains).
  2. LF phase — Linear feedback control driven by an external controller (e.g. a whole-body MPC based on Crocoddyl).

The transition between phases is time-based and configurable via pd_to_lf_transition_duration.

The controller publishes sensor data on a ROS 2 topic:

  • Base pose and velocity (free-flying robots; identity for fixed-base robots)
  • Joint positions, velocities, and efforts

It receives control commands containing:

  • A feedback gain matrix
  • A feedforward torque term
  • The linearization state

JointStateEstimator

Reads hardware state interfaces, applies exponential smoothing to joint velocities, and writes the filtered values to command interfaces. This makes raw sensor data suitable for downstream chainable controllers.

PassthroughController

Forwards and renames reference interfaces to command interfaces. Useful when simulation and hardware use different interface names but share the same parameter file.

Dependencies

Package Role
ros2_control Controller framework and hardware abstraction
pinocchio Rigid body dynamics and URDF model loading
Eigen3 Linear algebra
linear_feedback_controller_msgs ROS topic message definitions and Eigen/NumPy conversions

Build

mkdir -p workspace/src
git -C workspace/src clone https://github.com/loco-3d/linear-feedback-controller.git
colcon build

With CMake directly

git clone https://github.com/loco-3d/linear-feedback-controller.git
cd linear-feedback-controller
mkdir _build && cd _build
cmake .. -DCMAKE_INSTALL_PREFIX=/path/to/your/install/folder
make install

With Nix

git clone https://github.com/loco-3d/linear-feedback-controller.git
cd linear-feedback-controller

# Check (build + tests)
nix flake check -L

# Build only
nix build -L

# Enter development shell
nix develop

nix-direnv is also supported for automatic shell activation.

Configuration

An example YAML configuration for the Tiago Pro robot is available at config/tiago_pro_lfc_params.yaml.

Real-world usage can be found in the agimus-demos repository, in particular in the agimus_demos_common package.

File truncated at 100 lines see the full file

CHANGELOG

Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

Releases are available on the github repository.

Unreleased

  • PDController: use pinocchio::difference in pd controller to handle SO2 joint

3.2.0 - 2026-04-09

  • implement continuous joint support
  • add JointModelRevoluteUnalignedb for tiago pro

3.1.0 - 2026-03-11

  • add support for rolling

3.0.1 - 2025-11-04

  • add jrl_cmakemodules to package.xml

3.0.0 - 2025-10-23

added

  • A passthrough_controller to simulate controllers on partial interface sets. Example in a certain robot there is one controller per joint on the robot but not in simulation. This passthrough controller helps the user to create a seemless interface for both the real robot and the simulation.

changed

  • Breaking API! The in and out interfaces can now be twicked interface by interface.

2.0.0 - 2025-04-14

Changed

  • Breaking change: migration ROS2
  • Splitting the ROS vs none ROS part of the code.

Added

  • Added unit-test for the math.

1.0.2 - 2023-04-03

Added

  • pal_statistics introspection.
  • computation of the ZMP in the controller for debugging
  • computation of the position of the pendulum base fro debugging.
  • computation of the CoM acceleration from the measured forces.

1.0.1 - 2023-03-21

Fixed

  • Fix the averaging filter implementation.

Changed

  • Update the usage of the Eigen API to save some code lines.

1.0.0 - 2023-03-17

Changed

Remove the msgs package and mv the lfc at the root of the git repository. msgs are now here: https://github.com/loco-3d/linear-feedback-controller-msgs

0.1.0 - 2023-03-17

Implementation of linear-feedback-controller in ROS1 for Talos PAL-Robotics robot.

Git changelogs

Launch files

  • launch/talos_linear_feedback_controller.launch
      • spawn [default: true]
      • simulation [default: false]
      • ns [default: linear_feedback_controller]
      • debug_log [default: false]
      • default_params [default: false]
  • launch/talos_params.launch
      • simulation [default: false]
      • ns [default: linear_feedback_controller]
      • arm_left_control_type [default: no_control]
      • arm_right_control_type [default: no_control]
      • legs_control_type [default: inertia_shaping_effort_analytic_dob_control]
      • torso_control_type [default: inertia_shaping_effort_analytic_dob_control]
      • head_control_type [default: no_control]
      • head_local_joint_control_pkg [default: pal_local_joint_control]
      • wrists_control_type [default: no_control]
      • wrists_local_joint_control_pkg [default: pal_local_joint_control]
      • arm_left_local_joint_control_pkg [default: inertia_shaping_effort_control]
      • arm_left_local_joint_control_pkg [default: pal_local_joint_control]
      • arm_right_local_joint_control_pkg [default: inertia_shaping_effort_control]
      • arm_right_local_joint_control_pkg [default: pal_local_joint_control]
      • legs_local_joint_control_pkg [default: inertia_shaping_effort_control]
      • legs_local_joint_control_pkg [default: pal_local_joint_control]
      • torso_local_joint_control_pkg [default: inertia_shaping_effort_control]
      • torso_local_joint_control_pkg [default: pal_local_joint_control]

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged linear_feedback_controller at Robotics Stack Exchange

No version for distro melodic showing lyrical. Known supported distros are highlighted in the buttons above.
Package symbol

linear_feedback_controller package from linear_feedback_controller repo

linear_feedback_controller

ROS Distro
lyrical

Package Summary

Version 3.2.0
License BSD-2-Clause
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/loco-3d/linear-feedback-controller.git
VCS Type git
VCS Version main
Last Updated 2026-05-15
Dev Status MAINTAINED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

roscontrol controller package conputing a linear feedback. The user needs to provide a model of the robot and a list of controlled joint and the controller computes a linear feedback on the user defined state.

Additional Links

Maintainers

  • Guilhem Saurel

Authors

  • Maximilien Naveau

pre-commit.ci status

linear-feedback-controller

A ros2_control package implementing linear feedback control strategies for robotic systems. It supports both fixed-base and free-flying robot configurations and is designed to integrate with external model predictive controllers.

The public message interface is defined in linear_feedback_controller_msgs.

Both packages are released under the BSD-2 license. Current versions are tracked in their respective package.xml files and must have an associated git tag of the form vX.Y.Z.

Full documentation is available on DeepWiki.

Controllers

The package provides three ros2_control controller plugins:

Controller Base class Role
LinearFeedbackControllerRos ChainableControllerInterface Main control loop: PD → linear feedback transition with external MPC
JointStateEstimator ControllerInterface Joint state filtering and velocity estimation
PassthroughController ChainableControllerInterface Interface renaming / forwarding for hardware–simulation parity

LinearFeedbackControllerRos

The main controller implements a two-phase control strategy:

  1. PD phase — Proportional-derivative control for initial stabilization using configurable per-joint gains (p_gains, d_gains).
  2. LF phase — Linear feedback control driven by an external controller (e.g. a whole-body MPC based on Crocoddyl).

The transition between phases is time-based and configurable via pd_to_lf_transition_duration.

The controller publishes sensor data on a ROS 2 topic:

  • Base pose and velocity (free-flying robots; identity for fixed-base robots)
  • Joint positions, velocities, and efforts

It receives control commands containing:

  • A feedback gain matrix
  • A feedforward torque term
  • The linearization state

JointStateEstimator

Reads hardware state interfaces, applies exponential smoothing to joint velocities, and writes the filtered values to command interfaces. This makes raw sensor data suitable for downstream chainable controllers.

PassthroughController

Forwards and renames reference interfaces to command interfaces. Useful when simulation and hardware use different interface names but share the same parameter file.

Dependencies

Package Role
ros2_control Controller framework and hardware abstraction
pinocchio Rigid body dynamics and URDF model loading
Eigen3 Linear algebra
linear_feedback_controller_msgs ROS topic message definitions and Eigen/NumPy conversions

Build

mkdir -p workspace/src
git -C workspace/src clone https://github.com/loco-3d/linear-feedback-controller.git
colcon build

With CMake directly

git clone https://github.com/loco-3d/linear-feedback-controller.git
cd linear-feedback-controller
mkdir _build && cd _build
cmake .. -DCMAKE_INSTALL_PREFIX=/path/to/your/install/folder
make install

With Nix

git clone https://github.com/loco-3d/linear-feedback-controller.git
cd linear-feedback-controller

# Check (build + tests)
nix flake check -L

# Build only
nix build -L

# Enter development shell
nix develop

nix-direnv is also supported for automatic shell activation.

Configuration

An example YAML configuration for the Tiago Pro robot is available at config/tiago_pro_lfc_params.yaml.

Real-world usage can be found in the agimus-demos repository, in particular in the agimus_demos_common package.

File truncated at 100 lines see the full file

CHANGELOG

Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

Releases are available on the github repository.

Unreleased

  • PDController: use pinocchio::difference in pd controller to handle SO2 joint

3.2.0 - 2026-04-09

  • implement continuous joint support
  • add JointModelRevoluteUnalignedb for tiago pro

3.1.0 - 2026-03-11

  • add support for rolling

3.0.1 - 2025-11-04

  • add jrl_cmakemodules to package.xml

3.0.0 - 2025-10-23

added

  • A passthrough_controller to simulate controllers on partial interface sets. Example in a certain robot there is one controller per joint on the robot but not in simulation. This passthrough controller helps the user to create a seemless interface for both the real robot and the simulation.

changed

  • Breaking API! The in and out interfaces can now be twicked interface by interface.

2.0.0 - 2025-04-14

Changed

  • Breaking change: migration ROS2
  • Splitting the ROS vs none ROS part of the code.

Added

  • Added unit-test for the math.

1.0.2 - 2023-04-03

Added

  • pal_statistics introspection.
  • computation of the ZMP in the controller for debugging
  • computation of the position of the pendulum base fro debugging.
  • computation of the CoM acceleration from the measured forces.

1.0.1 - 2023-03-21

Fixed

  • Fix the averaging filter implementation.

Changed

  • Update the usage of the Eigen API to save some code lines.

1.0.0 - 2023-03-17

Changed

Remove the msgs package and mv the lfc at the root of the git repository. msgs are now here: https://github.com/loco-3d/linear-feedback-controller-msgs

0.1.0 - 2023-03-17

Implementation of linear-feedback-controller in ROS1 for Talos PAL-Robotics robot.

Git changelogs

Launch files

  • launch/talos_linear_feedback_controller.launch
      • spawn [default: true]
      • simulation [default: false]
      • ns [default: linear_feedback_controller]
      • debug_log [default: false]
      • default_params [default: false]
  • launch/talos_params.launch
      • simulation [default: false]
      • ns [default: linear_feedback_controller]
      • arm_left_control_type [default: no_control]
      • arm_right_control_type [default: no_control]
      • legs_control_type [default: inertia_shaping_effort_analytic_dob_control]
      • torso_control_type [default: inertia_shaping_effort_analytic_dob_control]
      • head_control_type [default: no_control]
      • head_local_joint_control_pkg [default: pal_local_joint_control]
      • wrists_control_type [default: no_control]
      • wrists_local_joint_control_pkg [default: pal_local_joint_control]
      • arm_left_local_joint_control_pkg [default: inertia_shaping_effort_control]
      • arm_left_local_joint_control_pkg [default: pal_local_joint_control]
      • arm_right_local_joint_control_pkg [default: inertia_shaping_effort_control]
      • arm_right_local_joint_control_pkg [default: pal_local_joint_control]
      • legs_local_joint_control_pkg [default: inertia_shaping_effort_control]
      • legs_local_joint_control_pkg [default: pal_local_joint_control]
      • torso_local_joint_control_pkg [default: inertia_shaping_effort_control]
      • torso_local_joint_control_pkg [default: pal_local_joint_control]

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged linear_feedback_controller at Robotics Stack Exchange

No version for distro noetic showing lyrical. Known supported distros are highlighted in the buttons above.
Package symbol

linear_feedback_controller package from linear_feedback_controller repo

linear_feedback_controller

ROS Distro
lyrical

Package Summary

Version 3.2.0
License BSD-2-Clause
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/loco-3d/linear-feedback-controller.git
VCS Type git
VCS Version main
Last Updated 2026-05-15
Dev Status MAINTAINED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

roscontrol controller package conputing a linear feedback. The user needs to provide a model of the robot and a list of controlled joint and the controller computes a linear feedback on the user defined state.

Additional Links

Maintainers

  • Guilhem Saurel

Authors

  • Maximilien Naveau

pre-commit.ci status

linear-feedback-controller

A ros2_control package implementing linear feedback control strategies for robotic systems. It supports both fixed-base and free-flying robot configurations and is designed to integrate with external model predictive controllers.

The public message interface is defined in linear_feedback_controller_msgs.

Both packages are released under the BSD-2 license. Current versions are tracked in their respective package.xml files and must have an associated git tag of the form vX.Y.Z.

Full documentation is available on DeepWiki.

Controllers

The package provides three ros2_control controller plugins:

Controller Base class Role
LinearFeedbackControllerRos ChainableControllerInterface Main control loop: PD → linear feedback transition with external MPC
JointStateEstimator ControllerInterface Joint state filtering and velocity estimation
PassthroughController ChainableControllerInterface Interface renaming / forwarding for hardware–simulation parity

LinearFeedbackControllerRos

The main controller implements a two-phase control strategy:

  1. PD phase — Proportional-derivative control for initial stabilization using configurable per-joint gains (p_gains, d_gains).
  2. LF phase — Linear feedback control driven by an external controller (e.g. a whole-body MPC based on Crocoddyl).

The transition between phases is time-based and configurable via pd_to_lf_transition_duration.

The controller publishes sensor data on a ROS 2 topic:

  • Base pose and velocity (free-flying robots; identity for fixed-base robots)
  • Joint positions, velocities, and efforts

It receives control commands containing:

  • A feedback gain matrix
  • A feedforward torque term
  • The linearization state

JointStateEstimator

Reads hardware state interfaces, applies exponential smoothing to joint velocities, and writes the filtered values to command interfaces. This makes raw sensor data suitable for downstream chainable controllers.

PassthroughController

Forwards and renames reference interfaces to command interfaces. Useful when simulation and hardware use different interface names but share the same parameter file.

Dependencies

Package Role
ros2_control Controller framework and hardware abstraction
pinocchio Rigid body dynamics and URDF model loading
Eigen3 Linear algebra
linear_feedback_controller_msgs ROS topic message definitions and Eigen/NumPy conversions

Build

mkdir -p workspace/src
git -C workspace/src clone https://github.com/loco-3d/linear-feedback-controller.git
colcon build

With CMake directly

git clone https://github.com/loco-3d/linear-feedback-controller.git
cd linear-feedback-controller
mkdir _build && cd _build
cmake .. -DCMAKE_INSTALL_PREFIX=/path/to/your/install/folder
make install

With Nix

git clone https://github.com/loco-3d/linear-feedback-controller.git
cd linear-feedback-controller

# Check (build + tests)
nix flake check -L

# Build only
nix build -L

# Enter development shell
nix develop

nix-direnv is also supported for automatic shell activation.

Configuration

An example YAML configuration for the Tiago Pro robot is available at config/tiago_pro_lfc_params.yaml.

Real-world usage can be found in the agimus-demos repository, in particular in the agimus_demos_common package.

File truncated at 100 lines see the full file

CHANGELOG

Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

Releases are available on the github repository.

Unreleased

  • PDController: use pinocchio::difference in pd controller to handle SO2 joint

3.2.0 - 2026-04-09

  • implement continuous joint support
  • add JointModelRevoluteUnalignedb for tiago pro

3.1.0 - 2026-03-11

  • add support for rolling

3.0.1 - 2025-11-04

  • add jrl_cmakemodules to package.xml

3.0.0 - 2025-10-23

added

  • A passthrough_controller to simulate controllers on partial interface sets. Example in a certain robot there is one controller per joint on the robot but not in simulation. This passthrough controller helps the user to create a seemless interface for both the real robot and the simulation.

changed

  • Breaking API! The in and out interfaces can now be twicked interface by interface.

2.0.0 - 2025-04-14

Changed

  • Breaking change: migration ROS2
  • Splitting the ROS vs none ROS part of the code.

Added

  • Added unit-test for the math.

1.0.2 - 2023-04-03

Added

  • pal_statistics introspection.
  • computation of the ZMP in the controller for debugging
  • computation of the position of the pendulum base fro debugging.
  • computation of the CoM acceleration from the measured forces.

1.0.1 - 2023-03-21

Fixed

  • Fix the averaging filter implementation.

Changed

  • Update the usage of the Eigen API to save some code lines.

1.0.0 - 2023-03-17

Changed

Remove the msgs package and mv the lfc at the root of the git repository. msgs are now here: https://github.com/loco-3d/linear-feedback-controller-msgs

0.1.0 - 2023-03-17

Implementation of linear-feedback-controller in ROS1 for Talos PAL-Robotics robot.

Git changelogs

Launch files

  • launch/talos_linear_feedback_controller.launch
      • spawn [default: true]
      • simulation [default: false]
      • ns [default: linear_feedback_controller]
      • debug_log [default: false]
      • default_params [default: false]
  • launch/talos_params.launch
      • simulation [default: false]
      • ns [default: linear_feedback_controller]
      • arm_left_control_type [default: no_control]
      • arm_right_control_type [default: no_control]
      • legs_control_type [default: inertia_shaping_effort_analytic_dob_control]
      • torso_control_type [default: inertia_shaping_effort_analytic_dob_control]
      • head_control_type [default: no_control]
      • head_local_joint_control_pkg [default: pal_local_joint_control]
      • wrists_control_type [default: no_control]
      • wrists_local_joint_control_pkg [default: pal_local_joint_control]
      • arm_left_local_joint_control_pkg [default: inertia_shaping_effort_control]
      • arm_left_local_joint_control_pkg [default: pal_local_joint_control]
      • arm_right_local_joint_control_pkg [default: inertia_shaping_effort_control]
      • arm_right_local_joint_control_pkg [default: pal_local_joint_control]
      • legs_local_joint_control_pkg [default: inertia_shaping_effort_control]
      • legs_local_joint_control_pkg [default: pal_local_joint_control]
      • torso_local_joint_control_pkg [default: inertia_shaping_effort_control]
      • torso_local_joint_control_pkg [default: pal_local_joint_control]

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged linear_feedback_controller at Robotics Stack Exchange