기본 콘텐츠로 건너뛰기

[ 업무 기록 ] 오픈 소스 분석 #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 ...

Windows에서 MongoDB 사용하기 요약

NoSQL에 대한 이해 MongoDB에 대한 이해 MongoDB 메뉴얼 MongoDB 다운받기 - Community GUI를 설치하는 대신에 zip 파일선택하여 Shell Window에서 운영. ( mongdb.com ) MongoDB 서버 사용하기 - Command Interpreter Demon으로 실행하기 : 이 방법( --fork 옵션 )은 윈도우에서 실행되지 않고, 대신에 --install 옵션을 사용하여 윈도우 서비스에 등록하여 백그라운드로 사용한다. 관리자 모드 로 명령 프롬프트를 실행한다. demon을 실행시킨다. ( --install 옵션 추가 )   mongod --dbpath D:\Working\MongoDB\Server_JServer\mongodb_ver4.2.1\data --port 13100 --bind_ip_all --auth --logpath   D:\Working\MongoDB\Server_JServer\mongodb_ver4.2.1\log\mongod.log --install 명령 라인에 다음 명령을 입력한다. net start MongoDB 윈도우 서비스 창을 열어서 아래 내용을 확인한다. 배치 파일로 자동 실행하기 Demon으로 실행하는 방법의 2번과 3번을 한번에 처리하기 위해 생성한 mdbexe.bat 을 사용한다.  방법 mongodb demon을 실행하기 위한 mongod.cfg configuration 파일을 만든다. 배치 파일에 mongod 커멘드와 옵션을 다음과 같이 기술한다. mongod --config filename --install 배치 파일에 MongDB 서비스를 윈도우 서비스에 등록한다. net start MongoDB 만들어진 배치 파일을 관리자모드 로 실행시킨다. C#에서 구현할 때 관리자 모드로 실행하는 방법 조사할 것. ( TODO ) 종...

[ ChatGPT ] 임의의 프로세스에 접근하여 임의의 변수값을 바꾸기 위한 방법

 질문 사항 1번 프로세스와 2번 프로세스가 있어. 1번이 운영중인데, 2번 프로세스에서 1번 프로세스의 임의의 메모리에 접근하여 그 메모리의 값을 바꾸고 싶어. 어떤 절차를 이용해야 하지? 답변 내용 1번 프로세스의 메모리에 2번 프로세스에서 접근하여 값을 변경하는 것은 매우 민감한 작업이며, 운영 체제에서는 일반적으로 이러한 작업을 보안과 안정성 때문에 제한합니다. 그러나 특수한 경우, 특히 시스템 프로그래밍이나 디버깅 목적으로는 특정 API를 사용하여 이러한 작업을 수행할 수 있습니다. 아래는 이러한 작업을 수행하기 위한 일반적인 절차를 설명합니다. 1. 프로세스 권한 확인 및 확보 2번 프로세스가 1번 프로세스의 메모리에 접근하려면 충분한 권한이 있어야 합니다. 일반적으로 이는 관리자 권한이나 루트 권한이 필요합니다. Windows에서는 SeDebugPrivilege 를 활성화해야 할 수 있으며, Linux에서는 루트 권한이 필요할 수 있습니다. 2. 1번 프로세스의 핸들 획득 2번 프로세스가 1번 프로세스의 메모리에 접근하려면 먼저 1번 프로세스의 핸들을 얻어야 합니다. Windows : OpenProcess 함수를 사용하여 1번 프로세스의 핸들을 얻습니다. 이 함수는 1번 프로세스의 프로세스 ID를 기반으로 접근합니다.