Rumah >Peranti teknologi >AI >Genesis Fizik Enjin: Panduan Langkah demi Langkah untuk Menubuhkan Kejadian

Genesis Fizik Enjin: Panduan Langkah demi Langkah untuk Menubuhkan Kejadian

Christopher Nolan
Christopher Nolanasal
2025-03-01 09:54:09336semak imbas

Tahun lepas, Kejadian dikeluarkan sebagai alat baru yang menarik untuk mewujudkan simulasi fizik yang realistik, dunia 4D interaktif, dan banyak lagi. Saya tidak sabar -sabar untuk mencubanya, tetapi mendapatkannya bekerja tidak mudah. Saya harus mengakui saya menghadapi banyak cabaran semasa persediaan. 

Dalam tutorial ini, saya akan berkongsi masalah secara ringkas yang saya lari, dan tunjukkan bagaimana saya akhirnya berjaya menggunakan Google Colab dan beberapa helah.

Jika anda hanya mahukan gambaran keseluruhan Kejadian, lihat artikel saya sebelumnya, Kejadian Fizik Enjin: Panduan dengan Contoh.

pengalaman persediaan awal saya dengan Kejadian

Apabila saya mula bekerja dengan Kejadian, saya mengikuti langkah pemasangan dalam dokumentasi. Segera, saya memukul masalah dengan kebergantungan. Kejadian memerlukan versi tertentu modul yang dipanggil Taichi (1.7.x), tetapi macOS saya tidak menyokongnya. Untuk rujukan, Mac saya berumur 8 tahun ....

Selepas beberapa penyelidikan, saya menyedari pengguna lain mempunyai masalah yang sama, walaupun dengan komputer yang lebih baik. Selepas berjam -jam usaha, dan mendapati bahawa Kejadian hanya berfungsi dengan versi python tertentu, akhirnya saya memasangnya.

tetapi masalah baru muncul. Ia tidak akan menyebabkan apa -apa, dan saya mempunyai beberapa masalah dengan OpenGL. Walaupun saya cuba menjalankan fail contoh dari github mereka, saya menghadapi lebih banyak kesilapan dan konflik.

Kemudian, apabila saya fikir saya telah menyusunnya, saya mula mendapat kesilapan seperti "Seragam tidak dijumpai," yang bermaksud beberapa tetapan rendering telah hilang.

Sepanjang proses ini, saya meneliti secara dalam talian untuk melihat sama ada orang lain menghadapi masalah yang sama. Ternyata saya bukan satu -satunya orang yang menghadapi kesukaran yang sama, dan ramai yang tidak dapat mencari penyelesaian untuk membuat skrip mereka berfungsi.

bagaimana saya membuat kerja Kejadian: Google Colab untuk menyelamat

Selepas kekecewaan awal, saya memutuskan untuk mencuba Google Colab dengan akaun Pro, dan ia menjadi tepat apa yang saya perlukan. Menggunakan sumber GPU Colab, saya dapat:

  • Pasang semua kebergantungan yang diperlukan tanpa sebarang masalah.
  • Gunakan backend GPU untuk mencapai prestasi yang hebat dan rendering realistik.
  • Akhirnya, jalankan contoh asas dan meneroka potensi Kejadian.

Saya memilih NVIDIA A100-SXM4-40GB, yang terbukti cukup kuat untuk mengendalikan simulasi Kejadian dengan cekap. 

Sebaik sahaja saya menyediakan persekitaran Google Colab saya dan dipasang Kejadian, saya cuba menjalankan contoh paling mudah dari dokumentasi:

import genesis as gs
gs.init(backend=gs.cpu)
scene = gs.Scene(show_viewer=True)

Contoh ini harus memulakan Kejadian dengan backend CPU dan memaparkan adegan asas. Walau bagaimanapun, saya segera berlari ke dalam kesilapan berikut:

GenesisException: No display detected. Use show_viewer=False for headless mode.

