Stack of Tasks Course

Thomas Moulard
Thomas MoulardSr. SDE at Amazon
Introduction
Theoretical foundations
Software
The stack of tasks
Florent Lamiraux, Olivier Stasse and Nicolas Mansard
CNRS-LAAS, Toulouse, France
The stack of tasks
Introduction
Theoretical foundations
Software
The stack of tasks
Introduction
Theoretical foundations
Software
The stack of tasks
Introduction
Theoretical foundations
Software
Outline
Introduction
Theoretical foundations
Software
The stack of tasks
Introduction
Theoretical foundations
Software
Introduction
The stack of tasks provides a control framework for real-time
redundant manipulator control
◮ implementation of a data-flow,
◮ control of the graph by python scripting,
◮ task-based hierarchical control,
◮ portable: tested on HRP-2, Nao, Romeo.
The stack of tasks
Introduction
Theoretical foundations
Software
Introduction
The stack of tasks provides a control framework for real-time
redundant manipulator control
◮ implementation of a data-flow,
◮ control of the graph by python scripting,
◮ task-based hierarchical control,
◮ portable: tested on HRP-2, Nao, Romeo.
The stack of tasks
Introduction
Theoretical foundations
Software
Introduction
The stack of tasks provides a control framework for real-time
redundant manipulator control
◮ implementation of a data-flow,
◮ control of the graph by python scripting,
◮ task-based hierarchical control,
◮ portable: tested on HRP-2, Nao, Romeo.
The stack of tasks
Introduction
Theoretical foundations
Software
Introduction
The stack of tasks provides a control framework for real-time
redundant manipulator control
◮ implementation of a data-flow,
◮ control of the graph by python scripting,
◮ task-based hierarchical control,
◮ portable: tested on HRP-2, Nao, Romeo.
The stack of tasks
Introduction
Theoretical foundations
Software
Introduction
The stack of tasks provides a control framework for real-time
redundant manipulator control
◮ implementation of a data-flow,
◮ control of the graph by python scripting,
◮ task-based hierarchical control,
◮ portable: tested on HRP-2, Nao, Romeo.
The stack of tasks
Introduction
Theoretical foundations
Software
Outline
Introduction
Theoretical foundations
Software
The stack of tasks
Introduction
Theoretical foundations
Software
Rigid body B
◮ Configuration represented by an homogeneous matrix
MB =
RB tB
0 0 0 1
∈ SE(3)
RB ∈ SO(3) ⇔ RT
B RB = I3
Point x ∈ R3 in local frame of B is moved to y ∈ R3 in
global frame:
y
1
= MB
x
1
The stack of tasks
Introduction
Theoretical foundations
Software
Rigid body B
◮ Configuration represented by an homogeneous matrix
MB =
RB tB
0 0 0 1
∈ SE(3)
RB ∈ SO(3) ⇔ RT
B RB = I3
Point x ∈ R3 in local frame of B is moved to y ∈ R3 in
global frame:
y
1
= MB
x
1
The stack of tasks
Introduction
Theoretical foundations
Software
Rigid body B
◮ Configuration represented by an homogeneous matrix
MB =
RB tB
0 0 0 1
∈ SE(3)
RB ∈ SO(3) ⇔ RT
B RB = I3
Point x ∈ R3 in local frame of B is moved to y ∈ R3 in
global frame:
y
1
= MB
x
1
The stack of tasks
Introduction
Theoretical foundations
Software
Rigid body B
◮ Velocity represented by (vB, ωB) ∈ R6 where
˙RB = ˆωBRB
and
ˆω =


0 −ω3 ω2
ω3 0 −ω1
−ω2 ω1 0


is the matrix corresponding to the cross product operator
◮ Velocity of point P on B
vp = ˙tB + ωB × OBP
where OB is the origin of the local frame of B.
The stack of tasks
Introduction
Theoretical foundations
Software
Rigid body B
◮ Velocity represented by (vB, ωB) ∈ R6 where
˙RB = ˆωBRB
and
ˆω =


0 −ω3 ω2
ω3 0 −ω1
−ω2 ω1 0


is the matrix corresponding to the cross product operator
◮ Velocity of point P on B
vp = ˙tB + ωB × OBP
where OB is the origin of the local frame of B.
The stack of tasks
Introduction
Theoretical foundations
Software
Rigid body B
◮ Velocity represented by (vB, ωB) ∈ R6 where
˙RB = ˆωBRB
and
ˆω =


0 −ω3 ω2
ω3 0 −ω1
−ω2 ω1 0


