MotionHouse SDK

MotionHouseSDK를 업로드합니다. MotionHouseSDK는 모션하우스의 모션기어를 구동할 수 있는 프로그램입니다. 유니티와 언리얼에서 사용가능하도록 64bit으로 빌드되었습니다. 콘텐츠 개발자는 첨부된 MotionHouseSDK를 이용하여 콘텐츠와 모션기어를 연동할 수 있습니다. 테스트 프로젝트는 첨부파일에 첨부되어 있습니다.
주요 함수는 다음과 같습니다.

1. MHRun()
2. SetMotionProfile()
3. SetWindProfile()
4. MotionControlStart()
5. SetDllMotionTelemetry()
6. MotionControlEnd()
7. MHStop()

장비 초기화
모션 장비 설정 (2축, 4축 등)
바람 장비 설정
장비 구동 시작
모션 구현
장비 구동 종료
장비 해제

Assetto Corsa 콘솔 버전 수정 | 레이스 종료 후 MHServicer에서 Activate 버튼 눌러줘야하는 문제 수정
RFactor, RFactor2 plugin 수정 | SLI 적용을 위한 수정

2017.07.18 beta update

Process Flow

MotionHouse SDK

*

첨부된 샘플 프로젝트를 열어보시면 아래와 같은 과정이 들어 있습니다.

1,2,3은 장비 초기화와 설정에 관련된 부분입니다. 초기에 1번 설정하면 끝입니다. 자세한 설정은 아래쪽에 다루겠습니다.

4~6번은 지속적으로 사용되는 함수들입니다. MotionControlStart()가 호출되면 모션기어는 센터 포지션에 위치하며 구동 대기 상태가 됩니다. (구동 대기 상태에서 10초안에 SetDllMotionTelemetry()가 호출되지 않으면 모션기어는 대기상태에 들어갑니다.) MotionControlEnd()가 호출되면 모션기어는 바닥으로 내려 앉으며 대기 상태가 됩니다.
대기 상태에서는 전력을 소비를 하지 않으며 모터의 추력이 없어집니다.

따라서 모션기어를 구동하기 위해서는 MotionControlStart() 호출후에 지속적으로(ex:프레임변경시마다) SetDllMotionTelemetry()를 호출해주면 됩니다. 그리고 사용이 종료되면 MotionControlEnd()를 호출하여 대기상태에 들어갑니다. 이처럼 대기상태에 자주 들어갈려고 하는 이유는 소비 전력, 발열 최소화 그리고 모션기어가 구동되지 않는데, 모션기어가 올라가 있으면 탑승자가 불안해 할 수 있기 때문입니다. 이는 탑승 높이가 높아지면 더욱 심해집니다.

Funtion Interface

SetMotionDeviceConfig()

모션 장치의 논리적 한계 및 사용 여부를 설정합니다.

bool m_UseFlag,

장비의 사용 여부를 설정합니다.

int m_DeviceControlDelay,

장비 구동 주기를 설정합니다. 10ms 정도 설정하면 크게 문제 없을 것입니다.

double m_MaxTractionLoss,

yaw 표현의 논리적 한계값을 설정합니다.

double m_MaxSurge,

surge 표현의 논리적 한계값을 설정합니다.

SetMotionDeviceConfig()
int m_TestFlag,

테스트 설정입니다. MHDLL.h 파일에 정의된 TEST_FLAG_XXX 값을 설정할 수 있습니다.
ex: TEST_FLAG_MOTION_TELEMETRY | TEST_FLAG_MOTION_TARGET_POSITION
위와 같이 Flag을 조합해서 사용할 수 있습니다. 이 값이 설정되면 모션기어는 실제 구동은 되지 않고 로그파일만 찍습니다. 실제 장비가 없어도 위 flag을 이용하여 모션기어를 이용한 개발작업이 가능합니다.

double m_MaxSway,

sway 표현의 논리적 한계값을 설정합니다.

int m_DeviceType,

설정하고자 하는 모션기어를 설정합니다. MHDLL.h 파일에 장치의 종류가 있습니다.
ex: DEVICE_TYPE_MH_STEP_MOTION_2DOF –> 모션기어 2축

double m_MaxRoll,

roll 표현의 논리적 한계값을 설정합니다.

double m_MaxPitch,

