MHServicer20170314 업데이트

관리자
2018-02-13
조회수 5792

안녕하세요. 
모션하우스 안준혁입니다. 

MHServicer와 MotionHouseSDK를 업데이트 합니다. 

MHServicer 변경 사항 
- 2017.03.14 
1. Assetto Corsa Console 추가 


- 2017.02.07 
1. 아이콘 추가 
2. 안정성 코드 추가 
3. WindController Test 기능 추가 





MotionHouseSDK 변경 사항 
- 2017.03.14 
1. 장비 추가 
  6축 모션 시뮬레이터 
2. MotionHouseSDK.ini 파일 추가 
  SetMotionProfile() 함수의 기능을 별도 파일로 설정 가능하도록 변경 
  SetMotionProfile()의 설정값 변경을 위해, 콘텐츠 빌드를 수행하지 않기 위함 
  

- 2017.02.07 
1. 32bit library와 64bit library를 분리했습니다. 
2. AC 타입의 장비 지원 추가 
  추가된 장비는 아래와 같습니다. 
  - AC 1축        , 전후 운동 
  - AC 3축        , 전방 실린더1, 시트뒤쪽 실런더 2 
  - AC 3축 b 타입  , 전방 실린더 2, 시트 뒤쪽 실린더 1 
  - AC 4축        , 전방 실린더 2, 시트 뒤쪽 실린더 2 

  

콘텐츠 개발자는 첨부된 MotionHouseSDK를 이용하여 콘텐츠와 모션기어를 연동할 수 있습니다. 
(테스트 프로젝트는 첨부파일에 첨부되어 있습니다.) 


주요 함수는 아래와 같습니다. 

1. MHRun()                장비 초기화 
2. SetMotionProfile()      모션 장비 설정 (2축,4축,,,등) 
3. SetWindProfile()        바람 장비 설정 
4. MotionControlStart()    장비 구동 시작 
5. SetDllMotionTelemetry() 모션 구현 
6. MotionControlEnd()    장비 구동 종료 
7. MHStop()                장비 해제 


먼저 전체 플로우에 대해서 말씀드리겠습니다. 

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

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

따라서 모션기어를 구동하기 위해서는 MotionControlStart() 호출후에 지속적으로(ex:프레임변경시마다) 
SetDllMotionTelemetry()를 호출해주면 됩니다. 
그리고 사용이 종료되면 MotionControlEnd()를 호출하여 대기상태에 들어갑니다. 

이처럼 대기상태에 자주 들어갈려고 하는 이유는 소비 전력, 발열 최소화 그리고 모션기어가 구동되지 않는데, 
모션기어가 올라가 있으면 탑승자가 불안해 할 수 있기 때문입니다. 이는 탑승 높이가 높아지면 더욱 심해집니다. 

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




아래는 자세한 함수의 인터페이스에 대해서 설명 드리도록 하겠습니다. 



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


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


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

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

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

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

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

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

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

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

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_UseMinusSurge, 
float m_MinusSurge, 
마이너스 서지는, 서지값의 한쪽 방향에만 가중치를 적용합니다. 
마이너스 서지가 -1.5면 서지값이 음수일때 1.5배 가중치를 반영한다는 뜻입니다. 

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

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

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

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

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

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


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


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


SetWindProfile() 
int m_DeviceType, 
장치 타입 설정입니다. 

bool m_UseFlag, 
사용 여부의 설정입니다. 

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

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

int m_Max 
구동 범위의 최대값을 설정합니다. 

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



SetDllMotionTelemetry() 
int motionState 
모션 데이터의 전달 여부를 설정합니다. 0 -> 전달하지 않음, 1->데이터 전달 
float roll, 
롤 값 , 라디안 단위, + 일때 오른쪽이 상승합니다. 
float pitch, 
피치값, 라디안 단위, +일때 앞쪽이 상승합니다. 
float sway, 
스웨이값, m/s^2 단위, +일때 오른쪽이 상승합니다. 
float surge, 
서지값, m/s^2 단위, + 일때 앞쪽이 하강합니다. 
float heave, 
히브값, m/s^2 단위, +일때 전체적으로 상승합니다. 
float yaw, 
yaw값, +일때 오른쪽으로 회전합니다. 
float wind 
+일때 바람이 강하게 붑니다. 



2016.12.23 업데이트 


변경 사항 : 
  Dll 파일이름 변경 
    - 32비트 빌드와 64비트 빌드가 나뉘게 되어 Dll 파일 이름이 변경 되었습니다. 
      32비트 빌드 : MotionHouseSDK32Release.Dll 
      64비트 빌드 : MotionHouseSDK64Release.Dll 

  버그 수정 
    - 모션기어가 중앙 또는 바닥으로 내려갈때, MotionStart(), MotionEnd() 함수 호출시, 기기가 다운되는 현상 수정


감사합니다.


4 0