기본 콘텐츠로 건너뛰기

[ 업무 기록 ] 오픈 소스 분석 #2

 멀티 플랫폼에서 사용하는 어플리케이션을 개발하기 위해 멀티 플랫폼에서 빌드되는 환경은 정해진 IDE를 이용하는 기존 개발 환경과는 많이 다르다. 오픈 소스는 GUI 개발을 위해 QT 라이브러리를 이용할 뿐만 아니라 PyQT를 이용하기도 한다.

현재 분석하고 있는 GUI를 위한 오픈 소스는 PyQT이다. GUI 개발과 각 컴포넌트의 이벤트 구현은 PyQT를 이용하여 개발되었다. 소스가 어떻게 구성되어 있으며 이들 빌드는 어떤 방식으로 진행하는지 Qt Creator와 PyQT는 또다른 유틸리티 인지 알아보기로 한다.

* 실행파일 PacketFileSender pcap_file 수행하면 Packet / duration / f / delay  순서대로 값이 표시된다. LidarView를 실행 후 발생된 오류 해결 방법과 pcap 파일 정상 로딩 방법을 기술한다. 


[ 과제 ]

1. PyQt 버전 ( TODO )

2. PyQt 빌드 방법 ( TODO )

3. LidarView를 실행할 때 ImportError 발생 원인 분석

메시지는 다음과 같다.

* ImportError: libLidarPluginPythonD.so: cannot open shared object file: No such file or directory

** 해당 라이브러리는 python import 에러이다. 실제 libLidarPythonD.so는 -build/common-superbuilder/lidarview/build/lib 폴더에 존재한다.

sol).bashrc 파일에 "LD_LIBRARY_PATH"를 추가하고 해당 파일이 존재하는 패스를 작성함. export를 라인 앞에 추가하여 항상 실행되도록 하였음.

4. pcap 파일 로딩하여 3차원 데이터 시각화 : pcap 파일 선택 후에 lidar sensor 구성할 때 다수 에러 발생

sol) xml 파일 위치가 맞지 않아서 발생함. 해당 파일이 관리되는 폴더를 로딩 할때 접근하는 폴더로 이동하여 해결함.

5. pcap 파일을 시뮬레이션으로 발생시키도록 하는 어플리케이션이 있어서 그것을 실행하고 lidarview에서 play되도록 하여 실험 결과 정상 처리됨. 단지 컬러 적용되지 않은 것을 확인해보자. 

sol) Sensor Configuration에서 Solid Reference Frame 이 의미하는 것이 무엇인지 알아보고 X,Y, Z 값을 설정하자. 일단 모두 0으로 설정해도 동작은 된다. 

6. OS 껏다가 다시 켠 후에 lidarview를 실행시키면 opengl 관련된 segmentation fault가 발생한다. 

에러 메시지 --> 

--------------------------------------------------------------------------------------------------

GL version 2.1 with the gpu-shader4 extension is not supported by your graphics driver but is required for the new OpenGL rendering backend. Please update your OpenGL driver.

---------------------------------------------------------------------------------------------------

** 참고 사이트 : https://stackoverflow.com/questions/37664786/gl-version-2-1-with-the-gpu-shader4-extension-is-not-supported-by-your-graphics

*** 버전 확인을 위해 glxinfo | grep "OpenGL vesion" 명령을 실행하니 glxinfo가 없고 다음 명령을 이용하여 설치하라고 함. OpenGL은 mesa-utils 패키지의 glxinfo를 사용하는 것이다. 

 $sudo apt install mesa-utils

*** 명령을 재 입력 후 확인 결과 

OpenGL version sring: 2.1 Mesa 20.0.8

** 셋업이 확인되었다, 다시 실행해본다.  

** 여전히 같은 에러 발생하였다. 다음 명령으로 상태 확인하자.

$dpkg -s mesa-utlis

** 결과는 다음과 같다. 이것으로 어떤 정보를 얻을 수 있는가? 


* vtk와 vmtk를 제거하고 재설치하라고 한다. ( 참고사이트 ) vtk와 mvtk를 알아본다.
- VTK ( Visualization Toolkit ) : 3D 컴퓨터 그래픽, 이미지 프로세싱과 과학 시각화를 위한 오픈 소스 소프트웨어이다. ( 위치페디아 인용 )

- 웹사이트 : vtk와 vmtk는 무슨 관계인지 알아본다.

- 자료첨부 : 요약


