Allow tendon springlength attribute to take two values between which the spring produces no force (a deadband).

If given two non-decreasing values, `springlength` specifies a deadband for spring stiffness, inside of which the force is 0 and outside of which force behaves like a regular spring, with the setpoint corresponding to the nearest value. This can be used to create tendons whose limits are enforced by springs rather than constraints, which are cheaper and easier to analyse. See test/engine/testdata/tendon_springlength.xml example model.

Spring-limited spatial tendons whose lower range value is 0 are rendered as catenaries.

Fixes #520.

PiperOrigin-RevId: 484509706
Change-Id: I6698e94ee36168f52d501e83057559805e05172d
This commit is contained in:
Yuval Tassa
2022-10-28 05:57:05 -07:00
committed by Copybara-Service
parent 3a445d0fdd
commit 893942a729
20 changed files with 259 additions and 31 deletions
+10 -3
View File
@@ -2788,9 +2788,16 @@ the obstacle geom.
:at:`rgba`: :at-val:`real(4), "0.5 0.5 0.5 1"`
Color and transparency of the tendon. When this value is different from the internal default, it overrides the
corresponding material properties.
:at:`springlength`: :at-val:`real, "-1"`
The length of the tendon corresponding to the spring resting position. If this value is negative, the tendon resting
length is determined from the model reference configuration in qpos0.
:at:`springlength`: :at-val:`real(2), "-1 -1"`
Spring resting position, can take either one or two values. If one value is given, it corresponds to the length of
the tendon at rest. If it is ``-1``, the tendon resting length is determined from the model reference configuration
in ``mjModel.qpos0``. |br| Note that the default value of ``-1``, which invokes the automatic length computation,
was designed with :ref:`spatial<tendon-spatial>` tendons in mind, which can only have nonegative length. In order to
set the :at:`springlength` of a :ref:`fixed<tendon-fixed>` tendon to ``-1``, use a nearby value like ``-0.99999``.
|br| If two non-decreasing values are given, they define a `dead-band <https://en.wikipedia.org/wiki/Deadband>`_
range. If the tendon length is between the two values, the force is 0. If it is outside this range, the force behaves
like a regular spring, with the rest-point corresponding to the nearest :at:`springlength` value. A deadband can be
used to define tendons whose limits are enforced by springs rather than constraints.
:at:`stiffness`: :at-val:`real, "0"`
Stiffness coefficient. A positive value generates a spring force (linear in position) acting along the tendon.
:at:`damping`: :at-val:`real, "0"`