首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >pi2go -在90度内移动机器人,还是只移动10厘米就停下来?

pi2go -在90度内移动机器人,还是只移动10厘米就停下来?
EN

Stack Overflow用户
提问于 2016-03-06 21:14:46
回答 2查看 236关注 0票数 2

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

  1. 左/右旋转90度并停止
  2. 将Foward/向后移动10 cm并停止

我想在python中编写4个脚本,就像left.pyforward.py这样做。

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

下面是pi2go示例:

代码语言:javascript
复制
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()

但是我只想创建一个脚本来完成这个任务并退出,比如:

代码语言:javascript
复制
pi2go.spinLeft(100) 
pi2go.stop()
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-03-07 11:52:31

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

试着做这样的事情:

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

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

给马达时间去做他们的事。

票数 1
EN

Stack Overflow用户

发布于 2016-03-06 21:22:42

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

这应该是可行的:

代码语言:javascript
复制
import pi2go

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

pi2go.cleanup()

显然,我不能测试这段代码..。除非你给我买个机器人。:)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35832678

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档