* 스택오버플로우 에서 같은 문제의 질문을 찾고 답변 확인. 

  1. 여기 참조하라고 하여 확인 
    • 최신 버전의 OpenGL을 위해 게스트 시스템의 그래픽 드라이브를 업그레이드 하는 방법은 다음과 같다.(How to update to latest OpenGL version on Virtualbox Ubuntu Linux machine) Virtual Box의 OpenGL 드라이버는 2.1로 제한되며 Open3.0 지원은 안된다. 유료 제품에는 DirectX 10과 OpenGL3.3가 포함되어 3D 기능을 사용할 수 있다. 2019년 댓글에는 VB6.0이 릴리즈되었지만 지원되지 않는다고 함. 
    • 최상의 성능을 얻으려면 1) 호스트 그래픽 카드가 최신 상태, 2) 최신 버추얼박스 버전 및 해당 게스트 추가, 3) 최신 게스트 OS 설치 ( 현재는 20버전이 최신이지만 18버전을 사용해야 함. )
  2. 실제 답변을 확인 : Virtual Box Guest Applications를 설치하여 하드웨어 3D 가속을 활성화하고 최신 버전의 OpenGL API에 대한 엑세스를 허용해야 함. 3D 작업 또한 최신 버전의 Mesa3D 라이브러리를 사용하여 CPU에서 필요한 3D 작업을 수행할 수 있음. ( 호스트에 그래픽 카드가 없는 경우 선택할 것. )

--> 결과적으로 Virtual box에 설치된 Ubuntu에서는 OpenGL 이슈를 해결할 수 없다는 것이다. 게다가 호스트 시스템에는 그래픽 카드가 없으니 사용 불가이다.  그래픽 카드가 있는 PC를 준비하고 가상 머신이 아닌 호스트에 리눅스 설치할 것. 

-----------------------------------------------------------------------------------------------

※ Renderer( Rendering ), 참고( 게임엔진 )

* VTK를 조사하다보니 렌더링에 대한 개념 이해가 필요해 보여 아래와 같이 정리한다. 게임 프로그래밍에서 사용하는 엔진으로 알고 있던 렌더링 기술은 게임 분야와 함께 의료, VR 등에서도 활용될 것으로 보인다. 내 짧은 지식으로도 해당 엔진은 활용중일 것이라는 판단이다.

* (위키요약) 렌더링 혹은 이미지 합성, 컴퓨터 프로그램을 사용하여 모델 또는 이들을 모아놓은 장면인 씬 파일로부터 영상을 만들어내는 과정을 말한다. 렌더링 방식으로 기술적으로 매우 다양하지만 그래픽 처리 장치 같은 렌더링 장치를 통한 그래픽스 파이프라인을 따라 씬 파일에 저장되어 있는 3차원 연출로부터 2차원의 그림을 만들어낸다는 점은 동일하다. 렌더링 프로그램은 광학, 비주얼시스템, 수학, 소프트웨어 개발과 관련된 선택적 혼합에 기반을 둔 공학 프로그램이기도 한다. 

3D 영상 제작 과정, 모델링과 렌더링 과정으로 나눈다. 기본적인 골격을 만드는 과정과 그 골격 표면을 처리하는 과정이다. 랜더링에는 투영, 클리핑, 은면처리, 셰이딩, 매핑 과정이 포함된다. 

( 게임엔진 문서 참조 요약 ) 게임 엔진의 렌더링 모듈을 예로 들어 설명한다. 게임 엔진의 렌터링 모듈의 임무는 실시간에 3차원 환경 및 물체를 그려주는 것으로, 이는 OpenGL 또는 DirectX와 같은 이른바 low-level API에 기반해 있다. OpenGL와 DirectX의 역할은 렌더링 파이프라인을 구현하는 것이다. Shader Program은 GPU에 대한 명령의 집합이다. 즉 GPU 명령을 이용해 본인이 원하는 렌더링 방식을 직접 코딩하는 것이다. Shader Program은 DirectX에서 사용했으나 2003년 OpenGL version 1.5부터는 OpenGL Shading Language(GLSL)에서 low level 및 high level 언어를 모두 지원한다. Shader Program은 기계어로 컴파일되어 해당 GPU에서 실행된다. 게임 엔진은 실시간 렌더링에 필요한 최적화된 라이브러리 및 제작 툴을 제공해야 한다. 사실적인 영상의 실시간 렌더링에 필수적인 모듈은 그림자 생성, 물/불/연기 등 자연 현상을 위한 파티클 시스템, 포털 및 BSP 컬링, 충돌 탐지, LOD( Levels of Detail ) 생성 및 처리, 지형 렌더링 등이 있다. 여기서는 "LOD 지형 렌더링"을 에로 들어 실시간 이슈를 설명하고자 한다. fly-throught, walk-throught 는 LOD 기법이 필요하다. ( ... 생략 ... ) 이와 같이 복잡한 렌더링 파이프라인 전체를 이해하는 것은 매우 어려운 일이므로 가략화된 high - level API를 제공한다. 대체 Scene graph API가 이 역할을 한다.

