2017-04-17 6 views
0


私は学校プロジェクトに取り組んでいますが、残念ながら、私の先生はもう働きませんので、私は誰にも質問することはありません。
現在、私は現実世界で自分自身を見つけることができるはずの小さなシステムを設計しています。それは基本的にはPCを搭載した電気RCカーです。この車は現実の世界をナビゲートし、地図上のどこにいるかを知ることができるはずです。それは良い精度が必要なので、GPSは選択肢ではありません(私が得ることができる最高のものは4メートルです、私が受け入れることができる方法です)。そして、車輪を何らかの方法でエンコードすることは、私の予算にとっては高価です。この車の下にマウスを置いて、フィードバックを相対的な測位システムとして使用します。
私の最初のアイデアは、(タイマーを使用して)2つのインスタント間のピクセル距離の差を計算することでした、私はmouseMovedイベントを使用して同じ原則を適用しようとしましたが、問題はまだそこにあります: 、計算された距離も変化する。
この時点で私には他のアイデアはありませんが、私のアプローチには何が間違っていると思いますか?JavaFxカーソル測定

public class Main extends Application { 

public static void main(String args[]) { 
    launch(args); 
} 

private double cmToPixel = 1; 
private int totalX; 
private int totalY; 
private Robot robot; 
private int counter; 

@Override 
public void start(Stage primaryStage) throws Exception { 
    VBox pane = new VBox(); 
    pane.setFillWidth(false); 
    pane.setMinWidth(200); 
    javafx.scene.control.TextArea textArea = new TextArea(); 
    javafx.scene.control.TextArea logArea = new TextArea(); 
    javafx.scene.control.TextArea debugArea = new TextArea(); 
    pane.getChildren().addAll(textArea, logArea, debugArea); 
    Scene scene = new Scene(pane); 
    primaryStage.setScene(scene); 
    primaryStage.centerOnScreen(); 
    robot = new Robot(); 
    robot.mouseMove((int) (Screen.getPrimary().getBounds().getWidth()/2), (int) (Screen.getPrimary().getBounds().getHeight()/2)); 
    scene.setOnMouseMoved(e -> { 
     double deltaX = e.getX() - Screen.getPrimary().getBounds().getWidth()/2; 
     double deltaY = Screen.getPrimary().getBounds().getHeight()/2 - e.getY() ; 
     totalX += deltaX; 
     totalY += deltaY; 
     textArea.appendText((totalX/cmToPixel) + " - " + (totalY/cmToPixel) + "\n"); 
     debugArea.appendText(deltaX+" - "+deltaY+"\n"); 
     logArea.appendText("Center: ["+(int) (Screen.getPrimary().getBounds().getWidth()/2)+";"+(int) (Screen.getPrimary().getBounds().getHeight()/2)+"] cursorPosition: "+e.getX()+" - "+e.getY()+"\n"); 
     robot.mouseMove((int) (Screen.getPrimary().getBounds().getWidth()/2), (int) (Screen.getPrimary().getBounds().getHeight()/2)); 
    }); 
    primaryStage.show(); 
    primaryStage.setFullScreen(true); 
}} 

ありがとうございました!
マッテオFormenti

EDIT:あなたは私の結果を再現したい場合は、単に紙の上の2つの行をマークし、プログラムに目を維持しながら、異なる速度でこれらの行の間にマウスを実行しよう

答えて

0

報告されているマウスデバイスの距離は、マウスを動かす速度によって異なります。これはマウスのためにマウスが使われている場合には通常は望ましいですが、あなたの場合はこれが問題です。私はマウスの設定でこの機能を切り替えようとしています。多分、このリンクはあなたを助けることができます。 https://askubuntu.com/questions/698961/disable-mouse-acceleration-in-ubuntu-15-10

+0

あなたの提案を試みたが、何も変わっていない。これが問題になる可能性はありますか?もしそうなら、私はそれについて詳しく調査します –

+0

これは少なくともあなたの問題の1つです。私がまだ見ていないコースがもっとあるかもしれません。私はあなたが車の回転をどのように扱いたいかの例を考えています。 – mipa

+0

回転はデジタルコンパスで処理されます。加速を無効にした後も状況は変わらない... –

0

あなたがこの記事を読んでいるのであれば、加速が問題であったことを知りたいかもしれませんし、「無効にしても何かがうまくいかない」ときでも、PS2マウスArduinoにJSSCと私は最後のチェック(それを見てここでhttp://www.instructables.com/id/Optical-Mouse-Odometer-for-Arduino-Robot/)からデルタXとYを尋ねる