is the matrix corresponding to the cross product operator
◮ Velocity of point P on B
vp = ˙tB + ωB × OBP
where OB is the origin of the local frame of B.
The stack of tasks
Introduction
Theoretical foundations
Software
Configuration space
◮ Robot: set of rigid-bodies linked by
joints B0, · · · Bm.
◮ Configuration: position in space of each
body.
q = (qwaist , θ1, · · · θn−6) ∈ SE(3) × Rn−6
qwaist = (x, y, z, roll, pitch, yaw)
◮ Position of Bi depends on q:
MBi
(q) ∈ SE(3)
The stack of tasks
Introduction
Theoretical foundations
Software
Configuration space
◮ Robot: set of rigid-bodies linked by
joints B0, · · · Bm.
◮ Configuration: position in space of each
body.
q = (qwaist , θ1, · · · θn−6) ∈ SE(3) × Rn−6
qwaist = (x, y, z, roll, pitch, yaw)
◮ Position of Bi depends on q:
MBi
(q) ∈ SE(3)
The stack of tasks
Introduction
Theoretical foundations
Software
Configuration space
◮ Robot: set of rigid-bodies linked by
joints B0, · · · Bm.
◮ Configuration: position in space of each
body.
q = (qwaist , θ1, · · · θn−6) ∈ SE(3) × Rn−6
qwaist = (x, y, z, roll, pitch, yaw)
◮ Position of Bi depends on q:
MBi
(q) ∈ SE(3)
The stack of tasks
Introduction
Theoretical foundations
Software
Velocity
◮ Velocity:
˙q = ( ˙x, ˙y, ˙z, ωx , ωy , ωz, ˙θ1, · · · ˙θn−6)
ω ∈ R3
◮ Velocity of Bi
vBi
ωBi
(q, ˙q) = JBi
(q). ˙q ∈ R6
The stack of tasks
Introduction
Theoretical foundations
Software
Velocity
◮ Velocity:
˙q = ( ˙x, ˙y, ˙z, ωx , ωy , ωz, ˙θ1, · · · ˙θn−6)
ω ∈ R3
◮ Velocity of Bi
vBi
ωBi
(q, ˙q) = JBi
(q). ˙q ∈ R6
The stack of tasks
Introduction
Theoretical foundations
Software
Velocity
◮ Velocity:
˙q = ( ˙x, ˙y, ˙z, ωx , ωy , ωz, ˙θ1, · · · ˙θn−6)
ω ∈ R3
◮ Velocity of Bi
vBi
ωBi
(q, ˙q) = JBi
(q). ˙q ∈ R6
The stack of tasks
Introduction
Theoretical foundations
Software
Task
◮ Definition: function of the
◮ robot configuration,
◮ time and
◮ possibly external parameters
that should converge to 0:
T ∈ C∞
(C × R, Rm
)
◮ Example: position tracking of an end-effector Bee
◮ M(q) ∈ SE(3) position of the end-effector,
◮ M∗
(t) ∈ SE(3) reference position
T(q, t) =
t(M∗−1(t)M(q))
uθ(R∗−1(t)R(q))
where
◮ t() is the translation part of an homogeneous matrix,
◮ R and R∗
are the rotation part of M and M∗
.
The stack of tasks
Introduction
Theoretical foundations
Software
Task
◮ Definition: function of the
◮ robot configuration,
◮ time and
◮ possibly external parameters
that should converge to 0:
T ∈ C∞
(C × R, Rm
)
◮ Example: position tracking of an end-effector Bee
◮ M(q) ∈ SE(3) position of the end-effector,
◮ M∗
(t) ∈ SE(3) reference position
T(q, t) =
t(M∗−1(t)M(q))
uθ(R∗−1(t)R(q))
where
◮ t() is the translation part of an homogeneous matrix,
◮ R and R∗
are the rotation part of M and M∗
.
The stack of tasks
Introduction
Theoretical foundations
Software
Task
◮ Definition: function of the
◮ robot configuration,
◮ time and
◮ possibly external parameters
that should converge to 0:
T ∈ C∞
(C × R, Rm
)
◮ Example: position tracking of an end-effector Bee
◮ M(q) ∈ SE(3) position of the end-effector,
◮ M∗
(t) ∈ SE(3) reference position
T(q, t) =
t(M∗−1(t)M(q))
uθ(R∗−1(t)R(q))
where
◮ t() is the translation part of an homogeneous matrix,
◮ R and R∗
are the rotation part of M and M∗
.
The stack of tasks
Introduction
Theoretical foundations
Software
Task
◮ Definition: function of the
◮ robot configuration,
◮ time and
◮ possibly external parameters
that should converge to 0:
T ∈ C∞
(C × R, Rm
)
◮ Example: position tracking of an end-effector Bee
◮ M(q) ∈ SE(3) position of the end-effector,
◮ M∗
(t) ∈ SE(3) reference position
T(q, t) =
t(M∗−1(t)M(q))
uθ(R∗−1(t)R(q))
where
◮ t() is the translation part of an homogeneous matrix,
◮ R and R∗
are the rotation part of M and M∗
.
The stack of tasks
Introduction
Theoretical foundations
Software
Task
◮ Definition: function of the
◮ robot configuration,
◮ time and
◮ possibly external parameters
that should converge to 0:
T ∈ C∞
(C × R, Rm
)
◮ Example: position tracking of an end-effector Bee
◮ M(q) ∈ SE(3) position of the end-effector,
◮ M∗
(t) ∈ SE(3) reference position
T(q, t) =
t(M∗−1(t)M(q))
uθ(R∗−1(t)R(q))
where
◮ t() is the translation part of an homogeneous matrix,
◮ R and R∗
are the rotation part of M and M∗
.
The stack of tasks
Introduction
Theoretical foundations
Software
Hierarchical task based control
Given
◮ a configuration q,
◮ two tasks of decreasing priorities:
◮ T1 ∈ C∞
(C × R, Rm1
),
◮ T2 ∈ C∞
(C × R, Rm2
),
compute a control vector ˙q
◮ that makes T1 converge toward 0 and
◮ that makes T2 converge toward 0 if possible.
The stack of tasks
Introduction
Theoretical foundations
Software
Hierarchical task based control
Given
◮ a configuration q,
◮ two tasks of decreasing priorities:
◮ T1 ∈ C∞
(C × R, Rm1
),
◮ T2 ∈ C∞
(C × R, Rm2
),
compute a control vector ˙q
◮ that makes T1 converge toward 0 and
◮ that makes T2 converge toward 0 if possible.
The stack of tasks
Introduction
Theoretical foundations
Software
Hierarchical task based control
Jacobian:
◮ we denote
◮ Ji = ∂Ti
∂q for i ∈ {1, 2}
◮ then
◮ ∀q ∈ C, ∀t ∈ R, ∀ ˙q ∈ Rn
, ˙Ti = Ji (q, t) ˙q + ∂Ti
∂t (q, t)
We try to enforce
◮ ˙T1 = −λ1T1 ⇒ T1(t) = e−λ1t T1(0) → 0
◮ ˙T2 = −λ2T2 ⇒ T2(t) = e−λ2t T2(0) → 0
◮ λ1 and λ2 are called the gains associated to T1 and T2.
The stack of tasks
Introduction
Theoretical foundations
Software
Hierarchical task based control
Jacobian:
◮ we denote
◮ Ji = ∂Ti
∂q for i ∈ {1, 2}
◮ then
◮ ∀q ∈ C, ∀t ∈ R, ∀ ˙q ∈ Rn
, ˙Ti = Ji (q, t) ˙q + ∂Ti
∂t (q, t)
We try to enforce
◮ ˙T1 = −λ1T1 ⇒ T1(t) = e−λ1t T1(0) → 0
◮ ˙T2 = −λ2T2 ⇒ T2(t) = e−λ2t T2(0) → 0
◮ λ1 and λ2 are called the gains associated to T1 and T2.
The stack of tasks
Introduction
Theoretical foundations
Software
Hierarchical task based control
Jacobian:
◮ we denote
◮ Ji = ∂Ti
∂q for i ∈ {1, 2}
◮ then
◮ ∀q ∈ C, ∀t ∈ R, ∀ ˙q ∈ Rn
, ˙Ti = Ji (q, t) ˙q + ∂Ti
∂t (q, t)
We try to enforce
◮ ˙T1 = −λ1T1 ⇒ T1(t) = e−λ1t T1(0) → 0
◮ ˙T2 = −λ2T2 ⇒ T2(t) = e−λ2t T2(0) → 0
◮ λ1 and λ2 are called the gains associated to T1 and T2.
The stack of tasks
Introduction
Theoretical foundations
Software
Hierarchical task based control
Jacobian:
◮ we denote
◮ Ji = ∂Ti
∂q for i ∈ {1, 2}
◮ then
◮ ∀q ∈ C, ∀t ∈ R, ∀ ˙q ∈ Rn
, ˙Ti = Ji (q, t) ˙q + ∂Ti
∂t (q, t)
We try to enforce
◮ ˙T1 = −λ1T1 ⇒ T1(t) = e−λ1t T1(0) → 0
◮ ˙T2 = −λ2T2 ⇒ T2(t) = e−λ2t T2(0) → 0
◮ λ1 and λ2 are called the gains associated to T1 and T2.
The stack of tasks
Introduction
Theoretical foundations
Software
Hierarchical task based control
Jacobian:
◮ we denote
◮ Ji = ∂Ti
∂q for i ∈ {1, 2}
◮ then
◮ ∀q ∈ C, ∀t ∈ R, ∀ ˙q ∈ Rn
, ˙Ti = Ji (q, t) ˙q + ∂Ti
∂t (q, t)
We try to enforce
◮ ˙T1 = −λ1T1 ⇒ T1(t) = e−λ1t T1(0) → 0
◮ ˙T2 = −λ2T2 ⇒ T2(t) = e−λ2t T2(0) → 0
◮ λ1 and λ2 are called the gains associated to T1 and T2.
The stack of tasks
Introduction
Theoretical foundations
Software
Moore Penrose pseudo-inverse
Given a matrix A ∈ Rm×n, the Moore Penrose pseudo inverse
A+ ∈ Rn×m of A is the unique matrix satisfying:
AA+
A = A
A+
AA+
= A+
(AA+
)T
= AA+
(A+
A)T
= A+
A
Given a linear system:
Ax = b, A ∈ Rm×n
, x ∈ Rn
, b ∈ Rm
x = A+b minimizes
◮ Ax − b over Rn,
◮ x over argmin Ax − b .
The stack of tasks
Introduction
Theoretical foundations
Software
Moore Penrose pseudo-inverse
Given a matrix A ∈ Rm×n, the Moore Penrose pseudo inverse
A+ ∈ Rn×m of A is the unique matrix satisfying:
AA+
A = A
A+
AA+
= A+
(AA+
)T
= AA+
(A+
A)T
= A+
A
Given a linear system:
Ax = b, A ∈ Rm×n
, x ∈ Rn
, b ∈ Rm
x = A+b minimizes
◮ Ax − b over Rn,
◮ x over argmin Ax − b .
The stack of tasks
Introduction
Theoretical foundations
Software
Moore Penrose pseudo-inverse
Given a matrix A ∈ Rm×n, the Moore Penrose pseudo inverse
A+ ∈ Rn×m of A is the unique matrix satisfying:
AA+
A = A
A+
AA+
= A+
(AA+
)T
= AA+
(A+
A)T
= A+
A
Given a linear system:
Ax = b, A ∈ Rm×n
, x ∈ Rn
, b ∈ Rm
x = A+b minimizes
◮ Ax − b over Rn,
◮ x over argmin Ax − b .
The stack of tasks
Introduction
Theoretical foundations
Software
Moore Penrose pseudo-inverse
Given a matrix A ∈ Rm×n, the Moore Penrose pseudo inverse
A+ ∈ Rn×m of A is the unique matrix satisfying:
AA+
A = A
A+
AA+
= A+
(AA+
)T
= AA+
(A+
A)T
= A+
A
Given a linear system:
Ax = b, A ∈ Rm×n
, x ∈ Rn
, b ∈ Rm
x = A+b minimizes
◮ Ax − b over Rn,
◮ x over argmin Ax − b .
The stack of tasks
Introduction
Theoretical foundations
Software
Hierarchical task based control
Resolution of the first constraint:
˙T1 = J1 ˙q +
∂T1
∂t
= −λ1T1 (1)
J1 ˙q = −λ1T1 −
∂T1
∂t
(2)
˙q1 −J+
1 (λ1T1 +
∂T1
∂t
) (3)
Where J+
1 is the (Moore Penrose) pseudo-inverse of J1.
˙q1 minimizes
◮ J1 ˙q + λ1T1 + ∂T1
∂t = ˙T1 + λ1T1
◮ ˙q over argmin J1 ˙q + λ1T1 + ∂T1
∂t
Hence,
◮ if λ1T1 + ∂T1
∂t is in Im(J1), (1) is satisfied
The stack of tasks
Introduction
Theoretical foundations
Software
Hierarchical task based control
Resolution of the first constraint:
˙T1 = J1 ˙q +
∂T1
∂t
= −λ1T1 (1)
J1 ˙q = −λ1T1 −
∂T1
∂t
(2)
˙q1 −J+
1 (λ1T1 +
∂T1
∂t
) (3)
Where J+
1 is the (Moore Penrose) pseudo-inverse of J1.
˙q1 minimizes
◮ J1 ˙q + λ1T1 + ∂T1
∂t = ˙T1 + λ1T1
◮ ˙q over argmin J1 ˙q + λ1T1 + ∂T1
∂t
Hence,
◮ if λ1T1 + ∂T1
∂t is in Im(J1), (1) is satisfied
The stack of tasks
Introduction
Theoretical foundations
Software
Hierarchical task based control
Resolution of the first constraint:
˙T1 = J1 ˙q +
∂T1
∂t
= −λ1T1 (1)
J1 ˙q = −λ1T1 −
∂T1
∂t
(2)
˙q1 −J+
1 (λ1T1 +
∂T1
∂t
) (3)
Where J+
1 is the (Moore Penrose) pseudo-inverse of J1.
˙q1 minimizes
◮ J1 ˙q + λ1T1 + ∂T1
∂t = ˙T1 + λ1T1
◮ ˙q over argmin J1 ˙q + λ1T1 + ∂T1
∂t
Hence,
◮ if λ1T1 + ∂T1
∂t is in Im(J1), (1) is satisfied
The stack of tasks
Introduction
Theoretical foundations
Software
Hierarchical task based control
Resolution of the first constraint:
˙T1 = J1 ˙q +
∂T1
∂t
= −λ1T1 (1)
J1 ˙q = −λ1T1 −
∂T1
∂t
(2)
˙q1 −J+
1 (λ1T1 +
∂T1
∂t
) (3)
Where J+
1 is the (Moore Penrose) pseudo-inverse of J1.
˙q1 minimizes
◮ J1 ˙q + λ1T1 + ∂T1
∂t = ˙T1 + λ1T1
◮ ˙q over argmin J1 ˙q + λ1T1 + ∂T1
∂t
Hence,
◮ if λ1T1 + ∂T1
∂t is in Im(J1), (1) is satisfied
The stack of tasks
Introduction
Theoretical foundations
Software
Hierarchical task based control
Resolution of the first constraint:
˙T1 = J1 ˙q +
∂T1
∂t
= −λ1T1 (1)
J1 ˙q = −λ1T1 −
∂T1
∂t
(2)
˙q1 −J+
1 (λ1T1 +
∂T1
∂t
) (3)
Where J+
1 is the (Moore Penrose) pseudo-inverse of J1.
˙q1 minimizes
◮ J1 ˙q + λ1T1 + ∂T1
∂t = ˙T1 + λ1T1
◮ ˙q over argmin J1 ˙q + λ1T1 + ∂T1
∂t
Hence,
◮ if λ1T1 + ∂T1
∂t is in Im(J1), (1) is satisfied
The stack of tasks
Introduction
Theoretical foundations
Software
Hierarchical task based control
In fact
∀u ∈ Rn
, J1 ˙q1+(In − J+
1 J1)u = J1 ˙q1
therefore,
˙q = ˙q1 + (In − J+
1 J1)u
also minimizes J1 ˙q + λ1T1 + ∂T1
∂t .
P1 = (In − J+
1 J1) is a projector on J1 kernel:
J1P1 = 0
∀u ∈ Rn, if ˙q = P1u, then, ˙T1 = ∂T1
∂t .
The stack of tasks
Introduction
Theoretical foundations
Software
Hierarchical task based control
In fact
∀u ∈ Rn
, J1 ˙q1+(In − J+
1 J1)u = J1 ˙q1
therefore,
˙q = ˙q1 + (In − J+
1 J1)u
also minimizes J1 ˙q + λ1T1 + ∂T1
∂t .
P1 = (In − J+
1 J1) is a projector on J1 kernel:
J1P1 = 0
∀u ∈ Rn, if ˙q = P1u, then, ˙T1 = ∂T1
∂t .
The stack of tasks
Introduction
Theoretical foundations
Software
Hierarchical task based control
In fact
∀u ∈ Rn
, J1 ˙q1+(In − J+
1 J1)u = J1 ˙q1
therefore,
˙q = ˙q1 + (In − J+
1 J1)u
also minimizes J1 ˙q + λ1T1 + ∂T1
∂t .
P1 = (In − J+
1 J1) is a projector on J1 kernel:
J1P1 = 0
∀u ∈ Rn, if ˙q = P1u, then, ˙T1 = ∂T1
∂t .
The stack of tasks
Introduction
Theoretical foundations
Software
Hierarchical task based control
In fact
∀u ∈ Rn
, J1 ˙q1+(In − J+
1 J1)u = J1 ˙q1
therefore,
˙q = ˙q1 + (In − J+
1 J1)u
also minimizes J1 ˙q + λ1T1 + ∂T1
∂t .
P1 = (In − J+
1 J1) is a projector on J1 kernel:
J1P1 = 0
∀u ∈ Rn, if ˙q = P1u, then, ˙T1 = ∂T1
∂t .
The stack of tasks
Introduction
Theoretical foundations
Software
Controlling the second task
We have
˙q = ˙q1 + P1u
˙T2 = J2 ˙q +
∂T2
∂t
˙T2 = J2 ˙q1 +
∂T2
∂t
+ J2P1u
We want
˙T2 = −λ2T2
Thus
−λ2T2 = J2 ˙q1 +
∂T2
∂t
+ J2P1u
J2P1u = −λ2T2 − J2 ˙q1 −
∂T2
∂t
The stack of tasks
Introduction
Theoretical foundations
Software
Controlling the second task
We have
˙q = ˙q1 + P1u
˙T2 = J2 ˙q +
∂T2
∂t
˙T2 = J2 ˙q1 +
∂T2
∂t
+ J2P1u
We want
˙T2 = −λ2T2
Thus
−λ2T2 = J2 ˙q1 +
∂T2
∂t
+ J2P1u
J2P1u = −λ2T2 − J2 ˙q1 −
∂T2
∂t
The stack of tasks
Introduction
Theoretical foundations
Software
Controlling the second task
We have
˙q = ˙q1 + P1u
˙T2 = J2 ˙q +
∂T2
∂t
˙T2 = J2 ˙q1 +
∂T2
∂t
+ J2P1u
We want
˙T2 = −λ2T2
Thus
−λ2T2 = J2 ˙q1 +
∂T2
∂t
+ J2P1u
J2P1u = −λ2T2 − J2 ˙q1 −
∂T2
∂t
The stack of tasks
Introduction
Theoretical foundations
Software
Controlling the second task
Thus
−λ2T2 = J2 ˙q1 +
∂T2
∂t
+ J2P1u
J2P1u = −λ2T2 − J2 ˙q1 −
∂T2
∂t
u = −(J2P1)+
(λ2T2 + J2 ˙q1 +
∂T2
∂t
)
˙q2 ˙q1 + P1u
= ˙q1 − P1(J2P1)+
(λ2T2 + J2 ˙q1 +
∂T2
∂t
))
minimizes ˙T2 + λ2T2 over ˙q1 + Ker J1.
The stack of tasks
Introduction
Theoretical foundations
Software
Controlling the second task
Thus
−λ2T2 = J2 ˙q1 +
∂T2
∂t
+ J2P1u
J2P1u = −λ2T2 − J2 ˙q1 −
∂T2
∂t
u = −(J2P1)+
(λ2T2 + J2 ˙q1 +
∂T2
∂t
)
˙q2 ˙q1 + P1u
= ˙q1 − P1(J2P1)+
(λ2T2 + J2 ˙q1 +
∂T2
∂t
))
minimizes ˙T2 + λ2T2 over ˙q1 + Ker J1.
The stack of tasks
Introduction
Theoretical foundations
Software
Example
◮ T1: position of the feet +
projection of center of
mass,
◮ T2: position of the right
wrist.
The stack of tasks
Introduction
Theoretical foundations
Software
Outline
Introduction
Theoretical foundations
Software
The stack of tasks
Introduction
Theoretical foundations
Software
Architecture overview
The stack of tasks
Introduction
Theoretical foundations
Software
Libraries
◮ jrl-mathtools: implementation of small size matrices,
◮ to be replaced by Eigen
◮ jrl-mal: abstract layer for matrices,
◮ to be replaced by Eigen
◮ abstract-robot-dynamics: abstraction for humanoid
robot description,
◮ jrl-dynamics: implementation of the above abstract
interfaces,
◮ jrl-walkgen: ZMP based dynamic walk generation.
The stack of tasks
Introduction
Theoretical foundations
Software
Libraries
◮ jrl-mathtools: implementation of small size matrices,
◮ to be replaced by Eigen
◮ jrl-mal: abstract layer for matrices,
◮ to be replaced by Eigen
◮ abstract-robot-dynamics: abstraction for humanoid
robot description,
◮ jrl-dynamics: implementation of the above abstract
interfaces,
◮ jrl-walkgen: ZMP based dynamic walk generation.
The stack of tasks
Introduction
Theoretical foundations
Software
Libraries
◮ jrl-mathtools: implementation of small size matrices,
◮ to be replaced by Eigen
◮ jrl-mal: abstract layer for matrices,
◮ to be replaced by Eigen
◮ abstract-robot-dynamics: abstraction for humanoid
robot description,
◮ jrl-dynamics: implementation of the above abstract
interfaces,
◮ jrl-walkgen: ZMP based dynamic walk generation.
The stack of tasks
Introduction
Theoretical foundations
Software
Libraries
◮ jrl-mathtools: implementation of small size matrices,
◮ to be replaced by Eigen
◮ jrl-mal: abstract layer for matrices,
◮ to be replaced by Eigen
◮ abstract-robot-dynamics: abstraction for humanoid
robot description,
◮ jrl-dynamics: implementation of the above abstract
interfaces,
◮ jrl-walkgen: ZMP based dynamic walk generation.
The stack of tasks
Introduction
Theoretical foundations
Software
Libraries
◮ jrl-mathtools: implementation of small size matrices,
◮ to be replaced by Eigen
◮ jrl-mal: abstract layer for matrices,
◮ to be replaced by Eigen
◮ abstract-robot-dynamics: abstraction for humanoid
robot description,
◮ jrl-dynamics: implementation of the above abstract
interfaces,
◮ jrl-walkgen: ZMP based dynamic walk generation.
The stack of tasks
Introduction
Theoretical foundations
Software
dynamic-graph
◮ Entity
◮ Signal: synchronous interface
◮ Command: asynchronous interface
◮ Factory
◮ builds a new entity of requested type,
◮ new entity types can be dynamically added (advanced).
◮ Pool
◮ stores all instances of entities,
◮ return reference to entity of given name.
The stack of tasks
Introduction
Theoretical foundations
Software
dynamic-graph
◮ Entity
◮ Signal: synchronous interface
◮ Command: asynchronous interface
◮ Factory
◮ builds a new entity of requested type,
◮ new entity types can be dynamically added (advanced).
◮ Pool
◮ stores all instances of entities,
◮ return reference to entity of given name.
The stack of tasks
Introduction
Theoretical foundations
Software
dynamic-graph
◮ Entity
◮ Signal: synchronous interface
◮ Command: asynchronous interface
◮ Factory
◮ builds a new entity of requested type,
◮ new entity types can be dynamically added (advanced).
◮ Pool
◮ stores all instances of entities,
◮ return reference to entity of given name.
The stack of tasks
Introduction
Theoretical foundations
Software
Signal
Synchronous interface storing a given data type
◮ output signals:
◮ recomputed by a callback function, or
◮ set to constant value
◮ warning: setting to constant value deactivate callback,
◮ input signals:
◮ plugged by an output signal, or
◮ set to constant value,
◮ warning: setting to constant value unplugs,
The stack of tasks
Introduction
Theoretical foundations
Software
Signal
Synchronous interface storing a given data type
◮ output signals:
◮ recomputed by a callback function, or
◮ set to constant value
◮ warning: setting to constant value deactivate callback,
◮ input signals:
◮ plugged by an output signal, or
◮ set to constant value,
◮ warning: setting to constant value unplugs,
The stack of tasks
Introduction
Theoretical foundations
Software
Signal
Synchronous interface storing a given data type
◮ output signals:
◮ recomputed by a callback function, or
◮ set to constant value
◮ warning: setting to constant value deactivate callback,
◮ input signals:
◮ plugged by an output signal, or
◮ set to constant value,
◮ warning: setting to constant value unplugs,
The stack of tasks
Introduction
Theoretical foundations
Software
Signal
Synchronous interface storing a given data type
◮ output signals:
◮ recomputed by a callback function, or
◮ set to constant value
◮ warning: setting to constant value deactivate callback,
◮ input signals:
◮ plugged by an output signal, or
◮ set to constant value,
◮ warning: setting to constant value unplugs,
The stack of tasks
Introduction
Theoretical foundations
Software
Signal
Synchronous interface storing a given data type
◮ dependency relation: s1 depends on s2 if s1 callback
needs the value of s2,
◮ each signal s stores time of last recomputation in member
s.t
◮ s is said outdated at time t if
◮ t > s.t , and
◮ one dependency s dep of s
◮ is out-dated or
◮ has been recomputed later than s: s dep.t > s.t .
◮ reading an out-dated signal triggers recomputation.
◮ New types can be dynamically added (advanced)
The stack of tasks
Introduction
Theoretical foundations
Software
Signal
Synchronous interface storing a given data type
◮ dependency relation: s1 depends on s2 if s1 callback
needs the value of s2,
◮ each signal s stores time of last recomputation in member
s.t
◮ s is said outdated at time t if
◮ t > s.t , and
◮ one dependency s dep of s
◮ is out-dated or
◮ has been recomputed later than s: s dep.t > s.t .
◮ reading an out-dated signal triggers recomputation.
◮ New types can be dynamically added (advanced)
The stack of tasks
Introduction
Theoretical foundations
Software
Signal
Synchronous interface storing a given data type
◮ dependency relation: s1 depends on s2 if s1 callback
needs the value of s2,
◮ each signal s stores time of last recomputation in member
s.t
◮ s is said outdated at time t if
◮ t > s.t , and
◮ one dependency s dep of s
◮ is out-dated or
◮ has been recomputed later than s: s dep.t > s.t .
◮ reading an out-dated signal triggers recomputation.
◮ New types can be dynamically added (advanced)
The stack of tasks
Introduction
Theoretical foundations
Software
Signal
Synchronous interface storing a given data type
◮ dependency relation: s1 depends on s2 if s1 callback
needs the value of s2,
◮ each signal s stores time of last recomputation in member
s.t
◮ s is said outdated at time t if
◮ t > s.t , and
◮ one dependency s dep of s
◮ is out-dated or
◮ has been recomputed later than s: s dep.t > s.t .
◮ reading an out-dated signal triggers recomputation.
◮ New types can be dynamically added (advanced)
The stack of tasks
Introduction
Theoretical foundations
Software
Signal
Synchronous interface storing a given data type
◮ dependency relation: s1 depends on s2 if s1 callback
needs the value of s2,
◮ each signal s stores time of last recomputation in member
s.t
◮ s is said outdated at time t if
◮ t > s.t , and
◮ one dependency s dep of s
◮ is out-dated or
◮ has been recomputed later than s: s dep.t > s.t .
◮ reading an out-dated signal triggers recomputation.
◮ New types can be dynamically added (advanced)
The stack of tasks
Introduction
Theoretical foundations
Software
Signal
Synchronous interface storing a given data type
◮ dependency relation: s1 depends on s2 if s1 callback
needs the value of s2,
◮ each signal s stores time of last recomputation in member
s.t
◮ s is said outdated at time t if
◮ t > s.t , and
◮ one dependency s dep of s
◮ is out-dated or
◮ has been recomputed later than s: s dep.t > s.t .
◮ reading an out-dated signal triggers recomputation.
◮ New types can be dynamically added (advanced)
The stack of tasks
Introduction
Theoretical foundations
Software
Command
Asynchronous interface
◮ input in a fixed set of types,
◮ trigger an action,
◮ returns a result in the same set of types.
The stack of tasks
Introduction
Theoretical foundations
Software
dynamic-graph-python
Python bindings to dynamic-graph
◮ module dynamic graph linked to
libdynamic-graph.so
◮ class Entity
◮ each C++ entity class declared in the factory generates a
python class of the same name,
◮ signals are instance members,
◮ commands are bound to instance methods
◮ method help lists commands
◮ method displaySignals displays signals
◮ class Signal
◮ property value to set and get signal value
◮ remote interpreter to be embedded into a robot controller
(advanced)
The stack of tasks
Introduction
Theoretical foundations
Software
dynamic-graph-python
Python bindings to dynamic-graph
◮ module dynamic graph linked to
libdynamic-graph.so
◮ class Entity
◮ each C++ entity class declared in the factory generates a
python class of the same name,
◮ signals are instance members,
◮ commands are bound to instance methods
◮ method help lists commands
◮ method displaySignals displays signals
◮ class Signal
◮ property value to set and get signal value
◮ remote interpreter to be embedded into a robot controller
(advanced)
The stack of tasks
Introduction
Theoretical foundations
Software
dynamic-graph-python
Python bindings to dynamic-graph
◮ module dynamic graph linked to
libdynamic-graph.so
◮ class Entity
◮ each C++ entity class declared in the factory generates a
python class of the same name,
◮ signals are instance members,
◮ commands are bound to instance methods
◮ method help lists commands
◮ method displaySignals displays signals
◮ class Signal
◮ property value to set and get signal value
◮ remote interpreter to be embedded into a robot controller
(advanced)
The stack of tasks
Introduction
Theoretical foundations
Software
dynamic-graph-python
Python bindings to dynamic-graph
◮ module dynamic graph linked to
libdynamic-graph.so
◮ class Entity
◮ each C++ entity class declared in the factory generates a
python class of the same name,
◮ signals are instance members,
◮ commands are bound to instance methods
◮ method help lists commands
◮ method displaySignals displays signals
◮ class Signal
◮ property value to set and get signal value
◮ remote interpreter to be embedded into a robot controller
(advanced)
The stack of tasks
Introduction
Theoretical foundations
Software
dynamic-graph-python
Python bindings to dynamic-graph
◮ module dynamic graph linked to
libdynamic-graph.so
◮ class Entity
◮ each C++ entity class declared in the factory generates a
python class of the same name,
◮ signals are instance members,
◮ commands are bound to instance methods
◮ method help lists commands
◮ method displaySignals displays signals
◮ class Signal
◮ property value to set and get signal value
◮ remote interpreter to be embedded into a robot controller
(advanced)
The stack of tasks
Introduction
Theoretical foundations
Software
dynamic-graph-tutorial
Simple use case for illustration
◮ Definition of 2 entity types
◮ InvertedPendulum
◮ input signal: force
◮ output signal: state
◮ FeedbackController
◮ input signal: state
◮ output signal: force
The stack of tasks
Introduction
Theoretical foundations
Software
dynamic-graph-tutorial
>>> from dynamic graph.tutorial import InvertedPendulum, FeedbackController
>>> a = InvertedPendulum (’IP’)
>>> b = FeedbackController (’K’)
>>> a.displaySignals ()
--- <IP> signal list:
|-- <Sig:InvertedPendulum(IP)::input(double)::force (Type Cst) AUTOPLUGGED
‘-- <Sig:InvertedPendulum(IP)::output(vector)::state (Type Cst)
>>> a.help ()
Classical inverted pendulum dynamic model
List of commands:
-----------------
getCartMass: Get cart mass
getPendulumLength: Get pendulum length
getPendulumMass: Get pendulum mass
incr: Integrate dynamics for time step provided as input
setCartMass: Set cart mass
setPendulumLength: Set pendulum length
setPendulumMass: Set pendulum mass
>>> a.help (’incr’)
incr:
Integrate dynamics for time step provided as input
take one floating point number as input
>>>
The stack of tasks
Introduction
Theoretical foundations
Software
dynamic-graph-tutorial
>>> from dynamic graph.tutorial import InvertedPendulum, FeedbackController
>>> a = InvertedPendulum (’IP’)
>>> b = FeedbackController (’K’)
>>> a.displaySignals ()
--- <IP> signal list:
|-- <Sig:InvertedPendulum(IP)::input(double)::force (Type Cst) AUTOPLUGGED
‘-- <Sig:InvertedPendulum(IP)::output(vector)::state (Type Cst)
>>> a.help ()
Classical inverted pendulum dynamic model
List of commands:
-----------------
getCartMass: Get cart mass
getPendulumLength: Get pendulum length
getPendulumMass: Get pendulum mass
incr: Integrate dynamics for time step provided as input
setCartMass: Set cart mass
setPendulumLength: Set pendulum length
setPendulumMass: Set pendulum mass
>>> a.help (’incr’)
incr:
Integrate dynamics for time step provided as input
take one floating point number as input
>>>
The stack of tasks
Introduction
Theoretical foundations
Software
dynamic-graph-tutorial
>>> from dynamic graph.tutorial import InvertedPendulum, FeedbackController
>>> a = InvertedPendulum (’IP’)
>>> b = FeedbackController (’K’)
>>> a.displaySignals ()
--- <IP> signal list:
|-- <Sig:InvertedPendulum(IP)::input(double)::force (Type Cst) AUTOPLUGGED
‘-- <Sig:InvertedPendulum(IP)::output(vector)::state (Type Cst)
>>> a.help ()
Classical inverted pendulum dynamic model
List of commands:
-----------------
getCartMass: Get cart mass
getPendulumLength: Get pendulum length
getPendulumMass: Get pendulum mass
incr: Integrate dynamics for time step provided as input
setCartMass: Set cart mass
setPendulumLength: Set pendulum length
setPendulumMass: Set pendulum mass
>>> a.help (’incr’)
incr:
Integrate dynamics for time step provided as input
take one floating point number as input
>>>
The stack of tasks
Introduction
Theoretical foundations
Software
dynamic-graph-tutorial
>>> from dynamic graph.tutorial import InvertedPendulum, FeedbackController
>>> a = InvertedPendulum (’IP’)
>>> b = FeedbackController (’K’)
>>> a.displaySignals ()
--- <IP> signal list:
|-- <Sig:InvertedPendulum(IP)::input(double)::force (Type Cst) AUTOPLUGGED
‘-- <Sig:InvertedPendulum(IP)::output(vector)::state (Type Cst)
>>> a.help ()
Classical inverted pendulum dynamic model
List of commands:
-----------------
getCartMass: Get cart mass
getPendulumLength: Get pendulum length
getPendulumMass: Get pendulum mass
incr: Integrate dynamics for time step provided as input
setCartMass: Set cart mass
setPendulumLength: Set pendulum length
setPendulumMass: Set pendulum mass
>>> a.help (’incr’)
incr:
Integrate dynamics for time step provided as input
take one floating point number as input
>>>
The stack of tasks
Introduction
Theoretical foundations
Software
dynamic-graph-tutorial
>>> from dynamic graph.tutorial import InvertedPendulum, FeedbackController
>>> a = InvertedPendulum (’IP’)
>>> b = FeedbackController (’K’)
>>> a.displaySignals ()
--- <IP> signal list:
|-- <Sig:InvertedPendulum(IP)::input(double)::force (Type Cst) AUTOPLUGGED
‘-- <Sig:InvertedPendulum(IP)::output(vector)::state (Type Cst)
>>> a.help ()
Classical inverted pendulum dynamic model
List of commands:
-----------------
getCartMass: Get cart mass
getPendulumLength: Get pendulum length
getPendulumMass: Get pendulum mass
incr: Integrate dynamics for time step provided as input
setCartMass: Set cart mass
setPendulumLength: Set pendulum length
setPendulumMass: Set pendulum mass
>>> a.help (’incr’)
incr:
Integrate dynamics for time step provided as input
take one floating point number as input
>>>
The stack of tasks
Introduction
Theoretical foundations
Software
dynamic-graph-tutorial
Package provides
◮ C++ code of classes InvertedPendulum and
FeedbackController,
◮ explanation about how to create a new entity type in C++,
◮ information about how to create a command in C++,
◮ information about how to create a python module defining
the bindings in cmake,
◮ python script that runs an example.
The stack of tasks
Introduction
Theoretical foundations
Software
dynamic-graph-tutorial
Package provides
◮ C++ code of classes InvertedPendulum and
FeedbackController,
◮ explanation about how to create a new entity type in C++,
◮ information about how to create a command in C++,
◮ information about how to create a python module defining
the bindings in cmake,
◮ python script that runs an example.
The stack of tasks
Introduction
Theoretical foundations
Software
dynamic-graph-tutorial
Package provides
◮ C++ code of classes InvertedPendulum and
FeedbackController,
◮ explanation about how to create a new entity type in C++,
◮ information about how to create a command in C++,
◮ information about how to create a python module defining
the bindings in cmake,
◮ python script that runs an example.
The stack of tasks
Introduction
Theoretical foundations
Software
dynamic-graph-tutorial
Package provides
◮ C++ code of classes InvertedPendulum and
FeedbackController,
◮ explanation about how to create a new entity type in C++,
◮ information about how to create a command in C++,
◮ information about how to create a python module defining
the bindings in cmake,
◮ python script that runs an example.
The stack of tasks
Introduction
Theoretical foundations
Software
dynamic-graph-tutorial
Package provides
◮ C++ code of classes InvertedPendulum and
FeedbackController,
◮ explanation about how to create a new entity type in C++,
◮ information about how to create a command in C++,
◮ information about how to create a python module defining
the bindings in cmake,
◮ python script that runs an example.
The stack of tasks
Introduction
Theoretical foundations
Software
sot-core
Class FeatureAbstract
◮ function of the robot and environment states
◮ position of an end-effector,
◮ position of a feature in an image (visual servoing)
◮ with values in a Lie group G (SO(3), SE(3), Rn,...),
◮ with a mapping e from G into Rm such that
e(0G) = 0
The stack of tasks
Introduction
Theoretical foundations
Software
sot-core
Class FeatureAbstract
◮ function of the robot and environment states
◮ position of an end-effector,
◮ position of a feature in an image (visual servoing)
◮ with values in a Lie group G (SO(3), SE(3), Rn,...),
◮ with a mapping e from G into Rm such that
e(0G) = 0
The stack of tasks
Introduction
Theoretical foundations
Software
sot-core
Class FeatureAbstract
◮ function of the robot and environment states
◮ position of an end-effector,
◮ position of a feature in an image (visual servoing)
◮ with values in a Lie group G (SO(3), SE(3), Rn,...),
◮ with a mapping e from G into Rm such that
e(0G) = 0
The stack of tasks
Introduction
Theoretical foundations
Software
sot-core
Class FeatureAbstract
◮ function of the robot and environment states
◮ position of an end-effector,
◮ position of a feature in an image (visual servoing)
◮ with values in a Lie group G (SO(3), SE(3), Rn,...),
◮ with a mapping e from G into Rm such that
e(0G) = 0
The stack of tasks
Introduction
Theoretical foundations
Software
Feature
When paired with a reference, features become tasks.
◮ Example
◮ error = e (value.position⊖reference.position)
◮ errordot: derivative of error when value.position
is constant.
The stack of tasks
Introduction
Theoretical foundations
Software
Feature
When paired with a reference, features become tasks.
◮ Example
◮ error = e (value.position⊖reference.position)
◮ errordot: derivative of error when value.position
is constant.
The stack of tasks
Introduction
Theoretical foundations
Software
Feature
When paired with a reference, features become tasks.
◮ Example
◮ error = e (value.position⊖reference.position)
◮ errordot: derivative of error when value.position
is constant.
The stack of tasks
Introduction
Theoretical foundations
Software
Task
◮ Collection of features with a control gain,
◮ implements abstraction TaskAbstract
◮ task = −controlGain.error
The stack of tasks
Introduction
Theoretical foundations
Software
Solver SOT
Hierarchical task solver
◮ computes robot joint velocity
The stack of tasks
Introduction
Theoretical foundations
Software
sot-dynamic
dynamic graph.sot.dynamics.Dynamic builds a
kinematic chain from a file and
◮ computes forward kinematics
◮ position and Jacobian of end effectors (wrists, ankles),
◮ position of center of mass
◮ computes dynamics
◮ inertia matrix.
The stack of tasks
Introduction
Theoretical foundations
Software
sot-pattern-generator
dynamic graph.sot.pattern generator
◮ Entity PatternGenerator produces walk motions as
◮ position and velocity of the feet
◮ position and velocity of the center of mass
The stack of tasks
Introduction
Theoretical foundations
Software
sot-application
dynamic graph.sot.application
◮ Provide scripts for standard control graph initialization
◮ depends on application: control mode (velocity,
acceleration)
The stack of tasks
Introduction
Theoretical foundations
Software
Packages specific to robots
sot-hrp2
◮ defines a class Robot that provides
◮ ready to use features for feet, hands, gaze and center of
mass,
◮ ready to use tasks for the same end effectors,
◮ an entity Dynamic,
◮ an entity Device (interface with the robot control system)
sot-hrprtc-hrp2
◮ provide an RTC component to integrate sot-hrp2 into the
robot controller.
The stack of tasks
Introduction
Theoretical foundations
Software
Utilities
◮ dynamic graph.writeGraph (filename): writes the
current graph in a file using graphviz dot format.
◮ dynamic graph.sot.core.FeaturePosition wraps
two FeaturePoint6d: a value and a reference,
◮ MetaTask6d:
◮ MetaTaskPosture:
◮ MetaTaskKine6d:
◮ MetaTaskKinePosture:
◮ MetaTaskCom:
The stack of tasks
Introduction
Theoretical foundations
Software
Utilities
◮ dynamic graph.writeGraph (filename): writes the
current graph in a file using graphviz dot format.
◮ dynamic graph.sot.core.FeaturePosition wraps
two FeaturePoint6d: a value and a reference,
◮ MetaTask6d:
◮ MetaTaskPosture:
◮ MetaTaskKine6d:
◮ MetaTaskKinePosture:
◮ MetaTaskCom:
The stack of tasks
Introduction
Theoretical foundations
Software
Utilities
◮ dynamic graph.writeGraph (filename): writes the
current graph in a file using graphviz dot format.
◮ dynamic graph.sot.core.FeaturePosition wraps
two FeaturePoint6d: a value and a reference,
◮ MetaTask6d:
◮ MetaTaskPosture:
◮ MetaTaskKine6d:
◮ MetaTaskKinePosture:
◮ MetaTaskCom:
The stack of tasks
Introduction
Theoretical foundations
Software
Utilities
◮ dynamic graph.writeGraph (filename): writes the
current graph in a file using graphviz dot format.
◮ dynamic graph.sot.core.FeaturePosition wraps
two FeaturePoint6d: a value and a reference,
◮ MetaTask6d:
◮ MetaTaskPosture:
◮ MetaTaskKine6d:
◮ MetaTaskKinePosture:
◮ MetaTaskCom:
The stack of tasks
Introduction
Theoretical foundations
Software
Utilities
◮ dynamic graph.writeGraph (filename): writes the
current graph in a file using graphviz dot format.
◮ dynamic graph.sot.core.FeaturePosition wraps
two FeaturePoint6d: a value and a reference,
◮ MetaTask6d:
◮ MetaTaskPosture:
◮ MetaTaskKine6d:
◮ MetaTaskKinePosture:
◮ MetaTaskCom:
The stack of tasks
Introduction
Theoretical foundations
Software
Utilities
◮ dynamic graph.writeGraph (filename): writes the
current graph in a file using graphviz dot format.
◮ dynamic graph.sot.core.FeaturePosition wraps
two FeaturePoint6d: a value and a reference,
◮ MetaTask6d:
◮ MetaTaskPosture:
◮ MetaTaskKine6d:
◮ MetaTaskKinePosture:
◮ MetaTaskCom:
The stack of tasks
Introduction
Theoretical foundations
Software
Utilities
◮ dynamic graph.writeGraph (filename): writes the
current graph in a file using graphviz dot format.
◮ dynamic graph.sot.core.FeaturePosition wraps
two FeaturePoint6d: a value and a reference,
◮ MetaTask6d:
◮ MetaTaskPosture:
◮ MetaTaskKine6d:
◮ MetaTaskKinePosture:
◮ MetaTaskCom:
The stack of tasks
Introduction
Theoretical foundations
Software
Installation
Through robotpkg
◮ git clone http://trac.laas.fr/git/robots/robotpkg.git
cd robotpkg
./bootstrap/bootstrap --prefix=<your prefix>
cd motion/sot-dynamic
make install
The stack of tasks
Introduction
Theoretical foundations
Software
Installation
Through github:
◮ git clone --recursive git://github.com/jrl-umi3218/jrl-mal.git
git clone --recursive git://github.com/jrl-umi3218/jrl-mathtools.git
git clone --recursive git://github.com/laas/abstract-robot-dynamics.git
git clone --recursive git://github.com/jrl-umi3218/jrl-dynamics.git
git clone --recursive git://github.com/jrl-umi3218/jrl-walkgen.git
git clone --recursive git://github.com/jrl-umi3218/dynamic-graph.git
git clone --recursive git://github.com/jrl-umi3218/dynamic-graph-python.git
git clone --recursive git://github.com/jrl-umi3218/sot-core.git
git clone --recursive git://github.com/laas/sot-tools.git
git clone --recursive git://github.com/jrl-umi3218/sot-dynamic.git
git clone --recursive git://github.com/jrl-umi3218/sot-pattern-generator.git
git clone --recursive git://github.com/stack-of-tasks/sot-application.git
git clone --recursive git://github.com/laas/sot-hrp2.git
git clone --recursive git://github.com/stack-of-tasks/sot-hrprtc-hrp2.git
◮ for each package,
mkdir package/build
cd package/build
cmake -DCMAKE INSTALL PREFIX=<your prefix> ..
make install
The stack of tasks
Introduction
Theoretical foundations
Software
Installation
Through github:
◮ git clone --recursive git://github.com/jrl-umi3218/jrl-mal.git
git clone --recursive git://github.com/jrl-umi3218/jrl-mathtools.git
git clone --recursive git://github.com/laas/abstract-robot-dynamics.git
git clone --recursive git://github.com/jrl-umi3218/jrl-dynamics.git
git clone --recursive git://github.com/jrl-umi3218/jrl-walkgen.git
git clone --recursive git://github.com/jrl-umi3218/dynamic-graph.git
git clone --recursive git://github.com/jrl-umi3218/dynamic-graph-python.git
git clone --recursive git://github.com/jrl-umi3218/sot-core.git
git clone --recursive git://github.com/laas/sot-tools.git
git clone --recursive git://github.com/jrl-umi3218/sot-dynamic.git
git clone --recursive git://github.com/jrl-umi3218/sot-pattern-generator.git
git clone --recursive git://github.com/stack-of-tasks/sot-application.git
git clone --recursive git://github.com/laas/sot-hrp2.git
git clone --recursive git://github.com/stack-of-tasks/sot-hrprtc-hrp2.git
◮ for each package,
mkdir package/build
cd package/build
cmake -DCMAKE INSTALL PREFIX=<your prefix> ..
make install
The stack of tasks
Introduction
Theoretical foundations
Software
Installation
Through installation script
◮ git clone git://github.com/stack-of-tasks/install-sot.git
cd install-sot/scripts
./install sot.sh
The stack of tasks
Introduction
Theoretical foundations
Software
Running the stack of tasks into OpenHRP-3.1
You need to install:
◮ ros-electric
◮ OpenHRP-3.1
you will find instructions in https://wiki.laas.fr/robots/HRP/Software
Then follow instructions in sot-hrprtc/README.md:
https://github.com/stack-of-tasks/sot-hrprtc-hrp2
The stack of tasks
Introduction
Theoretical foundations
Software
Running the stack of tasks into OpenHRP-3.0.7
Assumptions
◮ OpenHRP 3.0.7 is installed
◮ The Stack of Tasks has been installed thanks to previous
slide with install sot.sh in the directory:
/home/ user / devel / ros unstable
◮ Your /opt/grx3.0/HRP2LAAS/bin/config.sh is well setup.
The golden commands
$>roscore
#Launching HRP2 simulation with OpenHPR
$>roslaunch hrp2 bringup openhrp bridge . launch robot := hrp2 14
mode:= d g w i t h s t a b i l i z e r simulation := true
$>rosrun dynamic graph bridge run command
$>>> . . . # create the solver ( see next s l i d e )
$>rosservice c a l l / start dynamic graph
The stack of tasks
Introduction
Theoretical foundations
Software
Running the stack of tasks into OpenHRP-3.0.7
Initialize the application: create tracer and solver
[ INFO ] [ WallTime : 1370854858.786392] waiting for
service . . .
I n t e r a c t i n g with remote server .
>>> from dynamic graph . sot . a p p l i c a t i o n . v e l o c i t y .
precomputed tasks import i n i t i a l i z e
>>> solver = i n i t i a l i z e ( robot )
>>> robot . i n i t i a l i z e T r a c e r ( )
The stack of tasks
Introduction
Theoretical foundations
Software
Running the stack of tasks into OpenHRP-3.0.7
Build the graph including the pattern generator
[ INFO ] [ WallTime : 1370854858.786392] waiting for
service . . .
I n t e r a c t i n g with remote server .
>>> from
dynamic graph . sot . pattern generator . walking
import CreateEverythingForPG , walkFewSteps
With meta selector
The stack of tasks
Introduction
Theoretical foundations
Software
Running the stack of tasks into OpenHRP-3.0.7
Create the graph
>>> CreateEverythingForPG ( robot , solver )
At t h i s stage
( ’ modelDir : ’ ,
’ ˜ / devel / ros−unstable / i n s t a l l / share / hrp2−14 ’ )
( ’modelName : ’ , ’ HRP2JRLmainsmall . wrl ’ )
( ’ s p e c i f i c i t i e s P a t h : ’ ,
’ HRP2SpecificitiesSmall . xml ’ )
( ’ jointRankPath : ’ , ’ HRP2LinkJointRankSmall . xml ’ )
After Task for Right and Left Feet
The stack of tasks
Introduction
Theoretical foundations
Software
Running the stack of tasks into OpenHRP-3.0.7
Switch to the new graph
>>> walkFewSteps ( robot )
>>>
The stack of tasks
Introduction
Theoretical foundations
Software
Software structure - Conceptual view
The stack of tasks
Introduction
Theoretical foundations
Software
Software structure - Link with Model
The stack of tasks
Introduction
Theoretical foundations
Software
Software structure - Link with Model
The stack of tasks
Introduction
Theoretical foundations
Software
Software structure - Link with Model
The stack of tasks
Introduction
Theoretical foundations
Software
Software structure - Link with Model
The stack of tasks
Introduction
Theoretical foundations
Software
Software structure - Link with Model
The stack of tasks
Introduction
Theoretical foundations
Software
Software structure - Link with Model
The stack of tasks
Introduction
Theoretical foundations
Software
Software structure - Repositories
The stack of tasks
1 of 127

