Commit cc0b42d6 authored by Guilhem Saurel's avatar Guilhem Saurel
Browse files

Merge branch 'devel' into cmake-export

parents 74adadf9 27041c25
python/cmd
......@@ -4,65 +4,32 @@
# Florent Forget, LAAS/CNRS
# Paul Dandignac, LAAS/CNRS
#
# This file is part of sot-torque-control.
# sot-torque-control 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.
#
# sot-torque-control 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
# sot-torque-control. If not, see <http://www.gnu.org/licenses/>.
CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
CMAKE_MINIMUM_REQUIRED(VERSION 3.1)
SET(PROJECT_NAMESPACE stack-of-tasks)
SET(PROJECT_NAME sot-torque-control)
SET(PROJECT_DESCRIPTION "Collection of dynamic-graph entities aimed at implementing torque control on different robots.")
SET(PROJECT_URL "https://github.com/${PROJECT_NAMESPACE}/${PROJECT_NAME}")
# Export CMake Target
SET(PROJECT_USE_CMAKE_EXPORT TRUE)
OPTION(BUILD_PYTHON_INTERFACE "Build the python bindings" ON)
OPTION(INSTALL_PYTHON_INTERFACE_ONLY "Install *ONLY* the python binding" OFF)
OPTION(INITIALIZE_WITH_NAN "Initialize Eigen entries with NaN" ON)
# Disable -Werror on Unix for now.
SET(CUSTOM_HEADER_DIR "sot/torque_control")
SET(DOXYGEN_USE_MATHJAX YES)
SET(CXX_DISABLE_WERROR True)
#add_compile_options(-std=c++11) # CMake 2.8.12 or newer
#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
IF(NOT INSTALL_PYTHON_INTERFACE_ONLY)
SET(PROJECT_USE_CMAKE_EXPORT TRUE)
ENDIF(NOT INSTALL_PYTHON_INTERFACE_ONLY)
INCLUDE(cmake/base.cmake)
SET(CUSTOM_HEADER_DIR "sot/torque-control")
SET(DOXYGEN_USE_MATHJAX YES)
# Specify the project.
cmake_policy(SET CMP0048 NEW)
PROJECT(${PROJECT_NAME}
LANGUAGES
CXX
VERSION
${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}
)
find_package (Boost REQUIRED
regex filesystem system thread program_options unit_test_framework)
find_package (Eigen3 REQUIRED NO_MODULE)
INCLUDE(cmake/boost.cmake)
INCLUDE(cmake/python.cmake)
INCLUDE(cmake/test.cmake)
SET(PKG_CONFIG_ADDITIONAL_VARIABLES
${PKG_CONFIG_ADDITIONAL_VARIABLES}
plugindirname
plugindir
)
COMPUTE_PROJECT_ARGS(PROJECT_ARGS LANGUAGES CXX)
PROJECT(${PROJECT_NAME} ${PROJECT_ARGS})
OPTION (INITIALIZE_WITH_NAN "Initialize Eigen entries with NaN" ON)
IF(INITIALIZE_WITH_NAN)
MESSAGE(STATUS "Initialize with NaN all the Eigen entries.")
ADD_DEFINITIONS(-DEIGEN_INITIALIZE_MATRICES_BY_NAN)
......@@ -70,23 +37,22 @@ ENDIF(INITIALIZE_WITH_NAN)
PKG_CONFIG_APPEND_LIBS("sot-torque-control")
# Default option for python.
OPTION (BUILD_PYTHON_INTERFACE "Build the python bindings" ON)
OPTION (INSTALL_PYTHON_INTERFACE_ONLY "Install *ONLY* the python binding" OFF)
SET(BOOST_COMPONENTS thread filesystem program_options unit_test_framework system regex)
IF(BUILD_PYTHON_INTERFACE)
FINDPYTHON()
SET(BOOST_COMPONENTS ${BOOST_COMPONENTS} python)
ADD_REQUIRED_DEPENDENCY("dynamic-graph-python >= 3.0.0")
SET(${LIBRARY_NAME}_PYTHON_FILES python/*.py)
SET(PYTHON_INSTALL_DIR ${CMAKE_INSTALL_PREFIX}/${PYTHON_SITELIB}/dynamic_graph/sot/torque_control)
INCLUDE_DIRECTORIES(${PYTHON_INCLUDE_DIR})
ADD_PROJECT_DEPENDENCY(dynamic-graph-python 3.0.0 REQUIRED PKG_CONFIG_REQUIRES "dynamic-graph-python >= 3.0.0")
SET(PYTHON_LIBRARY_DIR dynamic_graph/sot/torque_control)
SET(PYTHON_INSTALL_DIR ${PYTHON_SITELIB}/${PYTHON_LIBRARY_DIR})
INCLUDE_DIRECTORIES(SYSTEM ${PYTHON_INCLUDE_DIR})
ENDIF(BUILD_PYTHON_INTERFACE)
# Declare dependencies
ADD_PROJECT_DEPENDENCY(dynamic-graph)
ADD_PROJECT_DEPENDENCY(sot-core)
ADD_REQUIRED_DEPENDENCY("pinocchio >= 1.2")
SEARCH_FOR_BOOST()
ADD_PROJECT_DEPENDENCY(Eigen3 REQUIRED PKG_CONFIG_REQUIRES eigen3)
ADD_PROJECT_DEPENDENCY(dynamic-graph 3.8.0 REQUIRED PKG_CONFIG_REQUIRES "dynamic-graph >= 3.8.0")
ADD_PROJECT_DEPENDENCY(sot-core 4.8.0 REQUIRED PKG_CONFIG_REQUIRES "sot-core >= 4.8.0")
ADD_PROJECT_DEPENDENCY(pinocchio 2.3.1 REQUIRED PKG_CONFIG_REQUIRES "pinocchio >= 2.3.1")
ADD_REQUIRED_DEPENDENCY("tsid")
ADD_REQUIRED_DEPENDENCY("parametric-curves")
ADD_REQUIRED_DEPENDENCY("simple_humanoid_description")
......@@ -121,10 +87,6 @@ SET(${LIBRARY_NAME}_HEADERS
include/sot/torque_control/utils/vector-conversions.hh
)
#INSTALL(FILES ${${LIBRARY_NAME}_HEADERS}
# DESTINATION include/sot/torque-control
# PERMISSIONS OWNER_READ GROUP_READ WORLD_READ OWNER_WRITE)
SET(${LIBRARY_NAME}_SOURCES ${${LIBRARY_NAME}_HEADERS}
src/trajectory-generators.cpp
src/lin-estimator.cpp
......@@ -148,10 +110,9 @@ PKG_CONFIG_USE_DEPENDENCY(${LIBRARY_NAME} tsid)
PKG_CONFIG_USE_DEPENDENCY(${LIBRARY_NAME} parametric-curves)
IF(BUILD_PYTHON_INTERFACE)
PKG_CONFIG_USE_DEPENDENCY(${LIBRARY_NAME} dynamic-graph-python)
ADD_SUBDIRECTORY(python/${PYTHON_LIBRARY_DIR})
ENDIF(BUILD_PYTHON_INTERFACE)
IF(UNIX)
TARGET_LINK_LIBRARIES(${LIBRARY_NAME} ${CMAKE_DL_LIBS})
ENDIF(UNIX)
......@@ -174,24 +135,24 @@ IF(BUILD_PYTHON_INTERFACE)
python/dynamic_graph/sot/torque_control/create_entities_utils.py
python/dynamic_graph/sot/torque_control/main_sim.py
DESTINATION ${PYTHON_SITELIB}/dynamic_graph/sot/torque_control)
INSTALL(FILES
python/dynamic_graph/sot/torque_control/identification/__init__.py
python/dynamic_graph/sot/torque_control/identification/identification_utils.py
DESTINATION ${PYTHON_SITELIB}/dynamic_graph/sot/torque_control/identification)
INSTALL(FILES python/dynamic_graph/sot/torque_control/utils/__init__.py
python/dynamic_graph/sot/torque_control/utils/plot_utils.py
python/dynamic_graph/sot/torque_control/utils/sot_utils.py
python/dynamic_graph/sot/torque_control/utils/filter_utils.py
DESTINATION ${PYTHON_SITELIB}/dynamic_graph/sot/torque_control/utils)
INSTALL(FILES python/dynamic_graph/sot/torque_control/tests/__init__.py
python/dynamic_graph/sot/torque_control/tests/test_control_manager.py
python/dynamic_graph/sot/torque_control/tests/test_balance_ctrl_openhrp.py
python/dynamic_graph/sot/torque_control/tests/test_velocity_filters.py
DESTINATION ${PYTHON_SITELIB}/dynamic_graph/sot/torque_control/tests)
ENDIF(BUILD_PYTHON_INTERFACE)
ADD_SUBDIRECTORY(src)
......@@ -231,4 +192,9 @@ IF(BUILD_PYTHON_INTERFACE)
ENDIF(BUILD_PYTHON_INTERFACE)
SETUP_PROJECT_PACKAGE_FINALIZE()
IF(NOT INSTALL_PYTHON_INTERFACE_ONLY)
ADD_SUBDIRECTORY(include/${CUSTOM_HEADER_DIR})
ENDIF(NOT INSTALL_PYTHON_INTERFACE_ONLY)
ADD_SUBDIRECTORY(src)
ADD_SUBDIRECTORY(unitTesting)
#
# Copyright 2010 CNRS
# Author: Florent Lamiraux
#
# get the python script install path
IF(BUILD_PYTHON_INTERFACE)
INCLUDE(../cmake/sphinx.cmake)
SPHINX_SETUP()
SPHINX_FINALIZE()
INSTALL (FILES
pictures/feature.png
pictures/task.png
DESTINATION ${_PKG_CONFIG_DOXYGENDOCDIR}/pictures)
ENDIF(BUILD_PYTHON_INTERFACE)
This diff is collapsed.
# Overview {#index}
<!--
/*
* Copyright 2017, Andrea Del Prete, LAAS-CNRS
*
* This file is part of sot-torque-control.
* sot-torque-control 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.
* sot-torque-control 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 Lesser General Public License for more details. You should
* have received a copy of the GNU Lesser General Public License along
* with sot-torque-control. If not, see <http://www.gnu.org/licenses/>.
*/
-->
\section OverviewIntro Introduction to sot-torque-control
[![License](https://img.shields.io/badge/License-BSD%202--Clause-orange.svg)](https://opensource.org/licenses/BSD-2-Clause)
[![Building Status](https://travis-ci.org/stack-of-tasks/sot-torque-control.svg?branch=master)](https://travis-ci.org/stack-of-tasks/sot-torque-control)
[![Pipeline status](https://gepgitlab.laas.fr/stack-of-tasks/sot-torque-control/badges/master/pipeline.svg)](https://gepgitlab.laas.fr/stack-of-tasks/sot-torque-control/commits/master)
[![Coverage report](https://gepgitlab.laas.fr/stack-of-tasks/sot-torque-control/badges/master/coverage.svg?job=doc-coverage)](http://projects.laas.fr/gepetto/doc/stack-of-tasks/sot-torque-control/master/coverage/)
The library sot-torque-control contains a collection of dynamic-graph entities aimed at implementing torque control on different robots.
You can find a description of the main entities in the following <a href="https://github.com/stack-of-tasks/sot-torque-control/wiki">wiki</a>.
## Dependencies
This project depends on:
* [dynamic-graph](https://github.com/jrl-umi3218/dynamic-graph) >= 3.0.0
* [dynamic-graph-python](https://github.com/stack-of-tasks/dynamic-graph-python) >= 3.0.0
* [sot-core](https://github.com/stack-of-tasks/sot-core) >= 3.0.0
* [pinocchio](https://github.com/stack-of-tasks/pinocchio) >= 1.2
* [tsid](https://github.com/stack-of-tasks/tsid) >= 1.2
* [PinInvDyn](https://github.com/stack-of-tasks/invdyn)
* [parametric-curves](https://github.com/stack-of-tasks/parametric-curves)
* [simple_humanoid_description](https://github.com/laas/simple_humanoid_description)(for unit testing)
All of these packages (except PinInvDyn) can be installed through [robotpkg](http://robotpkg.openrobots.org/).
In particular, you can find them in [robotpkg-wip](http://robotpkg.openrobots.org/robotpkg-wip.html) (work in progress), a subset of robotpkg.
You will need the sot-talos and talos-dev packages:
```
sudo apt-get install robotpkg-py27-sot-talos robotpkg-talos-dev
```
Pay attention not to install ROS using robotpkg though, because it would install the latest version, which may not be what you need.
You can find the full installation procedure in the <a href="md_doc_installation.html">installation page</a>.
Quick instructions on how to run a test can be found <a href="md_doc_running.html">here</a>.
/* Customizing Doxygen output */
/* Needed to allow line breaks in tables*/
.memberdecls {
table-layout: fixed;
width: 100%;
}
/* Needed to break long template names*/
.memTemplItemLeft {
white-space: normal !important;
word-wrap: break-word;
}
/* Needed to break long template names*/
.memItemLeft {
white-space: normal !important;
word-wrap: break-word;
}
<!-- HTML header for doxygen 1.8.11-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen $doxygenversion"/>
<!--BEGIN PROJECT_NAME--><title>$projectname: $title</title><!--END PROJECT_NAME-->
<!--BEGIN !PROJECT_NAME--><title>$title</title><!--END !PROJECT_NAME-->
<link href="$relpath^tabs.css" rel="stylesheet" type="text/css"/>
<link href="$relpath^pinocchio.ico" rel="icon" type="image/x-icon">
<script type="text/javascript" src="$relpath^jquery.js"></script>
<script type="text/javascript" src="$relpath^dynsections.js"></script>
$treeview
$search
$mathjax
<link href="$relpath^$stylesheet" rel="stylesheet" type="text/css" />
$extrastylesheet
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<!--BEGIN TITLEAREA-->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<!--BEGIN PROJECT_LOGO-->
<td id="projectlogo"><img alt="Logo" src="$relpath^$projectlogo"/></td>
<!--END PROJECT_LOGO-->
<!--BEGIN PROJECT_NAME-->
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">$projectname
<!--BEGIN PROJECT_NUMBER-->&#160;<span id="projectnumber">$projectnumber</span><!--END PROJECT_NUMBER-->
</div>
<!--BEGIN PROJECT_BRIEF--><div id="projectbrief">$projectbrief</div><!--END PROJECT_BRIEF-->
</td>
<!--END PROJECT_NAME-->
<!--BEGIN !PROJECT_NAME-->
<!--BEGIN PROJECT_BRIEF-->
<td style="padding-left: 0.5em;">
<div id="projectbrief">$projectbrief</div>
</td>
<!--END PROJECT_BRIEF-->
<!--END !PROJECT_NAME-->
<!--BEGIN DISABLE_INDEX-->
<!--BEGIN SEARCHENGINE-->
<td>$searchbox</td>
<!--END SEARCHENGINE-->
<!--END DISABLE_INDEX-->
</tr>
</tbody>
</table>
</div>
<!--END TITLEAREA-->
<!-- end header part -->
# Installation
1. Clone the git repository:
```
git clone --recursive https://github.com/stack-of-tasks/sot-torque-control.git
cd sot-torque-control
```
2. If you need it, switch to the devel branch
```
git checkout devel
```
3. Create the build directory and move there
```
mkdir _build-RELEASE
cd _build-RELEASE
```
4. Run cmake
```
cmake -DCMAKE_BUILD_TYPE=RELEASE -DCMAKE_INSTALL_PREFIX=$DEVEL_DIR/openrobots
```
In Ubuntu 14.04 you may need to add `-DCMAKE_CXX_FLAGS="-std=c++11"`.
5. Build the package
```
make -j4
```
6. Install the package
```
make install
```
Copy in this directory the image you wish to use in the footer of the documentation or edit file sot-core/doc/footer.html and
remove this file.
# Running a test
In the following, we quickly demonstrate how to run a test with sot-torque-control and <a href="https://gepgitlab.laas.fr/pyrene-dev/talos-torque-control.git">talos-torque-control</a>.
## Start the simulation
First of all, you need to start the simulation.
To start Gazebo, load a scene and spawn Talos, the simplest way is to directly use the launch file provided by PAL:
```
roslaunch talos_gazebo talos_gazebo.launch
```
Notice that this will spawn Talos at configuration zero. This is not always what you want.
The package talos_data offers different launch files to spawn it at different configurations.
Most commonly, you might want to spawn the robot in the half-sitting position:
```
roslaunch talos_data talos_gazebo.launch start_half_sitting:=true
```
## Start the SoT in position mode
To start the SoT in simulation in position mode:
```
roslaunch roscontrol_sot_talos sot_talos_controller_gazebo.launch
```
## Start the SoT in torque mode
To start the SoT in simulation in torque mode:
```
roslaunch roscontrol_sot_talos sot_talos_controller_gazebo_effort.launch
```
## Run the test
First of all, you need to go to the folder where your script is.
For instance, for running the standard tests of talos-torque-control, assuming you are in the root directory:
```
cd script
```
Then, you can just run the chosen test. For instance:
```
python sim_com.py position
```
This will launch a test routine executing a sinusoid on the CoM of the robot in position control (you should have started the SoT in position mode).
It also saves the dynamic graph in /tmp/sot_talos_tsid_com.pdf.
### Graph of the architecture
\image html Sot_torque_control_framework_for_position_control.png
For torque control simply run:
```
python sim_com.py torque
```
### Graph of the architecture
\image html Sot_torque_control_framework_for_torque_control.png
These two examples replicate the ex2 of the TSID jupyter notebooks in position and torque control in Gazebo (see the jupyter <a href="https://github.com/stack-of-tasks/tsid/blob/master/exercizes/notebooks/TSID_ex2.ipynb">here</a>).
## Interacting with the dynamic graph
If you want to dynamically interact with the graph
```
rosrun dynamic_graph_bridge run_command
```
## Other
More information on how to use the SoT and how to work on Talos can be found <a href="https://wiki.laas.fr/robots/Pyrene">in the robot wiki page</a> (you need LAAS permissions to access this).
/*
* Copyright 2017, Andrea Del Prete, LAAS-CNRS
*
* This file is part of sot-torque-control.
* sot-torque-control 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.
* sot-torque-control 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 Lesser General Public License for more details. You should
* have received a copy of the GNU Lesser General Public License along
* with sot-torque-control. If not, see <http://www.gnu.org/licenses/>.
*/
//
// This file strutures pages and modules into a convenient hierarchical structure.
//
namespace dynamicgraph {
namespace sot {
namespace torque_control {
//
// Pages/ tutorials organization
//
// \page md_doc_installation
// \page md_doc_running
}
}
}
SET(${LIBRARY_NAME}_HEADERS
joint-torque-controller.hh
base-estimator.hh
numerical-difference.hh
motor-model.hh
joint-trajectory-generator.hh
se3-trajectory-generator.hh
free-flyer-locator.hh
inverse-dynamics-balance-controller.hh
position-controller.hh
control-manager.hh
current-controller.hh
commands-helper.hh
device-torque-ctrl.hh
trace-player.hh
torque-offset-estimator.hh
imu_offset_compensation.hh
admittance-controller.hh
)
SET(${LIBRARY_NAME}_HEADERS_UTILS
utils/trajectory-generators.hh
utils/lin-estimator.hh
utils/poly-estimator.hh
utils/quad-estimator.hh
utils/Stdafx.hh
utils/vector-conversions.hh
)
INSTALL(FILES ${${LIBRARY_NAME}_HEADERS} DESTINATION include/${CUSTOM_HEADER_DIR})
INSTALL(FILES ${${LIBRARY_NAME}_HEADERS_UTILS} DESTINATION include/${CUSTOM_HEADER_DIR}/utils)
/*
* Copyright 2014, Andrea Del Prete, LAAS-CNRS
*
* This file is part of sot-torque-control.
* sot-torque-control 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.
* sot-torque-control 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 Lesser General Public License for more details. You should
* have received a copy of the GNU Lesser General Public License along
* with sot-torque-control. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef __sot_torque_control_admittance_controller_H__
......@@ -21,16 +10,15 @@
/* --- API ------------------------------------------------------------- */
/* --------------------------------------------------------------------- */
#if defined (WIN32)
# if defined (sot_admittance_controller_EXPORTS)
# define SOTADMITTANCECONTROLLER_EXPORT __declspec(dllexport)
# else
# define SOTADMITTANCECONTROLLER_EXPORT __declspec(dllimport)
# endif
#if defined(WIN32)
#if defined(sot_admittance_controller_EXPORTS)
#define SOTADMITTANCECONTROLLER_EXPORT __declspec(dllexport)
#else
# define SOTADMITTANCECONTROLLER_EXPORT
#define SOTADMITTANCECONTROLLER_EXPORT __declspec(dllimport)
#endif
#else
#define SOTADMITTANCECONTROLLER_EXPORT
#endif
/* --------------------------------------------------------------------- */
/* --- INCLUDE --------------------------------------------------------- */
......@@ -48,120 +36,113 @@
#include <sot/core/robot-utils.hh>
#include <sot/torque_control/utils/vector-conversions.hh>
namespace dynamicgraph {
namespace sot {
namespace torque_control {
/* --------------------------------------------------------------------- */
/* --- CLASS ----------------------------------------------------------- */
/* --------------------------------------------------------------------- */
class SOTADMITTANCECONTROLLER_EXPORT AdmittanceController
:public::dynamicgraph::Entity
{
typedef AdmittanceController EntityClassName;
DYNAMIC_GRAPH_ENTITY_DECL();
public:
EIGEN_MAKE_ALIGNED_OPERATOR_NEW
/* --- CONSTRUCTOR ---- */
AdmittanceController( const std::string & name );
void init(const double& dt, const std::string& robotRef);
/* --- SIGNALS --- */
DECLARE_SIGNAL_IN(encoders, dynamicgraph::Vector);
DECLARE_SIGNAL_IN(jointsVelocities, dynamicgraph::Vector);
DECLARE_SIGNAL_IN(kp_force, dynamicgraph::Vector);
DECLARE_SIGNAL_IN(ki_force, dynamicgraph::Vector);
DECLARE_SIGNAL_IN(kp_vel, dynamicgraph::Vector);
DECLARE_SIGNAL_IN(ki_vel, dynamicgraph::Vector);
DECLARE_SIGNAL_IN(force_integral_saturation, dynamicgraph::Vector);
DECLARE_SIGNAL_IN(force_integral_deadzone, dynamicgraph::Vector);
DECLARE_SIGNAL_IN(fRightFootRef, dynamicgraph::Vector); /// 6d reference force
DECLARE_SIGNAL_IN(fLeftFootRef, dynamicgraph::Vector); /// 6d reference force
DECLARE_SIGNAL_IN(fRightFoot, dynamicgraph::Vector); /// 6d estimated force
DECLARE_SIGNAL_IN(fLeftFoot, dynamicgraph::Vector); /// 6d estimated force
DECLARE_SIGNAL_IN(fRightFootFiltered,dynamicgraph::Vector); /// 6d estimated force filtered
DECLARE_SIGNAL_IN(fLeftFootFiltered, dynamicgraph::Vector); /// 6d estimated force filtered
DECLARE_SIGNAL_IN(controlledJoints, dynamicgraph::Vector); /// mask with 1 for controlled joints, 0 otherwise
DECLARE_SIGNAL_IN(damping, dynamicgraph::Vector); /// damping factors used for the 4 end-effectors
// DECLARE_SIGNAL_IN(fRightHandRef, dynamicgraph::Vector); /// 6d reference force
// DECLARE_SIGNAL_IN(fLeftHandRef, dynamicgraph::Vector); /// 6d reference force
// DECLARE_SIGNAL_IN(fRightHand, dynamicgraph::Vector); /// 6d estimated force
// DECLARE_SIGNAL_IN(fLeftHand, dynamicgraph::Vector); /// 6d estimated force
DECLARE_SIGNAL_OUT(u, dynamicgraph::Vector); /// control
// DEBUG SIGNALS
DECLARE_SIGNAL_OUT(dqDes, dynamicgraph::Vector); /// dqDes = J^+ * Kf * (fRef-f)
DECLARE_SIGNAL_OUT(vDesRightFoot, dynamicgraph::Vector); ///
DECLARE_SIGNAL_OUT(vDesLeftFoot, dynamicgraph::Vector); ///
// DECLARE_SIGNAL_OUT(fRightHandError, dynamicgraph::Vector); /// fRef-f
// DECLARE_SIGNAL_OUT(fLeftHandError, dynamicgraph::Vector); /// fRef-f
/* --- COMMANDS --- */
/* --- ENTITY INHERITANCE --- */
virtual void display( std::ostream& os ) const;
void sendMsg(const std::string& msg, MsgType t=MSG_TYPE_INFO, const char* file="", int line=0)