修复nxtpython中的turn方法

2024-09-28 21:07:03 发布

您现在位置:Python中文网/ 问答频道 /正文

当我的机器人遇到障碍物时,我想阻止它移动。但是,motor.py下的SynchronizedMotors类中的turn方法不允许我这样做。我怎么能修好呢?有什么直接的解决办法吗?我试过用线,但没用。在


Tags: 方法py机器人turn障碍物motor用线解决办法
1条回答
网友
1楼 · 发布于 2024-09-28 21:07:03

我没问题让伺服系统对传感器输入做出反应。以下步骤应使机器人以最大功率前进,直到按下一个或多个触摸传感器,然后停止,等待片刻,然后切断伺服系统的所有电源。在

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()

相关问题 更多 >