-----------------------------------------------------------------------------------------------

 

댓글

이 블로그의 인기 게시물

[QT] 5.15.2 버전 다운로드와 설치하기

1. 버전 5.15.2를 설치하기 위해 QT 다운로드 사이트 에 접속하였으나 실행파일이 존재하지 않는다. 가장 최신의 실행파일은 ver5.14.2 이므로 일단 이것을 다운받아서 설치한다. ( 참고 사이트 - https://sloth-code.tistory.com/6#comment16833678 ) 다운 사이트  - https://bio.nic.funet.fi/pub/mirrors/download.qt-project.org/archive/qt/5.14/5.14.2/  ------------- 버전이 맞지 않으니 재 설치한다. 2.  5.15.2 버전에는 실행파일 exe가 없고 zip과 tar.gz 파일만 존재한다. ( https://bio.nic.funet.fi/pub/mirrors/download.qt-project.org/archive/qt/5.15/5.15.2/ ) OFFLINE_README.txt를 읽어보면 5.15 버전부터는 오픈 소스 오프라인 설치를 이용할 수 없다고 한다. 오프라인 설치를 원할 경우 다음 사이트 참조하라고 한다.  ( 원본:  The Qt Company offering changes, open source offline installers are not available any more since Qt 5.15. Read more about offering changes in the https://www.qt.io/blog/qt-offering-changes-2020 blog. If you need offline installers, please consider our new Qt for Small Business offering: https://www.qt.io/blog/available-now-qt-for-small-businesses ) - https://www.qt.io/blog/available-now-qt-for-small-businesses ...

C# dll 파일들을 지정 폴더에서 사용하기

C#으로 여러 프로세스를 생성할 때, 각각의 프로젝트에서 사용하는 dll을 공동으로 사용하게 된다. 이때 dll은 실행 파일과 같은 폴더내에 존재해야 실행할 수 있다. 같은 dll을 사용하고 관리하는 관점에서 복사하는 일은 효율성이 떨어지며 항상 버전에 신경을 써야 하는 불편함이 있다. 이와 같은 비효율성을 제거하고자 실행파일과 다른 폴더에 있는 dll에 접근하는 방법으로 다음과 같은 방법을 사용하고자 한다. 코드를 수정하지 않고 지정할 수 있는 방법이 가장 편리하고 단순하겠지만 이와 같은 방법은 서브 폴더를 이용하는 방법밖에는 없다. dll이 필요할 때 발생되는 이벤트 핸들러를 추가하고 이를 등록하여 지정된 폴더를 사용할 수 있도록 코드를 추가하여 해결한다. 참고 사이트:  http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=17&MAEULNo=8&no=169705&ref=169702 * dll 필요할 때 발생되는 이벤트 핸들러 추가 static   System.Reflection.Assembly RsveAssem( object   sender, ResolveEventArgs args) {      System.Reflection.Assembly thisAss = System.Reflection.Assembly.GetExecutingAssembly();      var name = args.Name.Substring(0, args.Name.IndexOf( ',' )) +  ".dll" ;             if ( name ==  "abc.dll"   )      {    ...

[MongoDB] C# 으로 작성한 응용 프로그램에서 몽고DB 접근할 때 발생하는 에러

1. System.IO.FileNotFoundException - 해당 기능을 수행할 때 작업 PC에서 발생하지 않는 메시지가 사용자 PC에서 발생하여 해결하기 위해 정리한다. - .Net Framework 4.6.1 에러 메시지 +-----------------------------------------------------------------------------------------------+ System.IO.FileNotFoundException: 파일이나 어셈블리 'System.Runtime.InteropServices.RuntimeInformation, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' 또는 여기에 종속되어 있는 파일이나 어셈블리 중 하나를 로드할 수 없습니다. 지정된 파일을 찾을 수 없습니다. 파일 이름: 'System.Runtime.InteropServices.RuntimeInformation, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'    위치: MongoDB.Driver.Core.Connections.ClientDocumentHelper.CreateOSDocument()    위치: System.Lazy`1.CreateValue()    위치: System.Lazy`1.LazyInitValue()    위치: MongoDB.Driver.Core.Connections.ClientDocumentHelper.CreateClientDocument(String applicationName)    위치: MongoDB.Driver.Core.Connections.ConnectionInitializer..ctor(String applicationName, IReadOnl...