Recommended

Reproducing Kernel Hilbert Space of A Set Indexed Brownian Motion by
Reproducing Kernel Hilbert Space of A Set Indexed Brownian MotionReproducing Kernel Hilbert Space of A Set Indexed Brownian Motion
Reproducing Kernel Hilbert Space of A Set Indexed Brownian MotionIJMERJOURNAL
121 views8 slides
Representation formula for traffic flow estimation on a network by
Representation formula for traffic flow estimation on a networkRepresentation formula for traffic flow estimation on a network
Representation formula for traffic flow estimation on a networkGuillaume Costeseque
114 views57 slides
mixing_time_poster by
mixing_time_postermixing_time_poster
mixing_time_posterChang He
68 views1 slide
Asymptotic notations by
Asymptotic notationsAsymptotic notations
Asymptotic notationsNikhil Sharma
38.4K views18 slides
Time and space complexity by
Time and space complexityTime and space complexity
Time and space complexityAnkit Katiyar
99K views5 slides
Lec 5 asymptotic notations and recurrences by
Lec 5 asymptotic notations and recurrencesLec 5 asymptotic notations and recurrences
Lec 5 asymptotic notations and recurrencesAnkita Karia
696 views13 slides

More Related Content

What's hot

A Commutative Alternative to Fractional Calculus on k-Differentiable Functions by
A Commutative Alternative to Fractional Calculus on k-Differentiable FunctionsA Commutative Alternative to Fractional Calculus on k-Differentiable Functions
A Commutative Alternative to Fractional Calculus on k-Differentiable FunctionsMatt Parker
140 views7 slides
Jere Koskela slides by
Jere Koskela slidesJere Koskela slides
Jere Koskela slidesChristian Robert
3K views16 slides
no U-turn sampler, a discussion of Hoffman & Gelman NUTS algorithm by
no U-turn sampler, a discussion of Hoffman & Gelman NUTS algorithmno U-turn sampler, a discussion of Hoffman & Gelman NUTS algorithm
no U-turn sampler, a discussion of Hoffman & Gelman NUTS algorithmChristian Robert
5.6K views75 slides
Coordinate sampler: A non-reversible Gibbs-like sampler by
Coordinate sampler: A non-reversible Gibbs-like samplerCoordinate sampler: A non-reversible Gibbs-like sampler
Coordinate sampler: A non-reversible Gibbs-like samplerChristian Robert
3.6K views46 slides
Time complexity by
Time complexityTime complexity
Time complexityKatang Isip
10.5K views27 slides
Multinomial Logistic Regression with Apache Spark by
Multinomial Logistic Regression with Apache SparkMultinomial Logistic Regression with Apache Spark
Multinomial Logistic Regression with Apache SparkDB Tsai
12.9K views31 slides

