@@ -1605,16 +1605,16 @@ def trnorm(T: SE3Array) -> SE3Array:
1605
1605
1606
1606
1607
1607
@overload
1608
- def trinterp (start : Optional [SO3Array ], end : SO3Array , s : float ) -> SO3Array :
1608
+ def trinterp (start : Optional [SO3Array ], end : SO3Array , s : float , shortest : bool = True ) -> SO3Array :
1609
1609
...
1610
1610
1611
1611
1612
1612
@overload
1613
- def trinterp (start : Optional [SE3Array ], end : SE3Array , s : float ) -> SE3Array :
1613
+ def trinterp (start : Optional [SE3Array ], end : SE3Array , s : float , shortest : bool = True ) -> SE3Array :
1614
1614
...
1615
1615
1616
1616
1617
- def trinterp (start , end , s ):
1617
+ def trinterp (start , end , s , shortest = True ):
1618
1618
"""
1619
1619
Interpolate SE(3) matrices
1620
1620
@@ -1624,6 +1624,8 @@ def trinterp(start, end, s):
1624
1624
:type end: ndarray(4,4) or ndarray(3,3)
1625
1625
:param s: interpolation coefficient, range 0 to 1
1626
1626
:type s: float
1627
+ :param shortest: take the shortest path along the great circle for the rotation
1628
+ :type shortest: bool, default to True
1627
1629
:return: interpolated SE(3) or SO(3) matrix value
1628
1630
:rtype: ndarray(4,4) or ndarray(3,3)
1629
1631
:raises ValueError: bad arguments
@@ -1663,12 +1665,12 @@ def trinterp(start, end, s):
1663
1665
if start is None :
1664
1666
# TRINTERP(T, s)
1665
1667
q0 = r2q (end )
1666
- qr = qslerp (qeye (), q0 , s )
1668
+ qr = qslerp (qeye (), q0 , s , shortest = shortest )
1667
1669
else :
1668
1670
# TRINTERP(T0, T1, s)
1669
1671
q0 = r2q (start )
1670
1672
q1 = r2q (end )
1671
- qr = qslerp (q0 , q1 , s )
1673
+ qr = qslerp (q0 , q1 , s , shortest = shortest )
1672
1674
1673
1675
return q2r (qr )
1674
1676
@@ -1679,7 +1681,7 @@ def trinterp(start, end, s):
1679
1681
q0 = r2q (t2r (end ))
1680
1682
p0 = transl (end )
1681
1683
1682
- qr = qslerp (qeye (), q0 , s )
1684
+ qr = qslerp (qeye (), q0 , s , shortest = shortest )
1683
1685
pr = s * p0
1684
1686
else :
1685
1687
# TRINTERP(T0, T1, s)
@@ -1689,7 +1691,7 @@ def trinterp(start, end, s):
1689
1691
p0 = transl (start )
1690
1692
p1 = transl (end )
1691
1693
1692
- qr = qslerp (q0 , q1 , s )
1694
+ qr = qslerp (q0 , q1 , s , shortest = shortest )
1693
1695
pr = p0 * (1 - s ) + s * p1
1694
1696
1695
1697
return rt2tr (q2r (qr ), pr )
0 commit comments