Mesej ralat menunjukkan bahawa Kejadian cuba membuat tetingkap grafik untuk menjadikan tempat kejadian, tetapi Google Colab tidak menyokong visualisasi masa nyata. Colab berjalan dalam persekitaran terpencil tanpa akses kepada paparan tempatan, jadi show_viewer = parameter benar di gs.scene () inisialisasi tidak berfungsi.

Seperti yang dicadangkan oleh mesej ralat, saya mengubahsuai kod untuk melumpuhkan penonton:

import genesis as gs
gs.init(backend=gs.cpu)
scene = gs.Scene(show_viewer=True)

Ini membenarkan skrip untuk dilaksanakan tanpa terhempas. Walau bagaimanapun, pendekatan ini bermakna tidak ada cara untuk memvisualisasikan hasilnya secara langsung.

Selepas melihat dalam talian, saya dapati bahawa orang lain menghadapi masalah yang sama. Banyak penyelesaian yang dicadangkan yang melibatkan mengkonfigurasi persekitaran OpenGL jauh atau menggunakan XVFB untuk membuat paparan maya. Malangnya, saya tidak dapat mendapatkan kaedah ini untuk bekerja dengan pasti di COLAB, mungkin disebabkan oleh konflik dan keterbatasan alam sekitar.

Pada ketika ini, saya memerlukan penyelesaian yang lebih praktikal!

Sejak rendering masa nyata bukan pilihan dalam colab, saya memutuskan untuk menyimpan bingkai output yang diberikan oleh bingkai sebagai imej. Dengan idea -idea ini, saya dapat menghasilkan urutan imej yang kemudiannya boleh digabungkan menjadi animasi.

pelaksanaan dan output

Di bahagian ini, saya akan membimbing anda melalui pelaksanaan kod dan output yang saya dapat.

menyediakan persekitaran GPU

Pertama sekali, saya memasang Kejadian:

GenesisException: No display detected. Use show_viewer=False for headless mode.

Kemudian, saya memulakan Kejadian dengan backend CUDA untuk pecutan GPU.

scene = gs.Scene(show_viewer=False)

Ini adalah output yang saya dapat:

Membuat dan Membina Adegan
pip install genesis-world

Buat direktori untuk menyimpan hasil

Perkara pertama yang saya perlukan adalah folder di mana Kejadian dapat menyelamatkan imej yang diberikannya. 

fungsi os.makedirs () membuat folder yang dipanggil simulasi_frames dalam laluan yang ditentukan, dan argumen yang ada
import genesis as gs
gs.init(backend=gs.cuda)
Dengan cara ini, saya mempunyai tempat yang berdedikasi untuk menyelamatkan semua bingkai dan output dari simulasi saya.

Inisialisasi adegan

Seterusnya, saya perlu membuat adegan di mana saya boleh menambah objek dan berinteraksi dengan mereka.

gs.scene () memulakan ruang simulasi baru, dan show_viewer = palsu melumpuhkan visualisasi masa nyata. Pada ketika ini, saya mempunyai adegan kosong yang bersedia untuk memulakan bangunan.

[Genesis] [INFO] Running on [NVIDIA A100-SXM4-40GB] with backend gs.cuda. Device memory: 39.56 GB.
[Genesis] [INFO] ? Genesis initialized. Version: 0.2.1, Seed: None, Precision: 32.
tambahkan kapal terbang dan kotak

Dengan adegan siap, saya mula menambah objek. Saya mula -mula menambah pesawat, yang bertindak sebagai tanah.

Pesawat berfungsi sebagai asas rata untuk simulasi. Secara lalai, ia tidak terhingga dan terletak rata di sepanjang paksi x-y.

import os
save_dir = "/content/simulation_frames"
os.makedirs(save_dir, exist_ok=True)
Seterusnya, saya menambah kotak ke tempat kejadian:

Saya menetapkan kotak di (0, 0, 0), tepat di tengah -tengah tempat kejadian, dan saya mengubah saiznya menjadi 0.5 unit lebar, tinggi, dan mendalam, menjadikannya lebih kecil daripada lalai.

Sekarang, saya mempunyai persediaan mudah: pesawat sebagai tanah dan kotak yang terletak di atasnya.
scene = gs.Scene(show_viewer=False)

