2011-03-06 5 views
0

저는 현재 로봇 공학 프로젝트를 진행하고 있으며 Android 전화 (Samsung Galaxy S) 덕분에 로봇을 운전하기로 결정했습니다. 내 문제는 GPS 위치를 "매번"계산할 방법을 찾을 수 없다는 것입니다. 즉, 운전은 매우 작은 새로 고침 시간을 필요로하며, 나는 그것을 얻을 수 없습니다. 나는이 값은 단지 힌트주의로, 대해 refreshTime 500 예입니다 값 변수 인스턴트되는으로Android : 논스톱 위치 계산

mLocManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, this.refreshTime, 0, this); 

,하지만 작동하지 않습니다 : 처음에, 난 그냥 이런 식으로 뭔가를 넣어 줄 알았는데 매개 변수가 아닙니다. 그래서 나는 잃어버린거야 ^^

할 수있는 방법이 있습니까?

이 주제에서는 질문하는 것이 좋습니다 ... GPS_PROVIDER을 (를) 설정할 때 내 위치가 계산되지 않는 이유를 알고 있습니까?

여기 내 전체 코드의 ... 내 위성이 켜져 있지만 아무것도 나는 내가 잘못 생각 때문에 반환있어 :

package com.pIndus.gps; 

import java.util.List; 

import android.app.Activity; 
import android.app.AlertDialog; 
import android.content.Context; 
import android.content.DialogInterface; 
import android.location.Location; 
import android.location.LocationListener; 
import android.location.LocationManager; 
import android.os.Bundle; 
import android.util.Log; 
import android.widget.Toast; 

public class Loc extends Activity { 
    /** Called when the activity is first created. */ 

private long refreshTime = 1000; 
private LocationManager mLocManager; 
private LocationListener mLocListener; 

@Override 
public void onCreate(Bundle savedInstanceState) 
{ 

    super.onCreate(savedInstanceState); 

    setContentView(R.layout.main); 

    /* Use the LocationManager class to obtain GPS locations */ 

    mLocManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 

    mLocListener = new MyLocationListener(); 

    mLocManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, this.refreshTime, 0, mLocListener); 

} 

/* Class My Location Listener */ 

public class MyLocationListener implements LocationListener 

{ 



    @Override 
    public void onProviderDisabled(String provider) 
    { 

     Toast.makeText(getApplicationContext(), "Gps désactivé", Toast.LENGTH_SHORT).show(); 
     Log.i("GPS", "GPS Desactivé"); 

    } 

    @Override 
    public void onProviderEnabled(String provider) 
    { 

     Toast.makeText(getApplicationContext(),"Gps activé", Toast.LENGTH_SHORT).show(); 
     Log.i("GPS", "GPS Activé"); 

    } 

    @Override 
    public void onStatusChanged(String provider, int status, Bundle extras) 
    { 
     Toast.makeText(getApplicationContext(),"Statut changé", Toast.LENGTH_SHORT).show(); 
     Log.i("GPS", "Statut changé"); 
    } 

    @Override 
    public void onLocationChanged(Location loc) 

    { 

     loc.getLatitude(); 

     loc.getLongitude(); 

     String Text = "Localisation courante:\n " + "Latitude : " + loc.getLatitude() + "\n" + "Longitude : " + loc.getLongitude(); 

     Log.i("GPS", "Localisation calculée"); 

     Toast.makeText(getApplicationContext(), Text, Toast.LENGTH_SHORT).show(); 

    } 





} 



public void onPause() 
{ 
    mLocManager.removeUpdates(mLocListener); 
    super.onPause(); 
} 

public void onStop() 
{ 
    mLocManager.removeUpdates(mLocListener); 
    super.onStop(); 
} 

}

내가 아는, 너희들이 나를 이해 희망 내 영어는 매우 나쁩니다.

그래서

내가 1Hz의이 ... GPS 수신기 칩은 일반적으로 일정한 간격으로 시리얼 라인에서 측정 (논리적으로) 보낼 것보다 훨씬 더 큰 주파수를 얻을 수 있다고 생각하지 않습니다
+0

이미 게시 한 위치 : http : // stackoverflow .com/questions/5209722/android-non-stop-location-calculation –

+1

오, 죄송합니다. 수정 버튼을 실수로했습니다. 나는 다른 스레드가 다시 삭제하도록 요청했습니다. 다시 미안합니다. – NachtNebel

답변

2

, 도움을 주셔서 대단히 감사합니다 "나는 지금 위치를 원해"라고 말하는 방법이 없습니다. 이 규칙적인 간격도 조정 가능하지만 OS가 1Hz보다 훨씬 작은 값으로 조절할 것 같지는 않습니다. 단지 일부 앱이 요청했기 때문입니다.

그러나 GPS 수정 사항은 정확하지 않으므로 그다지 큰 문제는 아닙니다. (물론 초당 200 미터 비행하는 제트 동력 로봇 항공기를 제작하는 경우는 제외)

칼만 필터 또는 유사한 방법을 사용하여 이전 수정본을 기반으로 위치를 추정하는 것이 좋습니다. 및 속도. (다른 센서, 모터 컨트롤 등에서 더 많은 정보를 추가하는 경우이 추정치는 GPS 위치를 초당 10 회 측정하여 얻는 것보다 훨씬 낫습니다.)

+0

이 옵션을 선택하겠습니다. 그리고 아니, 그것은 항공기가 아니라 서로 통신하고 내가 이미 개발 한 몇 가지 전략에 따라 행동해야하는 밧줄이 될 것입니다. 나는 GPS가 충분히 정확하다고 생각했다. – NachtNebel