What's hot(20)

A Commutative Alternative to Fractional Calculus on k-Differentiable Functions by Matt Parker
A Commutative Alternative to Fractional Calculus on k-Differentiable FunctionsA Commutative Alternative to Fractional Calculus on k-Differentiable Functions
A Commutative Alternative to Fractional Calculus on k-Differentiable Functions
Matt Parker140 views
no U-turn sampler, a discussion of Hoffman & Gelman NUTS algorithm by Christian Robert
no U-turn sampler, a discussion of Hoffman & Gelman NUTS algorithmno U-turn sampler, a discussion of Hoffman & Gelman NUTS algorithm
no U-turn sampler, a discussion of Hoffman & Gelman NUTS algorithm
Christian Robert5.6K views
Coordinate sampler: A non-reversible Gibbs-like sampler by Christian Robert
Coordinate sampler: A non-reversible Gibbs-like samplerCoordinate sampler: A non-reversible Gibbs-like sampler
Coordinate sampler: A non-reversible Gibbs-like sampler
Christian Robert3.6K views
Time complexity by Katang Isip
Time complexityTime complexity
Time complexity
Katang Isip10.5K views
Multinomial Logistic Regression with Apache Spark by DB Tsai
Multinomial Logistic Regression with Apache SparkMultinomial Logistic Regression with Apache Spark
Multinomial Logistic Regression with Apache Spark
DB Tsai12.9K views
Analysis of algorithn class 3 by Kumar
Analysis of algorithn class 3Analysis of algorithn class 3
Analysis of algorithn class 3
Kumar 524 views
asymptotic notations i by Ali mahmood
asymptotic notations iasymptotic notations i
asymptotic notations i
Ali mahmood1.8K views
Asymptotic Notations by Rishabh Soni
Asymptotic NotationsAsymptotic Notations
Asymptotic Notations
Rishabh Soni11.6K views
Asymptotic notations by Ehtisham Ali
Asymptotic notationsAsymptotic notations
Asymptotic notations
Ehtisham Ali25.7K views
Theoretical Spectroscopy Lectures: real-time approach 1 by Claudio Attaccalite
Theoretical Spectroscopy Lectures: real-time approach 1Theoretical Spectroscopy Lectures: real-time approach 1
Theoretical Spectroscopy Lectures: real-time approach 1
Introduction to Fourier transform and signal analysis by 宗翰 謝
Introduction to Fourier transform and signal analysisIntroduction to Fourier transform and signal analysis
Introduction to Fourier transform and signal analysis
宗翰 謝7.1K views
Laplace transform & fourier series by vaibhav tailor
Laplace transform & fourier seriesLaplace transform & fourier series
Laplace transform & fourier series
vaibhav tailor2.7K views
Fourier Series for Continuous Time & Discrete Time Signals by Jayanshu Gundaniya
Fourier Series for Continuous Time & Discrete Time SignalsFourier Series for Continuous Time & Discrete Time Signals
Fourier Series for Continuous Time & Discrete Time Signals
Jayanshu Gundaniya15.3K views
Algorithm.ppt by Tareq Hasan
Algorithm.pptAlgorithm.ppt
Algorithm.ppt
Tareq Hasan22.2K views
Code of the multidimensional fractional pseudo-Newton method using recursive ... by mathsjournal
Code of the multidimensional fractional pseudo-Newton method using recursive ...Code of the multidimensional fractional pseudo-Newton method using recursive ...
Code of the multidimensional fractional pseudo-Newton method using recursive ...
mathsjournal61 views

Similar to Stack of Tasks Course

MVPA with SpaceNet: sparse structured priors by
MVPA with SpaceNet: sparse structured priorsMVPA with SpaceNet: sparse structured priors
MVPA with SpaceNet: sparse structured priorsElvis DOHMATOB
128 views30 slides
Linear transformation.ppt by
Linear transformation.pptLinear transformation.ppt
Linear transformation.pptRaj Parekh
23.5K views59 slides
Task Constrained Motion Planning for Snake Robot by
Task Constrained Motion Planning for Snake RobotTask Constrained Motion Planning for Snake Robot
Task Constrained Motion Planning for Snake RobotGiovanni Murru
2.8K views20 slides
Convex Optimization Modelling with CVXOPT by
Convex Optimization Modelling with CVXOPTConvex Optimization Modelling with CVXOPT
Convex Optimization Modelling with CVXOPTandrewmart11
26.1K views42 slides
A new approach in specifying the inverse quadratic matrix in modulo-2 for con... by
A new approach in specifying the inverse quadratic matrix in modulo-2 for con...A new approach in specifying the inverse quadratic matrix in modulo-2 for con...
A new approach in specifying the inverse quadratic matrix in modulo-2 for con...Anax Fotopoulos
252 views29 slides
R Language Introduction by
R Language IntroductionR Language Introduction
R Language IntroductionKhaled Al-Shamaa
8.6K views95 slides

Similar to Stack of Tasks Course(20)

