修复nxt-python中的turn方法

时间:2012-10-17 05:54:11

标签: python nxt lego nxt-python

我希望能够在遇到障碍物时阻止我的机器人移动。但是SynchronizedMotors下的motor.py类中的转弯方法不允许我这样做。我怎么能解决这个问题?有没有直接的解决方案?我确实尝试使用一个线程,但它没有用。

1 个答案:

答案 0 :(得分:0)

我没有问题让伺服器对传感器输入作出反应。以下情况应使机器人全功率前进,直至其一个或多个触摸传感器被按下,然后停止,等待片刻,然后切断伺服电机的所有电源。

from time import sleep
import nxt

from nxt.motor import Motor, PORT_B, PORT_C
from nxt.sensor import Touch, PORT_1, PORT_2

class Robot(object):

    def __init__(self, brick):

        self.brick = brick

        # left and right motors
        self.lmotor = Motor(brick, PORT_B)
        self.rmotor = Motor(brick, PORT_C)

        # left and right touch sensors
        self.ltouch = Touch(brick, PORT_1)
        self.rtouch = Touch(brick, PORT_2)

    def roll(self, left, right):
        '''
        Non-blocking function for modifying power to servos.
        The servos will continue to operate at these power
        levels until told to do otherwise. Values are given
        as percentages of full power, so torque will change
        as the battery loses charge. A negative value will
        reverse the rotation of the respective servo.
        For example, to spin on the spot, clockwise and at
        full power, do

            self.roll(100, -100)

        '''
        self.lmotor.run(left)
        self.rmotor.run(right)

    def halt(self):
        '''
        Stops and then holds both servos steady for
        0.2 seconds, then cuts power to both servos.
        '''
        self.lmotor.brake()
        self.rmotor.brake() 
        sleep(0.2)
        self.lmotor.idle()
        self.rmotor.idle()


brick = nxt.find_one_brick(name='R2')
robot = Robot(brick)

robot.roll(100, 100)
while True:
    if robot.ltouch.is_pressed() or robot.rtouch.is_pressed():
        robot.halt()