2011-10-24 3 views
17

내 안드로이드 응용 프로그램은 세계의 특정 장소의 방향을 보여 주므로 나침반 등급을 얻을 필요가 있습니다.
이것은 내가 정도를 계산하는 데 사용했던 코드 :android에서 정확한 나침반 만드는 법

public void getDirection() {   
    mySensorManager = (SensorManager)getSystemService(Context.SENSOR_SERVICE); 
    List<Sensor> mySensors = mySensorManager.getSensorList(Sensor.TYPE_ORIENTATION); 
    if(mySensors.size() > 0){ 
     mySensorManager.registerListener(mySensorEventListener, mySensors.get(0), SensorManager.SENSOR_DELAY_UI);   
    } 
    else{ 
     TextView alert = (TextView)findViewById(R.id.instruct); 
     alert.setText(getString(R.string.direction_not_found)); 
     myCompassView.setVisibility(myCompassView.INVISIBLE); 

    } 
} 
private SensorEventListener mySensorEventListener = new SensorEventListener(){ 

    @Override 
    public void onAccuracyChanged(Sensor sensor, int accuracy) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void onSensorChanged(SensorEvent event) { 
     // TODO Auto-generated method stub 
     compassBearing = (float)event.values[0]; 
     float bearing; 
     bearing = compassBearing - templeBearing; 
     if (bearing < 0) 
      bearing = 360 + bearing; 
     myCompassView.updateDirection(bearing); 
     } 
}; 

이 방법은 일반적으로 작동하지만 때때로 그것은 단지 내가 더 정확한 위치를 얻기 위해 무엇을해야합니까, 잘못된 북쪽을 얻는다? 을 보정 할 수 없습니다

1) 귀하의 장치

+0

새로운 http://area51.stackexchange.com/proposals/102228/virtual-and-augmented-reality StackExchange 제안에 추가하는 것이 좋은 질문입니다. – SashaZd

답변

33

나는 당신을 위해 몇 가지 제안이있다. 그것을하기 위해서, 그것을 8 (see this) 형태로 움직여 라. 장치가 보정되었거나 장치를 알려진 기점 방향으로 향하게하여 일부 테스트를 수행하지 않을 경우 값을 비교하십시오. 일반적으로 장치가 조정되지 않으면 작은 회전의 방위각 값에 큰 변화가 나타납니다. 그것이 내가 걱정할 것입니다.

이제 센서 은 True North가 아닌 Magnetic North에 베어링을 제공한다는 것을 잊지 마십시오! 이 차이는 자기장의 기울기 및 지구 자기장의 변화로 인해 장소와 장소에 따라 때때로 값이 바뀌는 것으로 알려져 있습니다. This app은 상대적인 정확도로 몇 가지 값을 계산할 수 있습니다. 나는 편차가 일반적으로 작기 때문에 이것에 대해 너무 걱정하지 않겠지 만, 당신은 좋은 정밀도를 찾고 있을지도 모른다. (나는 현재 3 °의 편각에서 살고있다.)

2) 강한 자기장을 생성하는 금속 물체 나 물건에 가까이 두지 마십시오.. 예를 들어, 전화기가 컴퓨터 근처에 있거나 실제 키보드가 있으면 테스트하지 마십시오! 이것은 나침반 - 지구 위치 측정을위한 순수한 독입니다. 일부 apps은 자기장의 강도를 측정 할 수 있습니다 (장치가 지원하는 경우). 금속 물체에 가까워지면 더 높은 가치와 강한 방향 변화를 경험하게됩니다. 재미로, 또한 일부 "metal detectors":이 응용 프로그램은 자기장의 변화를 인식하고 "금속 물체"또는 장치와 자기 적으로 간섭하는 물건을 닫을 때 진동합니다.

3) 기기를 가로 모드로 기울일 때 베어링을 업데이트해야합니다. (article is a must read!) 이것은 방위각 값이 휴대 전화의 평면에 수직 축의 회전을 기반으로하기 때문입니다. 장치를 가로 방향으로 돌리면이 값이 +/- 90º만큼 변경됩니다! 응용 프로그램 가로 모드를 사용하지 않으면이 문제가 해결되지 않습니다! 다른 두 축 (피치 및 롤) 주위의 회전을 분석하여 프로그래밍 방식으로이를 결정해야합니다. 이것은 사소한 것이 아니지만 그물 어딘가에 몇 가지 예가 있습니다.

편집 : 당신은 몇 가지 코드에 관심이 있다면Mixare 체크 아웃, 안드로이드에 대한 GPL3에 따라 오픈 소스 증강 현실 프레임 워크입니다. 오리엔테이션, 나침반의 위치 정보 및 베어링에 관한 코드를 살펴보십시오.

추신 : 언급 된 응용 프로그램의 제작자와 어떤 종류의 연결도 갖고 있지 않습니다.

+1

1) 장치가 보정되지 않았다는 것을 사용자에게 알리는 방법이 있습니까?2) 자기 간섭이 언제 발생 하는지를 알 수있는 방법이 있습니까? 3) 조경 모드를 해제 했으므로 걱정하지 않아도 되나요? – eladrich

+0

답변을 업데이트했습니다. 희망의 일부에 대한 답변을 – MobileCushion

+0

@ MobileCushion 아주 좋은 대답, 정말 고마워요 – RiadSaadi