讓Zenbo Junior開始動一動

機器人最重要功能之一,除了說話之外,應該就是要能夠動一動吧。這一篇文章中就來看看Zenbo Python SDK中提供了哪些可以控制移動的函式。

其中最重要的就是這個:

在SDK的說明文件中,提供了move_body這個函式,它可以讓Zenbo Junior移動指定的距離,以x, y軸設定,可以同時設定,也可以分開設定。同時,也可以設定轉動的角度以及移動的速度。以下是一個讓Zenbo Junior可以進行繞圈圈的程式:

import pyzenbo
import time
from pyzenbo.modules.dialog_system import RobotFace

host = '192.168.1.104'
sdk = pyzenbo.connect(host)
sdk.robot.speak("出發!")
for i in range(4):
    sdk.motion.move_body(0.3, 0, -90, 1, True, 10)
sdk.robot.set_expression(RobotFace.HIDEFACE) 
sdk.release()

上述的這個程式利用move_body函式執行的往前移動30公分,然後向右轉動90度的作業連續4次,如此即可在原地繞著一個四方形進行走動。當然,如果要轉更多角度的話,也是可以的,請參考以下這個程式:

import pyzenbo
import time
from pyzenbo.modules.dialog_system import RobotFace

host = '192.168.1.104'
sdk = pyzenbo.connect(host)
sdk.robot.speak("出發!")
for i in range(10):
    sdk.motion.move_body(0.1, 0, -36, 1, True, 10)
sdk.robot.set_expression(RobotFace.HIDEFACE) 
sdk.release()

上面這個程式在一圈中總共轉動了10次。

Zenbo也有一些內建的預設動態展示可以使用,放在utility模組中,請參考以下的表演程式:

import pyzenbo, time
from pyzenbo.modules.dialog_system import RobotFace

host = '192.168.1.104'
sdk = pyzenbo.connect(host)

sdk.robot.set_expression(RobotFace.PLEASED, "我要開始表演囉")
sdk.wheelLights.start_glowing_yoyo(0, 1, True, 100)
sdk.utility.play_action(15, True, 100)
sdk.wheelLights.turn_off(0)
sdk.robot.set_expression(RobotFace.PLEASED, "表演結束,謝謝收看")
sdk.robot.set_expression(RobotFace.HIDEFACE) 
sdk.release()

除了使用預設的路徑來移動之外,我們也可以利用Python的pynput模組,取得電腦的按鍵資訊,進行即時的移動控制,請參考以下這段程式碼:

import pyzenbo
from pynput import keyboard

from pyzenbo.modules.dialog_system import RobotFace

host = '192.168.1.104'
sdk = pyzenbo.connect(host)

def on_press(key):
    if key == keyboard.Key.esc:
        listener.stop()
        sdk.robot.set_expression(RobotFace.HIDEFACE) 
        sdk.release()

    else:
        if key == keyboard.Key.up:
            sdk.motion.move_body(0.1, 0, 0, 1, True, 10)
        elif key == keyboard.Key.down:
            sdk.motion.move_body(-0.1, 0, 0, 1, True, 10)
        elif key == keyboard.Key.left:
            sdk.motion.move_body(0, 0, 10, 1, True, 10)
        elif key == keyboard.Key.right:
            sdk.motion.move_body(0, 0, -10, 1, True, 10)
    

listener = keyboard.Listener(on_press=on_press)
listener.start()
listener.join()

這個程式可以接收方向鍵用來控制Zenbo的前進、後退、以及左轉及右轉。不過因為按鈕的速度較快,Zenbo的反應較慢,所以不能一次按著按鍵不放,不然Zenbo會有很長一段時間做同樣的動作不再理你喔。

下面這個程式利用remote_control_body來達成可以連續移動的控制,有興趣的同學也可以執行看看,比較上下兩個程式不同的地方。

import pyzenbo
from pynput import keyboard

from pyzenbo.modules.dialog_system import RobotFace

host = '192.168.1.104'
sdk = pyzenbo.connect(host)

def on_press(key):
    if key == keyboard.Key.esc:
        listener.stop()
        sdk.robot.set_expression(RobotFace.HIDEFACE) 
        sdk.release()

    else:
        if key == keyboard.Key.up:
            sdk.motion.remote_control_body(0)
            sdk.motion.remote_control_body(1)
        elif key == keyboard.Key.down:
            sdk.motion.remote_control_body(0)
            sdk.motion.remote_control_body(2)
        elif key == keyboard.Key.left:
            sdk.motion.remote_control_body(0)
            sdk.motion.remote_control_body(3)
        elif key == keyboard.Key.right:
            sdk.motion.remote_control_body(0)
            sdk.motion.remote_control_body(4)
        elif key == keyboard.Key.space:
            sdk.motion.remote_control_body(0)

listener = keyboard.Listener(on_press=on_press)
listener.start()
listener.join()

請使用方向鍵進行控制,並可使用Esc鍵離開控制程式喔。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *