-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy path05_cube_stack.py
More file actions
58 lines (47 loc) · 2.26 KB
/
05_cube_stack.py
File metadata and controls
58 lines (47 loc) · 2.26 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
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
#!/usr/bin/env python3
# Copyright (c) 2016-2017 Anki, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License in the file LICENSE.txt or at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
'''Make Cozmo stack Cubes.
This script is meant to show off how easy it is to do high level robot actions.
Cozmo will wait until he sees two Cubes, and then will pick up one and place it on the other.
He will pick up the first one he sees, and place it on the second one.
'''
import cozmo
def cozmo_program(robot: cozmo.robot.Robot):
# Attempt to stack 2 cubes
# Lookaround until Cozmo knows where at least 2 cubes are:
lookaround = robot.start_behavior(cozmo.behavior.BehaviorTypes.LookAroundInPlace)
cubes = robot.world.wait_until_observe_num_objects(num=2, object_type=cozmo.objects.LightCube, timeout=60)
lookaround.stop()
if len(cubes) < 2:
print("Error: need 2 Cubes but only found", len(cubes), "Cube(s)")
else:
# Try and pickup the 1st cube
current_action = robot.pickup_object(cubes[0], num_retries=3)
current_action.wait_for_completed()
if current_action.has_failed:
code, reason = current_action.failure_reason
result = current_action.result
print("Pickup Cube failed: code=%s reason='%s' result=%s" % (code, reason, result))
return
# Now try to place that cube on the 2nd one
current_action = robot.place_on_object(cubes[1], num_retries=3)
current_action.wait_for_completed()
if current_action.has_failed:
code, reason = current_action.failure_reason
result = current_action.result
print("Place On Cube failed: code=%s reason='%s' result=%s" % (code, reason, result))
return
print("Cozmo successfully stacked 2 blocks!")
cozmo.run_program(cozmo_program)