Tambah kamera

Untuk menangkap apa yang berlaku di tempat kejadian, saya menambah kamera.

import genesis as gs
gs.init(backend=gs.cpu)
scene = gs.Scene(show_viewer=True)

Saya menetapkan resolusi imej kepada 320x240 piksel, pilihan praktikal untuk ujian, dan meletakkan kamera di (3.5, 2.0, 2.5), yang memberikan pandangan yang jelas tentang adegan dari sedikit di atas dan ke sisi. Untuk memastikan kotak itu tetap fokus, saya mensasarkan kamera di (0, 0, 0.5), tepat di atas pusat kotak. Dengan medan pandangan 30 darjah (FOV), kamera menangkap perspektif yang sempit dan fokus di tempat kejadian. 

Bina adegan

Langkah seterusnya adalah untuk membina tempat kejadian untuk menyediakannya untuk simulasi dan rendering.

GenesisException: No display detected. Use show_viewer=False for headless mode.

Langkah ini sangat penting kerana Kejadian menggunakan kompilasi hanya dalam masa (JIT) untuk mengoptimumkan simulasi. Apabila saya membina tempat kejadian, Kejadian:

  • memori yang diperuntukkan untuk objek di tempat kejadian.
  • Sediakan biji GPU untuk pengiraan rendering dan fizik.
  • Sediakan semua struktur data yang diperlukan untuk simulasi berjalan lancar.

Sekarang semuanya sudah siap -pesawat, kotak, dan kamera saya ditubuhkan, dan tempat kejadian dibina.

memberikan dan menjimatkan output

Untuk memvisualisasikan simulasi, saya memberikan dan menyimpan bingkai output dengan bingkai. Setiap bingkai disimpan sebagai imej dalam direktori Simulation_Frames. 

scene = gs.Scene(show_viewer=False)

Semasa proses rendering, saya mendapati bahawa beberapa bingkai pertama diberikan dengan cepat (sehingga 2,297 fps), tetapi prestasi menurun apabila simulasi berkembang. FPS akhirnya jatuh ke sekitar 0.33 fps dengan bingkai 25. Ini mungkin disebabkan oleh peningkatan kerumitan pengiraan simulasi atau mungkin kekangan sumber GPU untuk adegan yang lebih besar.

ini adalah output yang saya dapat:

pip install genesis-world

ini adalah imej yang saya dapat:

Genesis Fizik Enjin: Panduan Langkah demi Langkah untuk Menubuhkan Kejadian

Genesis Fizik Enjin: Panduan Langkah demi Langkah untuk Menubuhkan Kejadian

Genesis Fizik Enjin: Panduan Langkah demi Langkah untuk Menubuhkan Kejadian

Genesis Fizik Enjin: Panduan Langkah demi Langkah untuk Menubuhkan Kejadian Setiap imej menunjukkan bagaimana kotak bergerak berhubung dengan pesawat dari masa ke masa, seperti yang dilihat melalui kamera. Simulasi berjalan dalam langkah -langkah, dan dengan setiap langkah, kedudukan kotak berubah, menjadikannya kelihatan seperti kotak bergerak.

Contoh ini menyoroti bagaimana Kejadian dapat mensimulasikan dan memaparkan interaksi fizikal yang mudah. Walaupun persediaan ini adalah asas, ia memberikan idea yang baik tentang bagaimana objek berkelakuan di tempat kejadian. Tetapi anda benar -benar boleh membuat senario yang lebih kompleks dan realistik dengan Kejadian! Kami akan meneroka beberapa keupayaan ini di bahagian seterusnya. Genesis Fizik Enjin: Panduan Langkah demi Langkah untuk Menubuhkan Kejadian

meneroka Kejadian: keupayaan dan ciri

objek dan penciptaan adegan

Kejadian membolehkan anda membuat adegan kompleks dengan menambahkan pelbagai objek dan morphs. Objek boleh berkisar dari primitif mudah seperti pesawat, kotak, dan sfera ke entiti yang lebih kompleks seperti robot dan medan.

