Исправление метода поворота в nxt-python

Я хочу, чтобы мой робот не мог двигаться, когда он встречает препятствие. Однако метод поворота в SynchronizedMotors класс под motor.py не позволяет мне сделать это. Как я мог это исправить? Есть ли прямое решение? Я попытался использовать поток, но это не сработало.

1 ответ

У меня не было проблем с получением сервоприводов, чтобы реагировать на вход датчика. Следующее должно заставить робота двигаться вперед на полной мощности, пока один или несколько его сенсорных датчиков не будут нажаты, затем он остановится, подождет секунду, а затем отключит всю мощность сервоприводов.

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()
Другие вопросы по тегам