障害物にぶつかったときにロボットの動きを止めたいです。SynchronizedMotors
ただし、下のクラスの turn メソッドでは、motor.py
そうすることができません。どうすれば修正できますか?直接的な解決策はありますか?スレッドを使用してみましたが、うまくいきませんでした。
1145 次
1 に答える
1
サーボをセンサー入力に反応させるのに問題はありませんでした。以下は、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()
于 2013-03-12T02:29:13.060 に答える