BerkeleyAutomation / autolab_core

Core utilities for Berkeley AutoLab.
https://berkeleyautomation.github.io/autolab_core
Apache License 2.0
80 stars 39 forks source link

more efficient rigid transform inverse #19

Closed mjd3 closed 5 years ago

mjd3 commented 5 years ago

Ran the following for testing accuracy/speed of each method (inverse() is current inverse method, inverse2() is proposed method):

import numpy as np
import timeit
from autolab_core import RigidTransform

loops = 10000
print('inverse(), {} loops: {:.6f} s per loop'.format(loops,
      timeit.timeit('RigidTransform(rotation=RigidTransform.random_rotation(), translation=RigidTransform.random_translation()).inverse()', 
      setup="from __main__ import RigidTransform", number=loops)/loops))
print('inverse2(), {} loops: {:.6f} s per loop'.format(loops,
      timeit.timeit('RigidTransform(rotation=RigidTransform.random_rotation(), translation=RigidTransform.random_translation()).inverse2()', 
      setup="from __main__ import RigidTransform", number=loops)/loops))

same = np.zeros(loops, dtype=np.uint8)
for i in range(loops):
    A = RigidTransform(rotation=RigidTransform.random_rotation(), translation=RigidTransform.random_translation())
    same[i] = np.allclose(A.inverse().matrix, A.inverse2().matrix)

print(np.all(same))

Here is the output:

inverse() 10000 loops: 0.000129 s per loop
inverse2() 10000 loops: 0.000063 s per loop
True