-1

私はフィンチとJavaコードに不慣れで、センサーによってフィンチを左右に動かそうとしています.誰かが助けてくれることを願っています. ありがとうございました

if(suzie.isFinchLevel()) {
        suzie.saySomething("Moving forward");
        suzie.sleep(1000);
        while (!suzie.isObstacle()){
        suzie.setWheelVelocities(100,100);
        if(suzie.isObstacleLeftSide()){ //turn right
            suzie.setWheelVelocities(100,0,2000);
        }
        else if (suzie.isObstacleRightSide()){
            suzie.setWheelVelocities(0,100,2000); //turn left
        }   
    }   
 }   
4

1 に答える 1

1

センサーの値に実際にアクセスしていないようです。最初にセンサーの値に (getObstacleSensors(); メソッドを介して) アクセスする必要があることに注意してください。また、このメソッドは各センサーの値をブール配列として返すことを思い出してください。javadoc を参照してください。

getObstacleSensors public boolean[] getObstacleSensors()

両方の障害物センサーの値を 2 要素のブール配列として返します。左のセンサーが 0 番目の要素で、右のセンサーが 1 番目の要素です。

戻り値: 2 要素配列内の左右の障害物センサーの値


ボタンアクションリスナーからの入力を使用して、あなたがやろうとしていることに最近似たようなことをしました。実装する前に、障害物に遭遇したときにボットが実際に実行する「obstacleAvoidance」というメソッドを作成しました。このメソッドは、引数として Finch オブジェクト (つまり、suzie) を受け入れます。これにより、コードが [比較的] すっきりしました。このタスクを (アクション リスナーで) 実行するコードは、次のようになります。

プライベート クラス ButtonListener は ActionListener を実装します {

  public void actionPerformed( ActionEvent e ) {
    //Get the finchbot's obstacle sensors and store them in an array
    boolean [] sensors = suzie.getObstacleSensors();

    //Check to see if either of the ficnhbot's sensors 
    //detect an obstacle. This is enclosed in a while loop which is
    //broken if either sensor returns false (detects an obstacle)
    while (sensors [0] == false && sensors[1] == false)
    {
    // Sets the Action text field
   System.out.println( "Performing Action..." );

    // This method tells the robot to perform an action
    command.performAction(suzie, -255, -85);
    }

    //Otherwise, perform obstacle avoidance maneuver
    command.obtacleAvoidance(suzie);
}

}

これがあなたにとって良い出発点になることを願っています...

T

于 2014-05-05T01:41:26.030 に答える