Cozmo人工智慧機器人SDK使用筆記(5)-時序部分async_sync
Cozmo首先尋找一個立方體。 找到立方體後,立方體的燈以迴圈方式綠色閃爍,然後等待輕敲立方體。
此時,程式分別為同步和非同步兩種型別,注意區分。
1. 同步
立方體閃爍同步示例
import asyncio
import sys
import cozmo
class BlinkyCube(cozmo.objects.LightCube):
'''Subclass LightCube and add a light-chaser effect.'''
def __init__(self, *a, **kw):
super().__init__(*a, **kw)
self._chaser = None
def start_light_chaser(self):
'''Cycles the lights around the cube with 1 corner lit up green,
changing to the next corner every 0.1 seconds.
'''
if self._chaser:
raise ValueError("Light chaser already running")
async def _chaser():
while True:
for i in range(4):
cols = [cozmo.lights.off_light] * 4
cols[i] = cozmo.lights.green_light
self.set_light_corners(*cols)
await asyncio.sleep(0.1, loop=self._loop)
self._chaser = asyncio.ensure_future(_chaser(), loop=self._loop)
def stop_light_chaser(self):
if self._chaser:
self._chaser.cancel()
self._chaser = None
# Make sure World knows how to instantiate the subclass
cozmo.world.World.light_cube_factory = BlinkyCube
def cozmo_program(robot: cozmo.robot.Robot):
cube = None
look_around = robot.start_behavior(cozmo.behavior.BehaviorTypes.LookAroundInPlace)
try:
cube = robot.world.wait_for_observed_light_cube(timeout=60)
except asyncio.TimeoutError:
print("Didn't find a cube :-(")
return
finally:
look_around.stop()
cube.start_light_chaser()
try:
print("Waiting for cube to be tapped")
cube.wait_for_tap(timeout=10)
print("Cube tapped")
except asyncio.TimeoutError:
print("No-one tapped our cube :-(")
finally:
cube.stop_light_chaser()
cube.set_lights_off()
cozmo.run_program(cozmo_program)
2. 非同步
立方體閃爍非同步示例
注意註釋(效果相似但實現過程有差異):
The async equivalent of 01_cube_blinker_sync.
The usage of ``async def`` makes the cozmo_program method a coroutine.
Within a coroutine, ``await`` can be used. With ``await``, the statement
blocks until the request being waited for has completed. Meanwhile
the event loop continues in the background.For instance, the statement
``await robot.world.wait_for_observed_light_cube(timeout=60)``
blocks until Cozmo discovers a light cube or the 60 second timeout
elapses, whichever occurs first.Likewise, the statement ``await cube.wait_for_tap(timeout=10)``
blocks until the tap event is received or the 10 second timeout occurs,
whichever occurs first.For more information, see
https://docs.python.org/3/library/asyncio-task.html
import asyncio
import sys
import cozmo
class BlinkyCube(cozmo.objects.LightCube):
'''Subclass LightCube and add a light-chaser effect.'''
def __init__(self, *a, **kw):
super().__init__(*a, **kw)
self._chaser = None
def start_light_chaser(self):
'''Cycles the lights around the cube with 1 corner lit up green,
changing to the next corner every 0.1 seconds.
'''
if self._chaser:
raise ValueError("Light chaser already running")
async def _chaser():
while True:
for i in range(4):
cols = [cozmo.lights.off_light] * 4
cols[i] = cozmo.lights.green_light
self.set_light_corners(*cols)
await asyncio.sleep(0.1, loop=self._loop)
self._chaser = asyncio.ensure_future(_chaser(), loop=self._loop)
def stop_light_chaser(self):
if self._chaser:
self._chaser.cancel()
self._chaser = None
# Make sure World knows how to instantiate the subclass
cozmo.world.World.light_cube_factory = BlinkyCube
async def cozmo_program(robot: cozmo.robot.Robot):
'''The async equivalent of 01_cube_blinker_sync.
The usage of ``async def`` makes the cozmo_program method a coroutine.
Within a coroutine, ``await`` can be used. With ``await``, the statement
blocks until the request being waited for has completed. Meanwhile
the event loop continues in the background.
For instance, the statement
``await robot.world.wait_for_observed_light_cube(timeout=60)``
blocks until Cozmo discovers a light cube or the 60 second timeout
elapses, whichever occurs first.
Likewise, the statement ``await cube.wait_for_tap(timeout=10)``
blocks until the tap event is received or the 10 second timeout occurs,
whichever occurs first.
For more information, see
https://docs.python.org/3/library/asyncio-task.html
'''
cube = None
look_around = robot.start_behavior(cozmo.behavior.BehaviorTypes.LookAroundInPlace)
try:
cube = await robot.world.wait_for_observed_light_cube(timeout=60)
except asyncio.TimeoutError:
print("Didn't find a cube :-(")
return
finally:
look_around.stop()
cube.start_light_chaser()
try:
print("Waiting for cube to be tapped")
await cube.wait_for_tap(timeout=10)
print("Cube tapped")
except asyncio.TimeoutError:
print("No-one tapped our cube :-(")
finally:
cube.stop_light_chaser()
cube.set_lights_off()
cozmo.run_program(cozmo_program)
Fin
相關文章
- Cozmo人工智慧機器人SDK使用筆記(1)-基礎部分basics人工智慧機器人筆記
- Cozmo人工智慧機器人SDK使用筆記(3)-視覺部分vision人工智慧機器人筆記視覺
- Cozmo人工智慧機器人SDK使用筆記(2)-顯示部分face人工智慧機器人筆記
- Cozmo人工智慧機器人SDK使用筆記(9)-判斷部分if_this_then_that人工智慧機器人筆記
- Cozmo人工智慧機器人SDK使用筆記(8)-應用部分apps人工智慧機器人筆記APP
- Cozmo人工智慧機器人SDK使用筆記(4)-任務部分cubes_and_objects人工智慧機器人筆記Object
- Cozmo人工智慧機器人SDK使用筆記(6)-並行部分Parallel_Action人工智慧機器人筆記並行Parallel
- Cozmo人工智慧機器人SDK使用筆記(7)-補充說明人工智慧機器人筆記
- Vector人工智慧機器人SDK使用筆記人工智慧機器人筆記
- Cozmo人工智慧機器人SDK使用筆記(X)-總結- |人工智慧基礎(中小學版)實踐平臺|人工智慧機器人筆記
- Anki Cozmo(Vector)人工智慧機器人玩具部分文件人工智慧機器人
- ROS2GO之手機連線Cozmo人工智慧機器人玩具ROSGo人工智慧機器人
- Cozmo機器人使用中文Scratch3程式設計案例(codelab)機器人程式設計
- Tello無人機的使用筆記之dji-sdk/Tello-Python無人機筆記Python
- Cozmo機器人脫離智慧手機使用的不完全攻略機器人
- ROS2GO+Cozmo=口袋機器人之人工智慧模擬和實驗平臺ROSGo機器人人工智慧
- 讀人工智慧時代與人類未來筆記06_機器學習的力量人工智慧筆記機器學習
- 【機器學習】支援向量機(個人筆記)機器學習筆記
- 讀人工智慧時代與人類未來筆記04_理性時代人工智慧筆記
- 關於聊天機器人的閱讀筆記機器人筆記
- 讀人工智慧時代與人類未來筆記05_現代人工智慧人工智慧筆記
- 讀人工智慧時代與人類未來筆記14_管控人工智慧人工智慧筆記
- 讀人工智慧時代與人類未來筆記17_人類未來人工智慧筆記
- Cozmo人工智慧機器人玩具/教具完整版中文說明書和介紹(附應用下載連結)人工智慧機器人
- 《深入理解Java虛擬機器》個人筆記Java虛擬機筆記
- 人工智慧時代,搶你工作崗位的不是別人,就是機器人人工智慧機器人
- 讀人工智慧時代與人類未來筆記03_演變人工智慧筆記
- 讀人工智慧時代與人類未來筆記07_人工智慧往何處去人工智慧筆記
- Git筆記-部分命令Git筆記
- 讀人工智慧時代與人類未來筆記01_重塑人類社會秩序人工智慧筆記
- 讀人工智慧時代與人類未來筆記15_改變人類經驗人工智慧筆記
- Vector人工智慧情感機器人SDK釋出和說明(ROS2GO 2.0 + Vector 2.0)人工智慧機器人ROSGo
- 機器學習演算法筆記之5:支援向量機SVM機器學習演算法筆記
- 讀人工智慧時代與人類未來筆記11_地緣政治人工智慧筆記
- 讀人工智慧時代與人類未來筆記18_國際秩序人工智慧筆記
- 讀人工智慧時代與人類未來筆記13_網路武器人工智慧筆記
- 機器學習筆記機器學習筆記
- redis個人原始碼分析筆記5---RDB持久化機制Redis原始碼筆記持久化