14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
|
def read_faces(simulating_cuber: manipulator.SimulatingCuber,
image_source: cv.ImageSource) -> List[np.ndarray]:
"""
Reads all six faces of the physical or simulated cube.
Args:
simulating_cuber: The simulating cuber
image_source: The image source to use
Returns:
Six images of the six faces of the cube, in order of appearance
"""
assert isinstance(simulating_cuber, manipulator.SimulatingCuber)
assert isinstance(image_source, cv.ImageSource)
face_images = []
def get_image(*args, **kwargs):
face_images.append(image_source.get_image())
get_image_instruction = manipulator.PythonInstruction('get_image', get_image)
manipulator.GripInstruction(False).execute()
initial_cube_state = manipulator.CubeState(
cube_is_gripped=False,
cube_coordinate_system=spatial.CoordinateSystem(),
grip_position=None
)
init_and_show_left = manipulator.SimulationProgram('init_and_show_left', initial_cube_state, initial_robot_joints=RoboDKInterface.robot.Joints())
init_and_show_left = simulating_cuber.move_to_idle(init_and_show_left)
factory = grip_target_generation.GripTargetFactory(
face_to_mount=grip_target_generation.GripperFace.MAIN,
num_rotations=1
)
init_and_show_left = simulating_cuber.enter_mount(factory, init_and_show_left, attach_after_entering=True)
init_and_show_left = simulating_cuber.exit_mount(init_and_show_left)
# show first three sides
simulating_cuber.move(RoboDKInterface.show_left_target, init_and_show_left)
init_and_show_left.append_instruction(get_image_instruction)
show_main = manipulator.SimulationProgram('show_main', parent=init_and_show_left, initial_robot_joints=init_and_show_left.final_robot_position())
simulating_cuber.move(RoboDKInterface.show_main_target, show_main)
show_main.append_instruction(get_image_instruction)
show_right = manipulator.SimulationProgram('show_right', parent=show_main, initial_robot_joints=show_main.final_robot_position())
simulating_cuber.move(RoboDKInterface.show_right_target, show_right)
show_right.append_instruction(get_image_instruction)
regrip_program = manipulator.SimulationProgram('regrip', parent=show_right, initial_robot_joints=show_right.final_robot_position())
# do a regrip
factory = grip_target_generation.GripTargetFactory(
face_to_mount=grip_target_generation.GripperFace.Y_NEGATIVE,
num_rotations=1
)
regrip_program = simulating_cuber.enter_mount(factory, regrip_program, prepare_linear=True)
regrip_program = simulating_cuber.exit_mount(regrip_program, detach_before_exiting=True)
regrip_program = simulating_cuber.move_to_idle(regrip_program)
factory = grip_target_generation.GripTargetFactory(
face_to_mount=grip_target_generation.GripperFace.GRIPPED_X_NEGATIVE,
num_rotations=-1
)
regrip_program = simulating_cuber.enter_mount(factory, regrip_program, attach_after_entering=True)
regrip_program = simulating_cuber.exit_mount(regrip_program)
# show last three sides
init_and_show_left = manipulator.SimulationProgram('init_and_show_left', parent=regrip_program, initial_robot_joints=regrip_program.final_robot_position())
simulating_cuber.move(RoboDKInterface.show_left_target, init_and_show_left)
init_and_show_left.append_instruction(get_image_instruction)
show_main = manipulator.SimulationProgram('show_main', parent=init_and_show_left, initial_robot_joints=init_and_show_left.final_robot_position())
simulating_cuber.move(RoboDKInterface.show_main_target, show_main)
show_main.append_instruction(get_image_instruction)
show_right = manipulator.SimulationProgram('show_right', parent=show_main, initial_robot_joints=show_main.final_robot_position())
simulating_cuber.move(RoboDKInterface.show_right_target, show_right)
show_right.append_instruction(get_image_instruction)
put_cube_back = manipulator.SimulationProgram('put_cube_back', parent=show_right, initial_robot_joints=show_right.final_robot_position())
# put the cube back to where it belongs :-)
factory = grip_target_generation.GripTargetFactory(
face_to_mount=grip_target_generation.GripperFace.MAIN,
num_rotations=0
)
put_cube_back = simulating_cuber.enter_mount(factory, put_cube_back, prepare_linear=True)
simulating_cuber.detach_cube(put_cube_back)
put_cube_back = simulating_cuber.move_to_idle(put_cube_back)
put_cube_back.execute()
return face_images
|