From 86ee5ecb00ec67126f38877cd9124308d72db354 Mon Sep 17 00:00:00 2001
From: Florent Lamiraux <florent@laas.fr>
Date: Wed, 8 Aug 2012 17:04:42 +0200
Subject: [PATCH] Add documentation for Task and Features.

---
 doc/CMakeLists.txt                   |   4 +
 doc/Doxyfile.extra.in                |   4 +-
 doc/additionalDoc/package.h          |  82 ++++++++++----------
 doc/pictures/feature.fig             | 110 +++++++++++++++++++++++++++
 doc/pictures/feature.png             | Bin 0 -> 13124 bytes
 doc/pictures/task.fig                |  79 +++++++++++++++++++
 doc/pictures/task.png                | Bin 0 -> 9766 bytes
 include/sot/core/feature-abstract.hh |  59 +++++++-------
 include/sot/core/task-abstract.hh    |   9 +++
 9 files changed, 279 insertions(+), 68 deletions(-)
 create mode 100644 doc/pictures/feature.fig
 create mode 100644 doc/pictures/feature.png
 create mode 100644 doc/pictures/task.fig
 create mode 100644 doc/pictures/task.png

diff --git a/doc/CMakeLists.txt b/doc/CMakeLists.txt
index ad1b47cf..e5f4c0d0 100644
--- a/doc/CMakeLists.txt
+++ b/doc/CMakeLists.txt
@@ -7,3 +7,7 @@ INCLUDE(../cmake/sphinx.cmake)
 
 SPHINX_SETUP()
 SPHINX_FINALIZE()
+INSTALL (FILES
+  pictures/feature.png 
+  pictures/task.png 
+  DESTINATION ${PKG_CONFIG_DOXYGENDOCDIR}/pictures)
\ No newline at end of file
diff --git a/doc/Doxyfile.extra.in b/doc/Doxyfile.extra.in
index 7694df4c..d3f1e574 100644
--- a/doc/Doxyfile.extra.in
+++ b/doc/Doxyfile.extra.in
@@ -1,9 +1,11 @@
 INPUT                  = @CMAKE_SOURCE_DIR@/include \
                          @CMAKE_SOURCE_DIR@/doc/additionalDoc
-IMAGE_PATH             = @CMAKE_SOURCE_DIR@/doc/pictures
+IMAGE_PATH             = @PKG_CONFIG_DOXYGENDOCDIR@/pictures
 
 FILE_PATTERNS          = *.cc *.cpp *.h *.hh *.hxx
 
 TAGFILES               = \
 "@JRL_MAL_DOXYGENDOCDIR@/jrl-mal.doxytag = @JRL_MAL_DOXYGENDOCDIR@" \
 "@DYNAMIC_GRAPH_DOXYGENDOCDIR@/dynamic-graph.doxytag = @DYNAMIC_GRAPH_DOXYGENDOCDIR@"
+
+COLLABORATION_GRAPH    = NO
diff --git a/doc/additionalDoc/package.h b/doc/additionalDoc/package.h
index 5376aae9..e4ea907e 100644
--- a/doc/additionalDoc/package.h
+++ b/doc/additionalDoc/package.h
@@ -4,19 +4,19 @@
 This library implements a modular architecture to test and experiment
 controllers in the Stack of Tasks Framework as defined in \ref Mansard2007.
 It is specifically targeted to retain real-time performance while
-having high level software capabilities, like plugins and scripts.
+having high level software capabilities, like plugins and python scripting.
 
 \section sec_organization Organization of the code
 
-The code is based on the dynamic-graph package, which provides the
-framework from which sot-core relies. Hence most of the code in sot-core
-consists of classes that derive from entities. These entities are usually
+The code is based on the <c>dynamic-graph</c> package, which provides the
+framework on which sot-core relies. Hence most of the code in <c>sot-core</c>
+consists of classes that derive from dynamic_graph::Entity. These entities are usually
 compiled and linked in their own dynamic library, as a python module
 
-Aside from the entities, there is a code base to the library, libsot-core,
+Aside from the python modules, this package installs a core library libsot-core,
 that provides functions and code common to all modules. All python modules
 developed here link with libsot-core. For example, common mathematical
