Skip to content

Commit eb5f5b8

Browse files
mergify[bot]urfeex
andauthored
Check quaternions for equal dot_product instead of comparing their components individually (backport #1238) (#1243)
The lookup can result in quaternions that look different component-wise while still being very similar. Instead of comparing them component-wise to decide whether they are similar, we check whether their dot-product is equal to 1.0. That should be more robust. (cherry picked from commit fa82013) Co-authored-by: Felix Exner <[email protected]>
1 parent d382fa3 commit eb5f5b8

File tree

1 file changed

+9
-19
lines changed

1 file changed

+9
-19
lines changed

ur_robot_driver/test/integration_test_force_mode.py

Lines changed: 9 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,11 @@
6767
TIMEOUT_EXECUTE_TRAJECTORY = 30
6868

6969

70+
def are_quaternions_same(q1, q2, tolerance):
71+
dot_product = q1.x * q2.x + q1.y * q2.y + q1.z * q2.z + q1.w * q2.w
72+
return (abs(dot_product) - 1.0) < tolerance
73+
74+
7075
@pytest.mark.launch_test
7176
@launch_testing.parametrize(
7277
"tf_prefix",
@@ -205,25 +210,10 @@ def test_force_mode_controller(self, tf_prefix):
205210
trans_before.transform.translation.z,
206211
delta=0.001,
207212
)
208-
self.assertAlmostEqual(
209-
trans_after.transform.rotation.x,
210-
trans_before.transform.rotation.x,
211-
delta=0.01,
212-
)
213-
self.assertAlmostEqual(
214-
trans_after.transform.rotation.y,
215-
trans_before.transform.rotation.y,
216-
delta=0.01,
217-
)
218-
self.assertAlmostEqual(
219-
trans_after.transform.rotation.z,
220-
trans_before.transform.rotation.z,
221-
delta=0.01,
222-
)
223-
self.assertAlmostEqual(
224-
trans_after.transform.rotation.w,
225-
trans_before.transform.rotation.w,
226-
delta=0.01,
213+
self.assertTrue(
214+
are_quaternions_same(
215+
trans_after.transform.rotation, trans_before.transform.rotation, 0.001
216+
)
227217
)
228218

229219
res = self._force_mode_controller_interface.stop_force_mode()

0 commit comments

Comments
 (0)