MVPA with SpaceNet: sparse structured priors by Elvis DOHMATOB
MVPA with SpaceNet: sparse structured priorsMVPA with SpaceNet: sparse structured priors
MVPA with SpaceNet: sparse structured priors
Elvis DOHMATOB128 views
Linear transformation.ppt by Raj Parekh
Linear transformation.pptLinear transformation.ppt
Linear transformation.ppt
Raj Parekh23.5K views
Task Constrained Motion Planning for Snake Robot by Giovanni Murru
Task Constrained Motion Planning for Snake RobotTask Constrained Motion Planning for Snake Robot
Task Constrained Motion Planning for Snake Robot
Giovanni Murru2.8K views
Convex Optimization Modelling with CVXOPT by andrewmart11
Convex Optimization Modelling with CVXOPTConvex Optimization Modelling with CVXOPT
Convex Optimization Modelling with CVXOPT
andrewmart1126.1K views
A new approach in specifying the inverse quadratic matrix in modulo-2 for con... by Anax Fotopoulos
A new approach in specifying the inverse quadratic matrix in modulo-2 for con...A new approach in specifying the inverse quadratic matrix in modulo-2 for con...
A new approach in specifying the inverse quadratic matrix in modulo-2 for con...
Anax Fotopoulos252 views
Random Matrix Theory and Machine Learning - Part 3 by Fabian Pedregosa
Random Matrix Theory and Machine Learning - Part 3Random Matrix Theory and Machine Learning - Part 3
Random Matrix Theory and Machine Learning - Part 3
Fabian Pedregosa22K views
Tail Probabilities for Randomized Program Runtimes via Martingales for Higher... by Satoshi Kura
Tail Probabilities for Randomized Program Runtimes via Martingales for Higher...Tail Probabilities for Randomized Program Runtimes via Martingales for Higher...
Tail Probabilities for Randomized Program Runtimes via Martingales for Higher...
Satoshi Kura78 views
Class 28: Entropy by David Evans
Class 28: EntropyClass 28: Entropy
Class 28: Entropy
David Evans650 views
Otter 2016-11-28-01-ss by Ruo Ando
Otter 2016-11-28-01-ssOtter 2016-11-28-01-ss
Otter 2016-11-28-01-ss
Ruo Ando167 views
Planning Under Uncertainty With Markov Decision Processes by ahmad bassiouny
Planning Under Uncertainty With Markov Decision ProcessesPlanning Under Uncertainty With Markov Decision Processes
Planning Under Uncertainty With Markov Decision Processes
ahmad bassiouny708 views
Linear Machine Learning Models with L2 Regularization and Kernel Tricks by Fengtao Wu
Linear Machine Learning Models with L2 Regularization and Kernel TricksLinear Machine Learning Models with L2 Regularization and Kernel Tricks
Linear Machine Learning Models with L2 Regularization and Kernel Tricks
Fengtao Wu716 views
Time series Modelling Basics by Ashutosh Kumar
Time series Modelling BasicsTime series Modelling Basics
Time series Modelling Basics
Ashutosh Kumar142 views
Profiling and optimization by g3_nittala
Profiling and optimizationProfiling and optimization
Profiling and optimization
g3_nittala1.3K views

Recently uploaded

Igniting Next Level Productivity with AI-Infused Data Integration Workflows by
Igniting Next Level Productivity with AI-Infused Data Integration Workflows Igniting Next Level Productivity with AI-Infused Data Integration Workflows
Igniting Next Level Productivity with AI-Infused Data Integration Workflows Safe Software
344 views86 slides
ESPC 2023 - Protect and Govern your Sensitive Data with Microsoft Purview in ... by
ESPC 2023 - Protect and Govern your Sensitive Data with Microsoft Purview in ...ESPC 2023 - Protect and Govern your Sensitive Data with Microsoft Purview in ...
ESPC 2023 - Protect and Govern your Sensitive Data with Microsoft Purview in ...Jasper Oosterveld
28 views49 slides
HTTP headers that make your website go faster - devs.gent November 2023 by
HTTP headers that make your website go faster - devs.gent November 2023HTTP headers that make your website go faster - devs.gent November 2023
HTTP headers that make your website go faster - devs.gent November 2023Thijs Feryn
28 views151 slides
Mitigating Common CloudStack Instance Deployment Failures - Jithin Raju - Sha... by
Mitigating Common CloudStack Instance Deployment Failures - Jithin Raju - Sha...Mitigating Common CloudStack Instance Deployment Failures - Jithin Raju - Sha...
Mitigating Common CloudStack Instance Deployment Failures - Jithin Raju - Sha...ShapeBlue
74 views18 slides
Automating a World-Class Technology Conference; Behind the Scenes of CiscoLive by
Automating a World-Class Technology Conference; Behind the Scenes of CiscoLiveAutomating a World-Class Technology Conference; Behind the Scenes of CiscoLive
Automating a World-Class Technology Conference; Behind the Scenes of CiscoLiveNetwork Automation Forum
46 views35 slides
Network Source of Truth and Infrastructure as Code revisited by
Network Source of Truth and Infrastructure as Code revisitedNetwork Source of Truth and Infrastructure as Code revisited
Network Source of Truth and Infrastructure as Code revisitedNetwork Automation Forum
42 views45 slides

Recently uploaded(20)

Igniting Next Level Productivity with AI-Infused Data Integration Workflows by Safe Software
Igniting Next Level Productivity with AI-Infused Data Integration Workflows Igniting Next Level Productivity with AI-Infused Data Integration Workflows
Igniting Next Level Productivity with AI-Infused Data Integration Workflows
Safe Software344 views
ESPC 2023 - Protect and Govern your Sensitive Data with Microsoft Purview in ... by Jasper Oosterveld
ESPC 2023 - Protect and Govern your Sensitive Data with Microsoft Purview in ...ESPC 2023 - Protect and Govern your Sensitive Data with Microsoft Purview in ...
ESPC 2023 - Protect and Govern your Sensitive Data with Microsoft Purview in ...
HTTP headers that make your website go faster - devs.gent November 2023 by Thijs Feryn
HTTP headers that make your website go faster - devs.gent November 2023HTTP headers that make your website go faster - devs.gent November 2023
HTTP headers that make your website go faster - devs.gent November 2023
Thijs Feryn28 views
Mitigating Common CloudStack Instance Deployment Failures - Jithin Raju - Sha... by ShapeBlue
Mitigating Common CloudStack Instance Deployment Failures - Jithin Raju - Sha...Mitigating Common CloudStack Instance Deployment Failures - Jithin Raju - Sha...
Mitigating Common CloudStack Instance Deployment Failures - Jithin Raju - Sha...
ShapeBlue74 views
Automating a World-Class Technology Conference; Behind the Scenes of CiscoLive by Network Automation Forum
Automating a World-Class Technology Conference; Behind the Scenes of CiscoLiveAutomating a World-Class Technology Conference; Behind the Scenes of CiscoLive
Automating a World-Class Technology Conference; Behind the Scenes of CiscoLive
State of the Union - Rohit Yadav - Apache CloudStack by ShapeBlue
State of the Union - Rohit Yadav - Apache CloudStackState of the Union - Rohit Yadav - Apache CloudStack
State of the Union - Rohit Yadav - Apache CloudStack
ShapeBlue145 views
VNF Integration and Support in CloudStack - Wei Zhou - ShapeBlue by ShapeBlue
VNF Integration and Support in CloudStack - Wei Zhou - ShapeBlueVNF Integration and Support in CloudStack - Wei Zhou - ShapeBlue
VNF Integration and Support in CloudStack - Wei Zhou - ShapeBlue
ShapeBlue85 views
How to Re-use Old Hardware with CloudStack. Saving Money and the Environment ... by ShapeBlue
How to Re-use Old Hardware with CloudStack. Saving Money and the Environment ...How to Re-use Old Hardware with CloudStack. Saving Money and the Environment ...
How to Re-use Old Hardware with CloudStack. Saving Money and the Environment ...
ShapeBlue65 views
DRBD Deep Dive - Philipp Reisner - LINBIT by ShapeBlue
DRBD Deep Dive - Philipp Reisner - LINBITDRBD Deep Dive - Philipp Reisner - LINBIT
DRBD Deep Dive - Philipp Reisner - LINBIT
ShapeBlue62 views
Hypervisor Agnostic DRS in CloudStack - Brief overview & demo - Vishesh Jinda... by ShapeBlue
Hypervisor Agnostic DRS in CloudStack - Brief overview & demo - Vishesh Jinda...Hypervisor Agnostic DRS in CloudStack - Brief overview & demo - Vishesh Jinda...
Hypervisor Agnostic DRS in CloudStack - Brief overview & demo - Vishesh Jinda...
ShapeBlue63 views
Setting Up Your First CloudStack Environment with Beginners Challenges - MD R... by ShapeBlue
Setting Up Your First CloudStack Environment with Beginners Challenges - MD R...Setting Up Your First CloudStack Environment with Beginners Challenges - MD R...
Setting Up Your First CloudStack Environment with Beginners Challenges - MD R...
ShapeBlue54 views
PharoJS - Zürich Smalltalk Group Meetup November 2023 by Noury Bouraqadi
PharoJS - Zürich Smalltalk Group Meetup November 2023PharoJS - Zürich Smalltalk Group Meetup November 2023
PharoJS - Zürich Smalltalk Group Meetup November 2023
Noury Bouraqadi141 views
"Surviving highload with Node.js", Andrii Shumada by Fwdays
"Surviving highload with Node.js", Andrii Shumada "Surviving highload with Node.js", Andrii Shumada
"Surviving highload with Node.js", Andrii Shumada
Fwdays40 views
Keynote Talk: Open Source is Not Dead - Charles Schulz - Vates by ShapeBlue
Keynote Talk: Open Source is Not Dead - Charles Schulz - VatesKeynote Talk: Open Source is Not Dead - Charles Schulz - Vates
Keynote Talk: Open Source is Not Dead - Charles Schulz - Vates
ShapeBlue119 views
Don’t Make A Human Do A Robot’s Job! : 6 Reasons Why AI Will Save Us & Not De... by Moses Kemibaro
Don’t Make A Human Do A Robot’s Job! : 6 Reasons Why AI Will Save Us & Not De...Don’t Make A Human Do A Robot’s Job! : 6 Reasons Why AI Will Save Us & Not De...
Don’t Make A Human Do A Robot’s Job! : 6 Reasons Why AI Will Save Us & Not De...
Moses Kemibaro29 views

