Pi2Go - 将机器人移动 90º 或向前移动 10 厘米并停止?



我买了一个pi2go机器人,它太棒了,但我有一些问题,我想做机器人

  1. 左/向右旋转 90º 并停止
  2. 前/向后移动仅 10 厘米并停止

我想用python做4个脚本,只是为了像left.py一样做这个,forward.py

在pi2go帮助文件中,有一个脚本允许您使用键盘控制机器人,但我不希望我只想调用例如sudo python left.py一次然后退出。

这是pi2go的例子:

import pi2go, time
import sys
import tty
import termios
UP = 0
DOWN = 1
RIGHT = 2
LEFT = 3
def readchar():
    fd = sys.stdin.fileno()
    old_settings = termios.tcgetattr(fd)
    try:
        tty.setraw(sys.stdin.fileno())
        ch = sys.stdin.read(1)
    finally:
        termios.tcsetattr(fd, termios.TCSADRAIN, old_settings)
    if ch == '0x03':
        raise KeyboardInterrupt
    return ch
def readkey(getchar_fn=None):
    getchar = getchar_fn or readchar
    c1 = getchar()
    if ord(c1) != 0x1b:
        return c1
    c2 = getchar()
    if ord(c2) != 0x5b:
        return c1
    c3 = getchar()
    return ord(c3) - 65  # 0=Up, 1=Down, 2=Right, 3=Left arrows
speed = 30
pi2go.init()
try:
    while True:
        keyp = readkey()
        if keyp == 'w' or keyp == UP:
            pi2go.forward(speed)
            print 'Forward', speed
        elif keyp == 's' or keyp == DOWN:
            pi2go.reverse(speed)
            print 'Backward', speed
        elif keyp == 'd' or keyp == RIGHT:
            pi2go.spinRight(speed)
            print 'Spin Right', speed
        elif keyp == 'a' or keyp == LEFT:
            pi2go.spinLeft(speed)
            print 'Spin Left', speed
        elif keyp == '.' or keyp == '>':
            speed = min(100, speed+10)
            print 'Speed+', speed
        elif keyp == ',' or keyp == '<':
            speed = max (0, speed-10)
            print 'Speed-', speed
        elif keyp == ' ':
            pi2go.stop()
            print 'Stop'
        elif ord(keyp) == 3:
            break

    pi2go.cleanup()

但是我只想创建一个执行此操作并退出的脚本,例如:

pi2go.spinLeft(100) 
pi2go.stop()

我认为您的问题是您没有给电机任何转动时间。如果我看一下你的代码片段,你告诉电机向左旋转,然后立即停止电机。

尝试执行以下操作:

import time
import pi2go
pi2go.spinLeft(100)
time.sleep(1)
pi2go.stop()

让电机有时间实际做它们的事情。

您省略了初始化命令pi2go.init(),看起来您还省略了导入pi2go模块的最重要的import语句。

这应该有效:

import pi2go
pi2go.init()
pi2go.spinLeft(100) 
pi2go.stop()
pi2go.cleanup()

显然,我无法测试此代码...除非你给我买一个机器人。:)

最新更新