Skip to content

Commit 8aa521c

Browse files
committed
Add and fix send_goal_positions tests
1 parent 7a20813 commit 8aa521c

File tree

3 files changed

+176
-13
lines changed

3 files changed

+176
-13
lines changed

Diff for: src/reachy2_sdk/grippers/parallel_gripper.py

+1-13
Original file line numberDiff line numberDiff line change
@@ -173,22 +173,10 @@ def _get_goal_positions_message(self) -> Optional[HandPositionRequest]:
173173
)
174174
),
175175
)
176+
self._joints["finger"]._is_moving = True
176177
return command
177178
return None
178179

179-
def send_goal_positions(self, check_positions: bool = True) -> None:
180-
"""Send the goal position to the actuator's joints.
181-
182-
If any goal position has been specified to the gripper, sends them to the robot.
183-
If the hand is off, the command is not sent.
184-
185-
Args :
186-
check_positions: A boolean indicating whether to check the positions after sending the command.
187-
Defaults to True.
188-
"""
189-
super().send_goal_positions(check_positions)
190-
self._joints["finger"]._is_moving = True
191-
192180
def goto_posture(
193181
self,
194182
common_posture: str = "default",

Diff for: tests/units/online/conftest.py

+1
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ def reachy_sdk() -> ReachySDK:
3131
@pytest.fixture
3232
def reachy_sdk_zeroed(reachy_sdk: ReachySDK) -> ReachySDK:
3333
reachy_sdk.cancel_all_goto()
34+
reachy_sdk.turn_on()
3435
for joint in reachy_sdk.joints.values():
3536
joint.goal_position = 0
3637
reachy_sdk.send_goal_positions()

Diff for: tests/units/online/test_send_goal_positions.py

+174
Original file line numberDiff line numberDiff line change
@@ -73,9 +73,12 @@ def test_reachy_send_goal_positions(reachy_sdk_zeroed: ReachySDK) -> None:
7373
assert np.isclose(reachy_sdk_zeroed.head.r_antenna.present_position, 27, 1e-03)
7474
assert np.isclose(reachy_sdk_zeroed.r_arm.gripper.present_position, r_gripper_present_positions, 1e-03)
7575
assert np.isclose(reachy_sdk_zeroed.l_arm.gripper.present_position, 68, 1e-03)
76+
assert reachy_sdk_zeroed.l_arm.gripper.is_moving()
7677

7778
reachy_sdk_zeroed.r_arm.turn_off()
7879

80+
assert not reachy_sdk_zeroed.l_arm.gripper.is_moving()
81+
7982
reachy_sdk_zeroed.r_arm.shoulder.roll.goal_position = -7
8083
reachy_sdk_zeroed.r_arm.elbow.pitch.goal_position = -30
8184
reachy_sdk_zeroed.l_arm.shoulder.pitch.goal_position = 8
@@ -173,12 +176,183 @@ def test_arm_send_goal_positions(reachy_sdk_zeroed: ReachySDK) -> None:
173176
assert np.isclose(reachy_sdk_zeroed.l_arm.shoulder.roll.present_position, l_arm_present_positions[1], 1e-03)
174177
assert np.isclose(reachy_sdk_zeroed.l_arm.wrist.pitch.present_position, 8, 1e-03)
175178
assert np.isclose(reachy_sdk_zeroed.l_arm.gripper.present_position, 9, 1e-03)
179+
assert reachy_sdk_zeroed.l_arm.gripper.is_moving()
176180

177181
reachy_sdk_zeroed.l_arm.gripper.turn_off()
178182
time.sleep(0.1)
179183

184+
assert not reachy_sdk_zeroed.l_arm.gripper.is_moving()
180185
reachy_sdk_zeroed.l_arm.gripper.goal_position = 110
181186
reachy_sdk_zeroed.l_arm.send_goal_positions()
182187
time.sleep(0.1)
183188

184189
assert np.isclose(reachy_sdk_zeroed.l_arm.gripper.present_position, 9, 1e-03)
190+
191+
192+
@pytest.mark.online
193+
def test_head_send_goal_positions(reachy_sdk_zeroed: ReachySDK) -> None:
194+
reachy_sdk_zeroed.head.neck.pitch.goal_position = 20
195+
reachy_sdk_zeroed.head.neck.roll.goal_position = 10
196+
reachy_sdk_zeroed.head.neck.yaw.goal_position = -5
197+
reachy_sdk_zeroed.head.l_antenna.goal_position = 27
198+
reachy_sdk_zeroed.head.r_antenna.goal_position = 33
199+
200+
reachy_sdk_zeroed.head.send_goal_positions()
201+
time.sleep(0.1)
202+
203+
assert np.isclose(reachy_sdk_zeroed.head.neck.pitch.present_position, 20, 1e-03)
204+
assert np.isclose(reachy_sdk_zeroed.head.neck.roll.present_position, 10, 1e-03)
205+
assert np.isclose(reachy_sdk_zeroed.head.neck.yaw.present_position, -5, 1e-03)
206+
assert np.isclose(reachy_sdk_zeroed.head.l_antenna.present_position, 27, 1e-03)
207+
assert np.isclose(reachy_sdk_zeroed.head.r_antenna.present_position, 33, 1e-03)
208+
209+
reachy_sdk_zeroed.head.neck.turn_off()
210+
time.sleep(0.1)
211+
reachy_sdk_zeroed.head.neck.pitch.goal_position = 30
212+
reachy_sdk_zeroed.head.neck.roll.goal_position = 20
213+
reachy_sdk_zeroed.head.neck.yaw.goal_position = 10
214+
reachy_sdk_zeroed.head.l_antenna.goal_position = 37
215+
reachy_sdk_zeroed.head.r_antenna.goal_position = 43
216+
217+
reachy_sdk_zeroed.head.send_goal_positions()
218+
time.sleep(0.1)
219+
220+
assert np.isclose(reachy_sdk_zeroed.head.neck.pitch.present_position, 20, 1e-03)
221+
assert np.isclose(reachy_sdk_zeroed.head.neck.roll.present_position, 10, 1e-03)
222+
assert np.isclose(reachy_sdk_zeroed.head.neck.yaw.present_position, -5, 1e-03)
223+
assert np.isclose(reachy_sdk_zeroed.head.l_antenna.present_position, 37, 1e-03)
224+
assert np.isclose(reachy_sdk_zeroed.head.r_antenna.present_position, 43, 1e-03)
225+
226+
reachy_sdk_zeroed.head.neck.turn_on()
227+
time.sleep(0.1)
228+
reachy_sdk_zeroed.head.neck.pitch.goal_position = 40
229+
230+
reachy_sdk_zeroed.head.send_goal_positions()
231+
time.sleep(0.1)
232+
233+
assert np.isclose(reachy_sdk_zeroed.head.neck.pitch.present_position, 40, 1e-03)
234+
assert np.isclose(reachy_sdk_zeroed.head.neck.roll.present_position, 10, 1e-03)
235+
assert np.isclose(reachy_sdk_zeroed.head.neck.yaw.present_position, -5, 1e-03)
236+
assert np.isclose(reachy_sdk_zeroed.head.l_antenna.present_position, 37, 1e-03)
237+
assert np.isclose(reachy_sdk_zeroed.head.r_antenna.present_position, 43, 1e-03)
238+
239+
240+
@pytest.mark.online
241+
def test_orbita_send_goal_positions(reachy_sdk_zeroed: ReachySDK) -> None:
242+
r_arm_present_positions = reachy_sdk_zeroed.r_arm.get_current_positions()
243+
244+
reachy_sdk_zeroed.r_arm.shoulder.pitch.goal_position = 20
245+
reachy_sdk_zeroed.r_arm.shoulder.roll.goal_position = -10
246+
reachy_sdk_zeroed.r_arm.elbow.pitch.goal_position = -50
247+
248+
reachy_sdk_zeroed.r_arm.shoulder.send_goal_positions()
249+
time.sleep(0.1)
250+
251+
assert np.isclose(reachy_sdk_zeroed.r_arm.shoulder.pitch.present_position, 20, 1e-03)
252+
assert np.isclose(reachy_sdk_zeroed.r_arm.shoulder.roll.present_position, -10, 1e-03)
253+
assert np.isclose(reachy_sdk_zeroed.r_arm.elbow.pitch.present_position, r_arm_present_positions[3], 1e-03)
254+
255+
reachy_sdk_zeroed.r_arm.elbow.send_goal_positions()
256+
time.sleep(0.1)
257+
258+
assert np.isclose(reachy_sdk_zeroed.r_arm.shoulder.pitch.present_position, 20, 1e-03)
259+
assert np.isclose(reachy_sdk_zeroed.r_arm.shoulder.roll.present_position, -10, 1e-03)
260+
assert np.isclose(reachy_sdk_zeroed.r_arm.elbow.pitch.present_position, -50, 1e-03)
261+
assert np.isclose(reachy_sdk_zeroed.r_arm.elbow.yaw.present_position, r_arm_present_positions[2], 1e-03)
262+
263+
reachy_sdk_zeroed.head.neck.pitch.goal_position = 3
264+
reachy_sdk_zeroed.head.neck.roll.goal_position = 5
265+
reachy_sdk_zeroed.head.neck.yaw.goal_position = 7
266+
267+
l_arm_present_positions = reachy_sdk_zeroed.l_arm.get_current_positions()
268+
reachy_sdk_zeroed.l_arm.wrist.roll.goal_position = 6
269+
270+
reachy_sdk_zeroed.head.neck.send_goal_positions()
271+
time.sleep(0.1)
272+
273+
assert np.isclose(reachy_sdk_zeroed.head.neck.pitch.present_position, 3, 1e-03)
274+
assert np.isclose(reachy_sdk_zeroed.head.neck.roll.present_position, 5, 1e-03)
275+
assert np.isclose(reachy_sdk_zeroed.head.neck.yaw.present_position, 7, 1e-03)
276+
assert np.isclose(reachy_sdk_zeroed.l_arm.wrist.roll.present_position, l_arm_present_positions[4], 1e-03)
277+
278+
reachy_sdk_zeroed.l_arm.wrist.send_goal_positions()
279+
time.sleep(0.1)
280+
281+
assert np.isclose(reachy_sdk_zeroed.l_arm.wrist.roll.present_position, 6, 1e-03)
282+
assert np.isclose(reachy_sdk_zeroed.l_arm.wrist.pitch.present_position, l_arm_present_positions[5], 1e-03)
283+
assert np.isclose(reachy_sdk_zeroed.l_arm.wrist.yaw.present_position, l_arm_present_positions[6], 1e-03)
284+
285+
reachy_sdk_zeroed.r_arm.turn_off()
286+
time.sleep(0.1)
287+
r_arm_present_positions = reachy_sdk_zeroed.r_arm.get_current_positions()
288+
reachy_sdk_zeroed.r_arm.shoulder.pitch.goal_position = 2
289+
290+
reachy_sdk_zeroed.r_arm.shoulder.send_goal_positions()
291+
time.sleep(0.1)
292+
293+
assert np.isclose(reachy_sdk_zeroed.r_arm.shoulder.pitch.present_position, r_arm_present_positions[0], 1e-03)
294+
assert np.isclose(reachy_sdk_zeroed.r_arm.shoulder.roll.present_position, r_arm_present_positions[1], 1e-03)
295+
296+
297+
@pytest.mark.online
298+
def test_gripper_send_goal_positions(reachy_sdk_zeroed: ReachySDK) -> None:
299+
l_gripper_present_position = reachy_sdk_zeroed.l_arm.gripper.present_position
300+
301+
reachy_sdk_zeroed.r_arm.gripper.goal_position = 68
302+
reachy_sdk_zeroed.l_arm.gripper.goal_position = 110
303+
304+
reachy_sdk_zeroed.r_arm.gripper.send_goal_positions()
305+
time.sleep(0.1)
306+
307+
assert np.isclose(reachy_sdk_zeroed.r_arm.gripper.present_position, 68, 1e-03)
308+
assert np.isclose(reachy_sdk_zeroed.l_arm.gripper.present_position, l_gripper_present_position, 1e-03)
309+
assert reachy_sdk_zeroed.r_arm.gripper.is_moving()
310+
311+
reachy_sdk_zeroed.l_arm.gripper.send_goal_positions()
312+
time.sleep(0.1)
313+
314+
assert np.isclose(reachy_sdk_zeroed.r_arm.gripper.present_position, 68, 1e-03)
315+
assert np.isclose(reachy_sdk_zeroed.l_arm.gripper.present_position, 110, 1e-03)
316+
assert not reachy_sdk_zeroed.r_arm.gripper.is_moving()
317+
assert reachy_sdk_zeroed.l_arm.gripper.is_moving()
318+
319+
reachy_sdk_zeroed.r_arm.gripper.turn_off()
320+
time.sleep(0.1)
321+
r_gripper_present_position = reachy_sdk_zeroed.r_arm.gripper.present_position
322+
assert not reachy_sdk_zeroed.l_arm.gripper.is_moving()
323+
324+
reachy_sdk_zeroed.r_arm.gripper.goal_position = 80
325+
reachy_sdk_zeroed.r_arm.gripper.send_goal_positions()
326+
time.sleep(0.1)
327+
328+
assert np.isclose(reachy_sdk_zeroed.r_arm.gripper.present_position, r_gripper_present_position, 1e-03)
329+
330+
331+
@pytest.mark.online
332+
def test_antenna_send_goal_positions(reachy_sdk_zeroed: ReachySDK) -> None:
333+
r_antenna_present_position = reachy_sdk_zeroed.head.r_antenna.present_position
334+
reachy_sdk_zeroed.head.l_antenna.goal_position = 27
335+
reachy_sdk_zeroed.head.r_antenna.goal_position = 33
336+
337+
reachy_sdk_zeroed.head.l_antenna.send_goal_positions()
338+
time.sleep(0.1)
339+
340+
assert np.isclose(reachy_sdk_zeroed.head.l_antenna.present_position, 27, 1e-03)
341+
assert np.isclose(reachy_sdk_zeroed.head.r_antenna.present_position, r_antenna_present_position, 1e-03)
342+
343+
reachy_sdk_zeroed.head.r_antenna.turn_off()
344+
time.sleep(0.1)
345+
346+
reachy_sdk_zeroed.head.r_antenna.goal_position = 37
347+
reachy_sdk_zeroed.head.r_antenna.send_goal_positions()
348+
time.sleep(0.1)
349+
350+
assert np.isclose(reachy_sdk_zeroed.head.r_antenna.present_position, r_antenna_present_position, 1e-03)
351+
352+
reachy_sdk_zeroed.head.r_antenna.turn_on()
353+
time.sleep(0.1)
354+
355+
reachy_sdk_zeroed.head.r_antenna.send_goal_positions()
356+
time.sleep(0.1)
357+
358+
assert np.isclose(reachy_sdk_zeroed.head.r_antenna.present_position, 37, 1e-03)

0 commit comments

Comments
 (0)