Bentuk primitif:

  • gs.morphs.plane
  • gs.morphs.box
  • gs.morphs.cylinder
  • gs.morphs.sphere

Sokongan fail luaran:

    mjcf: gs.morphs.mjcf untuk konfigurasi robot mujoco xml.
  • urdf: gs.morphs.urdf untuk fail format penerangan robot bersatu.
  • mesh: gs.morphs.mesh untuk aset 3D seperti .obj, .ply, .stl, .glb, dan .gltf.
Kejadian menggunakan konsep bersatu yang disebut "morph," yang merangkumi geometri dan menimbulkan maklumat. Reka bentuk berorientasikan objek ini membolehkan interaksi langsung dengan entiti menggunakan kaedah mereka.

rendering dan visualisasi

Salah satu kekuatan utama Kejadian adalah keupayaannya untuk membuat output visual terperinci menggunakan ciri -ciri kamera canggih. Kamera berfungsi dalam "mod tanpa kepala," yang bermaksud mereka boleh menjana imej tanpa memerlukan skrin paparan. Mereka boleh menghasilkan pelbagai jenis visual, termasuk imej warna biasa (RGB), peta kedalaman yang menunjukkan sejauh mana objek, topeng segmentasi yang melabelkan bahagian yang berlainan di tempat kejadian, dan peta normal yang mewakili butiran permukaan.

rakaman video

anda boleh membuat video dengan membiarkan kamera secara automatik merakam setiap bingkai simulasi. Anda juga boleh menggerakkan kamera semasa rakaman untuk menjadikan video lebih dinamik dan mendalam.

Sebagai contoh, anda boleh mengkonfigurasi kamera untuk bergerak di jalan bulat di sekitar tempat kejadian sambil menangkap bingkai. Fungsi cam.start_recording () memulakan rakaman, dan semasa setiap langkah simulasi, kedudukan kamera dikemas kini. Sebaik sahaja semua bingkai ditangkap, cam.stop_recording () menyimpan video sebagai "video.mp4".

Video akhir memberikan pandangan yang lancar tentang simulasi, menunjukkan bagaimana objek berinteraksi dan bergerak dari masa ke masa.

Generasi Terrain untuk Tugas Locomotion

Anda juga boleh membuat pelbagai jenis medan untuk robotik dan latihan AI. Anda boleh menggunakan pilihan medan terbina dalam atau merancang sendiri dengan menyediakan peta ketinggian tersuai dengan gs.morphs.terrain. Medan ini sesuai untuk menguji dan melatih bagaimana robot bergerak, menjadikan Kejadian sebagai alat yang hebat untuk penyelidikan robotik.

extensibility

anda juga boleh menyesuaikan simulasi anda dalam beberapa cara. Anda boleh menambah tekstur yang realistik kepada objek, menjadikannya kelihatan lebih hidup. Ia juga menyokong banyak format fail untuk mengimport model, dan jika format tidak disokong, anda boleh meminta ia ditambah. Di samping itu, anda boleh membuat bentuk objek tersuai anda sendiri (dipanggil morphs) menggunakan fail dan tetapan yang diperibadikan.

Kesimpulan

Tutorial ini memberikan contoh mudah untuk membantu anda memulakan Kejadian. Kami meliputi asas -asas, seperti membuat adegan, menambah objek, dan memberikan output, untuk menunjukkan bagaimana enjin fizik yang kuat ini berfungsi.

Walau bagaimanapun, ini hanya permulaan dari apa yang boleh dilakukan oleh Kejadian. Dengan perkakasan yang betul, seperti GPU yang kuat dan memori yang cukup, terdapat banyak kemungkinan. Anda boleh menggunakannya untuk simulasi robotik kompleks atau untuk membuat dataset berkualiti tinggi untuk latihan AI. Walaupun menetapkannya boleh menjadi rumit, ia pasti alat yang berpotensi besar!

Atas ialah kandungan terperinci Genesis Fizik Enjin: Panduan Langkah demi Langkah untuk Menubuhkan Kejadian. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn