.
내가 창세기 작업을 한 방법 : 구글 콜랩
초기 좌절 후, 나는 프로 계정으로 Google Colab을 시험해보기로 결정했고, 정확히 내가 필요한 것으로 판명되었습니다. Colab의 GPU 리소스를 사용하여 다음을 수행 할 수있었습니다
문제없이 필요한 모든 종속성을 설치하십시오
GPU 백엔드를 사용하여 훌륭한 성능과 현실적인 렌더링을 달성하십시오.
마지막으로, 기본 예제를 실행하고 창세기의 잠재력을 탐구하십시오.
나는 NVIDIA A100-SXM4-40GB를 선택했는데, 이는 창세기 시뮬레이션을 효율적으로 처리 할 수있을만큼 강력한 것으로 판명되었습니다.
Google Colab 환경을 설정하고 Genesis를 설치하면 문서에서 가장 간단한 예제를 실행하려고했습니다.
이 예제는 CPU 백엔드로 창세기를 초기화하고 기본 장면을 표시해야합니다. 그러나 나는 즉시 다음 오류에 부딪쳤다 :
오류 메시지는 Genesis가 장면을 렌더링하기 위해 그래픽 창을 만들려고 노력하고 있지만 Google Colab은 실시간 시각화를 지원하지 않습니다. Colab은 로컬 디스플레이에 액세스 할 수없는 원격 환경에서 실행되므로 Gs.Scene () 초기화의 show_viewer = true 매개 변수가 작동하지 않습니다. 오류 메시지에서 제안한대로 뷰어를 비활성화하기 위해 코드를 수정했습니다.
이를 통해 스크립트는 충돌없이 실행할 수있었습니다. 그러나이 접근법은 결과를 직접 시각화 할 방법이 없음을 의미했습니다.
온라인을보고 난 후에, 나는 다른 사람들이 같은 문제에 직면했다는 것을 알게되었습니다. 많은 제안 된 솔루션에는 원격 OpenGL 환경을 구성하거나 XVFB를 사용하여 가상 디스플레이를 작성했습니다. 불행히도, 나는 의존성 충돌과 환경의 한계로 인해 이러한 방법을 Colab에서 안정적으로 작동시킬 수 없었습니다. import genesis as gs
gs.init(backend=gs.cpu)
scene = gs.Scene(show_viewer=True)
.
이 시점에서 더 실용적인 해결 방법이 필요했습니다!
실시간 렌더링은 Colab에서 옵션이 아니기 때문에 프레임별로 렌더링 된 출력 프레임을 이미지로 저장하기로 결정했습니다. 이 아이디어로 나중에 애니메이션으로 결합 될 수있는 일련의 이미지를 생성 할 수있었습니다.
구현 및 출력
이 섹션에서는 코드의 구현과 내가 얻은 출력을 안내해 드리겠습니다.
GPU 환경 설정
우선, 나는 창세기를 설치했습니다 :
그런 다음 GPU 가속을위한 Cuda 백엔드로 창세기를 초기화했습니다.
이것은 내가 얻은 출력입니다 :
장면을 만들고 구축합니다
결과를 저장하기위한 디렉토리를 만듭니다
가장 먼저 필요한 것은 Genesis가 렌더링 한 이미지를 저장할 수있는 폴더였습니다.
> os.makedirs () 함수는 지정된 경로에서 simulation_frames라는 폴더를 생성하고 ENDERS_OK = TRUE 인수는 폴더가 이미 존재하면 오류가 발생하지 않도록합니다.
이 방법으로, 나는 시뮬레이션에서 모든 프레임과 출력을 저장할 수있는 전용 장소를 가졌습니다.
장면을 초기화하십시오
다음으로 객체를 추가하고 그들과 상호 작용할 수있는 장면을 만들어야했습니다. .
gs.scene ()은 새로운 시뮬레이션 공간을 초기화하고 show_viewer = false 실시간 시각화를 비활성화합니다. 이 시점에서, 나는 구축을 시작할 준비가 된 빈 장면이있었습니다.
비행기와 상자를 추가하십시오
장면이 준비된 상태에서 객체를 추가하기 시작했습니다. 나는 처음으로 비행기를 추가했는데, 이는 땅으로 작용합니다.
GenesisException: No display detected. Use show_viewer=False for headless mode.
비행기는 시뮬레이션을위한 평평한베이스 역할을합니다. 기본적으로, 그것은 무한대이며 x-y 축을 따라 평평합니다.
다음, 나는 장면에 상자를 추가했다 :
나는 상자를 장면의 중앙에 (0, 0, 0)으로 설정했고, 너비가 0.5 단위, 키가 크고 깊이로 만들어 기본보다 작게 만들었습니다. scene = gs.Scene(show_viewer=False)
이제, 나는 간단한 설정을 가졌다 :지면과 같은 비행기와 그 위에 놓여있는 상자가있다.
카메라 추가
장면에서 무슨 일이 일어나고 있는지 캡처하기 위해 카메라를 추가했습니다. import genesis as gs
gs.init(backend=gs.cpu)
scene = gs.Scene(show_viewer=True)
나는 이미지 해상도를 320x240 픽셀로 설정하고 테스트를위한 실질적인 선택으로 카메라를 (3.5, 2.0, 2.5)로 배치하여 약간 위와 측면에서 장면을 명확하게 볼 수있었습니다. 상자의 초점을 유지하기 위해 카메라를 상자 중앙 바로 위에있는 (0, 0, 0.5)로 목표로 삼았습니다. 30도 시야 (FOV)를 사용하여 카메라는 장면의 좁고 집중된 관점을 포착했습니다.
장면을 구축하십시오
다음 단계는 시뮬레이션 및 렌더링을 위해 장면을 준비하는 것이 었습니다.
이 단계는 Genesis가 정시 (JIT) 컴파일을 사용하여 시뮬레이션을 최적화하기 때문에 중요합니다. 내가 장면을 만들 때, 창세기 :
장면의 객체에 대한 메모리를 할당했습니다
렌더링 및 물리 계산을위한 준비된 GPU 커널
시뮬레이션이 원활하게 실행되기 위해 필요한 모든 데이터 구조를 설정합니다.
이제 모든 것이 준비되었습니다 - 내 평면, 상자 및 카메라가 설정되어 장면이 제작되었습니다. GenesisException: No display detected. Use show_viewer=False for headless mode.
렌더링 및 저장 출력
시뮬레이션을 시각화하기 위해 프레임별로 출력을 렌더링하고 저장했습니다. 각 프레임은 Simulation_frames 디렉토리의 이미지로 저장되었습니다.
렌더링 프로세스 중에 처음 몇 개의 프레임이 빠르게 렌더링되었지만 (최대 2,297fps) 시뮬레이션이 진행됨에 따라 성능이 감소했습니다. FPS는 결국 프레임 25에 의해 약 0.33fps로 떨어졌습니다. 이것은 더 큰 장면에 대한 시뮬레이션의 계산 복잡성 또는 아마도 GPU 자원 제약 조건이 증가하기 때문일 수 있습니다. .
이것은 내가 얻은 출력입니다 :
-
이것들은 내가 얻은 이미지입니다 :
-
-
각 이미지는 카메라를 통해 볼 수 있듯이 시간이 지남에 따라 평면과 관련하여 상자가 어떻게 움직이는지를 보여줍니다. 시뮬레이션은 단계로 실행되며 각 단계마다 상자의 위치가 변경되어 상자가 움직이는 것처럼 보입니다.
이 예는 창세기가 간단한 물리적 상호 작용을 시뮬레이션하고 표시 할 수있는 방법을 강조합니다. 이 설정은 기본이지만 장면에서 객체가 어떻게 행동하는지에 대한 좋은 아이디어를 제공합니다. 그러나 창세기로보다 복잡하고 현실적인 시나리오를 만들 수 있습니다! 다음 섹션에서 이러한 기능 중 일부를 탐색 할 것입니다.
기원 탐색 : 기능 및 기능
객체와 장면 생성
Genesis를 사용하면 다양한 객체와 모프를 추가하여 복잡한 장면을 만들 수 있습니다. 물체는 비행기, 상자 및 구체와 같은 간단한 프리미티브에서 구체와 같은 로봇 및 지형과 같은 더 복잡한 엔티티에 이르기까지 다양합니다.
형상 프리미티브 :
gs.morphs.Plane
gs.morphs.box
gs.morphs.cylinder
gs.morphs.sphere
외부 파일 지원 :
Mujoco XML 로봇 구성을위한 에 대한 <:> urdf : gs.morphs.urdf
mesh : gs.morphs.mesh.
Genesis는 "Morph"라는 통합 된 개념을 사용하여 지오메트리를 캡슐화하고 정보를 제공합니다. 이 객체 지향 설계는 메소드를 사용하여 엔터티와 직접 상호 작용할 수 있습니다.
렌더링 및 시각화
Genesis의 주요 강점 중 하나는 고급 카메라 기능을 사용하여 자세한 시각적 출력을 만들 수있는 기능입니다. 카메라는 "헤드리스 모드"에서 작동하므로 디스플레이 화면이 없으면 이미지를 생성 할 수 있습니다. 일반 컬러 이미지 (RGB)를 포함하여 다양한 유형의 비주얼, 객체가 얼마나 멀리 떨어져 있는지 보여주는 깊이 맵, 장면의 다른 부분에 레이블을 지정하는 세분화 마스크 및 표면 세부 사항을 나타내는 일반 맵을 생성 할 수 있습니다.
녹음 동영상
카메라가 시뮬레이션의 각 프레임을 자동으로 녹음하도록하여 비디오를 만들 수 있습니다. 녹음 중에 카메라를 이동하여 비디오를보다 역동적이고 몰입 할 수 있습니다.
예를 들어 프레임을 캡처하면서 장면 주변의 원형 경로로 이동하도록 카메라를 구성 할 수 있습니다. cam.start_recording () 함수가 녹음을 시작하고 시뮬레이션의 각 단계에서 카메라의 위치가 업데이트됩니다. 모든 프레임이 캡처되면 cam.stop_recording ()은 비디오를 "video.mp4"로 저장합니다.
최종 비디오는 시뮬레이션을 부드럽게 볼 수있어 객체가 시간이 지남에 따라 상호 작용하고 움직이는 방법을 보여줍니다.
운동 작업을위한 지형 생성
로봇 공학 및 AI 훈련을 위해 다양한 유형의 지형을 만들 수도 있습니다. 내장 지형 옵션을 사용하거나 Gs.Morphs.terRain으로 사용자 정의 높이 맵을 제공하여 직접 설계 할 수 있습니다. 이 지형은 로봇이 어떻게 움직이는 지 테스트 및 훈련에 적합하여 창세기가 로봇 연구를위한 훌륭한 도구입니다.
확장 성
여러 가지 방법으로 시뮬레이션을 사용자 정의 할 수도 있습니다. 객체에 현실적인 텍스처를 추가하여 더 생생하게 보이게 할 수 있습니다. 또한 모델 가져 오기를위한 많은 파일 형식을 지원하며 형식이 지원되지 않으면 추가하도록 요청할 수 있습니다. 또한 개인화 된 파일 및 설정을 사용하여 고유 한 사용자 정의 객체 모양 (Morphs)을 만들 수 있습니다. 결론
이 튜토리얼은 창세기를 시작하는 데 도움이되는 간단한 예를 제공했습니다. 우리는이 강력한 물리 엔진이 어떻게 작동하는지 보여주기 위해 장면 생성, 객체 추가 및 렌더링 출력과 같은 기본 사항을 다루었습니다.
그러나 이것은 창세기가 할 수있는 일의 시작일뿐입니다. 강력한 GPU 및 충분한 메모리와 같은 올바른 하드웨어를 사용하면 많은 가능성이 있습니다. 복잡한 로봇 공학 시뮬레이션 또는 AI 교육을위한 고품질 데이터 세트를 만드는 데 사용할 수 있습니다. 그것을 설정하는 것은 까다로울 수 있지만, 그것은 큰 잠재력을 가진 도구입니다!
.