Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • pfernbac/tsid
  • gsaurel/tsid
  • stack-of-tasks/tsid
3 results
Show changes
Commits on Source (643)
Showing
with 1197 additions and 114 deletions
# black
b2be1d0b5a2ef7a5de758bca053161fb652aba56
# pre-commit run --all-files
477b39d52e20d2c7138e468e01aa2359c275b851
# pre-commit run -a (Guilhem Saurel, 2022-09-05)
1d932e2d389a6205e6d3a7490b5c826fe01fea47
# ruff (Guilhem Saurel, 2024-08-26)
1ae998e5aef7dacc13bad7aa457575a513d78864
# pre-commit run -a (Guilhem Saurel, 2024-08-26)
e928496128b53fb15b1aad3b04fedd844ee86500
name: CI - Linux/OSX - Conda
on:
push:
pull_request:
jobs:
build-with-conda:
name: '[conda:${{ matrix.os }}:${{ matrix.build_type }}]'
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
build_type: [Release, Debug]
os: [ubuntu-latest, macos-latest]
steps:
- uses: actions/checkout@v2
- uses: conda-incubator/setup-miniconda@v2
with:
miniforge-variant: Mambaforge
miniforge-version: latest
channels: conda-forge
python-version: "3.10"
activate-environment: tsid
- name: Install dependencies [Conda]
shell: bash -l {0}
run: |
# Workaround for https://github.com/conda-incubator/setup-miniconda/issues/186
conda config --remove channels defaults
# Compilation related dependencies
mamba install cmake compilers make pkg-config doxygen ninja graphviz
# Main dependencies
mamba install tsid --only-deps
mamba install proxsuite osqp-eigen
- name: Activate ccache [Conda]
uses: hendrikmuhs/ccache-action@v1.2
with:
key: ${{ matrix.os }}-${{ matrix.type }}
max-size: 1G
- name: Print environment [Conda]
shell: bash -l {0}
run: |
conda info
mamba list
env
- name: Configure [Conda]
shell: bash -l {0}
run: |
echo $(whereis ccache)
echo $(which ccache)
git submodule update --init
mkdir build
cd build
cmake .. -GNinja -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DCMAKE_INSTALL_PREFIX=${CONDA_PREFIX} -DCMAKE_BUILD_TYPE=${{ matrix.build_type }} -DBUILD_PYTHON_INTERFACE:BOOL=ON -DPYTHON_EXECUTABLE=$(which python3) -DINSTALL_DOCUMENTATION:BOOL=ON -DBUILD_WITH_PROXQP:BOOL=ON -DBUILD_WITH_OSQP:BOOL=ON
- name: Build [Conda]
shell: bash -l {0}
run: |
cd build
cmake --build . --config ${{ matrix.build_type }} -v
- name: Build documentation [Conda]
shell: bash -l {0}
run: |
cd build
cmake --build . --config ${{ matrix.build_type }} --target doc
- name: Install [Conda]
shell: bash -l {0}
run: |
cd build
cmake --install . --config ${{ matrix.build_type }}
- name: Test [Conda]
shell: bash -l {0}
run: |
find $CONDA_PREFIX -name tsid*
python -c "import tsid"
cd build
ctest --output-on-failure -C ${{ matrix.build_type }}
- name: Uninstall [Conda]
shell: bash -l {0}
run: |
cd build
cmake --build . --config ${{ matrix.build_type }} --target uninstall
- name: Display ccache statistics [Conda]
shell: bash -l {0}
run: |
echo $(ccache -s)
name: CI - Linux - ROS
on: [push, pull_request]
jobs:
CI:
strategy:
matrix:
env:
#- {ROS_DISTRO: rolling} Unable to locate package ros-rolling-pinocchio
- {ROS_DISTRO: iron}
- {ROS_DISTRO: humble}
env:
CCACHE_DIR: /github/home/.ccache # Enable ccache
UPSTREAM_WORKSPACE: dependencies.rosinstall
CMAKE_ARGS: -DBUILD_WITH_OSQP=ON -DBUILD_WITH_PROXQP=ON -DBUILD_WITH_VECTORIZATION_SUPPORT=OFF # Simde is not available yet
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
# eiquadprog is not yet available in ROS2
- run: sed -i "/eiquadprog/d" package.xml
# This step will fetch/store the directory used by ccache before/after the ci run
- uses: actions/cache@v3
with:
path: ${{ env.CCACHE_DIR }}
key: ccache-${{ matrix.env.ROS_DISTRO }}-${{ matrix.env.ROS_REPO }}
# Run industrial_ci
- uses: 'ros-industrial/industrial_ci@d23b9ad2c63bfad638a2b1fe3df34b8df9a2f17b'
env: ${{ matrix.env }}
*~
*.pyc
Xcode/
.vscode/
build*/
_build*/
.vscode
include: http://rainboard.laas.fr/project/tsid/.gitlab-ci.yml
[submodule "cmake"]
path = cmake
url = git://github.com/jrl-umi3218/jrl-cmakemodules.git
url = https://github.com/jrl-umi3218/jrl-cmakemodules.git
ci:
autoupdate_branch: devel
repos:
- repo: https://github.com/astral-sh/ruff-pre-commit
rev: v0.6.2
hooks:
- id: ruff
args:
- --fix
- --exit-non-zero-on-fix
- id: ruff-format
- repo: https://github.com/cheshirekow/cmake-format-precommit
rev: v0.6.13
hooks:
- id: cmake-format
- repo: https://github.com/pappasam/toml-sort
rev: v0.23.1
hooks:
- id: toml-sort-fix
- repo: https://github.com/pre-commit/mirrors-clang-format
rev: v18.1.8
hooks:
- id: clang-format
args:
- '--style={BasedOnStyle: Google, SortIncludes: false, WhitespaceSensitiveMacros: ["TSID_DISABLE_WARNING"]}'
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v4.6.0
hooks:
- id: check-json
- id: check-symlinks
- id: check-toml
- id: check-yaml
# Changelog
All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [Unreleased]
## [1.7.1] - 2024-08-26
- Fix a typo in ex_4_walking
- check solver status, set eps_abs to 1e-6, fix seed
- CMake: require >= 3.10
- add changelog
- setup ruff & fix isort pre-commit config
- update ROS CI
## [1.7.0] - 2023-05-13
- expose SE3ToVector and vectorToSE3
- remove warnings
- Enhance Python target packaging
- Add CI with GitHub Action for conda
- Add support for proxqp and osqp solver
- Clean and update contributors list
- pre-commit autoupdate
- Expose TaskJointPosVelAccBounds
- Expose AddMotionTask for TaskJointPosVelAccBounds
- Fix qpmad
- Add clang-format Google style
- Add Measured force as an external force task with moving objects
- update CMake: fetch submodule, set default build type, fix RPATH
- fix for eigenpy v3
- np.matrix → np.array
- tooling: setup black isort & toml-sort
## [1.6.3] - 2022-11-02
- Require C++17
- fix tests in 18.04
- update pinocchio use
## [1.6.2] - 2022-09-05
- update python tests for np array
- add task actuation equality
- use generated headers
- Choose floating-base (or not) when creating a robot wrapper
- Add optional support of qpmad solver
- update packaging for eigenpy 2.7.12
## [1.6.1] - 2021-10-19
This new release is mostly a maintenance release, including fixes for the recent version of Eigen 3.4.
## [1.6.0] - 2021-03-18
- Add bindings for method Contact6d::getMotionTask
- Add Center of Pressure Taks
- fix warnings
## [1.5.0] - 2021-03-03
- [py] Add config variable to specify whether end-effector task should
be formulated in local frame or world frame.
- [C++] Standardize names of methods to get and set mask in motion tasks.
- [py] Add accessors masks in TaskCOM and TaskSE3Equality.
- bugfixes
## [1.4.2] - 2020-11-26
- Add a mask to task-com-equality
- Fix bug in Contact6d::setRegularizationTaskWeightVector
- CMake: fix configure without tests
## [1.4.1] - 2020-09-25
- fix memory leaks thanks to shared_ptr
- fix warnings
- fix package.xml for ROS
## [1.4.0] - 2020-09-09
- add setGravity
- stop using StdVec in python to make code more user friendly
- add 6d contact with motion constraint at priority level 1 in python
- use example-robot-data in notebooks
## [1.3.1] - 2020-06-05
- fix license
- fix generated tsid.pc
## [1.3.0] - 2020-05-26
- reactive test
- add package.xml
- add CheatSheet
- updates for numpy.array & python 3
- updateRigidContactWeights: fix and add to python API
- use eiquadprog
- fix compatibility with pinocchio v2.4.5
## [1.2.3] - 2020-03-30
- renamed tests dir
- fix python tests
- CMake: export project and use exports from dependencies
- CMake: keep minimal required instructions
## [1.2.2] - 2020-03-01
- add angular momentum equality task
- update to pinocchio changes
- Python 3 compatibility
- add some documentation
- fix python issue
## [1.2.1] - 2019-09-19
- fix compatibility with recent pinocchio versions
## [1.2.0] - 2019-03-06
- Pinocchio v2, fix #31
- Fix demo_romeo for pinocchio v2
- Pull request for use TSID in python.
- Add missing includes, fix #18
## [1.1.0] - 2018-10-10
This release updates to non backward-compatibles changes in pinocchio v1.3.0
## [1.0.2] - 2018-06-12
This release is mostly a maintenance release.
It fixes some bug with respect to **Pinocchio**.
It also fixes some issues with respect to the packaging.
## [1.0.1] - 2018-01-12
- [joint-posture-task] Fix bug in computation of task matrix from mask
- [task-se3-equality] Add method to get frame-id
- [Robot] Add missing evaluation of the center of mass acceleration provided zero joint acceleration
- [Math] Fix bug related to Eigen undefined function set_is_malloc_allowed
- [CMake] Correct minimal version of Eigen3
- [inv-dyn-form-acc-force] Fix potential bug in removal of contact constraint
- [task-se3-equality] Fix small bug in computaiton of acceleration (just used for debugging)
- [contact-6d] Add methods to set reference force and weight vector
- [inv-dyn-form-acc-force] Fix bug: weight of force regularization task was not updated
- [robot-wrapper] Fix bug in mass matrix: copy upper triangular part to lower triangular part (before this it was set to zero)
- [formulations] Remove debug prints
- [formulations] Fix bug in update of task weights
- [robot-wrapper] BUG FIX: compute center of mass acceleration in computeAllTerms (before it was not computed so we were introducing random number in the CoM task)
- [tsid-formulations] Add method to change the weight of a task.
- [eigquadprog-fast] In DEBUG, in case a constraint is not verified, set the status flag to ERROR (even if the solver said the problem has been solved)
- [task-com-equality] Fix little bugs in methods to get pos/vel references and errors, and in method to get desired acceleration
- [math-utils] Add function to check if matrix/vector contains NaN
- [math-utils] Pass JacobiSVD by reference in function solveWithDampingFromSvd
- [math-utils] Add function to solve linear system of equations from svd decomposition
## [1.0.0] - 2017-06-16
This is the first release of TSID.
This release includes minimal features for the torque control of humanoid robots such as HRP-2.
[Unreleased]: https://github.com/stack-of-tasks/tsid/compare/v1.7.1...HEAD
[1.7.1]: https://github.com/stack-of-tasks/tsid/compare/v1.7.0...v1.7.1
[1.7.0]: https://github.com/stack-of-tasks/tsid/compare/v1.6.3...v1.7.0
[1.6.3]: https://github.com/stack-of-tasks/tsid/compare/v1.6.2...v1.6.3
[1.6.2]: https://github.com/stack-of-tasks/tsid/compare/v1.6.1...v1.6.2
[1.6.1]: https://github.com/stack-of-tasks/tsid/compare/v1.6.0...v1.6.1
[1.6.0]: https://github.com/stack-of-tasks/tsid/compare/v1.5.0...v1.6.0
[1.5.0]: https://github.com/stack-of-tasks/tsid/compare/v1.4.2...v1.5.0
[1.4.2]: https://github.com/stack-of-tasks/tsid/compare/v1.4.1...v1.4.2
[1.4.1]: https://github.com/stack-of-tasks/tsid/compare/v1.4.0...v1.4.1
[1.4.0]: https://github.com/stack-of-tasks/tsid/compare/v1.3.1...v1.4.0
[1.3.1]: https://github.com/stack-of-tasks/tsid/compare/v1.3.0...v1.3.1
[1.3.0]: https://github.com/stack-of-tasks/tsid/compare/v1.2.3...v1.3.0
[1.2.3]: https://github.com/stack-of-tasks/tsid/compare/v1.2.2...v1.2.3
[1.2.2]: https://github.com/stack-of-tasks/tsid/compare/v1.2.1...v1.2.2
[1.2.1]: https://github.com/stack-of-tasks/tsid/compare/v1.2.0...v1.2.1
[1.2.0]: https://github.com/stack-of-tasks/tsid/compare/v1.1.0...v1.2.0
[1.1.0]: https://github.com/stack-of-tasks/tsid/compare/v1.0.2...v1.1.0
[1.0.2]: https://github.com/stack-of-tasks/tsid/compare/v1.0.1...v1.0.2
[1.0.1]: https://github.com/stack-of-tasks/tsid/compare/v1.0.0...v1.0.1
[1.0.0]: https://github.com/stack-of-tasks/tsid/releases/tag/v1.0.0
#
# Copyright (c) 2017 CNRS
# Copyright (c) 2017-2021 CNRS
#
# This file is part of PinInvDyn
# pinocchio is free software: you can redistribute it
# and/or modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation, either version
# 3 of the License, or (at your option) any later version.
# pinocchio is distributed in the hope that it will be
# useful, but WITHOUT ANY WARRANTY; without even the implied warranty
# of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Lesser Public License for more details. You should have
# received a copy of the GNU Lesser General Public License along with
# pinocchio If not, see
# This file is part of tsid tsid is free software: you can redistribute it
# and/or modify it under the terms of the GNU Lesser General Public License as
# published by the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version. tsid is distributed in the hope that it
# will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
# Lesser Public License for more details. You should have received a copy of the
# GNU Lesser General Public License along with tsid If not, see
# <http://www.gnu.org/licenses/>.
CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
INCLUDE(cmake/base.cmake)
INCLUDE(cmake/boost.cmake)
INCLUDE(cmake/eigen.cmake)
INCLUDE(cmake/python.cmake)
INCLUDE(cmake2/ide.cmake)
SET(PROJECT_NAME PinInvDyn)
SET(PROJECT_DESCRIPTION "Efficient Inverse Dynamics for Multi-body Systems")
SET(PROJECT_URL "http://github.com/stack-of-tasks/pinocchio")
OPTION(INSTALL_DOCUMENTATION "Generate and install the documentation" FALSE)
SET(DOXYGEN_USE_MATHJAX YES)
IF(APPLE)
SET(CMAKE_MACOSX_RPATH TRUE)
SET(CMAKE_SKIP_BUILD_RPATH FALSE)
SET(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)
SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib")
list(FIND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES "${CMAKE_INSTALL_PREFIX}/lib" isSystemDir)
if("${isSystemDir}" STREQUAL "-1")
set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib")
endif("${isSystemDir}" STREQUAL "-1")
ENDIF(APPLE)
# Disable -Werror on Unix for now.
SET(CXX_DISABLE_WERROR True)
SET(CMAKE_VERBOSE_MAKEFILE True)
SETUP_PROJECT()
IF(WIN32)
SET(LINK copy_if_different)
ELSE(WIN32)
SET(LINK create_symlink)
ENDIF(WIN32)
# --- OPTIONS ----------------------------------------
OPTION (BUILD_PYTHON_INTERFACE "Build the python binding" OFF)
OPTION (BUILD_UNIT_TESTS "Build the unitary tests" ON)
# ----------------------------------------------------
# --- DEPENDANCIES -----------------------------------
# ----------------------------------------------------
ADD_REQUIRED_DEPENDENCY("eigen3 >= 3.0.5")
ADD_REQUIRED_DEPENDENCY("pinocchio >= 1.2.0")
SET(BOOST_COMPONENTS unit_test_framework serialization)
IF(BUILD_PYTHON_INTERFACE)
ADD_COMPILE_DEPENDENCY("eigenpy >= 1.3.1")
SET(BOOST_COMPONENTS ${BOOST_COMPONENTS} python)
FINDPYTHON(2.7 EXACT REQUIRED)
INCLUDE_DIRECTORIES(${PYTHON_INCLUDE_DIRS})
ENDIF(BUILD_PYTHON_INTERFACE)
SEARCH_FOR_BOOST()
# Path to boost headers
INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIRS})
# ----------------------------------------------------
# --- INCLUDE ----------------------------------------
# ----------------------------------------------------
SET(${PROJECT_NAME}_MATH_HEADERS
include/pininvdyn/math/fwd.hpp
)
SET(${PROJECT_NAME}_TASKS_HEADERS
include/pininvdyn/tasks/fwd.hpp
include/pininvdyn/tasks/task-base.hpp
)
SET(${PROJECT_NAME}_SOLVERS_HEADERS
include/pininvdyn/solvers/fwd.hpp
)
SET(HEADERS
cmake_minimum_required(VERSION 3.10)
# Project properties
set(PROJECT_ORG stack-of-tasks)
set(PROJECT_NAME tsid)
set(PROJECT_DESCRIPTION
"Efficient Task Space Inverse Dynamics for Multi-body Systems based on Pinocchio"
)
set(PROJECT_URL "https://github.com/${PROJECT_ORG}/${PROJECT_NAME}")
# Project options
option(INSTALL_DOCUMENTATION "Build and install the documentation" OFF)
option(BUILD_PYTHON_INTERFACE "Build the python bindings" ON)
option(INSTALL_PYTHON_INTERFACE_ONLY "Install *ONLY* the python bindings" OFF)
option(SUFFIX_SO_VERSION "Suffix library name with its version" ON)
option(INITIALIZE_WITH_NAN "Initialize Eigen entries with NaN" OFF)
option(EIGEN_RUNTIME_NO_MALLOC
"If ON, it can assert in case of runtime allocation" ON)
option(EIGEN_NO_AUTOMATIC_RESIZING
"If ON, it forbids automatic resizing of dynamics arrays and matrices"
OFF)
option(BUILD_WITH_PROXQP "Support using the proxqp solver" OFF)
option(BUILD_WITH_OSQP "Support using the osqp solver" OFF)
# With pos, vel, acc awaiting renaming (e.g. in trajectory-base), we are
# producing a ton of deprecation warnings. Ignoring them for now; remove this
# once pos, vel, acc are renamed.
add_definitions(-Wno-deprecated-declarations)
# We frequently convert between signed and unsigned integers for Eigen::Index.
# Ignore them for now.
add_definitions(-Wno-sign-conversion)
# Project configuration
if(NOT INSTALL_PYTHON_INTERFACE_ONLY)
set(PROJECT_USE_CMAKE_EXPORT TRUE)
endif(NOT INSTALL_PYTHON_INTERFACE_ONLY)
set(CXX_DISABLE_WERROR TRUE)
set(DOXYGEN_USE_MATHJAX YES)
set(CMAKE_VERBOSE_MAKEFILE TRUE)
# Check if the submodule cmake have been initialized
set(JRL_CMAKE_MODULES "${CMAKE_CURRENT_LIST_DIR}/cmake")
if(EXISTS "${JRL_CMAKE_MODULES}/base.cmake")
message(STATUS "JRL cmakemodules found in 'cmake/' git submodule")
else()
find_package(jrl-cmakemodules QUIET CONFIG)
if(jrl-cmakemodules_FOUND)
get_property(
JRL_CMAKE_MODULES
TARGET jrl-cmakemodules::jrl-cmakemodules
PROPERTY INTERFACE_INCLUDE_DIRECTORIES)
message(STATUS "JRL cmakemodules found on system at ${JRL_CMAKE_MODULES}")
elseif(${CMAKE_VERSION} VERSION_LESS "3.14.0")
message(
FATAL_ERROR
"\nCan't find jrl-cmakemodules. Please either:\n"
" - use git submodule: 'git submodule update --init'\n"
" - or install https://github.com/jrl-umi3218/jrl-cmakemodules\n"
" - or upgrade your CMake version to >= 3.14 to allow automatic fetching\n"
)
else()
message(STATUS "JRL cmakemodules not found. Let's fetch it.")
include(FetchContent)
FetchContent_Declare(
"jrl-cmakemodules"
GIT_REPOSITORY "https://github.com/jrl-umi3218/jrl-cmakemodules.git")
FetchContent_MakeAvailable("jrl-cmakemodules")
FetchContent_GetProperties("jrl-cmakemodules" SOURCE_DIR JRL_CMAKE_MODULES)
endif()
endif()
include("${JRL_CMAKE_MODULES}/base.cmake")
include("${JRL_CMAKE_MODULES}/ide.cmake")
include("${JRL_CMAKE_MODULES}/apple.cmake")
set_default_cmake_build_type("RelWithDebInfo")
# Handle APPLE Cmake policy
if(APPLE)
apply_default_apple_configuration()
endif(APPLE)
# Project definition
compute_project_args(PROJECT_ARGS LANGUAGES CXX)
project(${PROJECT_NAME} ${PROJECT_ARGS})
if(INITIALIZE_WITH_NAN)
message(STATUS "Initialize with NaN all the Eigen entries.")
add_definitions(-DEIGEN_INITIALIZE_MATRICES_BY_NAN)
endif(INITIALIZE_WITH_NAN)
if(EIGEN_RUNTIME_NO_MALLOC)
message(STATUS "Option EIGEN_RUNTIME_NO_MALLOC on.")
add_definitions(-DEIGEN_RUNTIME_NO_MALLOC)
endif(EIGEN_RUNTIME_NO_MALLOC)
if(EIGEN_NO_AUTOMATIC_RESIZING)
message(STATUS "Option EIGEN_NO_AUTOMATIC_RESIZING on.")
add_definitions(-DEIGEN_NO_AUTOMATIC_RESIZING)
endif(EIGEN_NO_AUTOMATIC_RESIZING)
check_minimal_cxx_standard(17 ENFORCE)
# Project dependencies
if(BUILD_PYTHON_INTERFACE)
set(PYWRAP ${PROJECT_NAME}_pywrap)
add_project_dependency(eigenpy 2.7.12 REQUIRED)
endif(BUILD_PYTHON_INTERFACE)
add_project_dependency(pinocchio 2.3.1 REQUIRED)
add_project_dependency(eiquadprog 1.1.3 REQUIRED)
find_package(qpmad QUIET) # optional
if(qpmad_FOUND)
message(STATUS "qpmad found - building with qpmad support")
add_project_dependency(qpmad QUIET)
endif()
if(BUILD_TESTING)
find_package(Boost REQUIRED COMPONENTS unit_test_framework)
endif(BUILD_TESTING)
# Main Library
set(${PROJECT_NAME}_MATH_HEADERS
include/tsid/math/fwd.hpp
include/tsid/math/utils.hpp
include/tsid/math/constraint-base.hpp
include/tsid/math/constraint-equality.hpp
include/tsid/math/constraint-inequality.hpp
include/tsid/math/constraint-bound.hpp)
set(${PROJECT_NAME}_TASKS_HEADERS
include/tsid/tasks/fwd.hpp
include/tsid/tasks/task-base.hpp
include/tsid/tasks/task-motion.hpp
include/tsid/tasks/task-actuation.hpp
include/tsid/tasks/task-contact-force.hpp
include/tsid/tasks/task-com-equality.hpp
include/tsid/tasks/task-se3-equality.hpp
include/tsid/tasks/task-contact-force-equality.hpp
include/tsid/tasks/task-cop-equality.hpp
include/tsid/tasks/task-actuation-equality.hpp
include/tsid/tasks/task-actuation-bounds.hpp
include/tsid/tasks/task-joint-bounds.hpp
include/tsid/tasks/task-joint-posture.hpp
include/tsid/tasks/task-joint-posVelAcc-bounds.hpp
include/tsid/tasks/task-capture-point-inequality.hpp
include/tsid/tasks/task-angular-momentum-equality.hpp
include/tsid/tasks/task-two-frames-equality.hpp)
set(${PROJECT_NAME}_CONTACTS_HEADERS
include/tsid/contacts/fwd.hpp
include/tsid/contacts/contact-base.hpp
include/tsid/contacts/contact-6d.hpp
include/tsid/contacts/contact-point.hpp
include/tsid/contacts/measured-force-base.hpp
include/tsid/contacts/measured-3Dforce.hpp
include/tsid/contacts/measured-6Dwrench.hpp
include/tsid/contacts/contact-two-frame-positions.hpp)
set(${PROJECT_NAME}_TRAJECTORIES_HEADERS
include/tsid/trajectories/fwd.hpp
include/tsid/trajectories/trajectory-base.hpp
include/tsid/trajectories/trajectory-se3.hpp
include/tsid/trajectories/trajectory-euclidian.hpp)
set(${PROJECT_NAME}_SOLVERS_HEADERS
include/tsid/solvers/fwd.hpp
include/tsid/solvers/utils.hpp
include/tsid/solvers/solver-qpData.hpp
include/tsid/solvers/solver-HQP-output.hpp
include/tsid/solvers/solver-HQP-base.hpp
include/tsid/solvers/solver-HQP-factory.hpp
include/tsid/solvers/solver-HQP-factory.hxx
include/tsid/solvers/solver-HQP-qpoases.hpp
include/tsid/solvers/solver-HQP-eiquadprog.hpp
include/tsid/solvers/solver-HQP-eiquadprog-rt.hpp
include/tsid/solvers/solver-HQP-eiquadprog-rt.hxx
include/tsid/solvers/solver-HQP-eiquadprog-fast.hpp)
if(BUILD_WITH_PROXQP)
find_package(proxsuite REQUIRED)
list(APPEND ${PROJECT_NAME}_SOLVERS_HEADERS
include/tsid/solvers/solver-proxqp.hpp)
# Determine whether ot use the default target or the vectorized target, if
# available
set(proxsuite_INTERFACE proxsuite::proxsuite)
if(NOT TARGET proxsuite::proxsuite-vectorized)
message(
STATUS
"proxsuite::proxsuite-vectorized not available - defaulting to non-vectorized ProxQP"
)
else()
set(proxsuite_INTERFACE proxsuite::proxsuite-vectorized)
endif()
endif()
if(BUILD_WITH_OSQP)
find_package(OsqpEigen REQUIRED)
list(APPEND ${PROJECT_NAME}_SOLVERS_HEADERS
include/tsid/solvers/solver-osqp.hpp)
endif()
if(qpmad_FOUND)
list(APPEND ${PROJECT_NAME}_SOLVERS_HEADERS
include/tsid/solvers/solver-HQP-qpmad.hpp)
endif()
set(${PROJECT_NAME}_ROBOTS_HEADERS include/tsid/robots/fwd.hpp
include/tsid/robots/robot-wrapper.hpp)
set(${PROJECT_NAME}_FORMULATIONS_HEADERS
include/tsid/formulations/contact-level.hpp
include/tsid/formulations/inverse-dynamics-formulation-base.hpp
include/tsid/formulations/inverse-dynamics-formulation-acc-force.hpp)
set(${PROJECT_NAME}_HEADERS
include/tsid/macros.hpp
include/tsid/utils/statistics.hpp
include/tsid/utils/stop-watch.hpp
include/tsid/utils/Stdafx.hh
${${PROJECT_NAME}_MATH_HEADERS}
${${PROJECT_NAME}_TASKS_HEADERS}
${${PROJECT_NAME}_CONTACTS_HEADERS}
${${PROJECT_NAME}_TRAJECTORIES_HEADERS}
${${PROJECT_NAME}_SOLVERS_HEADERS}
)
${${PROJECT_NAME}_ROBOTS_HEADERS}
${${PROJECT_NAME}_FORMULATIONS_HEADERS})
LIST(REMOVE_DUPLICATES HEADERS)
list(REMOVE_DUPLICATES ${PROJECT_NAME}_HEADERS)
SET(HEADERS_FULL_PATH "")
FOREACH(header ${HEADERS})
LIST(APPEND HEADERS_FULL_PATH "${CMAKE_SOURCE_DIR}/${header}")
GET_FILENAME_COMPONENT(headerName ${header} NAME)
GET_FILENAME_COMPONENT(headerPath ${header} PATH)
INSTALL(FILES ${${PROJECT_NAME}_SOURCE_DIR}/${header}
DESTINATION ${CMAKE_INSTALL_PREFIX}/${headerPath}
PERMISSIONS OWNER_READ GROUP_READ WORLD_READ OWNER_WRITE)
ENDFOREACH(header ${HEADERS})
set(${PROJECT_NAME}_MATH_SOURCES
src/math/constraint-base.cpp src/math/constraint-equality.cpp
src/math/constraint-inequality.cpp src/math/constraint-bound.cpp
src/math/utils.cpp)
# --- MAIN LIBRARY -------------------------------------------------------------
ADD_SUBDIRECTORY(src)
set(${PROJECT_NAME}_TASKS_SOURCES
src/tasks/task-base.cpp
src/tasks/task-actuation-bounds.cpp
src/tasks/task-actuation-equality.cpp
src/tasks/task-actuation.cpp
src/tasks/task-com-equality.cpp
src/tasks/task-contact-force-equality.cpp
src/tasks/task-contact-force.cpp
src/tasks/task-cop-equality.cpp
src/tasks/task-joint-bounds.cpp
src/tasks/task-joint-posture.cpp
src/tasks/task-joint-posVelAcc-bounds.cpp
src/tasks/task-capture-point-inequality.cpp
src/tasks/task-motion.cpp
src/tasks/task-se3-equality.cpp
src/tasks/task-angular-momentum-equality.cpp
src/tasks/task-two-frames-equality.cpp)
# --- BINDINGS ----------------------------------------------------------------
#ADD_SUBDIRECTORY(bindings)
set(${PROJECT_NAME}_CONTACTS_SOURCES
src/contacts/contact-base.cpp
src/contacts/contact-6d.cpp
src/contacts/contact-point.cpp
src/contacts/measured-force-base.cpp
src/contacts/measured-3Dforce.cpp
src/contacts/measured-6Dwrench.cpp
src/contacts/contact-two-frame-positions.cpp)
# --- UNIT TESTS ---------------------------------------------------------------
#ADD_SUBDIRECTORY(unittest)
set(${PROJECT_NAME}_TRAJECTORIES_SOURCES
src/trajectories/trajectory-se3.cpp
src/trajectories/trajectory-euclidian.cpp)
# --- PACKAGING ----------------------------------------------------------------
PKG_CONFIG_APPEND_LIBS(${PROJECT_NAME})
PKG_CONFIG_APPEND_BOOST_LIBS(serialization)
set(${PROJECT_NAME}_SOLVERS_SOURCES
src/solvers/solver-HQP-base.cpp
src/solvers/solver-HQP-factory.cpp
src/solvers/solver-HQP-eiquadprog.cpp
src/solvers/solver-HQP-eiquadprog-fast.cpp
src/solvers/solver-HQP-qpoases.cpp
src/solvers/utils.cpp)
if(BUILD_WITH_PROXQP)
list(APPEND ${PROJECT_NAME}_SOLVERS_SOURCES src/solvers/solver-proxqp.cpp)
endif()
if(BUILD_WITH_OSQP)
list(APPEND ${PROJECT_NAME}_SOLVERS_SOURCES src/solvers/solver-osqp.cpp)
endif()
if(qpmad_FOUND)
list(APPEND ${PROJECT_NAME}_SOLVERS_SOURCES src/solvers/solver-HQP-qpmad.cpp)
endif()
set(${PROJECT_NAME}_ROBOTS_SOURCES src/robots/robot-wrapper.cpp)
SETUP_PROJECT_FINALIZE()
set(${PROJECT_NAME}_FORMULATIONS_SOURCES
src/formulations/contact-level.cpp
src/formulations/inverse-dynamics-formulation-base.cpp
src/formulations/inverse-dynamics-formulation-acc-force.cpp)
set(${PROJECT_NAME}_SOURCES
src/utils/statistics.cpp
src/utils/stop-watch.cpp
${${PROJECT_NAME}_MATH_SOURCES}
${${PROJECT_NAME}_TASKS_SOURCES}
${${PROJECT_NAME}_CONTACTS_SOURCES}
${${PROJECT_NAME}_TRAJECTORIES_SOURCES}
${${PROJECT_NAME}_SOLVERS_SOURCES}
${${PROJECT_NAME}_ROBOTS_SOURCES}
${${PROJECT_NAME}_FORMULATIONS_SOURCES})
add_header_group(${PROJECT_NAME}_HEADERS)
add_source_group(${PROJECT_NAME}_SOURCES)
add_library(${PROJECT_NAME} SHARED ${${PROJECT_NAME}_SOURCES}
${${PROJECT_NAME}_HEADERS})
target_include_directories(
${PROJECT_NAME} PUBLIC $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
target_link_libraries(${PROJECT_NAME} PUBLIC pinocchio::pinocchio
eiquadprog::eiquadprog)
if(BUILD_WITH_PROXQP)
target_compile_definitions(${PROJECT_NAME} PUBLIC -DTSID_WITH_PROXSUITE)
target_link_libraries(${PROJECT_NAME} PUBLIC proxsuite::proxsuite)
endif()
if(BUILD_WITH_OSQP)
target_link_libraries(${PROJECT_NAME} PUBLIC OsqpEigen::OsqpEigen)
target_compile_definitions(${PROJECT_NAME} PUBLIC -DTSID_WITH_OSQP)
endif()
if(qpmad_FOUND)
target_include_directories(${PROJECT_NAME} PUBLIC ${qpmad_INCLUDE_DIRS})
target_compile_definitions(${PROJECT_NAME} PUBLIC -DTSID_QPMAD_FOUND)
endif()
if(SUFFIX_SO_VERSION)
set_target_properties(${PROJECT_NAME} PROPERTIES SOVERSION ${PROJECT_VERSION})
endif(SUFFIX_SO_VERSION)
if(NOT INSTALL_PYTHON_INTERFACE_ONLY)
install(
TARGETS ${PROJECT_NAME}
EXPORT ${TARGETS_EXPORT_NAME}
DESTINATION lib)
endif(NOT INSTALL_PYTHON_INTERFACE_ONLY)
add_subdirectory(bindings)
if(BUILD_TESTING)
add_subdirectory(tests)
endif(BUILD_TESTING)
# --- PACKAGING ----------------------------------------------------------------
if(NOT INSTALL_PYTHON_INTERFACE_ONLY)
install(FILES package.xml DESTINATION share/${PROJECT_NAME})
endif(NOT INSTALL_PYTHON_INTERFACE_ONLY)
BSD 2-Clause License
Copyright (c) 2019-2022, CNRS, Univ. of Trento, INRIA, Max Planck Institure
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# TSID - Task Space Inverse Dynamics
[![Pipeline status](https://gitlab.laas.fr/stack-of-tasks/tsid/badges/master/pipeline.svg)](https://gitlab.laas.fr/stack-of-tasks/tsid/commits/master)
[![Coverage report](https://gitlab.laas.fr/stack-of-tasks/tsid/badges/master/coverage.svg?job=doc-coverage)](http://projects.laas.fr/gepetto/doc/stack-of-tasks/tsid/master/coverage/)
[![PyPI version](https://badge.fury.io/py/tsid.svg)](https://badge.fury.io/py/tsid)
[![License](https://img.shields.io/badge/License-BSD%202--Clause-green.svg)](https://opensource.org/licenses/BSD-2-Clause)
[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
[![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff)
TSID is a C++ library for optimization-based inverse-dynamics control based on the rigid multi-body dynamics library [Pinocchio](https://github.com/stack-of-tasks/pinocchio).
## Documentation
* Take a look at the project [wiki](https://github.com/stack-of-tasks/tsid/wiki) for an overview of the design of the library.
* In the exercises folder you can find several examples of how to use TSID in Python with robot manipulators, humanoids, or quadrupeds.
* On the [website of Andrea Del Prete](https://andreadelprete.github.io/#teaching) you can find slides and video lessons on TSID.
* [Memmo 2020 summer school](https://memory-of-motion.github.io/summer-school/)
## Installation with Conda
If you want to directly dive into TSID in Python, only one single line is sufficient (assuming you have Conda installed):
<p align="center">
conda install tsid -c conda-forge
</p>
## Installation from Debian/Ubuntu packages, with robotpkg
If you have never added robotpkg's software repository you can do it with the following commands:
```
sudo tee /etc/apt/sources.list.d/robotpkg.list <<EOF
deb [arch=amd64] http://robotpkg.openrobots.org/packages/debian/pub $(lsb_release -sc) robotpkg
EOF
curl http://robotpkg.openrobots.org/packages/debian/robotpkg.key | sudo apt-key add -
sudo apt update
```
You can install TSID and its python bindings (replace * with you Python version) with:
```
sudo apt install robotpkg-py3*-tsid
```
## Installation from sources
First you need to install the following dependencies:
* boost (unit_test_framework)
* eigen3
* [pinocchio](https://github.com/stack-of-tasks/pinocchio)
* [eiquadprog](https://github.com/stack-of-tasks/eiquadprog)
* [example-robot-data](https://github.com/Gepetto/example-robot-data) (only for running the examples)
To install eigen3 on Ubuntu you can use apt-get:
`sudo apt-get install libeigen3-dev`
To install [pinocchio](https://github.com/stack-of-tasks/pinocchio) follow the instruction on its website.
To compile TSID:
cd $DEVEL/openrobots/src/
git clone --recursive git@github.com:stack-of-tasks/tsid.git
cd tsid
mkdir _build-RELEASE
cd _build-RELEASE
cmake .. -DCMAKE_BUILD_TYPE=RELEASE -DCMAKE_INSTALL_PREFIX=$DEVEL/openrobots
make install
## Python Bindings
To use this library in python, we offer python bindings based on Boost.Python and EigenPy.
To install EigenPy you can compile the source code:
git clone https://github.com/stack-of-tasks/eigenpy
or, on Ubuntu, you can use apt-get:
sudo apt-get install robotpkg-py3*-eigenpy
For testing the python bindings, you can run the unit test scripts in the `script` folder, for instance:
ipython script/test_formulation.py
To run the demo using gepetto-viewer:
ipython demo/demo_romeo.py
## Credits
This package is authored by:
- [Andrea Del Prete](https://andreadelprete.github.io) (University of Trento)
- [Justin Carpentier](https://jcarpent.github.io) (INRIA)
It includes key contributions from:
- [Julian Viereck](https://github.com/jviereck) (Max Planck Institute, New York University)
- [Sanghyun Kim](https://github.com/ggory15) (Seoul National University)
- [Eloise Dalin](https://github.com/dalinel) (LORIA, INRIA Lorraine)
- [Noelie Ramuzat](https://github.com/NoelieRamuzat) (LAAS, CNRS)
- [Pierre Fernbach](https://github.com/pFernbach) (LAAS, CNRS)
- [Aurelie Bonnefoy](https://github.com/ABonnefoy) (LAAS, CNRS)
- [Etienne Arlaud](https://github.com/EtienneAr) (INRIA)
- [Fabian Schramm](https://github.com/fabinsch) (INRIA)
And is maintained by:
- [Guilhem Saurel](https://github.com/nim65s) (LAAS-CNRS)
## Citing
If you are (or not) happy with TSID and want to cite it, please use the following citation:
@inproceedings {adelprete:jnrh:2016,
title = {Implementing Torque Control with High-Ratio Gear Boxes and without Joint-Torque Sensors},
booktitle = {Int. Journal of Humanoid Robotics},
year = {2016},
pages = {1550044},
url = {https://hal.archives-ouvertes.fr/hal-01136936/document},
author = {Andrea Del Prete, Nicolas Mansard, Oscar E Ramos, Olivier Stasse, Francesco Nori}
}
#
# Copyright (c) 2017-2018 CNRS
#
# This file is part of tsid tsid is free software: you can redistribute it
# and/or modify it under the terms of the GNU Lesser General Public License as
# published by the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version. tsid is distributed in the hope that it
# will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
# Lesser Public License for more details. You should have received a copy of the
# GNU Lesser General Public License along with tsid If not, see
# <http://www.gnu.org/licenses/>.
if(BUILD_PYTHON_INTERFACE)
add_subdirectory(python)
endif(BUILD_PYTHON_INTERFACE)
#
# Copyright (c) 2017-2021 CNRS
#
# This file is part of tsid tsid is free software: you can redistribute it
# and/or modify it under the terms of the GNU Lesser General Public License as
# published by the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version. tsid is distributed in the hope that it
# will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
# Lesser Public License for more details. You should have received a copy of the
# GNU Lesser General Public License along with tsid If not, see
# <http://www.gnu.org/licenses/>.
# --- LIBRARY --- #
set(${PYWRAP}_SOURCES
constraint/constraint-bound.cpp
constraint/constraint-equality.cpp
constraint/constraint-inequality.cpp
contacts/contact-6d.cpp
contacts/contact-point.cpp
contacts/contact-two-frame-positions.cpp
formulations/formulation.cpp
math/utils.cpp
module.cpp
robots/robot-wrapper.cpp
solvers/HQPData.cpp
solvers/HQPOutput.cpp
solvers/solver-HQP-eiquadprog.cpp
tasks/task-actuation-bounds.cpp
tasks/task-am-equality.cpp
tasks/task-com-equality.cpp
tasks/task-contact-force-equality.cpp
tasks/task-cop-equality.cpp
tasks/task-joint-bounds.cpp
tasks/task-joint-posture.cpp
tasks/task-joint-posVelAcc-bounds.cpp
tasks/task-se3-equality.cpp
tasks/task-two-frames-equality.cpp
trajectories/trajectory-base.cpp
trajectories/trajectory-euclidian.cpp
trajectories/trajectory-se3.cpp)
set(${PYWRAP}_HEADERS
../../include/tsid/bindings/python/constraint/constraint-bound.hpp
../../include/tsid/bindings/python/constraint/constraint-equality.hpp
../../include/tsid/bindings/python/constraint/constraint-inequality.hpp
../../include/tsid/bindings/python/constraint/expose-constraints.hpp
../../include/tsid/bindings/python/contacts/contact-6d.hpp
../../include/tsid/bindings/python/contacts/contact-point.hpp
../../include/tsid/bindings/python/contacts/contact-two-frame-positions.hpp
../../include/tsid/bindings/python/contacts/contact-two-frames.hpp
../../include/tsid/bindings/python/contacts/expose-contact.hpp
../../include/tsid/bindings/python/formulations/expose-formulations.hpp
../../include/tsid/bindings/python/formulations/formulation.hpp
../../include/tsid/bindings/python/fwd.hpp
../../include/tsid/bindings/python/math/utils.hpp
../../include/tsid/bindings/python/robots/expose-robots.hpp
../../include/tsid/bindings/python/robots/robot-wrapper.hpp
../../include/tsid/bindings/python/solvers/expose-solvers.hpp
../../include/tsid/bindings/python/solvers/HQPData.hpp
../../include/tsid/bindings/python/solvers/HQPOutput.hpp
../../include/tsid/bindings/python/solvers/solver-HQP-eiquadprog.hpp
../../include/tsid/bindings/python/solvers/solver-osqp.hpp
../../include/tsid/bindings/python/solvers/solver-proxqp.hpp
../../include/tsid/bindings/python/tasks/expose-tasks.hpp
../../include/tsid/bindings/python/tasks/task-actuation-bounds.hpp
../../include/tsid/bindings/python/tasks/task-am-equality.hpp
../../include/tsid/bindings/python/tasks/task-com-equality.hpp
../../include/tsid/bindings/python/tasks/task-contact-force-equality.hpp
../../include/tsid/bindings/python/tasks/task-cop-equality.hpp
../../include/tsid/bindings/python/tasks/task-joint-bounds.hpp
../../include/tsid/bindings/python/tasks/task-joint-posture.hpp
../../include/tsid/bindings/python/tasks/task-joint-posVelAcc-bounds.hpp
../../include/tsid/bindings/python/tasks/task-se3-equality.hpp
../../include/tsid/bindings/python/tasks/task-two-frames-equality.hpp
../../include/tsid/bindings/python/trajectories/expose-trajectories.hpp
../../include/tsid/bindings/python/trajectories/trajectory-base.hpp
../../include/tsid/bindings/python/trajectories/trajectory-euclidian.hpp
../../include/tsid/bindings/python/trajectories/trajectory-se3.hpp
../../include/tsid/bindings/python/utils/container.hpp)
add_library(${PYWRAP} SHARED ${${PYWRAP}_SOURCES} ${${PYWRAP}_HEADERS})
target_link_libraries(${PYWRAP} PUBLIC ${PROJECT_NAME} eigenpy::eigenpy)
if(IS_ABSOLUTE ${PYTHON_SITELIB})
set(${PYWRAP}_INSTALL_DIR ${PYTHON_SITELIB}/${PROJECT_NAME})
else()
set(${PYWRAP}_INSTALL_DIR
${CMAKE_INSTALL_PREFIX}/${PYTHON_SITELIB}/${PROJECT_NAME})
endif()
if(BUILD_WITH_COMMIT_VERSION)
tag_library_version(${PYWRAP})
endif(BUILD_WITH_COMMIT_VERSION)
add_header_group(${PYWRAP}_HEADERS)
add_source_group(${PYWRAP}_SOURCES)
# We need to change the extension for python bindings
set_target_properties(
${PYWRAP}
PROPERTIES SUFFIX ${PYTHON_EXT_SUFFIX}
PREFIX ""
LIBRARY_OUTPUT_DIRECTORY
"${CMAKE_BINARY_DIR}/bindings/python/${PROJECT_NAME}")
if(UNIX)
get_relative_rpath(${${PYWRAP}_INSTALL_DIR} ${PYWRAP}_INSTALL_RPATH)
set_target_properties(${PYWRAP} PROPERTIES INSTALL_RPATH
"${${PYWRAP}_INSTALL_RPATH}")
endif()
install(
TARGETS ${PYWRAP}
EXPORT ${TARGETS_EXPORT_NAME}
DESTINATION ${PYTHON_SITELIB}/${PROJECT_NAME})
set(PYTHON_FILES __init__.py)
foreach(python ${PYTHON_FILES})
python_install(${PROJECT_NAME} ${python} ${${PYWRAP}_INSTALL_DIR})
endforeach(python)
//
// Copyright (c) 2018 CNRS
//
// This file is part of tsid
// tsid is free software: you can redistribute it
// and/or modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation, either version
// 3 of the License, or (at your option) any later version.
// tsid is distributed in the hope that it will be
// useful, but WITHOUT ANY WARRANTY; without even the implied warranty
// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// General Lesser Public License for more details. You should have
// received a copy of the GNU Lesser General Public License along with
// tsid If not, see
// <http://www.gnu.org/licenses/>.
//
#include "tsid/bindings/python/constraint/constraint-bound.hpp"
#include "tsid/bindings/python/constraint/expose-constraints.hpp"
namespace tsid {
namespace python {
void exposeConstraintBound() {
ConstraintPythonVisitor<tsid::math::ConstraintBound>::expose(
"ConstraintBound");
}
} // namespace python
} // namespace tsid
//
// Copyright (c) 2018 CNRS
//
// This file is part of tsid
// tsid is free software: you can redistribute it
// and/or modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation, either version
// 3 of the License, or (at your option) any later version.
// tsid is distributed in the hope that it will be
// useful, but WITHOUT ANY WARRANTY; without even the implied warranty
// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// General Lesser Public License for more details. You should have
// received a copy of the GNU Lesser General Public License along with
// tsid If not, see
// <http://www.gnu.org/licenses/>.
//
#include "tsid/bindings/python/constraint/constraint-equality.hpp"
#include "tsid/bindings/python/constraint/expose-constraints.hpp"
namespace tsid {
namespace python {
void exposeConstraintEquality() {
ConstraintEqPythonVisitor<tsid::math::ConstraintEquality>::expose(
"ConstraintEquality");
}
} // namespace python
} // namespace tsid
//
// Copyright (c) 2018 CNRS
//
// This file is part of tsid
// tsid is free software: you can redistribute it
// and/or modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation, either version
// 3 of the License, or (at your option) any later version.
// tsid is distributed in the hope that it will be
// useful, but WITHOUT ANY WARRANTY; without even the implied warranty
// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// General Lesser Public License for more details. You should have
// received a copy of the GNU Lesser General Public License along with
// tsid If not, see
// <http://www.gnu.org/licenses/>.
//
#include "tsid/bindings/python/constraint/constraint-inequality.hpp"
#include "tsid/bindings/python/constraint/expose-constraints.hpp"
namespace tsid {
namespace python {
void exposeConstraintInequality() {
ConstraintIneqPythonVisitor<tsid::math::ConstraintInequality>::expose(
"ConstraintInequality");
}
} // namespace python
} // namespace tsid
//
// Copyright (c) 2018 CNRS, NYU, MPI Tübingen
//
// This file is part of tsid
// tsid is free software: you can redistribute it
// and/or modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation, either version
// 3 of the License, or (at your option) any later version.
// tsid is distributed in the hope that it will be
// useful, but WITHOUT ANY WARRANTY; without even the implied warranty
// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// General Lesser Public License for more details. You should have
// received a copy of the GNU Lesser General Public License along with
// tsid If not, see
// <http://www.gnu.org/licenses/>.
//
#include "tsid/bindings/python/contacts/contact-6d.hpp"
#include "tsid/bindings/python/contacts/expose-contact.hpp"
namespace tsid {
namespace python {
void exposeContact6d() {
Contact6DPythonVisitor<tsid::contacts::Contact6d>::expose("Contact6d");
}
} // namespace python
} // namespace tsid
//
// Copyright (c) 2018 CNRS
//
// This file is part of tsid
// tsid is free software: you can redistribute it
// and/or modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation, either version
// 3 of the License, or (at your option) any later version.
// tsid is distributed in the hope that it will be
// useful, but WITHOUT ANY WARRANTY; without even the implied warranty
// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// General Lesser Public License for more details. You should have
// received a copy of the GNU Lesser General Public License along with
// tsid If not, see
// <http://www.gnu.org/licenses/>.
//
#include "tsid/bindings/python/contacts/contact-point.hpp"
#include "tsid/bindings/python/contacts/expose-contact.hpp"
namespace tsid {
namespace python {
void exposeContactPoint() {
ContactPointPythonVisitor<tsid::contacts::ContactPoint>::expose(
"ContactPoint");
}
} // namespace python
} // namespace tsid
//
// Copyright (c) 2023 MIPT
//
// This file is part of tsid
// tsid is free software: you can redistribute it
// and/or modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation, either version
// 3 of the License, or (at your option) any later version.
// tsid is distributed in the hope that it will be
// useful, but WITHOUT ANY WARRANTY; without even the implied warranty
// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// General Lesser Public License for more details. You should have
// received a copy of the GNU Lesser General Public License along with
// tsid If not, see
// <http://www.gnu.org/licenses/>.
//
#include "tsid/bindings/python/contacts/contact-two-frame-positions.hpp"
#include "tsid/bindings/python/contacts/expose-contact.hpp"
namespace tsid {
namespace python {
void exposeContactTwoFramePositions() {
ContactTwoFramePositionsPythonVisitor<
tsid::contacts::ContactTwoFramePositions>::
expose("ContactTwoFramePositions");
}
} // namespace python
} // namespace tsid
//
// Copyright (c) 2018 CNRS
//
// This file is part of tsid
// tsid is free software: you can redistribute it
// and/or modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation, either version
// 3 of the License, or (at your option) any later version.
// tsid is distributed in the hope that it will be
// useful, but WITHOUT ANY WARRANTY; without even the implied warranty
// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// General Lesser Public License for more details. You should have
// received a copy of the GNU Lesser General Public License along with
// tsid If not, see
// <http://www.gnu.org/licenses/>.
//
#include "tsid/bindings/python/formulations/expose-formulations.hpp"
#include "tsid/bindings/python/formulations/formulation.hpp"
namespace tsid {
namespace python {
void exposeInverseDynamicsFormulationAccForce() {
InvDynPythonVisitor<tsid::InverseDynamicsFormulationAccForce>::expose(
"InverseDynamicsFormulationAccForce");
}
} // namespace python
} // namespace tsid