Skip to content
Snippets Groups Projects
Commit 12eebef5 authored by Florent Lamiraux's avatar Florent Lamiraux
Browse files

Use se3.py for homogeneous matrix computations

    * src/dynamic_graph/sot/dynamics/parser.py.
parent 3d0d05e2
No related branches found
No related tags found
1 merge request!1[major][cpp] starting point to integrate pinocchio
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
import xml.dom.minidom as dom import xml.dom.minidom as dom
from dynamic_graph.sot.dynamics.dynamic import Dynamic from dynamic_graph.sot.dynamics.dynamic import Dynamic
from dynamic_graph.sot import SE3, R3, SO3
class Parser (object): class Parser (object):
""" """
...@@ -282,36 +283,16 @@ class Parser (object): ...@@ -282,36 +283,16 @@ class Parser (object):
symmetric with respect to plane (xz) in global frame. symmetric with respect to plane (xz) in global frame.
""" """
# input vector expressed in global frame # input vector expressed in global frame
vector = vector + (1.,) vector = R3(vector)
globalLeftVector = mv_mul(self.leftWristPosition, vector) globalLeftVector = SE3(self.leftWristPosition) * vector
globalRightVector = list(globalLeftVector[:]) globalRightVector = R3(globalLeftVector)
globalRightVector[1] *= -1. globalRightVector = R3(globalRightVector[0],
output = mv_mul(inverseHomogeneous(self.rightWristPosition), -globalRightVector[1],
globalRightVector) globalRightVector[2])
return output[:3] output = SE3(self.rightWristPosition).inverse()*globalRightVector
return tuple(output)
def mv_mul(matrix, vector):
""" if __name__ == '__main__':
Matrix vector multiplication p = Parser('dynNao', '/home/florent/devel/nao/model/nao-hpp.kxml')
""" dynNao = p.parse()
return tuple(map(lambda l: inner_prod(l,vector), matrix)) dynNao.write('/home/florent/tmp/nao2.out')
def inner_prod(v1, v2):
"""
Compute the inner product of two vectors
"""
return reduce(lambda x, y: x + y[0]*y[1], zip(v1,v2),0)
def inverseHomogeneous(matrix):
"""
Compute the inverse of an homogeneous matrix
"""
rotation = map(lambda l:l[:3], matrix[:3])
# transpose
invRot = tuple(zip(*rotation))
# translation part
t = map (lambda l:l[3], matrix[:3])
invRot_by_t = mv_mul(invRot, t)
inverse = map(lambda x : list(x[0])+[-x[1]], zip(invRot, invRot_by_t))
inverse.append((0.,0.,0.,1.))
return tuple(map(tuple, inverse))
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment