안녕하세요 알버트 관련해서 프로그램을 작성하고 있다가 질문이 있어 글을 씁니다.
알버트 내의 코드 중에
mFinalOrientationDevice = mAction.findDeviceById(Action.Navigation.COMMAND_FINAL_ORIENTATION);
mFinalOrientationDevice.write(-90);
이 코드는 프로그램이 실행된 후 최종 위치를 변경해줄 때 선언되어 최종 방향을 -90도로 돌리는 코드인데요.
최종 위치 말고 코드 실행 도중에 방향을 전환시키는 방법은 없을까요?
아래의 코드는 제가 작성하려는 코드입니다.
장애물을 만나면 회피하는 코드를 작성하려는 것인데
장애물이 인식되면 일단 정지한 후 장애물로부터 90도 회전시키는 부분이 어려워 질문 남깁니다.
public void onExecute() {
mPadSizeDevice.write(0,108);
mPadSizeDevice.write(1,76);
int leftProximity = mLeftProximityDevice.read();
int rightProximity = mRightProximityDevice.read();
/* 장애물 회피 */
if (leftProximity > 50 || rightProximity > 50) {
mLeftWheelDevice.write(0); //멈춤
mRightWheelDevice.write(0);
//이부분에서 장애물을 인식한 뒤 로봇을 멈추고 90도 회전시켜 장애물을
//피하고 싶은데 어떻게 해야할지 모르겠어요..
x = mPositionDevice.read(0);
y = mPositionDevice.read(1);
orientation = mOrientationDevice.read();
} else {
mLeftWheelDevice.write(20);
mRightWheelDevice.write(20);
}
}




orientation = mOrientationDevice.read(); 하면 현재 각도를 알 수 있으니까
mTargetOrientation 변수를 하나 두시고 여기에 현재 각도 + 90 또는 현재 각도 - 90 해서 목표 각도 기록하고
시계 방향이든 반시계 방향이든 회전하도록 바퀴에 명령 주고
onExecute 호출될 때마다 현재 각도랑 mTargetOrientation 각도랑 비교해서 목표 각도가 되었을 떄 멈추면 되겠지요.
대략적으로 말씀 드린 것이고 실제로는 회전을 하다보면 목표 각도를 넘어서 멈출 수 있으니까
목표 각도 가까이 가면 속도를 줄여야 할 거예요.
또한 각도는 -179도에서 180도 값을 가지니까 +90 또는 -90 했을 때 이 범위를 넘어갈 수 있어서
이걸 추가적으로 처리해 주셔야 할 거구요.