Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
198 commits
Select commit Hold shift + click to select a range
b8d1885
[pre-commit.ci] pre-commit autoupdate
pre-commit-ci[bot] Apr 4, 2023
ee02dfa
Merge pull request #17 from loco-3d/pre-commit-ci-update-config
nim65s Apr 4, 2023
c282ee0
[pre-commit.ci] pre-commit autoupdate
pre-commit-ci[bot] Apr 18, 2023
155660d
Merge pull request #20 from loco-3d/pre-commit-ci-update-config
nim65s Apr 18, 2023
9c673d3
[pre-commit.ci] pre-commit autoupdate
pre-commit-ci[bot] Apr 25, 2023
a80fef0
Merge pull request #21 from loco-3d/pre-commit-ci-update-config
nim65s Apr 25, 2023
96230e7
[pre-commit.ci] pre-commit autoupdate
pre-commit-ci[bot] May 9, 2023
7f997d9
Merge pull request #22 from loco-3d/pre-commit-ci-update-config
nim65s May 9, 2023
0fcbc55
[pre-commit.ci] pre-commit autoupdate
pre-commit-ci[bot] May 23, 2023
5b11e9c
Merge pull request #23 from loco-3d/pre-commit-ci-update-config
nim65s May 23, 2023
3313b15
[pre-commit.ci] pre-commit autoupdate
pre-commit-ci[bot] Jun 20, 2023
6588aa0
Merge pull request #24 from loco-3d/pre-commit-ci-update-config
nim65s Jun 20, 2023
923cbda
[pre-commit.ci] pre-commit autoupdate
pre-commit-ci[bot] Apr 8, 2024
8e3d830
Merge pull request #25 from loco-3d/pre-commit-ci-update-config
nim65s Apr 11, 2024
762c163
[pre-commit.ci] pre-commit autoupdate
pre-commit-ci[bot] Apr 15, 2024
47d4a34
Merge pull request #26 from loco-3d/pre-commit-ci-update-config
nim65s Apr 17, 2024
bd20c6b
[pre-commit.ci] pre-commit autoupdate
pre-commit-ci[bot] Jun 10, 2024
bfd9360
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Jun 10, 2024
c686633
Merge pull request #27 from loco-3d/pre-commit-ci-update-config
nim65s Jun 12, 2024
a7dcb9e
[pre-commit.ci] pre-commit autoupdate
pre-commit-ci[bot] Jun 24, 2024
d88b6af
Merge pull request #28 from loco-3d/pre-commit-ci-update-config
nim65s Jul 1, 2024
cad2708
[pre-commit.ci] pre-commit autoupdate
pre-commit-ci[bot] Jul 2, 2024
b87dc70
Merge pull request #29 from loco-3d/pre-commit-ci-update-config
nim65s Jul 9, 2024
841b8d5
[pre-commit.ci] pre-commit autoupdate
pre-commit-ci[bot] Aug 5, 2024
01273b4
Merge pull request #30 from loco-3d/pre-commit-ci-update-config
nim65s Sep 2, 2024
23b57ba
[pre-commit.ci] pre-commit autoupdate
pre-commit-ci[bot] Oct 8, 2024
5a205ab
Merge pull request #31 from loco-3d/pre-commit-ci-update-config
MaximilienNaveau Oct 14, 2024
da8da56
[pre-commit.ci] pre-commit autoupdate
pre-commit-ci[bot] Oct 21, 2024
bc2b837
Merge pull request #35 from loco-3d/pre-commit-ci-update-config
nim65s Nov 2, 2024
3e2be3d
[pre-commit.ci] pre-commit autoupdate
pre-commit-ci[bot] Nov 25, 2024
3683288
Merge pull request #38 from loco-3d/pre-commit-ci-update-config
nim65s Nov 27, 2024
057fa85
Add empty test_pd_controller + Update CMake
ArthurVal Dec 6, 2024
7883618
[pd_controller] Add Ctor unittests
ArthurVal Dec 6, 2024
97726ed
[pd_controller] Add SetGains unittest
ArthurVal Dec 6, 2024
e2a26c5
[pd_controller] Add SetReferences unittest
ArthurVal Dec 6, 2024
1247ec6
[pd_controller] Add TODOs for nan/infs tests
ArthurVal Dec 6, 2024
d13e5a1
[pd_controller] Fix variable names
ArthurVal Dec 6, 2024
eb68991
[pd_controller] Add special double values test
ArthurVal Dec 6, 2024
63680c8
[pd_controller] Use RAII to mutate temporarly some values
ArthurVal Dec 6, 2024
549fd5a
[pd_controller] Add the compute_control test
ArthurVal Dec 6, 2024
624f67c
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Dec 6, 2024
6043630
[pd_controller] Use global Eigen::Index typedef instead of VectorXd
ArthurVal Dec 9, 2024
05d9903
[pd_controller] Fix the test error
ArthurVal Dec 9, 2024
7b93917
[pd_controller] Update the SCOPE_TRACE with better logs
ArthurVal Dec 9, 2024
bf1bc08
[pd_controller] Apply clang-format @ Google style
ArthurVal Dec 9, 2024
477677e
[pd_controller] Fix wrong TestSuite name
ArthurVal Dec 9, 2024
dfd29c9
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Dec 9, 2024
9e4b924
[pd_controller] Add Size missmatch tests for compute_control
ArthurVal Dec 10, 2024
8b2d0b5
Remove the \.clang-format file (redundant with precommit)
ArthurVal Dec 11, 2024
720fd61
[pd_controller] Refactor utils functions into Utils.hpp
ArthurVal Dec 13, 2024
e4af273
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Dec 13, 2024
7112127
[pd_controller] Update NO_THROW tests to ANY_THROWS for setters
ArthurVal Dec 16, 2024
2e4d7f0
[pd_controller] Refactor utils functions + Cleanup all tests
ArthurVal Dec 17, 2024
9db110f
[pd_controller] Rename files/dir according to the naming convention
ArthurVal Dec 17, 2024
353af62
[pd_controller] Replace utils/core (too generic) and add utils doc
ArthurVal Dec 17, 2024
7a8dae8
[pd_controller] Remove the tuple loop trick (GCC bugs)
ArthurVal Jan 6, 2025
45b03bd
[pd_controller] Use std::ref instead of ptr (easier to understand)
ArthurVal Jan 6, 2025
ee9a46c
[cmake] Fix wrong of yaml file
ArthurVal Jan 6, 2025
90ac770
[cmake] Fix the error when creating the markdown files
ArthurVal Jan 6, 2025
b0a0d2e
Merge pull request #48 from ArthurVal/fix/cmake_markdown_issue
MaximilienNaveau Jan 6, 2025
43151c1
Merge pull request #43 from ArthurVal/add/pd_controller_unittests
MaximilienNaveau Jan 7, 2025
e1d60f5
[pre-commit.ci] pre-commit autoupdate
pre-commit-ci[bot] Jan 20, 2025
e0727c7
Merge pull request #47 from loco-3d/pre-commit-ci-update-config
MaximilienNaveau Jan 28, 2025
4a671d7
[pd_controller] Disable all non-nominal tests
ArthurVal Jan 30, 2025
e32e898
Merge pull request #53 from ArthurVal/disable_non_nominal_pd_controll…
MaximilienNaveau Jan 30, 2025
3ae60ce
[lf_controller] Add dummy initial unittest for the LF Controller
ArthurVal Dec 11, 2024
3411e2b
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Dec 11, 2024
9bb4851
[lf_controller] Add Ctor test
ArthurVal Dec 16, 2024
2dd175c
[lf_controller] Add Init with empty model test
ArthurVal Dec 16, 2024
71c4dcb
[lf_controller] Add Init with nullptr test
ArthurVal Dec 16, 2024
a5fb97e
[lf_controller] Comment out EXAMPLE_ROBOT_DATA_MODEL_DIR
ArthurVal Dec 16, 2024
8e57ee4
[lf_controller] Define test fixture (empty for now)
ArthurVal Dec 18, 2024
3090752
[lf_controller] Add unit test for .initialize() with valid model
ArthurVal Dec 19, 2024
0e4a8e8
[lf_controller] Rename utils/file to file_operation
ArthurVal Dec 19, 2024
af2cc97
[lf_controller] Add FileToString from filesystem::path directly
ArthurVal Dec 19, 2024
fff3c54
[lf_controller] Refactor out talos'reduced file path into a function
ArthurVal Dec 19, 2024
c0a4331
[lf_controller] Add ComputeControlNotInitialized unit test
ArthurVal Dec 19, 2024
8be4dbe
[lf_controller] Add ComputeControlNoInput test
ArthurVal Dec 19, 2024
b8b0af5
[lf_controller] Fix missing EXAMPLE_ROBOT..._DIR definition
ArthurVal Dec 20, 2024
0a16c43
[lf_controller] Minor format updates
ArthurVal Jan 7, 2025
2010a10
[lf_controller] Use fixture with static talos urdf string
ArthurVal Jan 7, 2025
cb13cdc
[lf_controller] Add som template TBD for compute control tests
ArthurVal Jan 7, 2025
ba9e6d4
[lf_controller] Update inline doc of FileOpen
ArthurVal Jan 8, 2025
590e839
[lf_controller] Move using ::Eigen stuff on top of src file
ArthurVal Jan 8, 2025
9d49491
[lf_controller] Rename ComputeControlValid to ComputeControl
ArthurVal Jan 8, 2025
9e9b9a7
[lf_controller] Rename IsJointType* function to Is*
ArthurVal Jan 9, 2025
4d6ef41
[lf_controller] Add the MakeValidRandom* functions (still WIP)
ArthurVal Jan 10, 2025
9cb7ec0
[lf_controller] Default VectorPrintFormat inside struct directly
ArthurVal Jan 10, 2025
463ec79
[lf_controller] Use simplified URDF + Add eigen_conv helper
ArthurVal Jan 10, 2025
9fadb46
[lf_controller] Update the UnknownJoints test
ArthurVal Jan 10, 2025
fa4fa02
[lf_controller] Add Grow() to eigen utils
ArthurVal Jan 13, 2025
aef647a
[lf_controller] Add PushNewJointState function to utils
ArthurVal Jan 13, 2025
332796b
[lf_controller] Implement a SizeMismatch test (on sensor)
ArthurVal Jan 13, 2025
e707f4e
[lf_controller] Add missing MakeRandomControlForJoints inline doc
ArthurVal Jan 13, 2025
47bc072
[lf_controller] Remove pedantic ';'
ArthurVal Jan 13, 2025
4d3478b
[lf_controller] Add a UnaryOp getter to Make* functions
ArthurVal Jan 14, 2025
4f33f62
[tests] Add Grow for Eigen Matrices (NUmDimensions = 2)
ArthurVal Jan 15, 2025
0ddd46c
[lf_controller] Refactor the tests with parameters
ArthurVal Jan 15, 2025
d9e43b6
[lf_controller] Remove ternary operator
ArthurVal Jan 15, 2025
d24269c
[tests] Update Mutation with nodiscard and friend PrintTo
ArthurVal Jan 15, 2025
d323484
[lf_controller] Add ComputeControlSpecialDouble test
ArthurVal Jan 15, 2025
28d0bbd
[lf_controller] Remove SCOPE_TRACE from SpecialDouble tests
ArthurVal Jan 15, 2025
fde8554
[tests] Remove utils/array & utils/file_operation (not used)
ArthurVal Jan 15, 2025
c37c6b1
[lf_controller] Fix the size issues with free flyer tests
ArthurVal Jan 15, 2025
99b399c
[lf_controller] Disable the SpecialDouble test
ArthurVal Jan 15, 2025
e0c4838
[lf_controller] Remove un-used headers
ArthurVal Jan 15, 2025
eac4e70
[lf_controller] Clean up the expected_control (still WIP)
ArthurVal Jan 15, 2025
0e8622c
[tests] Update print_to with meta functions + fix TryToPrintTo API
ArthurVal Jan 16, 2025
1f33867
[lf_controller] Refactor to use ModelDescription as Test params
ArthurVal Jan 17, 2025
3b323f2
[lf_controller] Update the Valid ComputeControl test
ArthurVal Jan 20, 2025
758fba3
[test utils] Change the Eigen Vector PrintTo default strip
ArthurVal Jan 20, 2025
ddcf5b0
[lf_controller] Move Make* LFController function into utils/
ArthurVal Jan 20, 2025
1a998db
[lf_controller] Update to cleaner Push* implementation
ArthurVal Jan 20, 2025
d625e6a
[lf_controller] Fix wrong_control feedforward vs feedback_gains
ArthurVal Jan 20, 2025
e3d6482
[lf_controller] MakeRobotModelBuilderFrom use 'const ref'
ArthurVal Jan 20, 2025
1de6d9e
[utils] Fix std::is_base_of<> usage
ArthurVal Jan 20, 2025
8f2c6ef
[lf_controller] Remove View and ModelDescr template stuff
ArthurVal Jan 21, 2025
bf2e2b5
[utils] Fix internale doc/comment of ConcatenateAs
ArthurVal Jan 21, 2025
ea21689
[utils] Fix wrong MakeAllModelDescription documentation
ArthurVal Jan 21, 2025
efb8c80
[lf_controller] Add JointState size mismatch test for control x_0
ArthurVal Jan 22, 2025
b5a5149
[lf_controller] Remove unused commented index prints
ArthurVal Jan 22, 2025
3c677f1
[utils] Refactor out the init statement of the if(...) for RMB
ArthurVal Jan 30, 2025
fc9e52b
[utils] Replace #pragma once with header guards
ArthurVal Jan 30, 2025
554d46d
[utils] Remove the ConcatenateAs function
ArthurVal Jan 30, 2025
2b3def1
[lf_controller] Refactor expected computation into utils/
ArthurVal Jan 27, 2025
2049ffe
[lf_controller] Fix the error computation (using pinocchio)
ArthurVal Jan 30, 2025
11423fe
Add missing header guards to time.hpp
ArthurVal Jan 31, 2025
9972c40
Merge pull request #56 from ArthurVal/fix/missing-header-guards
MaximilienNaveau Jan 31, 2025
7b939b7
[lf_controller] Fix wrong inline doc
ArthurVal Jan 31, 2025
7200daa
[lf_controller] Fix missing doc for ExpectedLFControllerFrom
ArthurVal Jan 31, 2025
80dac66
[lf_controller] Refactor ExpectedLFControllerFrom args order
ArthurVal Jan 31, 2025
ad767dc
[lf_controller] Remove irrelevant TODO comment
ArthurVal Feb 4, 2025
528b577
Merge pull request #46 from ArthurVal/add/lf_controller_unittests
MaximilienNaveau Feb 4, 2025
42b55d8
[lfc] Fix the rnea vector output size mismatch
ArthurVal Feb 5, 2025
b5d24a9
Merge pull request #62 from ArthurVal/fix/gravity_compensation_with_f…
MaximilienNaveau Feb 5, 2025
daa79ad
[lfc] Add the first Ctor unittest including cmake target
ArthurVal Jan 8, 2025
c29e357
[lfc] Add LoadEmptyParams unit-test
ArthurVal Jan 8, 2025
535e3e2
[lfc] Fix wrong merge conflics resolution (missing ')')
ArthurVal Jan 10, 2025
b7463be
[lfc] Fix merge conflict resolution (missing example- deps on lf)
ArthurVal Jan 10, 2025
2763133
[lfc] Remove example-robot-data deps
ArthurVal Jan 20, 2025
f3dfd86
[lfc] Fix wrong rebase merge conflict resolution
ArthurVal Jan 22, 2025
9ac5b1f
[lfc] Add .Load* tests templates
ArthurVal Jan 22, 2025
ed07ee4
[utils] Add individual function to create the Joint names lists
ArthurVal Jan 22, 2025
c2ce62c
[lfc] Add all Load tests with param setup
ArthurVal Jan 22, 2025
3bdf08b
[lf_controller] Refactor ModelDesc param name into PrintTo
ArthurVal Jan 23, 2025
2f2b3e1
[lfc] Fix URDF new line format
ArthurVal Jan 23, 2025
a6a947c
[lfc] Use custom type instead of tuple to set the TestParams
ArthurVal Jan 23, 2025
1bcb70b
[lfc] Refactor some names
ArthurVal Jan 24, 2025
b7f4b80
[lfc] Refactor in order to take ControllerParameters as test param
ArthurVal Jan 24, 2025
066fc36
[lfc] Add missing header
ArthurVal Jan 24, 2025
2377b52
[lfc] Use GTest EXPECT_PRED with matchers
ArthurVal Jan 24, 2025
2233bb0
[lfc] Fix missing FailsToLoad() call
ArthurVal Jan 24, 2025
1bcf3cc
[lfc] Refactor Predicates names
ArthurVal Jan 24, 2025
8e11682
[lfc] Add test to Refs size mismatches
ArthurVal Jan 24, 2025
257878e
[lfc] Add valid SetInitialState tests
ArthurVal Jan 24, 2025
f9b2be0
[lfc] Rename SizeMismatchInternal to SizeMismatch
ArthurVal Jan 24, 2025
919f5e0
[lfc] Add Nan test to set_initial_state
ArthurVal Jan 24, 2025
bd6c71a
[lfc] Rename Loads -> Load + Add tempalte ComputeControl
ArthurVal Jan 24, 2025
c9b1b31
[utils] Remove useless static assert from mutation
ArthurVal Jan 24, 2025
c376199
[lfc] Disable SetInitialStateSpecialDouble test
ArthurVal Jan 27, 2025
216e6e3
[lfc] Add additional expectations in SetInitialState
ArthurVal Jan 27, 2025
6061fa4
[lfc] Add RMB ptr expectations on Load* tests
ArthurVal Jan 27, 2025
fc369c0
[lfc] Refactor DoNot predicate into utils/core
ArthurVal Jan 27, 2025
ae9d308
[pd_controller] Refactor the expected computation of compute_control
ArthurVal Jan 27, 2025
ce63362
[pd_controller] Rename Expected* function
ArthurVal Jan 27, 2025
f90b3fc
[lfc] Rename SizeMismatch PRED
ArthurVal Jan 27, 2025
3658a32
[pd_controller] Force the Eigen type return by ExpectedPD* function
ArthurVal Jan 27, 2025
9ffe30f
[pd_controller] Fix missing function rename
ArthurVal Jan 27, 2025
194e4d7
[lfc] Implements ComputeControl test (still miss gravitation stuff)
ArthurVal Jan 27, 2025
a352cbc
[lfc] Update ComputeControl test with weighted computation
ArthurVal Jan 27, 2025
3551eb6
[lfc] Minor update on the ComputeControl test
ArthurVal Jan 27, 2025
28e57ee
[lfc] Alias the time_point and use the clock from it
ArthurVal Jan 27, 2025
6b49775
[lfc] Update LoadSizeMismatch test
ArthurVal Jan 27, 2025
7569b83
[utils] Replace `#pragma once` with include guards
ArthurVal Jan 30, 2025
e4bb0ec
[lfc] Rename transition to pd_timeout
ArthurVal Jan 30, 2025
261d2c2
[lfc] Remove the Weights related lambdas
ArthurVal Jan 30, 2025
45a2024
[lfc] Remove core.hpp
ArthurVal Jan 30, 2025
403bf30
[utils] Reorder the ExpectedLFController* function args
ArthurVal Jan 30, 2025
ef1e61a
[lfc] Use 5e-6 as double comparison espilon
ArthurVal Jan 30, 2025
2bde3b2
[lfc] Add doc to the functions used to create the predicates
ArthurVal Jan 30, 2025
5d7048d
[lfc] Rename ComputeControl to ComputeControlWithoutGravity
ArthurVal Jan 30, 2025
eb847a2
[utils] Refactor MakePairOfNamesFrom as factory of JointNamesPair
ArthurVal Jan 31, 2025
90cafad
[lfc] Move define on top of the file
ArthurVal Jan 31, 2025
39981c4
[lfc] Use TimePoint directly
ArthurVal Jan 31, 2025
3df7a5e
[lfc] Add templates for the missing tests
ArthurVal Jan 31, 2025
91c2392
[lfc] Refactor all test data construction
ArthurVal Jan 31, 2025
8febf09
[lfc] Remove wrong input ComputeControl tests
ArthurVal Jan 31, 2025
6b7ea9f
[lfc] Merge With/Without GRavity stuff into ComputeControl
ArthurVal Feb 3, 2025
79233e7
[lfc] Update gravity_compensation SCOPE_TRACE format
ArthurVal Feb 3, 2025
fceb0e0
[lfc] Remove PRED stuff (easier to understand for reviewers)
ArthurVal Feb 4, 2025
2128ac3
[utils] Use vector ctor directly instead of .resize() call
ArthurVal Feb 6, 2025
df17605
[utils] Remove FIXME - Confirmed used of controlled joints for gains
ArthurVal Feb 6, 2025
e909f4d
[utils] Use const within range-for loop
ArthurVal Feb 6, 2025
68bbca2
[lfc] Rename wrong variable name to be more explicits
ArthurVal Feb 6, 2025
46ed05a
[lfc] Remove side effect checks for SetInitialState
ArthurVal Feb 6, 2025
82873e9
[lfc] Use random number when appending to vectors
ArthurVal Feb 6, 2025
05d4121
Merge pull request #49 from ArthurVal/add/linear_feedback_controller_…
MaximilienNaveau Feb 6, 2025
d8c3c67
Merge remote-tracking branch 'origin/humble' into humble-devel
MaximilienNaveau Feb 10, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ ci:
autoupdate_branch: 'devel'
repos:
- repo: https://github.com/pre-commit/mirrors-clang-format
rev: v16.0.0
rev: v19.1.7
hooks:
- id: clang-format
args: [--style=Google]
Expand All @@ -25,7 +25,7 @@ repos:
- id: mixed-line-ending
- id: trailing-whitespace
- repo: https://github.com/psf/black
rev: 23.1.0
rev: 24.10.0
hooks:
- id: black
- repo: https://github.com/cheshirekow/cmake-format-precommit
Expand Down
18 changes: 15 additions & 3 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ sec_generate_parameter_library(
add_dependencies(${PROJECT_NAME}_parameters ${PROJECT_NAME}_parameters_doc)
# Joint estimator params
sec_generate_parameter_library_markdown(joint_state_estimator_parameters_doc
src/linear_feedback_controller.yaml)
src/joint_state_estimator.yaml)
sec_generate_parameter_library(
joint_state_estimator_generated_parameters # Lib name
joint_state_estimator_parameters # CMake target name for the parameter
Expand Down Expand Up @@ -97,6 +97,16 @@ if(BUILD_TESTING)
test_robot_model_builder
PROPERTIES ENVIRONMENT_MODIFICATION
LD_LIBRARY_PATH=path_list_prepend:${CMAKE_CURRENT_BINARY_DIR})

