고베 항만대학 겐트리 교육 모션 플랫폼(3축,6축) 개발

개요

중장비용 가상훈련 유니티 어플리케이션 개발 회사인 소프트뱅크에서 발주한 프로젝트.

트랙터 및 항만 컨테이너 하역시 사용하는 크레인인 갠트리 가상훈련용 어플리케이션과 연동하여 동작하는 모션 플랫폼 하드웨어 및 제어 어플리케이션을 제작, 납품하였다.

특이사항으로는 갠트리 가상훈련용 모션플랫폼 제어 어플리케이션의 경우 모션플랫폼에 좌우 흔들림이나 떨림 등의 효과를 발생시키는 스페셜 이펙트 모듈이 추가 되어 있었다.

  • 주요담당파트

  • 통신 프로토콜 포맷 설계 및 모듈 개발

  • 모션플랫폼 입출력 데이터 로그 파일 생성 기능 개발

  • UI 개발 환경(C#)에서 마샬링을 이용한 C++ DLL 모듈 연동 부분 개발

  • 모션 플랫폼 초기화 루틴 개선

세부내용

  • 기간 : 16.08.16 ~ 16.10.31

  • 사용언어 : C++(MFC), C#(Winform)

  • 사용 라이브러리

    • 미츠비시 모션 컨트롤러 SDK(모션 플랫폼 제어 라이브러리)

    • 옴론 모션 컨트롤러 SDK(모션 플랫폼 제어 라이브러리)

    • STL(데이터 처리)

담당파트

모션플랫폼 제어 모듈 유지보수

납품될 하드웨어가 이전에 이노시뮬레이션의 다른 프로젝트에서 제작된 적이 있었기 때문에 프로그램 역시 신규 개발을 하지 않고, 개발된 코드를 활용하는 방향으로 진행하였다.

트랙터와 겐트리용 제어 어플리케이션의 개발환경은 각각 MFC 프레임워크의 C++, Winform 프레임워크의 C#으로 각각 달랐다.

이는 겐트리용 모션플랫폼을 제어하는 하드웨어 컨트롤 제작사인 옴론에서 제공하는 SDK가 C#용 밖에 없었기 때문이다.

따라서 C++로 작성된 스페셜 이펙트 모듈과 연동을 위해 마샬링을 사용하였다.

스페셜 이펙트 모듈 유지보수

프로젝트 초기에는, 개발기간 단축을 위해 기존 개발된 개발 모듈을 활용하는 방안으로 진행하였다.

팀 내 알고리즘 개발직원이 이펙트 알고리즘 개발, 수정된 로직을 실제 구현하는 업무를 맞아 진행하였다.

문제는 기존 개발된 모듈이 헤더와 라이브러리 파일인 LIB와 DLL 외에 소스파일은 존재하지 않았다.

모듈 동작을 확인할 수 있는 기술 문서 혹은 샘플 프로그램이라도 없었기 때문에 신규 개발도 할 수 없는 상황이었다.

다행히 당시 해당 모듈을 개발했었던 전직원과 연락이 닿아 해당 소스를 받을 수 있었고, 무사히 개발을 완료할 수 있었다.

트렉터용 모션플랫폼 제어 모듈 초기화 로직 개선

트렉터용 모션플랫폼의 경우 상판을 받치는 각 축이 크랭크 타입으로, 장시간 사용시 상편의 수평이 맞지 않았다.

따라서 전원 인가시 상판 수평 및 구동 범위를 확인하기 위해 캘리브레이션 로직을 필수적으로 수행하게 되어 있었다.

기존의 경우, 상판의 수평이 맞지 않으면, 운용자가 상판에 수평자를 올려놓고, 프로그램을 조작하여 수평자가 수평이 될 때까지 각 축을 조정한다.

수평 위치는 크랭크와 크랭크 지지대 위치에 부착된 센서가 각각 마주볼 때 들어오는 LED 램프로 확인한다.

그 다음 위치값들에 적당한 마진을 두고, 초기화 루틴에 각 축을 시계/반시계 방향으로 돌리면서 각 축의 센서값이 마진을 둔 범위에 안에 들어오면 초기화 된 것으로 판정하였다.

문제는 상판이 수평상태임에도 불구하고, 일부 축의 센서값이 종종 마진을 둔 범위를 벗어나는 경우가 있다보니 초기화가 되지 않아 프로그램을 재실행해야했다.

이런 상황이 하드웨어와 연동하여 어플리케이션 기능 개발중 빈번히 발생하다보니 개발은 물론 디버깅도 원활하게 진행하기 어려웠다.

개선 방안을 검토한 결과, 기술 문서상에 센서들이 마주보았을 때 센서의 상태가 바뀌는데 것을 SDK의 API로 확인할 수 있다는 것을 알게 되었다.

그래서 마진 범위 확인 대신 센서 상태 확인 로직을 구현하여 적용 결과 기존 로직에서 발생했던 초기화 실패 현상은 더이상 발생하지 않았다.

UI 부분 개발

개발 협의시, 기존 개발된 어플리케이션 UI 구성을 그대로 유지하기로 했었기 때문에 사용편의성을 위해 UI 컨트롤 배치 같은 레이아웃 변경 작업정도만 진행하였다.

단 겐트리용 제어 어플리케이션의 경우 납품처에서 스페셜 이펙트 모듈 동작 테스트가 필요하다는 요청이 있어서 그 부분만 추가적으로 작업하였다.

어려웠던점

C# 환경에서 C++ 코드 디버깅

C# 언어로 개발/유지보수한 첫번째 프로젝트에 C++ 코드가 포함된 개발환경이었기 때문에 무엇보다도 디버깅이 제일 힘들었다.

특히 C# 개발 환경에서는 C++ 코드에 대하여 중단점 설정 등 비주얼 스튜디오에서 제공하는 디버깅 기능들을 사용할 수 없어서, 콘솔창을 띄우고 확인할 함수마다 printf로 값들을 출력해가며 디버깅을 했었다.

정리

기존 프로젝트 인계받아 코드를 분석하였을 때, UI나 내부 모듈등 여러가지 개선사항들을 발견할 수 있었다.

그러나 제작된 하드웨어가 협력업체 사정으로 인해 납품 2주전에서야 개발팀에 전달되었기 때문에, 모호한 함수나 변수명 변경 등 기본적인 부분 반영하고, 추가 기능 개발 및 검증에 집중할 수 밖에 없었던 것이 많이 아쉬움으로 남는다.

더불어 해당 프로젝트를 통해 산출물 관리에 대한 중요성을 다시 한번 몸소 체감했다.

스크린샷

Last updated