Stack of Tasks Course

  • 1. Introduction Theoretical foundations Software The stack of tasks Florent Lamiraux, Olivier Stasse and Nicolas Mansard CNRS-LAAS, Toulouse, France The stack of tasks
  • 2. Introduction Theoretical foundations Software The stack of tasks Introduction Theoretical foundations Software The stack of tasks
  • 4. Introduction Theoretical foundations Software Introduction The stack of tasks provides a control framework for real-time redundant manipulator control ◮ implementation of a data-flow, ◮ control of the graph by python scripting, ◮ task-based hierarchical control, ◮ portable: tested on HRP-2, Nao, Romeo. The stack of tasks
  • 5. Introduction Theoretical foundations Software Introduction The stack of tasks provides a control framework for real-time redundant manipulator control ◮ implementation of a data-flow, ◮ control of the graph by python scripting, ◮ task-based hierarchical control, ◮ portable: tested on HRP-2, Nao, Romeo. The stack of tasks
  • 6. Introduction Theoretical foundations Software Introduction The stack of tasks provides a control framework for real-time redundant manipulator control ◮ implementation of a data-flow, ◮ control of the graph by python scripting, ◮ task-based hierarchical control, ◮ portable: tested on HRP-2, Nao, Romeo. The stack of tasks
  • 7. Introduction Theoretical foundations Software Introduction The stack of tasks provides a control framework for real-time redundant manipulator control ◮ implementation of a data-flow, ◮ control of the graph by python scripting, ◮ task-based hierarchical control, ◮ portable: tested on HRP-2, Nao, Romeo. The stack of tasks
  • 8. Introduction Theoretical foundations Software Introduction The stack of tasks provides a control framework for real-time redundant manipulator control ◮ implementation of a data-flow, ◮ control of the graph by python scripting, ◮ task-based hierarchical control, ◮ portable: tested on HRP-2, Nao, Romeo. The stack of tasks
  • 10. Introduction Theoretical foundations Software Rigid body B ◮ Configuration represented by an homogeneous matrix MB = RB tB 0 0 0 1 ∈ SE(3) RB ∈ SO(3) ⇔ RT B RB = I3 Point x ∈ R3 in local frame of B is moved to y ∈ R3 in global frame: y 1 = MB x 1 The stack of tasks
  • 11. Introduction Theoretical foundations Software Rigid body B ◮ Configuration represented by an homogeneous matrix MB = RB tB 0 0 0 1 ∈ SE(3) RB ∈ SO(3) ⇔ RT B RB = I3 Point x ∈ R3 in local frame of B is moved to y ∈ R3 in global frame: y 1 = MB x 1 The stack of tasks
  • 12. Introduction Theoretical foundations Software Rigid body B ◮ Configuration represented by an homogeneous matrix MB = RB tB 0 0 0 1 ∈ SE(3) RB ∈ SO(3) ⇔ RT B RB = I3 Point x ∈ R3 in local frame of B is moved to y ∈ R3 in global frame: y 1 = MB x 1 The stack of tasks
  • 13. Introduction Theoretical foundations Software Rigid body B ◮ Velocity represented by (vB, ωB) ∈ R6 where ˙RB = ˆωBRB and ˆω =   0 −ω3 ω2 ω3 0 −ω1 −ω2 ω1 0   is the matrix corresponding to the cross product operator ◮ Velocity of point P on B vp = ˙tB + ωB × OBP where OB is the origin of the local frame of B. The stack of tasks
  • 14. Introduction Theoretical foundations Software Rigid body B ◮ Velocity represented by (vB, ωB) ∈ R6 where ˙RB = ˆωBRB and ˆω =   0 −ω3 ω2 ω3 0 −ω1 −ω2 ω1 0   is the matrix corresponding to the cross product operator ◮ Velocity of point P on B vp = ˙tB + ωB × OBP where OB is the origin of the local frame of B. The stack of tasks
  • 15. Introduction Theoretical foundations Software Rigid body B ◮ Velocity represented by (vB, ωB) ∈ R6 where ˙RB = ˆωBRB and ˆω =   0 −ω3 ω2 ω3 0 −ω1 −ω2 ω1 0   is the matrix corresponding to the cross product operator ◮ Velocity of point P on B vp = ˙tB + ωB × OBP where OB is the origin of the local frame of B. The stack of tasks
  • 16. Introduction Theoretical foundations Software Configuration space ◮ Robot: set of rigid-bodies linked by joints B0, · · · Bm. ◮ Configuration: position in space of each body. q = (qwaist , θ1, · · · θn−6) ∈ SE(3) × Rn−6 qwaist = (x, y, z, roll, pitch, yaw) ◮ Position of Bi depends on q: MBi (q) ∈ SE(3) The stack of tasks
  • 17. Introduction Theoretical foundations Software Configuration space ◮ Robot: set of rigid-bodies linked by joints B0, · · · Bm. ◮ Configuration: position in space of each body. q = (qwaist , θ1, · · · θn−6) ∈ SE(3) × Rn−6 qwaist = (x, y, z, roll, pitch, yaw) ◮ Position of Bi depends on q: MBi (q) ∈ SE(3) The stack of tasks
  • 18. Introduction Theoretical foundations Software Configuration space ◮ Robot: set of rigid-bodies linked by joints B0, · · · Bm. ◮ Configuration: position in space of each body. q = (qwaist , θ1, · · · θn−6) ∈ SE(3) × Rn−6 qwaist = (x, y, z, roll, pitch, yaw) ◮ Position of Bi depends on q: MBi (q) ∈ SE(3) The stack of tasks
  • 19. Introduction Theoretical foundations Software Velocity ◮ Velocity: ˙q = ( ˙x, ˙y, ˙z, ωx , ωy , ωz, ˙θ1, · · · ˙θn−6) ω ∈ R3 ◮ Velocity of Bi vBi ωBi (q, ˙q) = JBi (q). ˙q ∈ R6 The stack of tasks
  • 20. Introduction Theoretical foundations Software Velocity ◮ Velocity: ˙q = ( ˙x, ˙y, ˙z, ωx , ωy , ωz, ˙θ1, · · · ˙θn−6) ω ∈ R3 ◮ Velocity of Bi vBi ωBi (q, ˙q) = JBi (q). ˙q ∈ R6 The stack of tasks
  • 21. Introduction Theoretical foundations Software Velocity ◮ Velocity: ˙q = ( ˙x, ˙y, ˙z, ωx , ωy , ωz, ˙θ1, · · · ˙θn−6) ω ∈ R3 ◮ Velocity of Bi vBi ωBi (q, ˙q) = JBi (q). ˙q ∈ R6 The stack of tasks
  • 22. Introduction Theoretical foundations Software Task ◮ Definition: function of the ◮ robot configuration, ◮ time and ◮ possibly external parameters that should converge to 0: T ∈ C∞ (C × R, Rm ) ◮ Example: position tracking of an end-effector Bee ◮ M(q) ∈ SE(3) position of the end-effector, ◮ M∗ (t) ∈ SE(3) reference position T(q, t) = t(M∗−1(t)M(q)) uθ(R∗−1(t)R(q)) where ◮ t() is the translation part of an homogeneous matrix, ◮ R and R∗ are the rotation part of M and M∗ . The stack of tasks
  • 23. Introduction Theoretical foundations Software Task ◮ Definition: function of the ◮ robot configuration, ◮ time and ◮ possibly external parameters that should converge to 0: T ∈ C∞ (C × R, Rm ) ◮ Example: position tracking of an end-effector Bee ◮ M(q) ∈ SE(3) position of the end-effector, ◮ M∗ (t) ∈ SE(3) reference position T(q, t) = t(M∗−1(t)M(q)) uθ(R∗−1(t)R(q)) where ◮ t() is the translation part of an homogeneous matrix, ◮ R and R∗ are the rotation part of M and M∗ . The stack of tasks
  • 24. Introduction Theoretical foundations Software Task ◮ Definition: function of the ◮ robot configuration, ◮ time and ◮ possibly external parameters that should converge to 0: T ∈ C∞ (C × R, Rm ) ◮ Example: position tracking of an end-effector Bee ◮ M(q) ∈ SE(3) position of the end-effector, ◮ M∗ (t) ∈ SE(3) reference position T(q, t) = t(M∗−1(t)M(q)) uθ(R∗−1(t)R(q)) where ◮ t() is the translation part of an homogeneous matrix, ◮ R and R∗ are the rotation part of M and M∗ . The stack of tasks
  • 25. Introduction Theoretical foundations Software Task ◮ Definition: function of the ◮ robot configuration, ◮ time and ◮ possibly external parameters that should converge to 0: T ∈ C∞ (C × R, Rm ) ◮ Example: position tracking of an end-effector Bee ◮ M(q) ∈ SE(3) position of the end-effector, ◮ M∗ (t) ∈ SE(3) reference position T(q, t) = t(M∗−1(t)M(q)) uθ(R∗−1(t)R(q)) where ◮ t() is the translation part of an homogeneous matrix, ◮ R and R∗ are the rotation part of M and M∗ . The stack of tasks
  • 26. Introduction Theoretical foundations Software Task ◮ Definition: function of the ◮ robot configuration, ◮ time and ◮ possibly external parameters that should converge to 0: T ∈ C∞ (C × R, Rm ) ◮ Example: position tracking of an end-effector Bee ◮ M(q) ∈ SE(3) position of the end-effector, ◮ M∗ (t) ∈ SE(3) reference position T(q, t) = t(M∗−1(t)M(q)) uθ(R∗−1(t)R(q)) where ◮ t() is the translation part of an homogeneous matrix, ◮ R and R∗ are the rotation part of M and M∗ . The stack of tasks
  • 27. Introduction Theoretical foundations Software Hierarchical task based control Given ◮ a configuration q, ◮ two tasks of decreasing priorities: ◮ T1 ∈ C∞ (C × R, Rm1 ), ◮ T2 ∈ C∞ (C × R, Rm2 ), compute a control vector ˙q ◮ that makes T1 converge toward 0 and ◮ that makes T2 converge toward 0 if possible. The stack of tasks
  • 28. Introduction Theoretical foundations Software Hierarchical task based control Given ◮ a configuration q, ◮ two tasks of decreasing priorities: ◮ T1 ∈ C∞ (C × R, Rm1 ), ◮ T2 ∈ C∞ (C × R, Rm2 ), compute a control vector ˙q ◮ that makes T1 converge toward 0 and ◮ that makes T2 converge toward 0 if possible. The stack of tasks
  • 29. Introduction Theoretical foundations Software Hierarchical task based control Jacobian: ◮ we denote ◮ Ji = ∂Ti ∂q for i ∈ {1, 2} ◮ then ◮ ∀q ∈ C, ∀t ∈ R, ∀ ˙q ∈ Rn , ˙Ti = Ji (q, t) ˙q + ∂Ti ∂t (q, t) We try to enforce ◮ ˙T1 = −λ1T1 ⇒ T1(t) = e−λ1t T1(0) → 0 ◮ ˙T2 = −λ2T2 ⇒ T2(t) = e−λ2t T2(0) → 0 ◮ λ1 and λ2 are called the gains associated to T1 and T2. The stack of tasks
  • 30. Introduction Theoretical foundations Software Hierarchical task based control Jacobian: ◮ we denote ◮ Ji = ∂Ti ∂q for i ∈ {1, 2} ◮ then ◮ ∀q ∈ C, ∀t ∈ R, ∀ ˙q ∈ Rn , ˙Ti = Ji (q, t) ˙q + ∂Ti ∂t (q, t) We try to enforce ◮ ˙T1 = −λ1T1 ⇒ T1(t) = e−λ1t T1(0) → 0 ◮ ˙T2 = −λ2T2 ⇒ T2(t) = e−λ2t T2(0) → 0 ◮ λ1 and λ2 are called the gains associated to T1 and T2. The stack of tasks
  • 31. Introduction Theoretical foundations Software Hierarchical task based control Jacobian: ◮ we denote ◮ Ji = ∂Ti ∂q for i ∈ {1, 2} ◮ then ◮ ∀q ∈ C, ∀t ∈ R, ∀ ˙q ∈ Rn , ˙Ti = Ji (q, t) ˙q + ∂Ti ∂t (q, t) We try to enforce ◮ ˙T1 = −λ1T1 ⇒ T1(t) = e−λ1t T1(0) → 0 ◮ ˙T2 = −λ2T2 ⇒ T2(t) = e−λ2t T2(0) → 0 ◮ λ1 and λ2 are called the gains associated to T1 and T2. The stack of tasks
  • 32. Introduction Theoretical foundations Software Hierarchical task based control Jacobian: ◮ we denote ◮ Ji = ∂Ti ∂q for i ∈ {1, 2} ◮ then ◮ ∀q ∈ C, ∀t ∈ R, ∀ ˙q ∈ Rn , ˙Ti = Ji (q, t) ˙q + ∂Ti ∂t (q, t) We try to enforce ◮ ˙T1 = −λ1T1 ⇒ T1(t) = e−λ1t T1(0) → 0 ◮ ˙T2 = −λ2T2 ⇒ T2(t) = e−λ2t T2(0) → 0 ◮ λ1 and λ2 are called the gains associated to T1 and T2. The stack of tasks
  • 33. Introduction Theoretical foundations Software Hierarchical task based control Jacobian: ◮ we denote ◮ Ji = ∂Ti ∂q for i ∈ {1, 2} ◮ then ◮ ∀q ∈ C, ∀t ∈ R, ∀ ˙q ∈ Rn , ˙Ti = Ji (q, t) ˙q + ∂Ti ∂t (q, t) We try to enforce ◮ ˙T1 = −λ1T1 ⇒ T1(t) = e−λ1t T1(0) → 0 ◮ ˙T2 = −λ2T2 ⇒ T2(t) = e−λ2t T2(0) → 0 ◮ λ1 and λ2 are called the gains associated to T1 and T2. The stack of tasks
  • 34. Introduction Theoretical foundations Software Moore Penrose pseudo-inverse Given a matrix A ∈ Rm×n, the Moore Penrose pseudo inverse A+ ∈ Rn×m of A is the unique matrix satisfying: AA+ A = A A+ AA+ = A+ (AA+ )T = AA+ (A+ A)T = A+ A Given a linear system: Ax = b, A ∈ Rm×n , x ∈ Rn , b ∈ Rm x = A+b minimizes ◮ Ax − b over Rn, ◮ x over argmin Ax − b . The stack of tasks
  • 35. Introduction Theoretical foundations Software Moore Penrose pseudo-inverse Given a matrix A ∈ Rm×n, the Moore Penrose pseudo inverse A+ ∈ Rn×m of A is the unique matrix satisfying: AA+ A = A A+ AA+ = A+ (AA+ )T = AA+ (A+ A)T = A+ A Given a linear system: Ax = b, A ∈ Rm×n , x ∈ Rn , b ∈ Rm x = A+b minimizes ◮ Ax − b over Rn, ◮ x over argmin Ax − b . The stack of tasks
  • 36. Introduction Theoretical foundations Software Moore Penrose pseudo-inverse Given a matrix A ∈ Rm×n, the Moore Penrose pseudo inverse A+ ∈ Rn×m of A is the unique matrix satisfying: AA+ A = A A+ AA+ = A+ (AA+ )T = AA+ (A+ A)T = A+ A Given a linear system: Ax = b, A ∈ Rm×n , x ∈ Rn , b ∈ Rm x = A+b minimizes ◮ Ax − b over Rn, ◮ x over argmin Ax − b . The stack of tasks
  • 37. Introduction Theoretical foundations Software Moore Penrose pseudo-inverse Given a matrix A ∈ Rm×n, the Moore Penrose pseudo inverse A+ ∈ Rn×m of A is the unique matrix satisfying: AA+ A = A A+ AA+ = A+ (AA+ )T = AA+ (A+ A)T = A+ A Given a linear system: Ax = b, A ∈ Rm×n , x ∈ Rn , b ∈ Rm x = A+b minimizes ◮ Ax − b over Rn, ◮ x over argmin Ax − b . The stack of tasks
  • 38. Introduction Theoretical foundations Software Hierarchical task based control Resolution of the first constraint: ˙T1 = J1 ˙q + ∂T1 ∂t = −λ1T1 (1) J1 ˙q = −λ1T1 − ∂T1 ∂t (2) ˙q1 −J+ 1 (λ1T1 + ∂T1 ∂t ) (3) Where J+ 1 is the (Moore Penrose) pseudo-inverse of J1. ˙q1 minimizes ◮ J1 ˙q + λ1T1 + ∂T1 ∂t = ˙T1 + λ1T1 ◮ ˙q over argmin J1 ˙q + λ1T1 + ∂T1 ∂t Hence, ◮ if λ1T1 + ∂T1 ∂t is in Im(J1), (1) is satisfied The stack of tasks
  • 39. Introduction Theoretical foundations Software Hierarchical task based control Resolution of the first constraint: ˙T1 = J1 ˙q + ∂T1 ∂t = −λ1T1 (1) J1 ˙q = −λ1T1 − ∂T1 ∂t (2) ˙q1 −J+ 1 (λ1T1 + ∂T1 ∂t ) (3) Where J+ 1 is the (Moore Penrose) pseudo-inverse of J1. ˙q1 minimizes ◮ J1 ˙q + λ1T1 + ∂T1 ∂t = ˙T1 + λ1T1 ◮ ˙q over argmin J1 ˙q + λ1T1 + ∂T1 ∂t Hence, ◮ if λ1T1 + ∂T1 ∂t is in Im(J1), (1) is satisfied The stack of tasks
  • 40. Introduction Theoretical foundations Software Hierarchical task based control Resolution of the first constraint: ˙T1 = J1 ˙q + ∂T1 ∂t = −λ1T1 (1) J1 ˙q = −λ1T1 − ∂T1 ∂t (2) ˙q1 −J+ 1 (λ1T1 + ∂T1 ∂t ) (3) Where J+ 1 is the (Moore Penrose) pseudo-inverse of J1. ˙q1 minimizes ◮ J1 ˙q + λ1T1 + ∂T1 ∂t = ˙T1 + λ1T1 ◮ ˙q over argmin J1 ˙q + λ1T1 + ∂T1 ∂t Hence, ◮ if λ1T1 + ∂T1 ∂t is in Im(J1), (1) is satisfied The stack of tasks
  • 41. Introduction Theoretical foundations Software Hierarchical task based control Resolution of the first constraint: ˙T1 = J1 ˙q + ∂T1 ∂t = −λ1T1 (1) J1 ˙q = −λ1T1 − ∂T1 ∂t (2) ˙q1 −J+ 1 (λ1T1 + ∂T1 ∂t ) (3) Where J+ 1 is the (Moore Penrose) pseudo-inverse of J1. ˙q1 minimizes ◮ J1 ˙q + λ1T1 + ∂T1 ∂t = ˙T1 + λ1T1 ◮ ˙q over argmin J1 ˙q + λ1T1 + ∂T1 ∂t Hence, ◮ if λ1T1 + ∂T1 ∂t is in Im(J1), (1) is satisfied The stack of tasks
  • 42. Introduction Theoretical foundations Software Hierarchical task based control Resolution of the first constraint: ˙T1 = J1 ˙q + ∂T1 ∂t = −λ1T1 (1) J1 ˙q = −λ1T1 − ∂T1 ∂t (2) ˙q1 −J+ 1 (λ1T1 + ∂T1 ∂t ) (3) Where J+ 1 is the (Moore Penrose) pseudo-inverse of J1. ˙q1 minimizes ◮ J1 ˙q + λ1T1 + ∂T1 ∂t = ˙T1 + λ1T1 ◮ ˙q over argmin J1 ˙q + λ1T1 + ∂T1 ∂t Hence, ◮ if λ1T1 + ∂T1 ∂t is in Im(J1), (1) is satisfied The stack of tasks
  • 43. Introduction Theoretical foundations Software Hierarchical task based control In fact ∀u ∈ Rn , J1 ˙q1+(In − J+ 1 J1)u = J1 ˙q1 therefore, ˙q = ˙q1 + (In − J+ 1 J1)u also minimizes J1 ˙q + λ1T1 + ∂T1 ∂t . P1 = (In − J+ 1 J1) is a projector on J1 kernel: J1P1 = 0 ∀u ∈ Rn, if ˙q = P1u, then, ˙T1 = ∂T1 ∂t . The stack of tasks
  • 44. Introduction Theoretical foundations Software Hierarchical task based control In fact ∀u ∈ Rn , J1 ˙q1+(In − J+ 1 J1)u = J1 ˙q1 therefore, ˙q = ˙q1 + (In − J+ 1 J1)u also minimizes J1 ˙q + λ1T1 + ∂T1 ∂t . P1 = (In − J+ 1 J1) is a projector on J1 kernel: J1P1 = 0 ∀u ∈ Rn, if ˙q = P1u, then, ˙T1 = ∂T1 ∂t . The stack of tasks
  • 45. Introduction Theoretical foundations Software Hierarchical task based control In fact ∀u ∈ Rn , J1 ˙q1+(In − J+ 1 J1)u = J1 ˙q1 therefore, ˙q = ˙q1 + (In − J+ 1 J1)u also minimizes J1 ˙q + λ1T1 + ∂T1 ∂t . P1 = (In − J+ 1 J1) is a projector on J1 kernel: J1P1 = 0 ∀u ∈ Rn, if ˙q = P1u, then, ˙T1 = ∂T1 ∂t . The stack of tasks
  • 46. Introduction Theoretical foundations Software Hierarchical task based control In fact ∀u ∈ Rn , J1 ˙q1+(In − J+ 1 J1)u = J1 ˙q1 therefore, ˙q = ˙q1 + (In − J+ 1 J1)u also minimizes J1 ˙q + λ1T1 + ∂T1 ∂t . P1 = (In − J+ 1 J1) is a projector on J1 kernel: J1P1 = 0 ∀u ∈ Rn, if ˙q = P1u, then, ˙T1 = ∂T1 ∂t . The stack of tasks
  • 47. Introduction Theoretical foundations Software Controlling the second task We have ˙q = ˙q1 + P1u ˙T2 = J2 ˙q + ∂T2 ∂t ˙T2 = J2 ˙q1 + ∂T2 ∂t + J2P1u We want ˙T2 = −λ2T2 Thus −λ2T2 = J2 ˙q1 + ∂T2 ∂t + J2P1u J2P1u = −λ2T2 − J2 ˙q1 − ∂T2 ∂t The stack of tasks
  • 48. Introduction Theoretical foundations Software Controlling the second task We have ˙q = ˙q1 + P1u ˙T2 = J2 ˙q + ∂T2 ∂t ˙T2 = J2 ˙q1 + ∂T2 ∂t + J2P1u We want ˙T2 = −λ2T2 Thus −λ2T2 = J2 ˙q1 + ∂T2 ∂t + J2P1u J2P1u = −λ2T2 − J2 ˙q1 − ∂T2 ∂t The stack of tasks
  • 49. Introduction Theoretical foundations Software Controlling the second task We have ˙q = ˙q1 + P1u ˙T2 = J2 ˙q + ∂T2 ∂t ˙T2 = J2 ˙q1 + ∂T2 ∂t + J2P1u We want ˙T2 = −λ2T2 Thus −λ2T2 = J2 ˙q1 + ∂T2 ∂t + J2P1u J2P1u = −λ2T2 − J2 ˙q1 − ∂T2 ∂t The stack of tasks
  • 50. Introduction Theoretical foundations Software Controlling the second task Thus −λ2T2 = J2 ˙q1 + ∂T2 ∂t + J2P1u J2P1u = −λ2T2 − J2 ˙q1 − ∂T2 ∂t u = −(J2P1)+ (λ2T2 + J2 ˙q1 + ∂T2 ∂t ) ˙q2 ˙q1 + P1u = ˙q1 − P1(J2P1)+ (λ2T2 + J2 ˙q1 + ∂T2 ∂t )) minimizes ˙T2 + λ2T2 over ˙q1 + Ker J1. The stack of tasks
  • 51. Introduction Theoretical foundations Software Controlling the second task Thus −λ2T2 = J2 ˙q1 + ∂T2 ∂t + J2P1u J2P1u = −λ2T2 − J2 ˙q1 − ∂T2 ∂t u = −(J2P1)+ (λ2T2 + J2 ˙q1 + ∂T2 ∂t ) ˙q2 ˙q1 + P1u = ˙q1 − P1(J2P1)+ (λ2T2 + J2 ˙q1 + ∂T2 ∂t )) minimizes ˙T2 + λ2T2 over ˙q1 + Ker J1. The stack of tasks
  • 52. Introduction Theoretical foundations Software Example ◮ T1: position of the feet + projection of center of mass, ◮ T2: position of the right wrist. The stack of tasks
  • 55. Introduction Theoretical foundations Software Libraries ◮ jrl-mathtools: implementation of small size matrices, ◮ to be replaced by Eigen ◮ jrl-mal: abstract layer for matrices, ◮ to be replaced by Eigen ◮ abstract-robot-dynamics: abstraction for humanoid robot description, ◮ jrl-dynamics: implementation of the above abstract interfaces, ◮ jrl-walkgen: ZMP based dynamic walk generation. The stack of tasks
  • 56. Introduction Theoretical foundations Software Libraries ◮ jrl-mathtools: implementation of small size matrices, ◮ to be replaced by Eigen ◮ jrl-mal: abstract layer for matrices, ◮ to be replaced by Eigen ◮ abstract-robot-dynamics: abstraction for humanoid robot description, ◮ jrl-dynamics: implementation of the above abstract interfaces, ◮ jrl-walkgen: ZMP based dynamic walk generation. The stack of tasks
  • 57. Introduction Theoretical foundations Software Libraries ◮ jrl-mathtools: implementation of small size matrices, ◮ to be replaced by Eigen ◮ jrl-mal: abstract layer for matrices, ◮ to be replaced by Eigen ◮ abstract-robot-dynamics: abstraction for humanoid robot description, ◮ jrl-dynamics: implementation of the above abstract interfaces, ◮ jrl-walkgen: ZMP based dynamic walk generation. The stack of tasks
  • 58. Introduction Theoretical foundations Software Libraries ◮ jrl-mathtools: implementation of small size matrices, ◮ to be replaced by Eigen ◮ jrl-mal: abstract layer for matrices, ◮ to be replaced by Eigen ◮ abstract-robot-dynamics: abstraction for humanoid robot description, ◮ jrl-dynamics: implementation of the above abstract interfaces, ◮ jrl-walkgen: ZMP based dynamic walk generation. The stack of tasks
  • 59. Introduction Theoretical foundations Software Libraries ◮ jrl-mathtools: implementation of small size matrices, ◮ to be replaced by Eigen ◮ jrl-mal: abstract layer for matrices, ◮ to be replaced by Eigen ◮ abstract-robot-dynamics: abstraction for humanoid robot description, ◮ jrl-dynamics: implementation of the above abstract interfaces, ◮ jrl-walkgen: ZMP based dynamic walk generation. The stack of tasks
  • 60. Introduction Theoretical foundations Software dynamic-graph ◮ Entity ◮ Signal: synchronous interface ◮ Command: asynchronous interface ◮ Factory ◮ builds a new entity of requested type, ◮ new entity types can be dynamically added (advanced). ◮ Pool ◮ stores all instances of entities, ◮ return reference to entity of given name. The stack of tasks
  • 61. Introduction Theoretical foundations Software dynamic-graph ◮ Entity ◮ Signal: synchronous interface ◮ Command: asynchronous interface ◮ Factory ◮ builds a new entity of requested type, ◮ new entity types can be dynamically added (advanced). ◮ Pool ◮ stores all instances of entities, ◮ return reference to entity of given name. The stack of tasks
  • 62. Introduction Theoretical foundations Software dynamic-graph ◮ Entity ◮ Signal: synchronous interface ◮ Command: asynchronous interface ◮ Factory ◮ builds a new entity of requested type, ◮ new entity types can be dynamically added (advanced). ◮ Pool ◮ stores all instances of entities, ◮ return reference to entity of given name. The stack of tasks
  • 63. Introduction Theoretical foundations Software Signal Synchronous interface storing a given data type ◮ output signals: ◮ recomputed by a callback function, or ◮ set to constant value ◮ warning: setting to constant value deactivate callback, ◮ input signals: ◮ plugged by an output signal, or ◮ set to constant value, ◮ warning: setting to constant value unplugs, The stack of tasks
  • 64. Introduction Theoretical foundations Software Signal Synchronous interface storing a given data type ◮ output signals: ◮ recomputed by a callback function, or ◮ set to constant value ◮ warning: setting to constant value deactivate callback, ◮ input signals: ◮ plugged by an output signal, or ◮ set to constant value, ◮ warning: setting to constant value unplugs, The stack of tasks
  • 65. Introduction Theoretical foundations Software Signal Synchronous interface storing a given data type ◮ output signals: ◮ recomputed by a callback function, or ◮ set to constant value ◮ warning: setting to constant value deactivate callback, ◮ input signals: ◮ plugged by an output signal, or ◮ set to constant value, ◮ warning: setting to constant value unplugs, The stack of tasks
  • 66. Introduction Theoretical foundations Software Signal Synchronous interface storing a given data type ◮ output signals: ◮ recomputed by a callback function, or ◮ set to constant value ◮ warning: setting to constant value deactivate callback, ◮ input signals: ◮ plugged by an output signal, or ◮ set to constant value, ◮ warning: setting to constant value unplugs, The stack of tasks
  • 67. Introduction Theoretical foundations Software Signal Synchronous interface storing a given data type ◮ dependency relation: s1 depends on s2 if s1 callback needs the value of s2, ◮ each signal s stores time of last recomputation in member s.t ◮ s is said outdated at time t if ◮ t > s.t , and ◮ one dependency s dep of s ◮ is out-dated or ◮ has been recomputed later than s: s dep.t > s.t . ◮ reading an out-dated signal triggers recomputation. ◮ New types can be dynamically added (advanced) The stack of tasks
  • 68. Introduction Theoretical foundations Software Signal Synchronous interface storing a given data type ◮ dependency relation: s1 depends on s2 if s1 callback needs the value of s2, ◮ each signal s stores time of last recomputation in member s.t ◮ s is said outdated at time t if ◮ t > s.t , and ◮ one dependency s dep of s ◮ is out-dated or ◮ has been recomputed later than s: s dep.t > s.t . ◮ reading an out-dated signal triggers recomputation. ◮ New types can be dynamically added (advanced) The stack of tasks
  • 69. Introduction Theoretical foundations Software Signal Synchronous interface storing a given data type ◮ dependency relation: s1 depends on s2 if s1 callback needs the value of s2, ◮ each signal s stores time of last recomputation in member s.t ◮ s is said outdated at time t if ◮ t > s.t , and ◮ one dependency s dep of s ◮ is out-dated or ◮ has been recomputed later than s: s dep.t > s.t . ◮ reading an out-dated signal triggers recomputation. ◮ New types can be dynamically added (advanced) The stack of tasks
  • 70. Introduction Theoretical foundations Software Signal Synchronous interface storing a given data type ◮ dependency relation: s1 depends on s2 if s1 callback needs the value of s2, ◮ each signal s stores time of last recomputation in member s.t ◮ s is said outdated at time t if ◮ t > s.t , and ◮ one dependency s dep of s ◮ is out-dated or ◮ has been recomputed later than s: s dep.t > s.t . ◮ reading an out-dated signal triggers recomputation. ◮ New types can be dynamically added (advanced) The stack of tasks
  • 71. Introduction Theoretical foundations Software Signal Synchronous interface storing a given data type ◮ dependency relation: s1 depends on s2 if s1 callback needs the value of s2, ◮ each signal s stores time of last recomputation in member s.t ◮ s is said outdated at time t if ◮ t > s.t , and ◮ one dependency s dep of s ◮ is out-dated or ◮ has been recomputed later than s: s dep.t > s.t . ◮ reading an out-dated signal triggers recomputation. ◮ New types can be dynamically added (advanced) The stack of tasks
  • 72. Introduction Theoretical foundations Software Signal Synchronous interface storing a given data type ◮ dependency relation: s1 depends on s2 if s1 callback needs the value of s2, ◮ each signal s stores time of last recomputation in member s.t ◮ s is said outdated at time t if ◮ t > s.t , and ◮ one dependency s dep of s ◮ is out-dated or ◮ has been recomputed later than s: s dep.t > s.t . ◮ reading an out-dated signal triggers recomputation. ◮ New types can be dynamically added (advanced) The stack of tasks
  • 73. Introduction Theoretical foundations Software Command Asynchronous interface ◮ input in a fixed set of types, ◮ trigger an action, ◮ returns a result in the same set of types. The stack of tasks
  • 74. Introduction Theoretical foundations Software dynamic-graph-python Python bindings to dynamic-graph ◮ module dynamic graph linked to libdynamic-graph.so ◮ class Entity ◮ each C++ entity class declared in the factory generates a python class of the same name, ◮ signals are instance members, ◮ commands are bound to instance methods ◮ method help lists commands ◮ method displaySignals displays signals ◮ class Signal ◮ property value to set and get signal value ◮ remote interpreter to be embedded into a robot controller (advanced) The stack of tasks
  • 75. Introduction Theoretical foundations Software dynamic-graph-python Python bindings to dynamic-graph ◮ module dynamic graph linked to libdynamic-graph.so ◮ class Entity ◮ each C++ entity class declared in the factory generates a python class of the same name, ◮ signals are instance members, ◮ commands are bound to instance methods ◮ method help lists commands ◮ method displaySignals displays signals ◮ class Signal ◮ property value to set and get signal value ◮ remote interpreter to be embedded into a robot controller (advanced) The stack of tasks
  • 76. Introduction Theoretical foundations Software dynamic-graph-python Python bindings to dynamic-graph ◮ module dynamic graph linked to libdynamic-graph.so ◮ class Entity ◮ each C++ entity class declared in the factory generates a python class of the same name, ◮ signals are instance members, ◮ commands are bound to instance methods ◮ method help lists commands ◮ method displaySignals displays signals ◮ class Signal ◮ property value to set and get signal value ◮ remote interpreter to be embedded into a robot controller (advanced) The stack of tasks
  • 77. Introduction Theoretical foundations Software dynamic-graph-python Python bindings to dynamic-graph ◮ module dynamic graph linked to libdynamic-graph.so ◮ class Entity ◮ each C++ entity class declared in the factory generates a python class of the same name, ◮ signals are instance members, ◮ commands are bound to instance methods ◮ method help lists commands ◮ method displaySignals displays signals ◮ class Signal ◮ property value to set and get signal value ◮ remote interpreter to be embedded into a robot controller (advanced) The stack of tasks
  • 78. Introduction Theoretical foundations Software dynamic-graph-python Python bindings to dynamic-graph ◮ module dynamic graph linked to libdynamic-graph.so ◮ class Entity ◮ each C++ entity class declared in the factory generates a python class of the same name, ◮ signals are instance members, ◮ commands are bound to instance methods ◮ method help lists commands ◮ method displaySignals displays signals ◮ class Signal ◮ property value to set and get signal value ◮ remote interpreter to be embedded into a robot controller (advanced) The stack of tasks
  • 79. Introduction Theoretical foundations Software dynamic-graph-tutorial Simple use case for illustration ◮ Definition of 2 entity types ◮ InvertedPendulum ◮ input signal: force ◮ output signal: state ◮ FeedbackController ◮ input signal: state ◮ output signal: force The stack of tasks
  • 80. Introduction Theoretical foundations Software dynamic-graph-tutorial >>> from dynamic graph.tutorial import InvertedPendulum, FeedbackController >>> a = InvertedPendulum (’IP’) >>> b = FeedbackController (’K’) >>> a.displaySignals () --- <IP> signal list: |-- <Sig:InvertedPendulum(IP)::input(double)::force (Type Cst) AUTOPLUGGED ‘-- <Sig:InvertedPendulum(IP)::output(vector)::state (Type Cst) >>> a.help () Classical inverted pendulum dynamic model List of commands: ----------------- getCartMass: Get cart mass getPendulumLength: Get pendulum length getPendulumMass: Get pendulum mass incr: Integrate dynamics for time step provided as input setCartMass: Set cart mass setPendulumLength: Set pendulum length setPendulumMass: Set pendulum mass >>> a.help (’incr’) incr: Integrate dynamics for time step provided as input take one floating point number as input >>> The stack of tasks
  • 81. Introduction Theoretical foundations Software dynamic-graph-tutorial >>> from dynamic graph.tutorial import InvertedPendulum, FeedbackController >>> a = InvertedPendulum (’IP’) >>> b = FeedbackController (’K’) >>> a.displaySignals () --- <IP> signal list: |-- <Sig:InvertedPendulum(IP)::input(double)::force (Type Cst) AUTOPLUGGED ‘-- <Sig:InvertedPendulum(IP)::output(vector)::state (Type Cst) >>> a.help () Classical inverted pendulum dynamic model List of commands: ----------------- getCartMass: Get cart mass getPendulumLength: Get pendulum length getPendulumMass: Get pendulum mass incr: Integrate dynamics for time step provided as input setCartMass: Set cart mass setPendulumLength: Set pendulum length setPendulumMass: Set pendulum mass >>> a.help (’incr’) incr: Integrate dynamics for time step provided as input take one floating point number as input >>> The stack of tasks
  • 82. Introduction Theoretical foundations Software dynamic-graph-tutorial >>> from dynamic graph.tutorial import InvertedPendulum, FeedbackController >>> a = InvertedPendulum (’IP’) >>> b = FeedbackController (’K’) >>> a.displaySignals () --- <IP> signal list: |-- <Sig:InvertedPendulum(IP)::input(double)::force (Type Cst) AUTOPLUGGED ‘-- <Sig:InvertedPendulum(IP)::output(vector)::state (Type Cst) >>> a.help () Classical inverted pendulum dynamic model List of commands: ----------------- getCartMass: Get cart mass getPendulumLength: Get pendulum length getPendulumMass: Get pendulum mass incr: Integrate dynamics for time step provided as input setCartMass: Set cart mass setPendulumLength: Set pendulum length setPendulumMass: Set pendulum mass >>> a.help (’incr’) incr: Integrate dynamics for time step provided as input take one floating point number as input >>> The stack of tasks
  • 83. Introduction Theoretical foundations Software dynamic-graph-tutorial >>> from dynamic graph.tutorial import InvertedPendulum, FeedbackController >>> a = InvertedPendulum (’IP’) >>> b = FeedbackController (’K’) >>> a.displaySignals () --- <IP> signal list: |-- <Sig:InvertedPendulum(IP)::input(double)::force (Type Cst) AUTOPLUGGED ‘-- <Sig:InvertedPendulum(IP)::output(vector)::state (Type Cst) >>> a.help () Classical inverted pendulum dynamic model List of commands: ----------------- getCartMass: Get cart mass getPendulumLength: Get pendulum length getPendulumMass: Get pendulum mass incr: Integrate dynamics for time step provided as input setCartMass: Set cart mass setPendulumLength: Set pendulum length setPendulumMass: Set pendulum mass >>> a.help (’incr’) incr: Integrate dynamics for time step provided as input take one floating point number as input >>> The stack of tasks
  • 84. Introduction Theoretical foundations Software dynamic-graph-tutorial >>> from dynamic graph.tutorial import InvertedPendulum, FeedbackController >>> a = InvertedPendulum (’IP’) >>> b = FeedbackController (’K’) >>> a.displaySignals () --- <IP> signal list: |-- <Sig:InvertedPendulum(IP)::input(double)::force (Type Cst) AUTOPLUGGED ‘-- <Sig:InvertedPendulum(IP)::output(vector)::state (Type Cst) >>> a.help () Classical inverted pendulum dynamic model List of commands: ----------------- getCartMass: Get cart mass getPendulumLength: Get pendulum length getPendulumMass: Get pendulum mass incr: Integrate dynamics for time step provided as input setCartMass: Set cart mass setPendulumLength: Set pendulum length setPendulumMass: Set pendulum mass >>> a.help (’incr’) incr: Integrate dynamics for time step provided as input take one floating point number as input >>> The stack of tasks
  • 85. Introduction Theoretical foundations Software dynamic-graph-tutorial Package provides ◮ C++ code of classes InvertedPendulum and FeedbackController, ◮ explanation about how to create a new entity type in C++, ◮ information about how to create a command in C++, ◮ information about how to create a python module defining the bindings in cmake, ◮ python script that runs an example. The stack of tasks
  • 86. Introduction Theoretical foundations Software dynamic-graph-tutorial Package provides ◮ C++ code of classes InvertedPendulum and FeedbackController, ◮ explanation about how to create a new entity type in C++, ◮ information about how to create a command in C++, ◮ information about how to create a python module defining the bindings in cmake, ◮ python script that runs an example. The stack of tasks
  • 87. Introduction Theoretical foundations Software dynamic-graph-tutorial Package provides ◮ C++ code of classes InvertedPendulum and FeedbackController, ◮ explanation about how to create a new entity type in C++, ◮ information about how to create a command in C++, ◮ information about how to create a python module defining the bindings in cmake, ◮ python script that runs an example. The stack of tasks
  • 88. Introduction Theoretical foundations Software dynamic-graph-tutorial Package provides ◮ C++ code of classes InvertedPendulum and FeedbackController, ◮ explanation about how to create a new entity type in C++, ◮ information about how to create a command in C++, ◮ information about how to create a python module defining the bindings in cmake, ◮ python script that runs an example. The stack of tasks
  • 89. Introduction Theoretical foundations Software dynamic-graph-tutorial Package provides ◮ C++ code of classes InvertedPendulum and FeedbackController, ◮ explanation about how to create a new entity type in C++, ◮ information about how to create a command in C++, ◮ information about how to create a python module defining the bindings in cmake, ◮ python script that runs an example. The stack of tasks
  • 90. Introduction Theoretical foundations Software sot-core Class FeatureAbstract ◮ function of the robot and environment states ◮ position of an end-effector, ◮ position of a feature in an image (visual servoing) ◮ with values in a Lie group G (SO(3), SE(3), Rn,...), ◮ with a mapping e from G into Rm such that e(0G) = 0 The stack of tasks
  • 91. Introduction Theoretical foundations Software sot-core Class FeatureAbstract ◮ function of the robot and environment states ◮ position of an end-effector, ◮ position of a feature in an image (visual servoing) ◮ with values in a Lie group G (SO(3), SE(3), Rn,...), ◮ with a mapping e from G into Rm such that e(0G) = 0 The stack of tasks
  • 92. Introduction Theoretical foundations Software sot-core Class FeatureAbstract ◮ function of the robot and environment states ◮ position of an end-effector, ◮ position of a feature in an image (visual servoing) ◮ with values in a Lie group G (SO(3), SE(3), Rn,...), ◮ with a mapping e from G into Rm such that e(0G) = 0 The stack of tasks
  • 93. Introduction Theoretical foundations Software sot-core Class FeatureAbstract ◮ function of the robot and environment states ◮ position of an end-effector, ◮ position of a feature in an image (visual servoing) ◮ with values in a Lie group G (SO(3), SE(3), Rn,...), ◮ with a mapping e from G into Rm such that e(0G) = 0 The stack of tasks
  • 94. Introduction Theoretical foundations Software Feature When paired with a reference, features become tasks. ◮ Example ◮ error = e (value.position⊖reference.position) ◮ errordot: derivative of error when value.position is constant. The stack of tasks
  • 95. Introduction Theoretical foundations Software Feature When paired with a reference, features become tasks. ◮ Example ◮ error = e (value.position⊖reference.position) ◮ errordot: derivative of error when value.position is constant. The stack of tasks
  • 96. Introduction Theoretical foundations Software Feature When paired with a reference, features become tasks. ◮ Example ◮ error = e (value.position⊖reference.position) ◮ errordot: derivative of error when value.position is constant. The stack of tasks
  • 97. Introduction Theoretical foundations Software Task ◮ Collection of features with a control gain, ◮ implements abstraction TaskAbstract ◮ task = −controlGain.error The stack of tasks
  • 98. Introduction Theoretical foundations Software Solver SOT Hierarchical task solver ◮ computes robot joint velocity The stack of tasks
  • 99. Introduction Theoretical foundations Software sot-dynamic dynamic graph.sot.dynamics.Dynamic builds a kinematic chain from a file and ◮ computes forward kinematics ◮ position and Jacobian of end effectors (wrists, ankles), ◮ position of center of mass ◮ computes dynamics ◮ inertia matrix. The stack of tasks
  • 100. Introduction Theoretical foundations Software sot-pattern-generator dynamic graph.sot.pattern generator ◮ Entity PatternGenerator produces walk motions as ◮ position and velocity of the feet ◮ position and velocity of the center of mass The stack of tasks
  • 101. Introduction Theoretical foundations Software sot-application dynamic graph.sot.application ◮ Provide scripts for standard control graph initialization ◮ depends on application: control mode (velocity, acceleration) The stack of tasks
  • 102. Introduction Theoretical foundations Software Packages specific to robots sot-hrp2 ◮ defines a class Robot that provides ◮ ready to use features for feet, hands, gaze and center of mass, ◮ ready to use tasks for the same end effectors, ◮ an entity Dynamic, ◮ an entity Device (interface with the robot control system) sot-hrprtc-hrp2 ◮ provide an RTC component to integrate sot-hrp2 into the robot controller. The stack of tasks
  • 103. Introduction Theoretical foundations Software Utilities ◮ dynamic graph.writeGraph (filename): writes the current graph in a file using graphviz dot format. ◮ dynamic graph.sot.core.FeaturePosition wraps two FeaturePoint6d: a value and a reference, ◮ MetaTask6d: ◮ MetaTaskPosture: ◮ MetaTaskKine6d: ◮ MetaTaskKinePosture: ◮ MetaTaskCom: The stack of tasks
  • 104. Introduction Theoretical foundations Software Utilities ◮ dynamic graph.writeGraph (filename): writes the current graph in a file using graphviz dot format. ◮ dynamic graph.sot.core.FeaturePosition wraps two FeaturePoint6d: a value and a reference, ◮ MetaTask6d: ◮ MetaTaskPosture: ◮ MetaTaskKine6d: ◮ MetaTaskKinePosture: ◮ MetaTaskCom: The stack of tasks
  • 105. Introduction Theoretical foundations Software Utilities ◮ dynamic graph.writeGraph (filename): writes the current graph in a file using graphviz dot format. ◮ dynamic graph.sot.core.FeaturePosition wraps two FeaturePoint6d: a value and a reference, ◮ MetaTask6d: ◮ MetaTaskPosture: ◮ MetaTaskKine6d: ◮ MetaTaskKinePosture: ◮ MetaTaskCom: The stack of tasks
  • 106. Introduction Theoretical foundations Software Utilities ◮ dynamic graph.writeGraph (filename): writes the current graph in a file using graphviz dot format. ◮ dynamic graph.sot.core.FeaturePosition wraps two FeaturePoint6d: a value and a reference, ◮ MetaTask6d: ◮ MetaTaskPosture: ◮ MetaTaskKine6d: ◮ MetaTaskKinePosture: ◮ MetaTaskCom: The stack of tasks
  • 107. Introduction Theoretical foundations Software Utilities ◮ dynamic graph.writeGraph (filename): writes the current graph in a file using graphviz dot format. ◮ dynamic graph.sot.core.FeaturePosition wraps two FeaturePoint6d: a value and a reference, ◮ MetaTask6d: ◮ MetaTaskPosture: ◮ MetaTaskKine6d: ◮ MetaTaskKinePosture: ◮ MetaTaskCom: The stack of tasks
  • 108. Introduction Theoretical foundations Software Utilities ◮ dynamic graph.writeGraph (filename): writes the current graph in a file using graphviz dot format. ◮ dynamic graph.sot.core.FeaturePosition wraps two FeaturePoint6d: a value and a reference, ◮ MetaTask6d: ◮ MetaTaskPosture: ◮ MetaTaskKine6d: ◮ MetaTaskKinePosture: ◮ MetaTaskCom: The stack of tasks
  • 109. Introduction Theoretical foundations Software Utilities ◮ dynamic graph.writeGraph (filename): writes the current graph in a file using graphviz dot format. ◮ dynamic graph.sot.core.FeaturePosition wraps two FeaturePoint6d: a value and a reference, ◮ MetaTask6d: ◮ MetaTaskPosture: ◮ MetaTaskKine6d: ◮ MetaTaskKinePosture: ◮ MetaTaskCom: The stack of tasks
  • 110. Introduction Theoretical foundations Software Installation Through robotpkg ◮ git clone http://trac.laas.fr/git/robots/robotpkg.git cd robotpkg ./bootstrap/bootstrap --prefix=<your prefix> cd motion/sot-dynamic make install The stack of tasks
  • 111. Introduction Theoretical foundations Software Installation Through github: ◮ git clone --recursive git://github.com/jrl-umi3218/jrl-mal.git git clone --recursive git://github.com/jrl-umi3218/jrl-mathtools.git git clone --recursive git://github.com/laas/abstract-robot-dynamics.git git clone --recursive git://github.com/jrl-umi3218/jrl-dynamics.git git clone --recursive git://github.com/jrl-umi3218/jrl-walkgen.git git clone --recursive git://github.com/jrl-umi3218/dynamic-graph.git git clone --recursive git://github.com/jrl-umi3218/dynamic-graph-python.git git clone --recursive git://github.com/jrl-umi3218/sot-core.git git clone --recursive git://github.com/laas/sot-tools.git git clone --recursive git://github.com/jrl-umi3218/sot-dynamic.git git clone --recursive git://github.com/jrl-umi3218/sot-pattern-generator.git git clone --recursive git://github.com/stack-of-tasks/sot-application.git git clone --recursive git://github.com/laas/sot-hrp2.git git clone --recursive git://github.com/stack-of-tasks/sot-hrprtc-hrp2.git ◮ for each package, mkdir package/build cd package/build cmake -DCMAKE INSTALL PREFIX=<your prefix> .. make install The stack of tasks
  • 112. Introduction Theoretical foundations Software Installation Through github: ◮ git clone --recursive git://github.com/jrl-umi3218/jrl-mal.git git clone --recursive git://github.com/jrl-umi3218/jrl-mathtools.git git clone --recursive git://github.com/laas/abstract-robot-dynamics.git git clone --recursive git://github.com/jrl-umi3218/jrl-dynamics.git git clone --recursive git://github.com/jrl-umi3218/jrl-walkgen.git git clone --recursive git://github.com/jrl-umi3218/dynamic-graph.git git clone --recursive git://github.com/jrl-umi3218/dynamic-graph-python.git git clone --recursive git://github.com/jrl-umi3218/sot-core.git git clone --recursive git://github.com/laas/sot-tools.git git clone --recursive git://github.com/jrl-umi3218/sot-dynamic.git git clone --recursive git://github.com/jrl-umi3218/sot-pattern-generator.git git clone --recursive git://github.com/stack-of-tasks/sot-application.git git clone --recursive git://github.com/laas/sot-hrp2.git git clone --recursive git://github.com/stack-of-tasks/sot-hrprtc-hrp2.git ◮ for each package, mkdir package/build cd package/build cmake -DCMAKE INSTALL PREFIX=<your prefix> .. make install The stack of tasks
  • 113. Introduction Theoretical foundations Software Installation Through installation script ◮ git clone git://github.com/stack-of-tasks/install-sot.git cd install-sot/scripts ./install sot.sh The stack of tasks
  • 114. Introduction Theoretical foundations Software Running the stack of tasks into OpenHRP-3.1 You need to install: ◮ ros-electric ◮ OpenHRP-3.1 you will find instructions in https://wiki.laas.fr/robots/HRP/Software Then follow instructions in sot-hrprtc/README.md: https://github.com/stack-of-tasks/sot-hrprtc-hrp2 The stack of tasks
  • 115. Introduction Theoretical foundations Software Running the stack of tasks into OpenHRP-3.0.7 Assumptions ◮ OpenHRP 3.0.7 is installed ◮ The Stack of Tasks has been installed thanks to previous slide with install sot.sh in the directory: /home/ user / devel / ros unstable ◮ Your /opt/grx3.0/HRP2LAAS/bin/config.sh is well setup. The golden commands $>roscore #Launching HRP2 simulation with OpenHPR $>roslaunch hrp2 bringup openhrp bridge . launch robot := hrp2 14 mode:= d g w i t h s t a b i l i z e r simulation := true $>rosrun dynamic graph bridge run command $>>> . . . # create the solver ( see next s l i d e ) $>rosservice c a l l / start dynamic graph The stack of tasks
  • 116. Introduction Theoretical foundations Software Running the stack of tasks into OpenHRP-3.0.7 Initialize the application: create tracer and solver [ INFO ] [ WallTime : 1370854858.786392] waiting for service . . . I n t e r a c t i n g with remote server . >>> from dynamic graph . sot . a p p l i c a t i o n . v e l o c i t y . precomputed tasks import i n i t i a l i z e >>> solver = i n i t i a l i z e ( robot ) >>> robot . i n i t i a l i z e T r a c e r ( ) The stack of tasks
  • 117. Introduction Theoretical foundations Software Running the stack of tasks into OpenHRP-3.0.7 Build the graph including the pattern generator [ INFO ] [ WallTime : 1370854858.786392] waiting for service . . . I n t e r a c t i n g with remote server . >>> from dynamic graph . sot . pattern generator . walking import CreateEverythingForPG , walkFewSteps With meta selector The stack of tasks
  • 118. Introduction Theoretical foundations Software Running the stack of tasks into OpenHRP-3.0.7 Create the graph >>> CreateEverythingForPG ( robot , solver ) At t h i s stage ( ’ modelDir : ’ , ’ ˜ / devel / ros−unstable / i n s t a l l / share / hrp2−14 ’ ) ( ’modelName : ’ , ’ HRP2JRLmainsmall . wrl ’ ) ( ’ s p e c i f i c i t i e s P a t h : ’ , ’ HRP2SpecificitiesSmall . xml ’ ) ( ’ jointRankPath : ’ , ’ HRP2LinkJointRankSmall . xml ’ ) After Task for Right and Left Feet The stack of tasks
  • 119. Introduction Theoretical foundations Software Running the stack of tasks into OpenHRP-3.0.7 Switch to the new graph >>> walkFewSteps ( robot ) >>> The stack of tasks