機器人最重要功能之一,除了說話之外,應該就是要能夠動一動吧。這一篇文章中就來看看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鍵離開控制程式喔。