05 March 2020
[
robotics
,
math
]
Cost map in a pillar like environment given a forward sensor scan.
ESDF map with path generated by CHOMP. Solid purple path points shows the final path generated by CHOMP after convergence.
Cost map with path generated by CHOMP. Solid purple path points shows the final path generated by CHOMP after convergence.
In the CHOMP [1] paper, the obstacle cost is defined in Eq. 23 of the paper:
F obs [ ξ ] = ∫ 0 1 ∫ u ∈ B c ( x ( ξ ( t ) , u ) ) ∥ d d t x ( ξ ( t ) , u ) ∥ d u d t (1) \tag{1}
\mathcal{F}_\text{obs} [\xi] = \int_0^1 \int_{u \in \mathcal{B}} c(x(\xi(t), u)) \left\lVert\frac{d}{dt} x(\xi(t), u)\right\rVert \,du \,dt F obs [ ξ ] = ∫ 0 1 ∫ u ∈ B c ( x ( ξ ( t ) , u )) d t d x ( ξ ( t ) , u ) d u d t ( 1 )
The functional gradient is given in Eq. 24 as:
∇ ˉ F obs [ ξ ] = ∂ v ∂ ξ − d d t ∂ v ∂ ξ ′ (2) \tag{2}
\bar \nabla \mathcal{F}_\text{obs} [\xi] = \frac{\partial v}{\partial \xi} - \frac{d}{dt}\frac{\partial v}{\partial \xi'} ∇ ˉ F obs [ ξ ] = ∂ ξ ∂ v − d t d ∂ ξ ′ ∂ v ( 2 )
where v v v is the everything inside the time integral of Eq. 23 of the paper, i.e.,
v = ∫ u ∈ B c ( x ( ξ ( t ) , u ) ) ∥ d d t x ( ξ ( t ) , u ) ∥ d u (3) \tag{3}
v = \int_{u \in \mathcal{B}} c(x(\xi(t), u)) \left\lVert\frac{d}{dt} x(\xi(t), u)\right\rVert \,du v = ∫ u ∈ B c ( x ( ξ ( t ) , u )) d t d x ( ξ ( t ) , u ) d u ( 3 )
The paper gives the functional gradient of Eq. 1 in Eq. 25 as:
∇ ˉ F obs [ ξ ] = ∫ u ∈ B J ⊤ ( ∥ x ′ ∥ ( ( I − x ′ ^ x ′ ^ ⊤ ) ∇ c − c κ ) ) d u (4) \tag{4}
\bar \nabla \mathcal{F}_\text{obs} [\xi] = \int_{u \in \mathcal{B}}J^\top\left( \left\lVert x'\right\rVert \left( \left(I - \hat{x'}\hat{x'}^\top\right) \nabla c - c\kappa \right)\right) \,du ∇ ˉ F obs [ ξ ] = ∫ u ∈ B J ⊤ ( ∥ x ′ ∥ ( ( I − x ′ ^ x ′ ^ ⊤ ) ∇ c − c κ ) ) d u ( 4 )
where
κ = 1 ∥ x ′ ∥ 2 ( I − x ′ ^ x ′ ^ ⊤ ) x ′ ′ \kappa = \frac{1}{\left\lVert x'\right\rVert^2} \left(I - \hat{x'}\hat{x'}^\top\right)x'' κ = ∥ x ′ ∥ 2 1 ( I − x ′ ^ x ′ ^ ⊤ ) x ′′
We will derive ∇ ˉ F obs [ ξ ] \bar \nabla \mathcal{F}_\text{obs} [\xi] ∇ ˉ F obs [ ξ ] .
Preliminaries
Notation
x ( q , u ) : R w → B x(q, u) : \mathbb{R}^w \rightarrow \mathcal{B} x ( q , u ) : R w → B is the forward
kinematic function of the robot, given a point on the body
u ∈ B u \in \mathcal{B} u ∈ B and its configuration q q q .
ξ ≈ ( q 1 ⊤ , q 2 ⊤ , . . . , q n ⊤ ) ⊤ \xi \approx (q_1^\top, q_2^\top, ..., q_n^\top)^\top ξ ≈ ( q 1 ⊤ , q 2 ⊤ , ... , q n ⊤ ) ⊤ is the
trajectory, which is basically a matrix of the joint angles.
( ⋅ ) ′ (\cdot)' ( ⋅ ) ′ is the first derivative with respect to a line integral.
In this case, the line integral is defined with respect to time t t t ,
therefore it can also be seen as d ( ⋅ ) d t \frac{d (\cdot)}{d t} d t d ( ⋅ ) , i.e., the
velocity, and ( ⋅ ) ′ ′ (\cdot)'' ( ⋅ ) ′′ the acceleration, etc.
x ^ = x ∥ x ∥ \hat{x} = \frac{x}{\left\lVert x\right\rVert} x ^ = ∥ x ∥ x is the normalized
vector of x.
J = ∂ x ∂ ξ J = \frac{\partial x}{\partial \xi} J = ∂ ξ ∂ x is the kinematic Jacobian that
relates changes in state to joint angles.
Partial gradient notation: ∇ c = ∂ c ∂ x \nabla c = \frac{\partial c}{\partial x} ∇ c = ∂ x ∂ c
Simplifying equations
We will use these simplfying equations in the derivation.
∂ ∥ x ( z ) ∥ ∂ z = ∂ ∂ z ( x ⊤ x ) 1 2 = 1 2 ( x ⊤ x ) − 1 2 ∂ ( x ⊤ x ) ∂ z = 1 2 1 ( x ⊤ x ) 1 2 2 x ⊤ ∂ x ∂ z = 1 ∥ x ∥ x ⊤ ∂ x ∂ z = x ^ ⊤ ∂ x ∂ z (5) \tag{5}
\frac{\partial \left\lVert x(z)\right\rVert}{\partial z} = \frac{\partial}{\partial z}(x^\top x)^{\frac{1}{2}}
= \frac{1}{2}(x^\top x)^{-\frac{1}{2}} \frac{\partial (x^\top x)}{\partial z}
= \frac{1}{2}\frac{1}{(x^\top x)^{\frac{1}{2}}} 2x^\top\frac{\partial x}{\partial z}
= \frac{1}{\left\lVert x\right\rVert} x^\top\frac{\partial x}{\partial z}
= \hat x^\top\frac{\partial x}{\partial z} ∂ z ∂ ∥ x ( z ) ∥ = ∂ z ∂ ( x ⊤ x ) 2 1 = 2 1 ( x ⊤ x ) − 2 1 ∂ z ∂ ( x ⊤ x ) = 2 1 ( x ⊤ x ) 2 1 1 2 x ⊤ ∂ z ∂ x = ∥ x ∥ 1 x ⊤ ∂ z ∂ x = x ^ ⊤ ∂ z ∂ x ( 5 )
∂ ∂ t x ^ = ∂ ∂ t x ∥ x ∥ = x ′ ∥ x ∥ − x x ⊤ x ′ ∥ x ∥ 3 = x ′ ∥ x ∥ − x ∥ x ∥ x ⊤ ∥ x ∥ x ′ ∥ x ∥ = x ′ ∥ x ∥ − x ^ x ^ ⊤ x ′ ∥ x ∥ = ( I − x ^ x ^ ⊤ ) x ′ ∥ x ∥ (6) \tag{6}
\frac{\partial}{\partial t}{\hat x} = \frac{\partial}{\partial t} \frac{x}{\left\lVert x\right\rVert}
= \frac{x'}{\left\lVert x\right\rVert} - \frac{x x^\top x'}{\left\lVert x\right\rVert^3}
= \frac{x'}{\left\lVert x\right\rVert} - \frac{x}{\left\lVert x\right\rVert}\frac{x^\top}{\left\lVert x\right\rVert}\frac{x'}{\left\lVert x\right\rVert}
= \frac{x'}{\left\lVert x\right\rVert} - \hat x \hat x^\top\frac{x'}{\left\lVert x\right\rVert}
= (I - \hat x \hat x^\top) \frac{x'}{\left\lVert x\right\rVert} ∂ t ∂ x ^ = ∂ t ∂ ∥ x ∥ x = ∥ x ∥ x ′ − ∥ x ∥ 3 x x ⊤ x ′ = ∥ x ∥ x ′ − ∥ x ∥ x ∥ x ∥ x ⊤ ∥ x ∥ x ′ = ∥ x ∥ x ′ − x ^ x ^ ⊤ ∥ x ∥ x ′ = ( I − x ^ x ^ ⊤ ) ∥ x ∥ x ′ ( 6 )
Derivation
Dropping dependencies of c c c , x x x on ξ , u \xi, u ξ , u , we have
v = ∫ u ∈ B ( c ∥ x ′ ∥ ) d u v = \int_{u \in \mathcal{B}} \left( c \left\lVert x'\right\rVert \right) \,du v = ∫ u ∈ B ( c ∥ x ′ ∥ ) d u
Then
∇ ˉ F obs [ ξ ] = ∂ v ∂ ξ − d d t ∂ v ∂ ξ ′ = ∂ ∂ ξ ∫ u ∈ B ( c ∥ x ′ ∥ ) d u − d d t ∂ ∂ ξ ′ ∫ u ∈ B ( c ∥ x ′ ∥ ) d u = ∫ u ∈ B ( ∂ ∂ ξ ( c ∥ x ′ ∥ ) − d d t ∂ ∂ ξ ′ ( c ∥ x ′ ∥ ) ) d u exchange the integral and derivatives \begin{aligned}
\bar \nabla \mathcal{F}_\text{obs} [\xi] &= \frac{\partial v}{\partial \xi} - \frac{d}{dt}\frac{\partial v}{\partial \xi'}\\
&=\frac{\partial}{\partial \xi} \int_{u \in \mathcal{B}} \left( c \left\lVert x'\right\rVert \right) \,du - \frac{d}{dt}\frac{\partial}{\partial \xi'} \int_{u \in \mathcal{B}} \left( c \left\lVert x'\right\rVert \right)\,du \\
&= \int_{u \in \mathcal{B}} \left( \frac{\partial}{\partial \xi} \left( c \left\lVert x'\right\rVert \right) - \frac{d}{dt}\frac{\partial}{\partial \xi'} \left( c \left\lVert x'\right\rVert \right) \right) \,du && \text{\footnotesize exchange the integral and derivatives}\end{aligned} ∇ ˉ F obs [ ξ ] = ∂ ξ ∂ v − d t d ∂ ξ ′ ∂ v = ∂ ξ ∂ ∫ u ∈ B ( c ∥ x ′ ∥ ) d u − d t d ∂ ξ ′ ∂ ∫ u ∈ B ( c ∥ x ′ ∥ ) d u = ∫ u ∈ B ( ∂ ξ ∂ ( c ∥ x ′ ∥ ) − d t d ∂ ξ ′ ∂ ( c ∥ x ′ ∥ ) ) d u exchange the integral and derivatives
We can compute the above integral in parts:
∇ ˉ F obs [ ξ ] = ∫ u ∈ B ( ∂ ∂ ξ c ∥ x ′ ∥ ⏟ Part 1 − d d t ∂ ∂ ξ ′ c ∥ x ′ ∥ ⏟ Part 2 ) d u (7) \tag{7}
\begin{aligned}
\bar \nabla \mathcal{F}_\text{obs} [\xi]
&= \int_{u \in \mathcal{B}} \biggl( \underbrace{ \frac{\partial}{\partial \xi} c \left\lVert x'\right\rVert}_{\text{Part 1}} - \underbrace{\frac{d}{dt}\frac{\partial}{\partial \xi'} c \left\lVert x'\right\rVert }_{\text{Part 2}} \biggr) \,du\end{aligned} ∇ ˉ F obs [ ξ ] = ∫ u ∈ B ( Part 1 ∂ ξ ∂ c ∥ x ′ ∥ − Part 2 d t d ∂ ξ ′ ∂ c ∥ x ′ ∥ ) d u ( 7 )
Now we will compute Part 1 and Part 2 separately.
Part 1
Using the chain rule,
∂ ∂ ξ ( c ∥ x ′ ∥ ) = ∂ c ∂ x ⏟ ∇ c ∂ x ∂ ξ ⏟ J ∥ x ′ ∥ + c ∂ ∥ x ′ ∥ ∂ ξ ⏟ x ′ ^ ⊤ ∂ x ′ ∂ ξ using Eq. 5 = ∇ c J ∥ x ′ ∥ + c x ′ ^ ⊤ ∂ x ′ ∂ ξ (8) \begin{aligned}
\frac{\partial}{\partial \xi} \left(c \left\lVert x'\right\rVert \right)
&= \underbrace{\frac{\partial c}{\partial x}}_{\mathclap{\nabla c}} \underbrace{\frac{\partial x}{\partial \xi}}_{\mathclap{J}} \left\lVert x'\right\rVert + c \underbrace{\frac{\partial \left\lVert x'\right\rVert}{\partial \xi}}_{\hat{x'}^\top\, \frac{\partial x'}{\partial \xi} \mathrlap{\text{\footnotesize using Eq. 5}}} \\
&= \nabla c J \left\lVert x'\right\rVert + c\,\hat{x'}^\top\, \frac{\partial x'}{\partial \xi} \tag{8}\end{aligned} ∂ ξ ∂ ( c ∥ x ′ ∥ ) = ∇ c ∂ x ∂ c J ∂ ξ ∂ x ∥ x ′ ∥ + c x ′ ^ ⊤ ∂ ξ ∂ x ′ using Eq. 5 ∂ ξ ∂ ∥ x ′ ∥ = ∇ c J ∥ x ′ ∥ + c x ′ ^ ⊤ ∂ ξ ∂ x ′ ( 8 )
Part 2
d d t ∂ ∂ ξ ′ c ∥ x ′ ∥ = d d t ( ∂ c ∂ x ⏟ ∇ c ∂ x ∂ ξ ′ ∥ x ′ ∥ + c ∂ ∥ x ′ ∥ ∂ ξ ′ ) d d t ∂ ∂ ξ ′ c ∥ x ′ ∥ = d d t ( ∇ c ∂ x ∂ ξ ′ ∥ x ′ ∥ + c ∂ ∥ x ′ ∥ ∂ ξ ′ ⏟ ) (8) \begin{aligned}
\frac{d}{dt}\frac{\partial}{\partial \xi'} c \left\lVert x'\right\rVert
&= \frac{d}{dt}\biggl( \underbrace{\frac{\partial c}{\partial x}}_{\mathclap{\nabla c}} \frac{\partial x}{\partial \xi'} \left\lVert x'\right\rVert + c \frac{\partial \left\lVert x'\right\rVert}{\partial \xi'}\biggr)\\
\frac{d}{dt}\frac{\partial}{\partial \xi'} c \left\lVert x'\right\rVert
&= \frac{d}{dt}\biggl( \nabla c \frac{\partial x}{\partial \xi'} \left\lVert x'\right\rVert + c \underbrace{\frac{\partial \left\lVert x'\right\rVert}{\partial \xi'}}\biggr) \tag{8}\end{aligned} d t d ∂ ξ ′ ∂ c ∥ x ′ ∥ d t d ∂ ξ ′ ∂ c ∥ x ′ ∥ = d t d ( ∇ c ∂ x ∂ c ∂ ξ ′ ∂ x ∥ x ′ ∥ + c ∂ ξ ′ ∂ ∥ x ′ ∥ ) = d t d ( ∇ c ∂ ξ ′ ∂ x ∥ x ′ ∥ + c ∂ ξ ′ ∂ ∥ x ′ ∥ ) ( 8 )
Let us deal with the rightmost term first:
∂ ∥ x ′ ∥ ∂ ξ ′ = x ′ ⊤ ∥ x ′ ∥ ⋅ ∂ ∂ ξ ′ ( x ′ ) using Eq.5 = x ′ ⊤ ∥ x ′ ∥ ⋅ ∂ ∂ ξ ′ ( d x d t ) = x ′ ⊤ ∥ x ′ ∥ ⋅ ∂ ∂ ξ ′ ( ∂ x ∂ ξ ∂ ξ ∂ t ) = x ′ ⊤ ∥ x ′ ∥ ⋅ ∂ ∂ ξ ′ ( ∂ x ∂ ξ ξ ′ ⏟ ) Now if we take the derivative of this second term, we have = x ′ ⊤ ∥ x ′ ∥ ⋅ ∂ x ∂ ξ = x ′ ^ ⊤ J \begin{aligned}
\frac{\partial \left\lVert x'\right\rVert}{\partial \xi'} &=\frac{x'^\top}{\left\lVert x'\right\rVert} \cdot \frac{\partial}{\partial \xi'}(x') && \text{\footnotesize using Eq.5}\\
&=\frac{x'^\top}{\left\lVert x'\right\rVert} \cdot \frac{\partial}{\partial \xi'}\biggl(\frac{d x}{d t}\biggr)\\
&=\frac{x'^\top}{\left\lVert x'\right\rVert} \cdot \frac{\partial}{\partial \xi'}\biggl(\frac{\partial x}{\partial \xi} \frac{\partial \xi}{\partial t}\biggr)\\
&=\frac{x'^\top}{\left\lVert x'\right\rVert} \cdot \underbrace{\frac{\partial}{\partial \xi'}\biggl(\frac{\partial x}{\partial \xi} \xi'} \biggr) && \text{\footnotesize Now if we take the derivative of this second term, we have}\\
&=\frac{x'^\top}{\left\lVert x'\right\rVert} \cdot \frac{\partial x}{\partial \xi} \\
& = \hat{x'}^\top J\end{aligned} ∂ ξ ′ ∂ ∥ x ′ ∥ = ∥ x ′ ∥ x ′⊤ ⋅ ∂ ξ ′ ∂ ( x ′ ) = ∥ x ′ ∥ x ′⊤ ⋅ ∂ ξ ′ ∂ ( d t d x ) = ∥ x ′ ∥ x ′⊤ ⋅ ∂ ξ ′ ∂ ( ∂ ξ ∂ x ∂ t ∂ ξ ) = ∥ x ′ ∥ x ′⊤ ⋅ ∂ ξ ′ ∂ ( ∂ ξ ∂ x ξ ′ ) = ∥ x ′ ∥ x ′⊤ ⋅ ∂ ξ ∂ x = x ′ ^ ⊤ J using Eq.5 Now if we take the derivative of this second term, we have
Substituting back in Eq. 8, we have
d d t ∂ ∂ ξ ′ c ∥ x ′ ∥ = d d t ( ∇ c ∂ x ∂ ξ ′ ∥ x ′ ∥ + c x ′ ^ ⊤ J ) \begin{aligned}
\frac{d}{dt}\frac{\partial}{\partial \xi'} c \left\lVert x'\right\rVert
&= \frac{d}{dt}\biggl( \nabla c \frac{\partial x}{\partial \xi'} \left\lVert x'\right\rVert + c \, \hat{x'}^\top J \biggr)\end{aligned} d t d ∂ ξ ′ ∂ c ∥ x ′ ∥ = d t d ( ∇ c ∂ ξ ′ ∂ x ∥ x ′ ∥ + c x ′ ^ ⊤ J )
Applying the chain rule to the derivative with respect to time, we have:
d d t ∂ ∂ ξ ′ c ∥ x ′ ∥ = d d t ( ∇ c ∂ x ∂ ξ ′ ∥ x ′ ∥ ) ⏟ A + d d t ( c x ′ ^ ⊤ J ) ⏟ B \begin{aligned}
\frac{d}{dt}\frac{\partial}{\partial \xi'} c \left\lVert x'\right\rVert
&= \underbrace{\frac{d}{dt}\biggl( \nabla c \frac{\partial x}{\partial \xi'} \left\lVert x'\right\rVert\biggr)}_{\textbf{A}} + \underbrace{\frac{d}{dt}\biggl( c \, \hat{x'}^\top J \biggr)}_{\textbf{B}}\end{aligned} d t d ∂ ξ ′ ∂ c ∥ x ′ ∥ = A d t d ( ∇ c ∂ ξ ′ ∂ x ∥ x ′ ∥ ) + B d t d ( c x ′ ^ ⊤ J )
We deal with and separately. Applying the chain rule to :
A d d t ( ∇ c ∂ x ∂ ξ ′ ∥ x ′ ∥ ) = d ( ∇ c ) d t ∂ x ∂ ξ ′ ∥ x ′ ∥ + ∇ c d d t ( ∂ x ∂ ξ ′ ) ∥ x ′ ∥ + ∇ c ∂ x ∂ ξ ′ d ∥ x ′ ∥ d t = d ( ∇ c ) d t ∂ x ∂ ξ ′ ∥ x ′ ∥ + ∇ c d d t ( ∂ x ∂ ξ ′ ) ∥ x ′ ∥ + ∇ c ∂ x ∂ ξ ′ d ∥ x ′ ∥ d t ⏟ = d ( ∇ c ) d t ∂ x ∂ ξ ′ ∥ x ′ ∥ + ∇ c d d t ( ∂ x ∂ ξ ′ ) ∥ x ′ ∥ + ∇ c ∂ x ∂ ξ ′ x ′ ^ ⊤ ∂ x ′ ∂ t ⏟ = d ( ∇ c ) d t ∂ x ∂ ξ ′ ∥ x ′ ∥ + ∇ c d d t ( ∂ x ∂ ξ ′ ) ∥ x ′ ∥ + ∇ c ∂ x ∂ ξ ′ ( x ′ ^ ⊤ x ′ ′ ) \begin{aligned}
\textbf{A}
\quad \frac{d}{dt}\biggl( \nabla c \frac{\partial x}{\partial \xi'} \left\lVert x'\right\rVert\biggr)
& = \frac{d (\nabla c)}{d t} \frac{\partial x}{\partial \xi'} \left\lVert x'\right\rVert + \nabla c \frac{d}{dt}\biggl(\frac{\partial x}{\partial \xi'}\biggr)\left\lVert x'\right\rVert + \nabla c \frac{\partial x}{\partial \xi'} \frac{d \left\lVert x'\right\rVert}{d t}\\
& = \frac{d (\nabla c)}{d t} \frac{\partial x}{\partial \xi'} \left\lVert x'\right\rVert + \nabla c \frac{d}{dt}\biggl(\frac{\partial x}{\partial \xi'}\biggr)\left\lVert x'\right\rVert + \nabla c \frac{\partial x}{\partial \xi'} \underbrace{\frac{d \left\lVert x'\right\rVert}{d t}}\\
& = \frac{d (\nabla c)}{d t} \frac{\partial x}{\partial \xi'} \left\lVert x'\right\rVert + \nabla c \frac{d}{dt}\biggl(\frac{\partial x}{\partial \xi'}\biggr)\left\lVert x'\right\rVert + \nabla c \frac{\partial x}{\partial \xi'} \underbrace{\hat{x'}^\top\frac{\partial x'}{\partial t}}\\
& = \frac{d (\nabla c)}{d t} \frac{\partial x}{\partial \xi'} \left\lVert x'\right\rVert + \nabla c \frac{d}{dt}\biggl(\frac{\partial x}{\partial \xi'}\biggr)\left\lVert x'\right\rVert + \nabla c \frac{\partial x}{\partial \xi'} \biggl(\hat{x'}^\top x'' \biggr)\end{aligned} A d t d ( ∇ c ∂ ξ ′ ∂ x ∥ x ′ ∥ ) = d t d ( ∇ c ) ∂ ξ ′ ∂ x ∥ x ′ ∥ + ∇ c d t d ( ∂ ξ ′ ∂ x ) ∥ x ′ ∥ + ∇ c ∂ ξ ′ ∂ x d t d ∥ x ′ ∥ = d t d ( ∇ c ) ∂ ξ ′ ∂ x ∥ x ′ ∥ + ∇ c d t d ( ∂ ξ ′ ∂ x ) ∥ x ′ ∥ + ∇ c ∂ ξ ′ ∂ x d t d ∥ x ′ ∥ = d t d ( ∇ c ) ∂ ξ ′ ∂ x ∥ x ′ ∥ + ∇ c d t d ( ∂ ξ ′ ∂ x ) ∥ x ′ ∥ + ∇ c ∂ ξ ′ ∂ x x ′ ^ ⊤ ∂ t ∂ x ′ = d t d ( ∇ c ) ∂ ξ ′ ∂ x ∥ x ′ ∥ + ∇ c d t d ( ∂ ξ ′ ∂ x ) ∥ x ′ ∥ + ∇ c ∂ ξ ′ ∂ x ( x ′ ^ ⊤ x ′′ )
Now, we apply the chain rule to :
B d d t ( c x ′ ^ ⊤ J ) = d c d t x ′ ^ ⊤ J + c d d t ( x ′ ^ ⊤ ) J + c x ′ ^ ⊤ d J d t = d c d t ⏟ x ′ ^ ⊤ J + c d d t ( x ′ ^ ⊤ ) ⏟ J + c x ′ ^ ⊤ d J d t = ∂ c ∂ x ∂ x ∂ t ⏟ x ′ ^ ⊤ J + c ( I − x ′ ^ x ′ ^ ⊤ ) x ′ ′ ∥ x ′ ∥ ⏟ using Eq.6 J + c x ′ ^ ⊤ d J d t = ∇ c x ′ x ′ ^ ⊤ J + c ( I − x ′ ^ x ′ ^ ⊤ ) x ′ ′ ∥ x ′ ∥ J + c x ′ ^ ⊤ d J d t \begin{aligned}
\textbf{B} \qquad \frac{d}{dt}\biggl( c \, \hat{x'}^\top J \biggr)
&= \frac{d c}{d t} \, \hat{x'}^\top J + c \, \frac{d}{dt}\biggl( \hat{x'}^\top\biggr) J + c \, \hat{x'}^\top\frac{d J}{d t}\\
&= \underbrace{\frac{d c}{d t}} \, \hat{x'}^\top J + c \, \underbrace{\frac{d}{dt}\biggl( \hat{x'}^\top\biggr)} J + c \, \hat{x'}^\top\frac{d J}{d t}\\
&= \underbrace{\frac{\partial c}{\partial x}\frac{\partial x}{\partial t}} \, \hat{x'}^\top J + c \, \underbrace{(I - \hat{x'}\hat{x'}^\top) \frac{x''}{\left\lVert x'\right\rVert}}_{\text{\footnotesize using Eq.6}} J + c \, \hat{x'}^\top\frac{d J}{d t}\\
&= \nabla c \, x' \, \hat{x'}^\top J + c \, (I - \hat{x'}\hat{x'}^\top) \frac{x''}{\left\lVert x'\right\rVert} J + c \, \hat{x'}^\top\frac{d J}{d t}\end{aligned} B d t d ( c x ′ ^ ⊤ J ) = d t d c x ′ ^ ⊤ J + c d t d ( x ′ ^ ⊤ ) J + c x ′ ^ ⊤ d t dJ = d t d c x ′ ^ ⊤ J + c d t d ( x ′ ^ ⊤ ) J + c x ′ ^ ⊤ d t dJ = ∂ x ∂ c ∂ t ∂ x x ′ ^ ⊤ J + c using Eq.6 ( I − x ′ ^ x ′ ^ ⊤ ) ∥ x ′ ∥ x ′′ J + c x ′ ^ ⊤ d t dJ = ∇ c x ′ x ′ ^ ⊤ J + c ( I − x ′ ^ x ′ ^ ⊤ ) ∥ x ′ ∥ x ′′ J + c x ′ ^ ⊤ d t dJ
Putting A \textbf{A} A and B \textbf{B} B together:
d d t ∂ ∂ ξ ′ c ∥ x ′ ∥ = A + B = ( d ( ∇ c ) d t ∂ x ∂ ξ ′ ∥ x ′ ∥ + ∇ c d d t ( ∂ x ∂ ξ ′ ) ∥ x ′ ∥ + ∇ c ∂ x ∂ ξ ′ ( x ′ ^ ⊤ x ′ ′ ) ) + ( ∇ c x ′ x ′ ^ ⊤ J + c ( I − x ′ ^ x ′ ^ ⊤ ) x ′ ′ ∥ x ′ ∥ J + c x ′ ^ ⊤ d J d t ) (9) \begin{aligned}
\frac{d}{dt}\frac{\partial}{\partial \xi'} c \left\lVert x'\right\rVert
&= \textbf{A} + \textbf{B}\\
&= \biggl( \frac{d (\nabla c)}{d t} \frac{\partial x}{\partial \xi'} \left\lVert x'\right\rVert + \nabla c \frac{d}{dt}\biggl(\frac{\partial x}{\partial \xi'}\biggr)\left\lVert x'\right\rVert + \nabla c \frac{\partial x}{\partial \xi'} \biggl(\hat{x'}^\top x'' \biggr)\biggr)\\
& + \biggl( \nabla c \, x' \, \hat{x'}^\top J + c \, (I - \hat{x'}\hat{x'}^\top) \frac{x''}{\left\lVert x'\right\rVert} J + c \, \hat{x'}^\top\frac{d J}{d t} \biggr) \tag{9}\end{aligned} d t d ∂ ξ ′ ∂ c ∥ x ′ ∥ = A + B = ( d t d ( ∇ c ) ∂ ξ ′ ∂ x ∥ x ′ ∥ + ∇ c d t d ( ∂ ξ ′ ∂ x ) ∥ x ′ ∥ + ∇ c ∂ ξ ′ ∂ x ( x ′ ^ ⊤ x ′′ ) ) + ( ∇ c x ′ x ′ ^ ⊤ J + c ( I − x ′ ^ x ′ ^ ⊤ ) ∥ x ′ ∥ x ′′ J + c x ′ ^ ⊤ d t dJ ) ( 9 )
Together
Now, let us put Part 1
(Eq. 8) and Part 2
(Eq. 9) together:
( ∂ ∂ ξ c ∥ x ′ ∥ ⏟ Part 1 − d d t ∂ ∂ ξ ′ c ∥ x ′ ∥ ⏟ Part 2 ) = ∇ c J ∥ x ′ ∥ + c x ′ ^ ⊤ ∂ x ′ ∂ ξ ⏟ Part 1 − ( d ( ∇ c ) d t ∂ x ∂ ξ ′ ∥ x ′ ∥ + ∇ c d d t ( ∂ x ∂ ξ ′ ) ∥ x ′ ∥ + ∇ c ∂ x ∂ ξ ′ ( x ′ ^ ⊤ x ′ ′ ) ⏟ A + ∇ c x ′ x ′ ^ ⊤ J + c ( I − x ′ ^ x ′ ^ ⊤ ) x ′ ′ ∥ x ′ ∥ J + c x ′ ^ ⊤ d J d t ⏟ B ) \begin{aligned}
\biggl( \underbrace{ \frac{\partial}{\partial \xi} c \left\lVert x'\right\rVert}_{\text{Part 1}}& - \underbrace{\frac{d}{dt}\frac{\partial}{\partial \xi'} c \left\lVert x'\right\rVert }_{\text{Part 2}} \biggr) \\
&= \underbrace{\nabla c \, J \left\lVert x'\right\rVert + c\,\hat{x'}^\top\, \frac{\partial x'}{\partial \xi}}_{\text{Part 1}} -\biggl( \underbrace{ \frac{d (\nabla c)}{d t} \frac{\partial x}{\partial \xi'} \left\lVert x'\right\rVert + \nabla c \frac{d}{dt}\biggl(\frac{\partial x}{\partial \xi'}\biggr)\left\lVert x'\right\rVert + \nabla c \frac{\partial x}{\partial \xi'} \biggl(\hat{x'}^\top x'' \biggr)}_{\textbf{A}}\\
& + \underbrace{\nabla c \, x' \, \hat{x'}^\top J + c \, (I - \hat{x'}\hat{x'}^\top) \frac{x''}{\left\lVert x'\right\rVert} J + c \, \hat{x'}^\top\frac{d J}{d t}}_{\textbf{B}} \biggr)\end{aligned} ( Part 1 ∂ ξ ∂ c ∥ x ′ ∥ − Part 2 d t d ∂ ξ ′ ∂ c ∥ x ′ ∥ ) = Part 1 ∇ c J ∥ x ′ ∥ + c x ′ ^ ⊤ ∂ ξ ∂ x ′ − ( A d t d ( ∇ c ) ∂ ξ ′ ∂ x ∥ x ′ ∥ + ∇ c d t d ( ∂ ξ ′ ∂ x ) ∥ x ′ ∥ + ∇ c ∂ ξ ′ ∂ x ( x ′ ^ ⊤ x ′′ ) + B ∇ c x ′ x ′ ^ ⊤ J + c ( I − x ′ ^ x ′ ^ ⊤ ) ∥ x ′ ∥ x ′′ J + c x ′ ^ ⊤ d t dJ )
If we assume ∂ x ′ ∂ ξ = 0 \frac{\partial x'}{\partial \xi} = 0 ∂ ξ ∂ x ′ = 0 ,
∂ x ∂ ξ ′ = 0 \frac{\partial x}{\partial \xi'} = 0 ∂ ξ ′ ∂ x = 0 , d d t J = 0 \frac{d}{dt}J = 0 d t d J = 0 , (and
consequently d d t ∂ x ∂ ξ ′ = 0 \frac{d}{dt}\frac{\partial x}{\partial \xi'} = 0 d t d ∂ ξ ′ ∂ x = 0 ), then
we can greatly simplify this expression:
∇ c J ∥ x ′ ∥ + c x ′ ^ ⊤ ∂ x ′ ∂ ξ − d ( ∇ c ) d t ∂ x ∂ ξ ′ ∥ x ′ ∥ − ∇ c d d t ( ∂ x ∂ ξ ′ ) ∥ x ′ ∥ − ∇ c ∂ x ∂ ξ ′ ( x ′ ^ ⊤ x ′ ′ ) − ∇ c x ′ x ′ ^ ⊤ J − c ( I − x ′ ^ x ′ ^ ⊤ ) x ′ ′ ∥ x ′ ∥ J − c x ′ ^ ⊤ d J d t = ∇ c J ∥ x ′ ∥ − ∇ c x ′ x ′ ^ ⊤ J − c ( I − x ′ ^ x ′ ^ ⊤ ) x ′ ′ ∥ x ′ ∥ J (10) \begin{aligned}
& \nabla c J \left\lVert x'\right\rVert
+ \cancel{c\,\hat{x'}^\top\, \frac{\partial x'}{\partial \xi}}
- \cancel{\frac{d (\nabla c)}{d t} \frac{\partial x}{\partial \xi'} \left\lVert x'\right\rVert}
- \cancel{\nabla c \frac{d}{dt}\biggl(\frac{\partial x}{\partial \xi'}\biggr)\left\lVert x'\right\rVert}
- \cancel{\nabla c \frac{\partial x}{\partial \xi'} \biggl(\hat{x'}^\top x'' \biggr)} \\
& - \nabla c \, x' \, \hat{x'}^\top J
- c \, (I - \hat{x'}\hat{x'}^\top) \frac{x''}{\left\lVert x'\right\rVert} J
- \cancel{c \, \hat{x'}^\top\frac{d J}{d t}}\\
&\qquad \qquad \qquad =
\nabla c J \left\lVert x'\right\rVert
- \nabla c \, x' \, \hat{x'}^\top J
- c \, (I - \hat{x'}\hat{x'}^\top) \frac{x''}{\left\lVert x'\right\rVert} J \tag{10}\end{aligned} ∇ c J ∥ x ′ ∥ + c x ′ ^ ⊤ ∂ ξ ∂ x ′ − d t d ( ∇ c ) ∂ ξ ′ ∂ x ∥ x ′ ∥ − ∇ c d t d ( ∂ ξ ′ ∂ x ) ∥ x ′ ∥ − ∇ c ∂ ξ ′ ∂ x ( x ′ ^ ⊤ x ′′ ) − ∇ c x ′ x ′ ^ ⊤ J − c ( I − x ′ ^ x ′ ^ ⊤ ) ∥ x ′ ∥ x ′′ J − c x ′ ^ ⊤ d t dJ = ∇ c J ∥ x ′ ∥ − ∇ c x ′ x ′ ^ ⊤ J − c ( I − x ′ ^ x ′ ^ ⊤ ) ∥ x ′ ∥ x ′′ J ( 10 )
Now, we rearrange the last equation
(Eq. 10):
∇ c J ∥ x ′ ∥ − ∇ c x ′ x ′ ^ ⊤ J − c ( I − x ′ ^ x ′ ^ ⊤ ) x ′ ′ ∥ x ′ ∥ J = J ⊤ ( ( ∥ x ′ ∥ − x ′ x ′ ^ ⊤ ) ∇ c − c ( I − x ′ ^ x ′ ^ ⊤ ) x ′ ′ ∥ x ′ ∥ ) = J ⊤ ( ( ∥ x ′ ∥ − x ′ x ′ ^ ⊤ ∥ x ′ ∥ ∥ x ′ ∥ ⏟ multiply the numerator and denominator by the same thing ) ∇ c − c ( I − x ′ ^ x ′ ^ ⊤ ) x ′ ′ ∥ x ′ ∥ ) = J ⊤ ( ( ∥ x ′ ∥ − ∥ x ′ ∥ x ′ ∥ x ′ ∥ x ′ ^ ⊤ ) ∇ c − c ( I − x ′ ^ x ′ ^ ⊤ ) x ′ ′ ∥ x ′ ∥ ) = J ⊤ ( ( ∥ x ′ ∥ − ∥ x ′ ∥ x ′ ^ x ′ ^ ⊤ ) ∇ c − c ( I − x ′ ^ x ′ ^ ⊤ ) x ′ ′ ∥ x ′ ∥ ) = J ⊤ ( ∥ x ′ ∥ ( I − x ′ ^ x ′ ^ ⊤ ) ∇ c − c ( I − x ′ ^ x ′ ^ ⊤ ) x ′ ′ ∥ x ′ ∥ ∥ x ′ ∥ ∥ x ′ ∥ ⏟ same trick ) = J ⊤ ( ∥ x ′ ∥ ( I − x ′ ^ x ′ ^ ⊤ ) ∇ c − c ( I − x ′ ^ x ′ ^ ⊤ ) x ′ ′ ∥ x ′ ∥ 2 ∥ x ′ ∥ ) = J ⊤ ( ∥ x ′ ∥ ( ( I − x ′ ^ x ′ ^ ⊤ ) ∇ c − c ( I − x ′ ^ x ′ ^ ⊤ ) x ′ ′ ∥ x ′ ∥ 2 ⏟ κ ) ) this gives us: ( ∂ ∂ ξ c ∥ x ′ ∥ − d d t ∂ ∂ ξ ′ c ∥ x ′ ∥ ) = J ⊤ ( ∥ x ′ ∥ ( ( I − x ′ ^ x ′ ^ ⊤ ) ∇ c − c κ ) ) (11) \begin{aligned}
\nabla c J \left\lVert x'\right\rVert - \nabla c \, &x' \, \hat{x'}^\top J - c \, (I - \hat{x'}\hat{x'}^\top) \frac{x''}{\left\lVert x'\right\rVert} J\\
&= J^\top\biggl( \biggl(\left\lVert x'\right\rVert - x' \, \hat{x'}^\top\biggr)\nabla c - c (I - \hat{x'}\hat{x'}^\top) \frac{x''}{\left\lVert x'\right\rVert}\biggr)\\
&= J^\top\biggl( \biggl(\left\lVert x'\right\rVert - x' \, \hat{x'}^\top\underbrace{\frac{\left\lVert x'\right\rVert}{\left\lVert x'\right\rVert}}_{\mathclap{\text{\footnotesize multiply the numerator and denominator by the same thing}}} \biggr)\nabla c - c (I - \hat{x'}\hat{x'}^\top) \frac{x''}{\left\lVert x'\right\rVert}\biggr)\\
&= J^\top\biggl( \biggl(\left\lVert x'\right\rVert - \left\lVert x'\right\rVert\frac{x'}{\left\lVert x'\right\rVert} \, \hat{x'}^\top\biggr)\nabla c - c (I - \hat{x'}\hat{x'}^\top) \frac{x''}{\left\lVert x'\right\rVert}\biggr)\\
&= J^\top\biggl( \biggl(\left\lVert x'\right\rVert - \left\lVert x'\right\rVert \hat{x'} \hat{x'}^\top\biggr)\nabla c - c (I - \hat{x'}\hat{x'}^\top) \frac{x''}{\left\lVert x'\right\rVert}\biggr)\\
&= J^\top\biggl( \left\lVert x'\right\rVert(I - \hat{x'} \hat{x'}^\top)\nabla c - c (I - \hat{x'}\hat{x'}^\top) \frac{x''}{\left\lVert x'\right\rVert}\underbrace{\frac{\left\lVert x'\right\rVert}{\left\lVert x'\right\rVert}}_{\mathclap{\text{\footnotesize same trick}}}\biggr)\\
&= J^\top\biggl( \left\lVert x'\right\rVert(I - \hat{x'} \hat{x'}^\top)\nabla c - c (I - \hat{x'}\hat{x'}^\top) \frac{x''}{\left\lVert x'\right\rVert^2}\left\lVert x'\right\rVert\biggr)\\
&= J^\top\biggl( \left\lVert x'\right\rVert\biggl((I - \hat{x'} \hat{x'}^\top)\nabla c - c \underbrace{(I - \hat{x'}\hat{x'}^\top) \frac{x''}{\left\lVert x'\right\rVert^2}}_{\kappa} \biggr) \biggr)\\
\text{this gives us:} & \\
\biggl( \frac{\partial}{\partial \xi} c \left\lVert x'\right\rVert -\frac{d}{dt}\frac{\partial}{\partial \xi'} c \left\lVert x'\right\rVert\biggr)
& = J^\top\biggl( \left\lVert x'\right\rVert\biggl((I - \hat{x'} \hat{x'}^\top)\nabla c - c \kappa \biggr) \biggr) \tag{11}\end{aligned} ∇ c J ∥ x ′ ∥ − ∇ c this gives us: ( ∂ ξ ∂ c ∥ x ′ ∥ − d t d ∂ ξ ′ ∂ c ∥ x ′ ∥ ) x ′ x ′ ^ ⊤ J − c ( I − x ′ ^ x ′ ^ ⊤ ) ∥ x ′ ∥ x ′′ J = J ⊤ ( ( ∥ x ′ ∥ − x ′ x ′ ^ ⊤ ) ∇ c − c ( I − x ′ ^ x ′ ^ ⊤ ) ∥ x ′ ∥ x ′′ ) = J ⊤ ( ( ∥ x ′ ∥ − x ′ x ′ ^ ⊤ multiply the numerator and denominator by the same thing ∥ x ′ ∥ ∥ x ′ ∥ ) ∇ c − c ( I − x ′ ^ x ′ ^ ⊤ ) ∥ x ′ ∥ x ′′ ) = J ⊤ ( ( ∥ x ′ ∥ − ∥ x ′ ∥ ∥ x ′ ∥ x ′ x ′ ^ ⊤ ) ∇ c − c ( I − x ′ ^ x ′ ^ ⊤ ) ∥ x ′ ∥ x ′′ ) = J ⊤ ( ( ∥ x ′ ∥ − ∥ x ′ ∥ x ′ ^ x ′ ^ ⊤ ) ∇ c − c ( I − x ′ ^ x ′ ^ ⊤ ) ∥ x ′ ∥ x ′′ ) = J ⊤ ( ∥ x ′ ∥ ( I − x ′ ^ x ′ ^ ⊤ ) ∇ c − c ( I − x ′ ^ x ′ ^ ⊤ ) ∥ x ′ ∥ x ′′ same trick ∥ x ′ ∥ ∥ x ′ ∥ ) = J ⊤ ( ∥ x ′ ∥ ( I − x ′ ^ x ′ ^ ⊤ ) ∇ c − c ( I − x ′ ^ x ′ ^ ⊤ ) ∥ x ′ ∥ 2 x ′′ ∥ x ′ ∥ ) = J ⊤ ( ∥ x ′ ∥ ( ( I − x ′ ^ x ′ ^ ⊤ ) ∇ c − c κ ( I − x ′ ^ x ′ ^ ⊤ ) ∥ x ′ ∥ 2 x ′′ ) ) = J ⊤ ( ∥ x ′ ∥ ( ( I − x ′ ^ x ′ ^ ⊤ ) ∇ c − c κ ) ) ( 11 )
Now put Eq. 10 into
Eq. 7} to get the final form:
∇ ˉ F obs [ ξ ] = ∫ u ∈ B ( ∂ ∂ ξ c ∥ x ′ ∥ − d d t ∂ ∂ ξ ′ c ∥ x ′ ∥ ) d u = ∫ u ∈ B J ⊤ ( ∥ x ′ ∥ ( ( I − x ′ ^ x ′ ^ ⊤ ) ∇ c − c κ ) ) d u \begin{aligned}
\bar \nabla \mathcal{F}_\text{obs} [\xi]
&= \int_{u \in \mathcal{B}} \biggl( \frac{\partial}{\partial \xi} c \left\lVert x'\right\rVert -\frac{d}{dt}\frac{\partial}{\partial \xi'} c \left\lVert x'\right\rVert \biggr) \,du\\
&= \int_{u \in \mathcal{B}}J^\top\biggl( \left\lVert x'\right\rVert\biggl((I - \hat{x'} \hat{x'}^\top)\nabla c - c \kappa \biggr) \biggr) \,du\end{aligned} ∇ ˉ F obs [ ξ ] = ∫ u ∈ B ( ∂ ξ ∂ c ∥ x ′ ∥ − d t d ∂ ξ ′ ∂ c ∥ x ′ ∥ ) d u = ∫ u ∈ B J ⊤ ( ∥ x ′ ∥ ( ( I − x ′ ^ x ′ ^ ⊤ ) ∇ c − c κ ) ) d u
where
κ = 1 ∥ x ′ ∥ 2 ( I − x ′ ^ x ′ ^ ⊤ ) x ′ ′ \kappa = \frac{1}{\left\lVert x'\right\rVert^2} \left(I - \hat{x'}\hat{x'}^\top\right)x'' κ = ∥ x ′ ∥ 2 1 ( I − x ′ ^ x ′ ^ ⊤ ) x ′′
Compare this solution with
Eq.4,
which is Eq. 25 in the paper.
Notes
The form of Eq. 1 is similar to a form of the Elastic Band model
which was first introduced by Sean Quinlan. Quinlan’s thesis
introduces a elastic bands using a constant elastic tension force, which
is used to model deforming a collision-free path. In Section 3.7 of his
thesis, a simplified objective function is introduced as
v i n t = k ∥ c ′ ∥ v_{int} = k \left\lVert\mathbf{c}'\right\rVert v in t = k ∥ c ′ ∥
which is the internal
density function. The corresponding contraction force,
f i n t ( s ) = − ∇ ˉ v i n t = d d s ∂ v i n t ∂ c ′ (12) \tag{12}
\mathbf{f}_{int}(s) = - \bar \nabla v_{int} = \frac{d }{d s} \frac{\partial v_{int}}{\partial \mathbf{c}'} f in t ( s ) = − ∇ ˉ v in t = d s d ∂ c ′ ∂ v in t ( 12 )
is similar to the gradient equation (Eq. 2).
Note that the spring constant k k k in v i n t v_{int} v in t is constant, whereas the
v v v in the CHOMP formulation (Eq. 3) the cost c c c is dependent on the state x x x . The
solution to Eq.12 is:
f i n t ( s ) = k ∥ c ′ ∥ 2 ( c ′ ′ − c ′ ′ ⋅ c ′ ∥ c ′ ∥ 2 c ′ ) \mathbf{f}_{int}(s) = \frac{k}{\left\lVert\mathbf{c}'\right\rVert^2} \biggl( \mathbf{c}'' - \frac{\mathbf{c}'' \cdot \mathbf{c}'}{\left\lVert\mathbf{c}'\right\rVert^2}\mathbf{c}'\biggr) f in t ( s ) = ∥ c ′ ∥ 2 k ( c ′′ − ∥ c ′ ∥ 2 c ′′ ⋅ c ′ c ′ )
For the exact derivation, please see Section 3 of Quinlan’s thesis [2].
References
M. Zucker, N. Ratliff, A. D. Dragan, M. Pivtoraiko, M. Klingensmith, C. M. Dellin, J. A. Bagnell, and
S. S. Srinivasa, “Chomp: Covariant hamiltonian optimization for motion planning ,” The International
Journal of Robotics Research, vol. 32, no. 9-10, pp. 1164–1193, 2013.
S. Quinlan, Real-time modification of collision-free paths .
Page 5 of 5
Stanford University, 1994, no. 1537
Note about the figures: Notice that a forward sensor scan does not capture the interior of an obstacle. This is a problem for another blog post…