0

私は落書きロボットを使用しており、Python でコードを書いています。障害物を見つけたら止めさせようとしている

そこで、左側の障害物センサー、中央の障害物センサー、右側の障害物センサーの変数を作成しました。

    left = getObstacle(0)
    center = getObstacle(1)
    right = getObstacle(2)

次にif文

if (left < 6400 & center < 6400 & right < 6400):
        forward(1,1)
    else:
        stop()

基本的には、センサーの読み取り値が 6400 未満の場合は前進し、それ以外の場合は停止するという考え方です。この機能を使って scribbler をテストしているsensesときに、ロボットをオブジェクトに近づけると、約 6400 と表示されることに気付きました。

ここに私がmain()コードのために持っているものがあります

def main():
      while True: 
        left = getObstacle(0)
        center = getObstacle(1)
        right = getObstacle(2)
        lir = getIR(0)
        rir = getIR(1)
    if (left < 6400 & center < 6400 & right < 6400):
        forward(1,1)
    else:
        stop()

ロボットが応答しないのはなぜですか? Python コードをシェルに挿入してもエラーは表示されませんが、ロボットでは何も起こりません。

編集:

いくつかのコードの変更。これまでのところ、ロボットは動きますが、止まりません。私の if ステートメントと else ステートメントは間違っていますか?

center = getObstacle(1)
def main():


    if (center < 5400):
        forward(0.5)
    else:
        stop()
4

2 に答える 2

0

&ビット単位の演算子です

and論理 AND 演算子です

したがって、あなたの状態は次のようになります。

if (left < 6400 and center < 6400 and right < 6400):
    forward(1,1)
else:
    stop()
于 2014-10-12T16:44:33.210 に答える
0

元のコードに近かったようです:

def main():
    while True: 
        left = getObstacle(0)
        center = getObstacle(1)
        right = getObstacle(2)
        #lir = getIR(0)
        #rir = getIR(1)
        if (left < 6400 and center < 6400 and right < 6400):
            forward(1, 0.1)
        else:
            stop()
            break

このループは、を測定leftし、ループを一巡するたびに比較を実行します。さらに測定を行う前に、10 分の 1 秒だけ移動するように呼び出しを変更しました。また、条件が満たされない場合、ロボットとループの両方が停止します。centerright forward

lirところで、 and を使用していないようですrir

于 2014-10-12T21:10:39.440 に答える