|
linear_feedback_controller package from linear_feedback_controller repolinear_feedback_controller |
ROS Distro
|
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
Additional Links
Maintainers
- Guilhem Saurel
Authors
- Maximilien Naveau
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:
-
PD phase — Proportional-derivative control for initial stabilization using configurable per-joint gains (
p_gains,d_gains). - 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
With colcon (recommended)
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
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
Package Dependencies
System Dependencies
Dependant Packages
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
Services
Plugins
Recent questions tagged linear_feedback_controller at Robotics Stack Exchange
|
linear_feedback_controller package from linear_feedback_controller repolinear_feedback_controller |
ROS Distro
|
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
Additional Links
Maintainers
- Guilhem Saurel
Authors
- Maximilien Naveau
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:
-
PD phase — Proportional-derivative control for initial stabilization using configurable per-joint gains (
p_gains,d_gains). - 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
With colcon (recommended)
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
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
Package Dependencies
System Dependencies
Dependant Packages
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
Services
Plugins
Recent questions tagged linear_feedback_controller at Robotics Stack Exchange
|
linear_feedback_controller package from linear_feedback_controller repolinear_feedback_controller |
ROS Distro
|
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
Additional Links
Maintainers
- Guilhem Saurel
Authors
- Maximilien Naveau
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:
-
PD phase — Proportional-derivative control for initial stabilization using configurable per-joint gains (
p_gains,d_gains). - 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
With colcon (recommended)
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
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
Package Dependencies
System Dependencies
Dependant Packages
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
Services
Plugins
Recent questions tagged linear_feedback_controller at Robotics Stack Exchange
|
linear_feedback_controller package from linear_feedback_controller repolinear_feedback_controller |
ROS Distro
|
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
Additional Links
Maintainers
- Guilhem Saurel
Authors
- Maximilien Naveau
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:
-
PD phase — Proportional-derivative control for initial stabilization using configurable per-joint gains (
p_gains,d_gains). - 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
With colcon (recommended)
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
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
Package Dependencies
System Dependencies
Dependant Packages
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
Services
Plugins
Recent questions tagged linear_feedback_controller at Robotics Stack Exchange
|
linear_feedback_controller package from linear_feedback_controller repolinear_feedback_controller |
ROS Distro
|
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
Additional Links
Maintainers
- Guilhem Saurel
Authors
- Maximilien Naveau
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:
-
PD phase — Proportional-derivative control for initial stabilization using configurable per-joint gains (
p_gains,d_gains). - 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
With colcon (recommended)
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
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
Package Dependencies
System Dependencies
Dependant Packages
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
Services
Plugins
Recent questions tagged linear_feedback_controller at Robotics Stack Exchange
|
linear_feedback_controller package from linear_feedback_controller repolinear_feedback_controller |
ROS Distro
|
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
Additional Links
Maintainers
- Guilhem Saurel
Authors
- Maximilien Naveau
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:
-
PD phase — Proportional-derivative control for initial stabilization using configurable per-joint gains (
p_gains,d_gains). - 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
With colcon (recommended)
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
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
Package Dependencies
System Dependencies
Dependant Packages
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
Services
Plugins
Recent questions tagged linear_feedback_controller at Robotics Stack Exchange
|
linear_feedback_controller package from linear_feedback_controller repolinear_feedback_controller |
ROS Distro
|
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
Additional Links
Maintainers
- Guilhem Saurel
Authors
- Maximilien Naveau
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:
-
PD phase — Proportional-derivative control for initial stabilization using configurable per-joint gains (
p_gains,d_gains). - 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
With colcon (recommended)
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
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
Package Dependencies
System Dependencies
Dependant Packages
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
Services
Plugins
Recent questions tagged linear_feedback_controller at Robotics Stack Exchange
|
linear_feedback_controller package from linear_feedback_controller repolinear_feedback_controller |
ROS Distro
|
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
Additional Links
Maintainers
- Guilhem Saurel
Authors
- Maximilien Naveau
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:
-
PD phase — Proportional-derivative control for initial stabilization using configurable per-joint gains (
p_gains,d_gains). - 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
With colcon (recommended)
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
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
Package Dependencies
System Dependencies
Dependant Packages
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
Services
Plugins
Recent questions tagged linear_feedback_controller at Robotics Stack Exchange
|
linear_feedback_controller package from linear_feedback_controller repolinear_feedback_controller |
ROS Distro
|
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
Additional Links
Maintainers
- Guilhem Saurel
Authors
- Maximilien Naveau
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:
-
PD phase — Proportional-derivative control for initial stabilization using configurable per-joint gains (
p_gains,d_gains). - 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
With colcon (recommended)
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
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
Package Dependencies
System Dependencies
Dependant Packages
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
Services
Plugins
Recent questions tagged linear_feedback_controller at Robotics Stack Exchange
|
linear_feedback_controller package from linear_feedback_controller repolinear_feedback_controller |
ROS Distro
|
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
Additional Links
Maintainers
- Guilhem Saurel
Authors
- Maximilien Naveau
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:
-
PD phase — Proportional-derivative control for initial stabilization using configurable per-joint gains (
p_gains,d_gains). - 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
With colcon (recommended)
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
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
Package Dependencies
System Dependencies
Dependant Packages
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
Services
Plugins
Recent questions tagged linear_feedback_controller at Robotics Stack Exchange
|
linear_feedback_controller package from linear_feedback_controller repolinear_feedback_controller |
ROS Distro
|
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
Additional Links
Maintainers
- Guilhem Saurel
Authors
- Maximilien Naveau
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:
-
PD phase — Proportional-derivative control for initial stabilization using configurable per-joint gains (
p_gains,d_gains). - 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
With colcon (recommended)
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
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
Package Dependencies
System Dependencies
Dependant Packages
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
Services
Plugins
Recent questions tagged linear_feedback_controller at Robotics Stack Exchange
|
linear_feedback_controller package from linear_feedback_controller repolinear_feedback_controller |
ROS Distro
|
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
Additional Links
Maintainers
- Guilhem Saurel
Authors
- Maximilien Naveau
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:
-
PD phase — Proportional-derivative control for initial stabilization using configurable per-joint gains (
p_gains,d_gains). - 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
With colcon (recommended)
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
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
Package Dependencies
System Dependencies
Dependant Packages
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
Services
Plugins
Recent questions tagged linear_feedback_controller at Robotics Stack Exchange
|
linear_feedback_controller package from linear_feedback_controller repolinear_feedback_controller |
ROS Distro
|
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
Additional Links
Maintainers
- Guilhem Saurel
Authors
- Maximilien Naveau
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:
-
PD phase — Proportional-derivative control for initial stabilization using configurable per-joint gains (
p_gains,d_gains). - 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
With colcon (recommended)
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
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
Package Dependencies
System Dependencies
Dependant Packages
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
Services
Plugins
Recent questions tagged linear_feedback_controller at Robotics Stack Exchange
|
linear_feedback_controller package from linear_feedback_controller repolinear_feedback_controller |
ROS Distro
|
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
Additional Links
Maintainers
- Guilhem Saurel
Authors
- Maximilien Naveau
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:
-
PD phase — Proportional-derivative control for initial stabilization using configurable per-joint gains (
p_gains,d_gains). - 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
With colcon (recommended)
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
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
Package Dependencies
System Dependencies
Dependant Packages
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
Services
Plugins
Recent questions tagged linear_feedback_controller at Robotics Stack Exchange
|
linear_feedback_controller package from linear_feedback_controller repolinear_feedback_controller |
ROS Distro
|
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
Additional Links
Maintainers
- Guilhem Saurel
Authors
- Maximilien Naveau
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:
-
PD phase — Proportional-derivative control for initial stabilization using configurable per-joint gains (
p_gains,d_gains). - 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
With colcon (recommended)
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
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
Package Dependencies
System Dependencies
Dependant Packages
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
Services
Plugins
Recent questions tagged linear_feedback_controller at Robotics Stack Exchange
|
linear_feedback_controller package from linear_feedback_controller repolinear_feedback_controller |
ROS Distro
|
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
Additional Links
Maintainers
- Guilhem Saurel
Authors
- Maximilien Naveau
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:
-
PD phase — Proportional-derivative control for initial stabilization using configurable per-joint gains (
p_gains,d_gains). - 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
With colcon (recommended)
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
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
Package Dependencies
System Dependencies
Dependant Packages
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
Services
Plugins
Recent questions tagged linear_feedback_controller at Robotics Stack Exchange
|
linear_feedback_controller package from linear_feedback_controller repolinear_feedback_controller |
ROS Distro
|
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
Additional Links
Maintainers
- Guilhem Saurel
Authors
- Maximilien Naveau
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:
-
PD phase — Proportional-derivative control for initial stabilization using configurable per-joint gains (
p_gains,d_gains). - 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
With colcon (recommended)
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
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
Package Dependencies
System Dependencies
Dependant Packages
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
Services
Plugins
Recent questions tagged linear_feedback_controller at Robotics Stack Exchange
|
linear_feedback_controller package from linear_feedback_controller repolinear_feedback_controller |
ROS Distro
|
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
Additional Links
Maintainers
- Guilhem Saurel
Authors
- Maximilien Naveau
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:
-
PD phase — Proportional-derivative control for initial stabilization using configurable per-joint gains (
p_gains,d_gains). - 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
With colcon (recommended)
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
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
Package Dependencies
System Dependencies
Dependant Packages
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
Services
Plugins
Recent questions tagged linear_feedback_controller at Robotics Stack Exchange
|
linear_feedback_controller package from linear_feedback_controller repolinear_feedback_controller |
ROS Distro
|
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
Additional Links
Maintainers
- Guilhem Saurel
Authors
- Maximilien Naveau
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:
-
PD phase — Proportional-derivative control for initial stabilization using configurable per-joint gains (
p_gains,d_gains). - 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
With colcon (recommended)
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
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
Package Dependencies
System Dependencies
Dependant Packages
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
Services
Plugins
Recent questions tagged linear_feedback_controller at Robotics Stack Exchange
|
linear_feedback_controller package from linear_feedback_controller repolinear_feedback_controller |
ROS Distro
|
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
Additional Links
Maintainers
- Guilhem Saurel
Authors
- Maximilien Naveau
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:
-
PD phase — Proportional-derivative control for initial stabilization using configurable per-joint gains (
p_gains,d_gains). - 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
With colcon (recommended)
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
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
Package Dependencies
System Dependencies
Dependant Packages
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]