Sensor 활용
Contents 1.SensorManager 활용. 2. 센서 종류 3. 방향 센서 활용방법. 4. Mixare Sample Review.
1. SensorManager 활용. Sensor : 센서를 통해 하드웨어의 속성을 기술하는 데 사용됨. 하드웨어 관련된 Sensor.TYPE_ 의 형태로 정의되어 있음. 센서 메니저 레퍼런스 생성. String service_name = Context.SENSOR_SERVICE; SensorManager sensorManager = (SensorManager)getSystemService(service_name);
2. 센서 종류 Sensor.TYPE_ACCELEROMETER 3 축 가속도 센서. 세 축에 대한 현재 가속도를 m/s2 으로 리턴한다. Sensor.TYPE_GYROSCOPE 자이로스코프 센서. 세 축에 대한 기기의 현재 방향을 도 (°) 단위로 리턴한다. Sensor.TYPE_MAGNETIC_FIELD 자기장 센서. 세 축에 대한 현재 자기장을 마이크 로테슬라 (μT) 단위로 측정한다. Sensor.TYPE_ORIENTATION 방향 센서. 세 축에 대한 기기의 현재 방향을 도 (°) 단위 로 리턴한다. Sensor.TYPE_PRESSURE 압력 센서. 기기에 가해진 현재 압력을 킬로파스칼 (kPa) 단위로 리턴한다. Sensor.TYPE_PROXIMITY 근접 센서. 기기와 대상 물체 간의 거리를 미터 (m) 단위로 표시한다. 대상 물체를 선택하는 방법과 지원되는 거리는 근접 센서의 하드웨어 구현 에 따라 다르다. 보통 근접 센서는 사용자가 통화를 위해 기기를 귀에 가져다 댈 때, 자동으로 화면 밝기를 조절하거나 음성 명령을 실행하기 위한 용도로 쓰인다
3. 방향 센서 활용방법. 1.Device 에서 지원가능한 센서관련 목록을 레지스터에 등록하고, 이 등록된 이벤트를 처리하기 위해 센서 이벤트 리 스너를 생성하여 처리해 준다. 2. 센서 이벤트 리스너의 onSensorChanged(Event); 를 통해 해당 타입의 센서가 맞게 들어왔는지 검사를 해주며, 해당 이벤트에서 들어오는 센서값의 정보를 갱신시켜주면 된다. 3. 카메라 뷰를 이용해 화면내에서의 View 를 이용한 onDraw() 처리를 위해, AugmentedView.class 를 생성하였으며, onDraw() 내에서 Draw 하기 위한 모듈들을 추가해주고, 관련 센서값들은 전달해주면 된다. CameraViewer.class SensorManger instance 생성 ; registerListener(Sensor); SensorEventListener(Evnet); unregisterListener(Sensor); CameraPreview.class AugmentedView.class onDraw(){ CircleMaker.class ArrowMaker.class RaderMaker.class } SensorManager.class
3-1. 센서값 해석. SensorEventListener AccelatorSensor = new SensorEventListener() public void onSensorChanged(SensorEvent event) { switch (event.sensor.getType()) { case Sensor.TYPE_ACCELEROMETER: mGravity = event.values; if(mAugment!=null) { mAugment.invalidate(); } break; public void onAccuracyChanged(Sensor sensor, int accuracy) { // TODO Auto-generated method stub } }; 1.- 센서 종류 : TYPE_ACCELEROMETER( 세 축에 대한 가속도 ), - 개수 : 3 - values[0] : X 축 (Lateral), values[1] : Y 축 (Logitudinal), values[2] : Z 축 (Vertical) 2. - 센서 종류 : TYPE_GYROSCOPE( 세 축에 대한 기기의 방향 ), - 개수 : 3 - values[0] : Z 축 (Azimuth), values[1] : X 축 (Pitch), values[2] : Y 축 (Roll)
3-2. 방향 측정. Accelerometer 와 Magentic 을 이용한 계산 방식. if(mGravity != null && mMagentic != null) { float[] temp = new float[3]; float[] inR = new float[9]; float[] outR = new float[9]; // 중력과 자기장을 이용한 계산 SensorManager.getRotationMatrix(inR, null, mGravity, mMagentic); // the device as a mechanical compass in landscape mode SensorManager.remapCoordinateSystem(inR, SensorManager.AXIS_Y, SensorManager.AXIS_MINUS_X, outR); SensorManager.getOrientation(outR, temp); // convert from radians to degress. //Log.d(TAG, "temp = " + temp[0] + ", " + temp[1] + ", " + temp[2]); temp[0] = (float) Math.toDegrees(temp[0]); temp[1] = (float) Math.toDegrees(temp[1]); temp[2] = (float) Math.toDegrees(temp[2]); Log.d(TAG, "temp = " + temp[0] + ", " + temp[1] + ", " + temp[2]); mDegrees = temp; }
3-3. 방향 측정. Orientation 을 이용한 방향 방식. Case Sensor.TYPE_ORIENTATION: // event.values[0] 방위값을 알려준다. mAzimuth = event.values; Orientation X 축 ( 방위각 Azimuth) X 축을 중심으로 마주하는 방향으로서, 0/360 도는 북 `north, 90/360 도는 동 `east, 180/360 도는 남 `south, 270/360 도는 서 `west 다. Y 축 ( 피치 Pitch) 피치는 Y 축을 중심으로 한 기기의 각도다. 180/-180 도를 나타낸다. Z 축 ( 롤 Roll) 롤은 Z 축을 중심으로 한 기기의 측면 기울기로서 -90 도와 90 도 사이의 값. 참조 소스 : svn://Study/AugmentedReality/mixare_onycom
4. Mixare Sample Review. Compass.class SensorManger instance 생성 ; registerListener(Accelerometer); registerListener(Magentic); registerListener(Orientation); SensorEventListener(Evnets) { onSensorChanged(SensorEvent event) } unregisterListener(Accelerometer); unregisterListener(Magentic); unregisterListener(Orientation); MixVector.class - angle 값을 계산하기 위한 정점값들은 셋팅. PaintScreen.class onDraw(){ } Matrix.class Camera.class - 카메라 사이즈 속성관 련사항. MixUtils.class - 장면과 대상 오브젝트 의 각도 계산.
THANK YOU