OpenGL처럼 오픈햅틱라이브러리라 생각하자.
이론도 중요하지만, 일단 구현부터 차근차근 해보자.
위 그림은 QuickHaptics API의 프로그램 흐름도로,
1. 작업공간을 먼저 정의(윈도우)하는 것을 가장 먼저,
2. 도형(햅틱 렌더링 대상)들을 정의하고,
3. 커서를 정의한다.
이런 구조인데...
그럼 우선 HLAPI와 HDAPI가 뭔지부터 아주짧고 간단하게만 살펴보자
HLAPI : High-Level haptics scene rendering API로, OpenGL과 비슷한 프로그래밍 구조를 갖고있다. 그렇기 때문에 빠르고 쉽게 그래픽 응용프로그램에 햅틱을 연결할 수 있다. HLAPI는 HDAPI의 위에 있다고 보면 되는데, 그 이유는 아래서 설명
HDAPI : Low-Level foundational layer for Haptics API로, 포스피드백 자체를 직접 수정할 수 있다. 이게 무슨말이냐면 HLAPI에 비해 아랫단에서 Haptic제어가 가능하다는 뜻이다. 그러니까, HDAPI를 만지려면 Force Equation, 안정적 스레드 핸들링과 효과적인 데이터 구조를 생각해야한다. 반대로 HLAPI를 이용하면 이런 요소들을 고려할 필요가 없다.
어떤 부분에서 HLAPI와 HDAPI가 함께 사용될까? - 위 그림과 연관
HLAPI만 쓴다고 햅틱렌더링이 되는것도 아니고, 반대로, HDAPI만 쓴다고 햅틱렌더링이 되는게 아니다. HLAPI를 설명할 때 HDAPI가 HLAPI보다 아랫단에 있다고 했다. 이 둘을 적절하게 조합해야 햅틱렌더링이 가능한 것이다.
HDAPI가 초기화되려면 HHD(Haptic Device Handle)가 설정되어야한다. 이 HHD는 HDAPI에 속해있는 것으로, HDAPI를 사용하려면 HL의 HHLRC(Haptic Rendering Context)가 인터페이스 역할을 하기 때문에 이것 역시 활성화 되어있어야 한다. 그거시바로 위 그림 1-8에 나와있는 유저애플리케이션 부분이다.
- 이 부분이 햅틱 장비를 햅틱렌더링 라이브러리로부터 실제 사용가능하게하는 부분이다
- hdEnable()/hdDisable(), 요게 바로 HDAPI를 사용, 사용불가 하게 만드는 것으로,
* HDAPI를 이용하여 포스 출력, 포스 들기, 포스 조이기 등의 작업을 할 수 있다.
HDAPI는 servo loop를 수정할 수 있는데, servo loop율이 올라가면 안정성과 반응도가 좋아지지만, 고사양의 CPU가 필요하다. 반대로 이걸 내리면 저사양의 CPU로도 렌더링이 가능하다.
servo loop : Force의 계산내용을 햅틱 장치로 보내는 것, 당연히 안정적으로 돌아가려면 빠르게 자주 보내는게 좋겠지dy?
HLAPI는 사용자가 설정하는 효과를 낼 수 있다. 그러니까, 즉 햅틱장치의 Force 효과를 수정할 수 있다는 것이다. servo loop에서 계산된 Force를 HDAPI 루틴으로 얻어낸 것과 함께 사용자 설정 효과를 Force에 추가하여 Force를 계산할 수 있다. 덧붙여서 HDAPI 스케줄러는 사용자 효과를 Force에 일치시키는 매커니즘이라고 생각하면 된다. 이렇게 되면 메인 애플리케이션 스레드에서 안전하게 상태를 수정할 수 있고, 이용할 수 있다.
'Haptic Rendering > OpenHaptics' 카테고리의 다른 글
HDAPI - 2. Programming (0) | 2014.06.10 |
---|---|
HDAPI - 1. Developing Options (1) | 2014.06.10 |
HDAPI - 0. Overview (0) | 2014.06.10 |
OpenHaptics - 1. Creating a shape (0) | 2014.06.09 |