1

迷路を通過するように、Matlab でレゴ ブロック NXT をプログラミングしています。ロボットは、タッチ センサーが壁によってアクティブになるまで前進することになっています。

ロボットは

  1. 止まる
  2. バックアップ
  3. 止まる
  4. 超音波(距離)センサーを読み取る
  5. 結果を表示する

センサーが大きな距離を読み取ると、ロボットは右に曲がって停止し、センサーが小さな距離を読み取ると、ロボットは左に曲がって停止します。

その後、ロボットは別の壁にぶつかるまで再び前進します。

現在のコード:

ロボットは壁にぶつかり、停止し、後退し、停止し、回転中であることを表示しますが、回転しません。

間違って入力しているものはありますか?ループの前またはループの内側でモーターを初期化する必要がありますか? 私は一時停止に特に注意しています。

  1 %B = NXTMotor('B');
  2 %C = NXTMotor('C');
  3 OpenSwitch(SENSOR_1);
  4 OpenUltrasonic(SENSOR_4);
  5 
  6 
  7 while 1
  8 
  9     B = NXTMotor('B');
 10     C = NXTMotor('C');
 11 
 12     %FORWARD 1 
 13     disp('move forward');
 14     B.Power = 50;
 15     C.Power = 50;
 16  
 17     B.SendToNXT();
 18     C.SendToNXT(); 
 19     B.WaitFor();
 20     C.WaitFor();
 21     disp('before getswitch');
 22 
 23         if GetSwitch(SENSOR_1)
 24             pause(0.2);
 25             B.Power = 0;
 26             C.Power = 0;
 27             B.SendToNXT();
 28             C.SendToNXT();
 29             B.WaitFor();
 30             C.WaitFor();
 31             disp('Hit a wall and stops'); 
 32             
 33             disp('back up');
 34             B.Power = -50;
 35             C.Power = -50;
 36             
 37             B.TachoLimit = 720;
 38             C.TachoLimit = 720;
 39  
 40             B.SendToNXT();
 41             C.SendToNXT();
 42             B.WaitFor();
 43             C.WaitFor();
 44             
 45             pause(0.5);
 46             B.Power = 0;
 47             C.Power = 0;
 48             B.SendToNXT();
 49             C.SendToNXT();
 50             B.WaitFor();
 51             C.WaitFor();
 52             disp('finished back up');
 53             
 54             %ultrasonic
 55             distance = GetUltrasonic(SENSOR_4);
 56             disp(distance);
 57             
 58             if distance >100
 59             %if GetUltrasonic(SENSOR_4) > 100
 60 
 61                 %TURN 1
 62                 disp('turn1 > 100');
 63                      
 64                 B.Power = 0;
 65                 C.Power = 100;
 66  
 67                 B.TachoLimit = 720;
 68                 C.TachoLimit = 720;
 69  
 70                 B.SendToNXT();
 71                 C.SendToNXT();
 72                 B.WaitFor();
 73                 C.WaitFor();
 74                 disp('turn1 finished');
 75             
 76                 pause(0.2);
 77                 B.Power = 0;
 78                 C.Power = 0;
 79                 B.SendToNXT();
 80                 C.SendToNXT();
 81                 B.WaitFor();
 82                 C.WaitFor();
 83             
 84             end
 85             
 86             if distance <= 100
 87           
 88                 disp('turn2 < 100');
 89             
 90                 B.Power = 100;
 91                 C.Power = 0;
 92                 disp('turn 2'); 
 93                 B.TachoLimit = 720;
 94                 C.TachoLimit = 720;
 95  
 96                 B.SendToNXT();
 97                 C.SendToNXT();
 98                 B.WaitFor();
 99                 C.WaitFor();
100                 disp('Finished turn 2'); 
101             
102                 pause(0.5);
103                 B.Power = 0;
104                 C.Power = 0;
105                 B.SendToNXT();
106                 C.SendToNXT();
107                 B.WaitFor();
108                 C.WaitFor();
109             
110                 disp('stopped turn2 and ready to go forward');
111           
112             end
113             
114             B.Stop('off');
115             C.Stop('off');
116         end
117     
118         %B.Stop('off');
119         %C.Stop('off');
120     end
121 
122     CloseSensor(SENSOR_4);
123     CloseSensor(SENSOR_1);
4

0 に答える 0