pitch 표현의 논리적 한계값을 설정합니다.

double m_MaxHeave

heave 표현의 논리적 한계값을 설정합니다.

SetWindDeviceConfig()

int m_TestFlag,

테스트 flag입니다. 앞서 언급된 SetMotionDeviceConfig()의 테스트 flag와 비슷한 기능을 합니다. 실제 장비가 없어도 개발 작업이 가능하도록 로그를 출력하는 기능을 합니다.
MHDLL.h 파일을 참조해주세요.

bool m_UseFlag,

장비의 사용 여부를 설정합니다.

int m_DeviceType,

장비 타입을 설정합니다.

int m_DeviceControlDelay

장비 구동 주기를 설정합니다. 바람의 경우 30ms 정도로 설정하면 크게 문제 없습니다.

SetMotionProfile()

모션 표현의 크기 및 표현력을 설정합니다.

int m_DeviceType,

장비 타입을 지정합니다.

bool m_UseFlag,

사용 여부를 지정합니다.

bool m_UseSurge,
int m_SurgeWeight,

서지 데이터를 사용할 것인지 설정합니다. m_SurgeWeight는 서지 표현의 크기를 지정합니다.

bool m_UseHeave,
int m_HeaveWeight,

히브 데이터를 사용할 것인지 설정합니다. m_HeaveWeight는 히브 표현의 크기를 지정합니다.

int m_ActuratorAccel,
int m_ActuratorMaxSpeed,
int m_ActuratorVibration,
int m_ActuratorSmooth

전동 실린더의 최대 속도, 가속도, 진동, 부드러운 정도를 설정합니다.
위 설정을 통해서 모션의 표현력을 변경할 수 있습니다.

bool m_UseMinusSurge,
float m_MinusSurge,

마이너스 서지는, 서지값의 한쪽 방향에만 가중치를 적용합니다. 마이너스 서지가 -1.5면 서지값이 음수일때 1.5배 가중치를 반영한다는 뜻입니다.

bool m_UseRoll,
int m_RollWeight,

롤 데이터를 사용할 것인지 설정합니다. m_RollWeight는 롤 표현의 크기를 지정합니다.

bool m_UseSuspension,
int m_SuspensionWeight,

서스펜션 데이터를 사용할 것인지 설정합니다. m_SuspensionWeight는 서스펜션 표현의 크기를 지정합니다.

bool m_UsePitch,
int m_PitchWeight,

피치 데이터를 사용할 것인지 설정합니다. m_PitchWeight는 롤 표현의 크기를 지정합니다.

bool m_UseSway,
int m_SwayWeight,

스웨이 데이터를 사용할 것인지 설정합니다. m_SwayWeight는 스웨이 표현의 크기를 지정합니다.

bool m_UseTractionLoss,
int m_TractionLossWeight,

피치 데이터를 사용할 것인지 설정합니다. m_PitchWeight는 롤 표현의 크기를 지정합니다.

SetWindProfile()

int m_DeviceType,

장치 타입 설정입니다.

int m_Min,

구동 범위의 최소값을 설정합니다.

bool m_UseFlag,

사용 여부의 설정입니다.

int m_Max

구동 범위의 최대값을 설정합니다. 예를 들어서 m_Min = 0 , m_Max= 100으로 설정하고
SetDllMotionTelemetry()에서 wind에 50의 값을 입력하면 절반의 속도로 모터가 구동하여 바람이 불게 됩니다.

int m_BaseOffset,

기본적으로 동작했으면 하는 정도를 설정합니다.

SetDllMotionTelemetry()

int motionState

모션 데이터의 전달 여부를 설정합니다. 0 -> 전달하지 않음, 1->데이터 전달

float sway,

스웨이값, m/s^2 단위, +일때 오른쪽이 상승합니다.

float roll,

롤 값 , 라디안 단위, + 일때 오른쪽이 상승합니다.

float surge,

서지값, m/s^2 단위, + 일때 앞쪽이 하강합니다.

float yaw,

yaw값, +일때 오른쪽으로 회전합니다.

float pitch,

피치값, 라디안 단위, +일때 앞쪽이 상승합니다.

float heave,

히브값, m/s^2 단위, +일때 전체적으로 상승합니다.

float wind

+일때 바람이 강하게 붑니다.