-entities, definitions and functions are in that library's base.
+entities, definitions and functions are in the core library.
 See \ref sot_core_base for a list of what's in this code base.
 
 This library implements
@@ -27,16 +27,14 @@ This library implements
 \li A basic C++ "machinery", the \ref factory, that "makes things work"
 
 \section using Using the Stack of Tasks
-Using dynamic-graph objects (pool and factory), either through C++ code
-or the built-in interpreter, we can
-For people who develop software on the HRP2 robot, this package
+
+For people who develop software to control a real robot, this package
 alone is insufficient to simulate and control a robot.
 
 The following packages are recommended* in that case:
 \li sot-dynamic
 \li sot-pattern-generator
 \li sot-openhrp (openhrp python module)
-\li sot-openhrp-scripts
 
 * These packages are in development at the time of writing and may
 be separated or joined along the way. Please check their status and updates
@@ -47,28 +45,24 @@ at the jrl-umi3218 web page: https://github.com/jrl-umi3218
 This package should be compiled and installed with cmake.
 
 This library is based on several packages:
- \li dynamic-graph (https://github.com/jrl-umi3218/dynamic-graph)
- \li MatrixAbstractLayer (https://github.com/jrl-umi3218/jrl-mal)
- \li Lapack
- \li Boost
- \li pthread
+ \li <c>dynamic-graph</c> (https://github.com/jrl-umi3218/dynamic-graph)
+ \li <c>jrl-mal</c> (https://github.com/jrl-umi3218/jrl-mal)
+ \li <c>lapack</c>
+ \li <c>boost</c>
+ \li <c>pthread</c>
 
 Their presence will be checked with the use of pkg-config.
 
-There are talks of open-sourcing the library on github. When this
-is done, installation instructions will be on the project's github
-page.
-
-\section sot_base Base library
-This package is centered around a base library that implements
+\section sot_base Core library
+This package is centered around a core library that implements
 the basic classes needed for operation of the stack of tasks. For
 more information, see \ref sot_core_base.
 
 \section sot_plugins Python Modules
 While the main library provides a basic framework for computation of a
 control law using the Stack of Tasks, it is not expressive enough for
-typical usage scenarios (for example, controlling the humanoid robot
-HRP-2). Hence, several "specialized" features and tasks have been developed,
+typical usage scenarios (for example, controlling a humanoid
+robot). Hence, several "specialized" features and tasks have been developed,
 and can be used in the Stack of Tasks. For a list of python modules and a short
 description, see \ref plugins_list.
 
@@ -80,6 +74,14 @@ of tasks (SoT), and thus assigned a priority. The SoT then calculates
 (in an iterative manner) the control law, or joint velocity, necessary
 to realize the tasks (usually, bring a feature to its desired value).
 
+\subsection features Features
+Each feature computes some information
+from measurements, from the robot state,or/and
+from others features. Features should be lightweight
+regarding computation and be included at this level
+only if necessary. See documentation of class dynamicgraph::sot::FeatureAbstract
+for more information.
+
 \subsection tasks Tasks
 
 Each task implements a specific controller which
@@ -90,12 +92,7 @@ handling and its gain.
 After being defined, tasks are pushed in the Stack of Tasks which then
 calculates a control law as explained in \ref Mansard2007.
 
-\subsection features Features
-Each feature computes some information
-from measurements, from the robot state,or/and
-from others features. Features should be lightweight
-regarding computation and be included at this level
-only if necessary.
+See documentation of class dynamicgraph::sot::TaskAbstract for more information.
 
 \section References
 \anchor Mansard2007
@@ -107,14 +104,14 @@ IEEE Trans. on Robotics, 23(1):60-72, February 2007
 
 
 
-@defgroup sot_core_base Sot-core base library (libsot-core.[dll|so])
-For developers, this is the base library that your project has to
+@defgroup sot_core_base Sot-core library (libsot-core.[dll|so])
+For developers, this is the core library that your project has to
 be linked with. It defines the related algorithms and entities
 using the dynamic-graph framework.
 
 \section presento What's in the box?
 
-All the C++ code is placed in the namespace "sot". In the base
+All the C++ code is placed in the namespace "dynamic_graph::sot". In the core
 library, the following classes are present:
 
 \subsection subsec_sot Stack of Task solvers
@@ -142,25 +139,30 @@ strings, or set them from the command line (using a script interpreter from
 the dynamic-graph package).
 
 \subsection subsec_Features Features
-The class sot::FeatureAbstract is the base class for features.
+The class dynamicgraph::sot::FeatureAbstract is the base class for features.
 all other classes are in entity \ref sot_plugins "python modules".
-For more information on what is a feature, see \ref features.
+For more information on what is a feature, see the documentation of class dynamic_graph::sot::FeatureAbstract.
 
 \subsection subsec_Tasks Tasks
-They are a certain number of pre-written tasks that can be used.
-They all derive from the task sot::TaskAbstract; specific tasks
-are defined as \ref sot_plugins "python modules".
+
+Tasks are the hierarchical element of the stack of tasks.
+
+A task computes a value and a Jacobian as output signals.
+Once stacked into a solver, the solver will compute the control vector
+that makes the task value converge toward zero in the 
+order defined by the priority levels. For more information see the documentation
+of class dynamicgraph::sot:TaskAbstract.
 
 \subsection subsec_tools Mathematical base
 The following classes encapsulate common mathematical objects, and
-are all defined in the base library; see each individual class documentation
+are all defined in the core library; see each individual class documentation
 for reference.
 \li Vectors: (sot::VectorQuaternion, sot::VectorRollPitchYaw, sot::VectorUTheta)
 \li Matrices: (sot::MatrixForce, sot::MatrixHomogeneous, sot::MatrixRotation, sot::MatrixTwist)
 \li sot::MultiBound can be used to enforce bounds on numeric values
 
 \subsection subsec_others Others
-The base library also contains functions for adaptation and extension of
+The core library also contains functions for adaptation and extension of
 the dynamic-graph shell; see additional-functions.cpp, factory.cpp and pool.cpp
 directly for these. In a nutshell, a typical user shouldn't need these.
 See \ref factory for additional information.
@@ -168,7 +170,7 @@ See \ref factory for additional information.
 
 
 \defgroup plugins_list List of python modules
-These python modules are linked with the base library.
+These python modules are linked with the core library.
 
 	sot/sot-qr
 	sot/weighted-sot
diff --git a/doc/pictures/feature.fig b/doc/pictures/feature.fig
new file mode 100644
index 00000000..8df1036a
--- /dev/null
+++ b/doc/pictures/feature.fig
@@ -0,0 +1,110 @@
+#FIG 3.2  Produced by xfig version 3.2.5b
+Landscape
+Center
+Metric
+A4      
+100.00
+Single
+-2
+1200 2
+6 910 413 4728 1522
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 59.15 118.32
+	 999 991 1797 991
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+	 1797 413 3797 413 3797 1522 1797 1522 1797 413
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 59.15 118.32
+	 3797 1389 4595 1389
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 59.15 118.32
+	 3797 1035 4595 1035
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 59.15 118.32
+	 3797 679 4595 679
+4 1 0 50 -1 2 13 0.0000 4 150 1470 2775 1035 FeatureAbstract\001
+4 2 0 50 -1 0 11 0.0000 4 135 690 1664 900 selection\001
+4 0 0 50 -1 0 11 0.0000 4 135 765 3885 1301 dimension\001
+4 0 0 50 -1 0 11 0.0000 4 180 630 3885 945 jacobian\001
+4 0 0 50 -1 0 11 0.0000 4 90 360 3885 591 error\001
+-6
+6 540 4905 7380 7020
+6 540 4950 7380 6795
+6 540 5535 2115 6075
+6 630 5535 1845 5850
+4 2 0 50 -1 0 22 0.0000 4 255 1170 1823 5813 errordot\001
+-6
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 110.67 221.33
+	 578 5979 2072 5979
+-6
+6 5805 4995 7380 5535
+6 5895 4995 7110 5310
+4 2 0 50 -1 0 22 0.0000 4 255 1170 7088 5273 errordot\001
+-6
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 110.67 221.33
+	 5843 5439 7337 5439
+-6
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 110.67 221.33
+	 578 5315 2072 5315
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 110.67 221.33
+	 578 6726 2072 6726
+4 2 0 50 -1 0 22 0.0000 4 180 705 1823 5149 error\001
+4 2 0 50 -1 0 22 0.0000 4 330 1230 1823 6560 jacobian\001
+4 1 0 50 -1 2 26 0.0000 4 300 2955 3898 5481 FeatureGeneric\001
+4 0 0 50 -1 0 18 0.0000 4 195 1335 2487 5951 errSOUT =\001
+4 0 0 50 -1 0 18 0.0000 4 195 2685 2487 6320 errorSIN - ref.errorSIN\001
+4 0 0 50 -1 0 18 0.0000 4 255 2205 2487 6726 jacSOUT = jacSIN\001
+-6
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+	 2072 4945 5807 4945 5807 7020 2072 7020 2072 4945
+-6
+6 6120 6030 12690 8145
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+	 8930 6070 12665 6070 12665 8145 8930 8145 8930 6070
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 110.67 221.33
+	 7470 6485 8930 6485
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 110.67 221.33
+	 6357 7149 8930 7149
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 110.67 221.33
+	 6357 7896 8930 7896
+4 2 0 50 -1 0 22 0.0000 4 255 2520 8681 6983 articularJacobian\001
+4 2 0 50 -1 0 22 0.0000 4 330 1230 8681 7730 jacobian\001
+4 2 0 50 -1 0 22 0.0000 4 330 1170 8681 6319 position\001
+4 1 0 50 -1 2 26 0.0000 4 300 2940 10756 6651 FeaturePoint6d\001
+-6
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 3
+	0 0 1.00 110.67 221.33
+	 3234 1522 3234 2435 5226 2435
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 110.67 221.33
+	 3732 3348 5226 3348
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+	 5226 2269 8961 2269 8961 4344 5226 4344 5226 2269
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 110.67 221.33
+	 8961 4095 10455 4095
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 110.67 221.33
+	 8961 3431 10455 3431
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 110.67 221.33
+	 8961 2767 10455 2767
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 110.67 221.33
+	 3825 4950 6471 4344
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 110.67 221.33
+	 10710 6075 7965 4344
+4 1 0 50 -1 2 26 0.0000 4 300 3105 7052 3431 FeatureAbstract\001
+4 2 0 50 -1 0 22 0.0000 4 255 1305 4977 3182 selection\001
+4 0 0 50 -1 0 22 0.0000 4 255 1545 9127 3929 dimension\001
+4 0 0 50 -1 0 22 0.0000 4 330 1230 9127 3265 jacobian\001
+4 0 0 50 -1 0 22 0.0000 4 180 705 9127 2601 error\001
+4 2 0 50 -1 0 22 0.0000 4 255 1365 4977 2186 reference\001
diff --git a/doc/pictures/feature.png b/doc/pictures/feature.png
new file mode 100644
index 0000000000000000000000000000000000000000..6f41967f51581ab486f974ce255191acde0a3072
GIT binary patch
literal 13124
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
X3m5!<2920hd?B*o=sRKm9b^6<p75=@

literal 0
HcmV?d00001

diff --git a/doc/pictures/task.fig b/doc/pictures/task.fig
new file mode 100644
index 00000000..6a68b026
--- /dev/null
+++ b/doc/pictures/task.fig
@@ -0,0 +1,79 @@
+#FIG 3.2  Produced by xfig version 3.2.5b
+Landscape
+Center
+Metric
+A4      
+100.00
+Single
+-2
+1200 2
+6 3555 360 8820 2475
+6 7290 810 8820 1980
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 110.67 221.33
+	 7296 1901 8790 1901
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 110.67 221.33
+	 7296 1237 8790 1237
+4 0 0 50 -1 0 22 0.0000 4 330 1230 7462 1735 jacobian\001
+4 0 0 50 -1 0 22 0.0000 4 255 600 7462 1071 task\001
+-6
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+	 3561 379 7296 379 7296 2454 3561 2454 3561 379
+4 1 0 50 -1 2 26 0.0000 4 300 2550 5387 1541 TaskAbstract\001
+-6
+6 1575 3285 11250 5895
+6 4725 4095 7425 5715
+6 4725 5175 7425 5715
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+	 4725 5175 7425 5175 7425 5715 4725 5715 4725 5175
+4 0 0 50 -1 0 18 0.0000 4 195 1020 4950 5535 feature 1\001
+-6
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+	 4725 4095 7425 4095 7425 4635 4725 4635 4725 4095
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+	 4725 4635 7425 4635 7425 5175 4725 5175 4725 4635
+4 0 0 50 -1 0 18 0.0000 4 195 1020 4950 4995 feature 2\001
+4 0 0 50 -1 0 18 0.0000 4 30 180 4950 4455 ...\001
+-6
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 110.67 221.33
+	 2738 3740 4232 3740
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 110.67 221.33
+	 2738 4404 4232 4404
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 110.67 221.33
+	 2738 5151 4232 5151
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 110.67 221.33
+	 7958 3740 9452 3740
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 110.67 221.33
+	 7958 4404 9452 4404
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+	 4230 3325 7967 3325 7967 5895 4230 5895 4230 3325
+4 1 0 50 -1 2 26 0.0000 4 300 915 6058 3906 Task\001
+4 2 0 50 -1 0 22 0.0000 4 255 1755 3983 3574 controlGain\001
+4 2 0 50 -1 0 22 0.0000 4 330 2010 3983 4238 dampingGain\001
+4 2 0 50 -1 0 22 0.0000 4 255 2385 3983 4985 controlSelection\001
+4 0 0 50 -1 0 22 0.0000 4 180 705 8235 3574 error\001
+4 0 0 50 -1 0 22 0.0000 4 255 2985 8235 4230 errorTimeDerivative\001
+-6
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 110.67 221.33
+	 5850 3330 5580 2475
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 111.00 222.00
+	 6030 6833 6030 5850
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 110.67 221.33
+	 2738 7250 4232 7250
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 110.67 221.33
+	 7958 7250 9452 7250
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+	 4230 6835 7965 6835 7965 8325 4230 8325 4230 6835
+4 1 0 50 -1 2 26 0.0000 4 300 1500 6058 7416 TaskPD\001
+4 2 0 50 -1 0 22 0.0000 4 255 1245 3983 7084 errorDot\001
+4 0 0 50 -1 0 22 0.0000 4 255 1245 8235 7084 errorDot\001
diff --git a/doc/pictures/task.png b/doc/pictures/task.png
new file mode 100644
index 0000000000000000000000000000000000000000..db76c0188269d78c890355f552d6994749a55255
GIT binary patch
literal 9766
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
GLG~ZX*)44V

literal 0
HcmV?d00001

diff --git a/include/sot/core/feature-abstract.hh b/include/sot/core/feature-abstract.hh
index e13433cf..2cc1b842 100644
--- a/include/sot/core/feature-abstract.hh
+++ b/include/sot/core/feature-abstract.hh
@@ -52,38 +52,44 @@ namespace dynamicgraph {
 
       In short, a feature is a data evolving according to time.  It is defined
       by a vector \f${\bf s}(t) \in \mathbb{R}^n \f$ where \f$ t \f$ is the
-      time.  By default a feature has a desired \f${\bf s}^*(t) \f$.  The
+      time.  By default a feature has a desired \f${\bf s}^*(t) \f$.
+      \f${\bf s}^*\f$ is provided by another feature of the same type called
+      reference. The
       feature is in charge of collecting its own current state.  A feature is
       supposed to compute an error between its current state and the desired
       one: \f$ e(t) = {\bf s}^*(t) - {\bf s}(t) \f$.  A feature is supposed to
       compute a Jacobian according to the robot state vector \f$ \frac{\delta
       {\bf s}(t)}{\delta {\bf q}(t)}\f$.
 
-      \bigskip
-      More precisely, a feature is a derivable function of the robot
-      configuration $q$ and the universe \f$\Omega\f$ into a real vector space:
-      \f$ f: q,\Omega \rightarrow f(q,\Omega) \in R^n\f$. The object is able to
-      compute the value, and the value of the Jacobian of \f$f\f$ with respect
-      to \f$q\f$, \f$J = \frac{\partial f}{\partial q}\f$.
-
       The task is in general computed from the value of the feature at the
-      current instant \f$f(q(t),\Omega(t))\f$, the Jacobian \f$J\f$ and
-      evolution of the feature with the evolution of the universe, abusively
-      denoted as a variation along the variable \f$t\f$ alone: \f$\frac{\partial
-      f}{\partial t} = \frac{\partial f}{\partial \Omega} \dot{\Omega}\f$.
-
-      In general, the feature is computed as the error \f$f = e(q,\Omega)\f$
-      between the value at the current robot and universe configurations
-      \f$s(q,\Omega)\f$, and a reference value that does not depend on the robot
-      current configuration, and thus that is generally denoted \f$s^* = s^*(t)\f$.
-      In general, \f$s\f$ and \f$s^*\f$ evolves in the same space, and thus, two
-      objects of the same classes are used to represent \f$s\f$ on one side and
-      \f$s^*\f$ on the other. A generic solution to maintain a reference on the
-      object \f$s^*\f$ from the object \f$s\f$ is provided, but is not mandatory. In
-      that cases, the signal errorSOUT is linked to the update state
-      of the input of \f$s\f$, and is also automatically linked to the input of
-      \f$s^*\f$ as soon as \f$s^*\f$ is specifified.
-
+      current instant \f$f(q(t),t)\f$, the Jacobian \f$J\f$ and
+      evolution of the feature with respect to time: \f$\frac{\partial
+      f}{\partial t}\f$.
+
+      \par Time derivative of the error
+
+      Some Feature types provide as output signal the derivative of the
+      error of the feature (<c>errordotSOUT</c>). The value is computed by
+      method computeErrorDot. In this case, these feature types should
+      \li have attribute
+      \code
+      dg::SignalTimeDependent< ml::Vector,int > errordotSOUT;
+      \endcode
+      \li implement method
+      \code
+      virtual bool withErrorDot() const { return true; }
+      \endcode
+      \li implement method
+      \code
+      virtual SignalTimeDependent<ml::Vector,int>& getErrorDot()
+      {
+      return errordotSOUT;
+      }
+      \endcode
+
+      See dynamicgraph::sot::FeatureGeneric for an example.
+
+      \image html pictures/feature.png "Feature diagram: Feature types derive from FeatureAbstract. Each feature has a reference of the same type and compute an error by comparing errorSIN signals from itself and from the reference." width=15cm
     */
     class SOT_CORE_EXPORT FeatureAbstract
       :public Entity
@@ -191,8 +197,7 @@ namespace dynamicgraph {
       /*! \brief This method write a graph description on the file named FileName. */
       virtual std::ostream & writeGraph(std::ostream & os) const;
 
-      /*! \brief Return true for children that implements the errordot
-          functionalities. */
+      /// Return true for children that provide the errordot output signal
       virtual bool withErrorDot( void ) const { return false; }
       virtual SignalTimeDependent<ml::Vector,int>& getErrorDot( void ) {throw;}
 
diff --git a/include/sot/core/task-abstract.hh b/include/sot/core/task-abstract.hh
index 6c1536b7..f6df8736 100644
--- a/include/sot/core/task-abstract.hh
+++ b/include/sot/core/task-abstract.hh
@@ -48,6 +48,15 @@ namespace dynamicgraph {
   namespace sot {
     namespace dg = dynamicgraph;
 
+    /// Hierarchical element of the stack of tasks.
+    ///
+    /// A task computes a value and a Jacobian as output signals.
+    /// Once stacked into a solver, the solver will compute the control
+    /// vector that makes the task values converge toward zero in the 
+    /// order defined by the priority levels.
+    ///
+    /// \image html pictures/task.png "Task diagram: Task types derive from TaskAbstract. The value and Jacobian of a Task are computed from the features that are stored in the task.
+
     class SOT_CORE_EXPORT TaskAbstract
       : public dg::Entity
     {
-- 
GitLab