ament_auto_add_gtest(test_pd_controller tests/test_pd_controller.cpp)
target_link_libraries(test_pd_controller ${PROJECT_NAME})

ament_auto_add_gtest(test_lf_controller tests/test_lf_controller.cpp)
target_link_libraries(test_lf_controller ${PROJECT_NAME})

ament_auto_add_gtest(test_linear_feedback_controller
tests/test_linear_feedback_controller.cpp)
target_link_libraries(test_linear_feedback_controller ${PROJECT_NAME})
endif()

#
Expand All @@ -108,8 +118,10 @@ pluginlib_export_plugin_description_file(controller_interface
#
# Installation
#
install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/doc
DESTINATION share/${PROJECT_NAME})
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/linear_feedback_controller.md
${CMAKE_CURRENT_BINARY_DIR}/joint_state_estimator.md
DESTINATION share/${PROJECT_NAME}/doc)

install(
PROGRAMS tests/pd_plus_controller.py
DESTINATION lib/${PROJECT_NAME}
Expand Down
2 changes: 1 addition & 1 deletion cmake/sec_generate_parameter_library.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,7 @@ function(sec_generate_parameter_library_markdown TARGET_NAME YAML_FILE)

# Set the output parameter header file name
get_filename_component(MARKDOWN_FILE ${YAML_FILE} NAME_WE)
set(MARKDOWN_FILE ${CMAKE_CURRENT_BINARY_DIR}/doc/${MARKDOWN_FILE}.md)
set(MARKDOWN_FILE ${CMAKE_CURRENT_BINARY_DIR}/${MARKDOWN_FILE}.md)

# Generate the header for the library
add_custom_target(
Expand Down
2 changes: 1 addition & 1 deletion include/linear_feedback_controller/averaging_filter.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ class AveragingFilter {
/**
* @brief Destroy the Averaging Filter object
*/
~AveragingFilter(){};
~AveragingFilter() {};

/**
* @brief Add another data in the buffer in a FIFO manner;
Expand Down
5 changes: 5 additions & 0 deletions include/linear_feedback_controller/time.hpp
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
#ifndef LINEAR_FEEDBACK_CONTROLLER__TIME_HPP_
#define LINEAR_FEEDBACK_CONTROLLER__TIME_HPP_

#include <chrono>

namespace linear_feedback_controller {
Expand All @@ -6,3 +9,5 @@ using TimePoint = std::chrono::time_point<std::chrono::high_resolution_clock,

using Duration = std::chrono::duration<double>;
} // namespace linear_feedback_controller

#endif
10 changes: 7 additions & 3 deletions src/linear_feedback_controller.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -81,9 +81,13 @@ const Eigen::VectorXd& LinearFeedbackController::compute_control(
if (remove_gravity_compensation_effort) {
robot_model_builder_->construct_robot_state(sensor, robot_configuration_,
robot_velocity_);
control_ -= pinocchio::rnea(
robot_model_builder_->get_model(), robot_model_builder_->get_data(),
robot_configuration_, robot_velocity_null_, robot_velocity_null_);

// NOTE: .tail() is used to remove the freeflyer components
control_ -=
pinocchio::rnea(robot_model_builder_->get_model(),
robot_model_builder_->get_data(), robot_configuration_,
robot_velocity_null_, robot_velocity_null_)
.tail(control_.size());
}

return control_;
Expand Down
244 changes: 244 additions & 0 deletions tests/test_lf_controller.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,244 @@
#include <sstream>
#include <string_view>
#include <tuple>

#include "utils/mutation.hpp"
using tests::utils::TemporaryMutate;

#include "utils/lf_controller.hpp"
using tests::utils::ExpectedLFControlFrom;
using tests::utils::MakeValidRandomControlFor;
using tests::utils::MakeValidRandomSensorFor;

#include "utils/robot_model.hpp"
using tests::utils::JointType;
using tests::utils::MakeAllModelDescriptionsFor;
using tests::utils::ModelDescription;

#include "utils/eigen_conversions.hpp"
using tests::utils::PushNewJointStateTo;

#include "linear_feedback_controller/lf_controller.hpp"
using linear_feedback_controller::LFController;

#include "gtest/gtest.h"

using namespace std::literals::string_view_literals;

namespace {

struct LFControllerTest : public ::testing::TestWithParam<ModelDescription> {};

TEST(LFControllerTest, Ctor) {
EXPECT_NO_THROW({ auto ctrl = LFController(); });
}

TEST(LFControllerTest, DISABLED_InitializeNullptr) {
auto ctrl = LFController();
EXPECT_ANY_THROW({ ctrl.initialize(nullptr); });
}

TEST(LFControllerTest, DISABLED_InitializeEmptyModel) {
auto ctrl = LFController();
EXPECT_ANY_THROW({
ctrl.initialize(
std::make_shared<linear_feedback_controller::RobotModelBuilder>());
});
}

TEST_P(LFControllerTest, Initialize) {
const auto model_ptr = std::shared_ptr{MakeRobotModelBuilderFrom(GetParam())};
ASSERT_NE(model_ptr, nullptr);

auto ctrl = LFController();
EXPECT_NO_THROW({ ctrl.initialize(model_ptr); });
}

TEST(LFControllerTest, DISABLED_ComputeControlNotInitialized) {
auto ctrl = LFController();
EXPECT_ANY_THROW({ auto _ = ctrl.compute_control({}, {}); });
}

TEST_P(LFControllerTest, DISABLED_ComputeControlNoInput) {
const auto model_ptr = std::shared_ptr{MakeRobotModelBuilderFrom(GetParam())};
ASSERT_NE(model_ptr, nullptr);

auto ctrl = LFController();
ctrl.initialize(model_ptr);

EXPECT_ANY_THROW({ auto _ = ctrl.compute_control({}, {}); });
}

TEST_P(LFControllerTest, DISABLED_ComputeControlUnknownJoints) {
const auto model_ptr = std::shared_ptr{MakeRobotModelBuilderFrom(GetParam())};
ASSERT_NE(model_ptr, nullptr);

auto ctrl = LFController();
ctrl.initialize(model_ptr);

const auto sensor = MakeValidRandomSensorFor(*model_ptr);
const auto control = MakeValidRandomControlFor(*model_ptr);

EXPECT_ANY_THROW({
auto wrong_sensor = sensor;
wrong_sensor.joint_state.name[0] = "this joint doesn't exist";
auto _ = ctrl.compute_control(wrong_sensor, control);
});
}

TEST_P(LFControllerTest, DISABLED_ComputeControlSizeMismatch) {
const auto model_ptr = std::shared_ptr{MakeRobotModelBuilderFrom(GetParam())};
ASSERT_NE(model_ptr, nullptr);

auto ctrl = LFController();
ctrl.initialize(model_ptr);

const auto sensor = MakeValidRandomSensorFor(*model_ptr);
const auto control = MakeValidRandomControlFor(*model_ptr);

EXPECT_ANY_THROW({
auto wrong_sensor = sensor;

// One more unknown joint inside sensor
PushNewJointStateTo(
wrong_sensor.joint_state,
{.name = "foo", .position = 0.0, .velocity = 0.0, .effort = 0.0});

auto _ = ctrl.compute_control(wrong_sensor, control);
});

EXPECT_ANY_THROW({
auto wrong_control = control;

// One more unknown joint inside control.initial_state
PushNewJointStateTo(
wrong_control.initial_state.joint_state,
{.name = "foo", .position = 0.0, .velocity = 0.0, .effort = 0.0});

auto _ = ctrl.compute_control(sensor, wrong_control);
});

EXPECT_ANY_THROW({
auto wrong_control = control;

// One more feed forward term
tests::utils::Grow(wrong_control.feedforward, 1);
wrong_control.feedforward.tail<1>()[0] = 0.0;

auto _ = ctrl.compute_control(sensor, wrong_control);
});

EXPECT_ANY_THROW({
auto wrong_control = control;

// One more row/col to feedback gain
tests::utils::Grow(wrong_control.feedback_gain, 1);

wrong_control.feedback_gain.bottomRows<1>() =
::Eigen::VectorXd::Random(wrong_control.feedback_gain.cols());

wrong_control.feedback_gain.rightCols<1>() =
::Eigen::VectorXd::Random(wrong_control.feedback_gain.rows());

auto _ = ctrl.compute_control(sensor, wrong_control);
});
}

/// Create a std::tuple<T&, string_view> with the ref expression as string
#define MakeRefOf(val) std::make_tuple(std::ref((val)), std::string_view{#val})

TEST_P(LFControllerTest, DISABLED_ComputeControlSpecialDouble) {
const auto model_ptr = std::shared_ptr{MakeRobotModelBuilderFrom(GetParam())};
ASSERT_NE(model_ptr, nullptr);

auto ctrl = LFController();
ctrl.initialize(model_ptr);

auto sensor = MakeValidRandomSensorFor(*model_ptr);
auto control = MakeValidRandomControlFor(*model_ptr);

// Test for special double values acceptance or not ?
for (const auto& [ref, str] : {
MakeRefOf(sensor.base_pose(0)),
MakeRefOf(sensor.base_pose(3)),
MakeRefOf(sensor.base_twist(4)),
MakeRefOf(sensor.joint_state.position(0)),
MakeRefOf(sensor.joint_state.velocity(0)),
MakeRefOf(control.feedforward(0)),
MakeRefOf(control.feedback_gain(0, 0)),
}) {
for (auto tmp_value : {
std::numeric_limits<double>::infinity(),
std::numeric_limits<double>::quiet_NaN(),
std::numeric_limits<double>::signaling_NaN(),
}) {
const auto mutation = TemporaryMutate(ref, tmp_value);
EXPECT_ANY_THROW({ auto _ = ctrl.compute_control(sensor, control); })
<< str << " = " << tmp_value << " (was " << mutation.OldValue()
<< ")";
}
}
}

TEST_P(LFControllerTest, ComputeControl) {
const auto model_ptr = std::shared_ptr{MakeRobotModelBuilderFrom(GetParam())};
ASSERT_NE(model_ptr, nullptr);

auto ctrl = LFController();
ctrl.initialize(model_ptr);

const auto sensor = MakeValidRandomSensorFor(*model_ptr);
const auto control = MakeValidRandomControlFor(*model_ptr);
EXPECT_EQ(ExpectedLFControlFrom(*model_ptr, sensor, control),
ctrl.compute_control(sensor, control));
}

constexpr auto dummy_urdf =
"<?xml version=\"1.0\" encoding=\"utf-8\"?>"
"<robot name=\"dummy\">"
" <link name=\"l0\"/>"
" "
" <joint name=\"l01\" type=\"revolute\">"
" <parent link=\"l0\"/>"
" <child link=\"l1\"/>"
" <origin xyz=\"0 0 1\" rpy=\"0 0 1\"/>"
" <axis xyz=\"0 0 1\"/>"
" <limit lower=\"0\" upper=\"3.14\" velocity=\"100\" effort=\"100\"/>"
" </joint>"
" "
" <link name=\"l1\"/>"
" "
" <joint name=\"l12\" type=\"revolute\">"
" <parent link=\"l1\"/>"
" <child link=\"l2\"/>"
" <origin xyz=\"0 1 0\" rpy=\"1 0 0\"/>"
" <axis xyz=\"0 1 0\"/>"
" <limit lower=\"-3.14\" upper=\"3.14\" velocity=\"100\" effort=\"10\"/>"
" </joint>"
" "
" <link name=\"l2\"/>"
"</robot>"sv;

INSTANTIATE_TEST_SUITE_P(
DummyUrdf, LFControllerTest,
::testing::ValuesIn(MakeAllModelDescriptionsFor(
dummy_urdf,
{
{
{.name = "l01"},
},
{
{.name = "l02", .type = JointType::Controlled},
},
{
{.name = "l01"},
{.name = "l12"},
},
})),
[](const auto& info) {
std::stringstream stream;
PrintTo(info.param, &stream, {.as_param_name = true});
return stream.str();
});

} // namespace
Loading
Loading