前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Cozmo人工智能机器人SDK使用笔记(6)-并行部分Parallel_Action

Cozmo人工智能机器人SDK使用笔记(6)-并行部分Parallel_Action

作者头像
zhangrelay
发布2019-01-31 16:05:06
3630
发布2019-01-31 16:05:06
举报

Cozmo并行动作示例。

此示例演示如何并行(而不是按顺序)执行动作。


代码语言:javascript
复制
import sys
import time

try:
    from PIL import Image
except ImportError:
    sys.exit("Cannot import from PIL: Do `pip3 install --user Pillow` to install")

import cozmo
from cozmo.util import degrees, distance_mm, speed_mmps


# load an image to display on Cozmo's face
face_image = Image.open("../../face_images/cozmosdk.png")
# resize to fit on Cozmo's face screen
face_image = face_image.resize(cozmo.oled_face.dimensions(), Image.BICUBIC)
# convert the image to the format used by the oled screen
face_image = cozmo.oled_face.convert_image_to_screen_data(face_image,
                                                          invert_image=True)


def example1_lift_head(robot: cozmo.robot.Robot):
    cozmo.logger.info("----------------------------------------")
    cozmo.logger.info("Example 1: Move Lift and Head in Parallel")
    cozmo.logger.info("First, move the lift and head down, in sequence.")
    robot.set_head_angle(cozmo.robot.MIN_HEAD_ANGLE).wait_for_completed()
    robot.set_lift_height(0.0).wait_for_completed()

    cozmo.logger.info("Now, move the lift and head back up, in parallel "
                      "- we no longer have to wait for the 1st action to complete "
                      "before starting the 2nd one because the 2nd action is in_parallel")
    action1 = robot.set_head_angle(cozmo.robot.MAX_HEAD_ANGLE)
    action2 = robot.set_lift_height(1.0, in_parallel=True)
    action1.wait_for_completed()
    action2.wait_for_completed()
    cozmo.logger.info("action1 = %s", action1)
    cozmo.logger.info("action2 = %s", action2)


def example2_conflicting_actions(robot: cozmo.robot.Robot):
    cozmo.logger.info("----------------------------------------")
    cozmo.logger.info("Example 2: Conflicting actions.")
    cozmo.logger.info("Try to drive straight and turn in parallel. This is not "
          "allowed, as both actions require use of the wheels, so the 2nd action "
          "will report failure due to tracks_locked.")
    action1 = robot.drive_straight(distance_mm(50), speed_mmps(25), should_play_anim=False, in_parallel=True)
    action2 = robot.turn_in_place(degrees(90), in_parallel=True)
    action2.wait_for_completed()
    cozmo.logger.info("action2 = %s", action2)
    action1.wait_for_completed()
    cozmo.logger.info("action1 = %s", action1)


def example3_abort_one_action(robot: cozmo.robot.Robot):
    cozmo.logger.info("----------------------------------------")
    cozmo.logger.info("Example 3: Abort some parallel actions.")
    cozmo.logger.info("Start multiple parallel actions:")
    action1 = robot.set_lift_height(0.0, in_parallel=True)
    action2 = robot.set_head_angle(cozmo.robot.MIN_HEAD_ANGLE, duration=6.0, in_parallel=True)
    action3 = robot.drive_straight(distance_mm(75), speed_mmps(25), should_play_anim=False, in_parallel=True)
    action4 = robot.display_oled_face_image(face_image, 30000.0)  # Note: face image is in_parallel by default
    # Lift-lowering is aborted immediately
    action1.abort(log_abort_messages=True)
    # Head-lowering is aborted shortly afterwards
    time.sleep(0.1)
    action2.abort(log_abort_messages=True)
    # Image on Cozmo's face is aborted another 2 seconds later
    time.sleep(2)
    action4.abort(log_abort_messages=True)
    # We wait for the one remaining action to complete
    action3.wait_for_completed()
    # Only action3 should succeed (as long as Cozmo had enough space to drive)
    cozmo.logger.info("action1 = %s", action1)
    cozmo.logger.info("action2 = %s", action2)
    cozmo.logger.info("action3 = %s", action3)
    cozmo.logger.info("action4 = %s", action4)


def example4_abort_all_actions(robot: cozmo.robot.Robot):
    cozmo.logger.info("----------------------------------------")
    cozmo.logger.info("Example 4: Abort all parallel actions.")
    cozmo.logger.info("Start multiple parallel actions:")
    action1 = robot.set_lift_height(0.0, in_parallel=True, duration=6.0)
    action2 = robot.set_head_angle(cozmo.robot.MAX_HEAD_ANGLE, duration=6.0, in_parallel=True)
    action3 = robot.drive_straight(distance_mm(75), speed_mmps(25), should_play_anim=False, in_parallel=True)
    action4 = robot.display_oled_face_image(face_image, 30000.0)  # Note: face image is in_parallel by default
    # wait two seconds and abort everything
    time.sleep(2)
    robot.abort_all_actions(log_abort_messages=True)
    # wait for results to come back for all actions
    robot.wait_for_all_actions_completed()
    # All actions should have aborted
    cozmo.logger.info("action1 res = %s", action1)
    cozmo.logger.info("action2 res = %s", action2)
    cozmo.logger.info("action3 res = %s", action3)
    cozmo.logger.info("action4 res = %s", action4)


def cozmo_program(robot: cozmo.robot.Robot):
    example1_lift_head(robot)
    example2_conflicting_actions(robot)
    example3_abort_one_action(robot)
    example4_abort_all_actions(robot)
    cozmo.logger.info("----------------------------------------")


cozmo.run_program(cozmo_program)

Fin


本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019年01月28日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档