/PyFleX

Customized Python APIs for NVIDIA FleX. Adapted from WangYixuan12/dyn-res-pile-manip and YunzhuLi/PyFleX.

Primary LanguageC++

PyFleX

Install

# 1) install anaconda (https://docs.anaconda.com/free/anaconda/install/linux/)
# 2) install docker-ce (https://docs.docker.com/engine/install/ubuntu/)
# 3) install nvidia-container-toolkit (https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html)
# 4) restart docker by `sudo systemctl restart docker` (docker service name can be found by `sudo systemctl list-units --type=service | grep -i docker`)

# preparations
cd third-party
git clone git@github.com:kywind/PyFleX.git
conda install pybind11 -c conda-forge  # or pip install "pybind11[global]"
sudo docker pull xingyu/softgym

# compile pyflex in docker image
# re-compile if source code changed
# make sure ${PWD}/PyFleX is the pyflex root path when re-compiling
sudo docker run \
    -v ${PWD}/PyFleX:/workspace/PyFleX \
    -v ${CONDA_PREFIX}:/workspace/anaconda \
    -v /tmp/.X11-unix:/tmp/.X11-unix \
    --gpus all \
    -e DISPLAY=$DISPLAY \
    -e QT_X11_NO_MITSHM=1 \
    -it xingyu/softgym:latest bash \
    -c "export PATH=/workspace/anaconda/bin:$PATH; cd /workspace/PyFleX; export PYFLEXROOT=/workspace/PyFleX; export PYTHONPATH=/workspace/PyFleX/bindings/build:$PYTHONPATH; export LD_LIBRARY_PATH=$PYFLEXROOT/external/SDL2-2.0.4/lib/x64:$LD_LIBRARY_PATH; cd bindings; mkdir build; cd build; /usr/bin/cmake ..; make -j"

# run these if you do not have these paths yet in ~/.bashrc
echo '# PyFleX' >> ~/.bashrc
echo "export PYFLEXROOT=${PWD}/PyFleX" >> ~/.bashrc
echo 'export PYTHONPATH=${PYFLEXROOT}/bindings/build:$PYTHONPATH' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=${PYFLEXROOT}/external/SDL2-2.0.4/lib/x64:$LD_LIBRARY_PATH' >> ~/.bashrc
echo '' >> ~/.bashrc

# finally, restart the terminal

Try pre-compiled demo

click on /PyFleX/precompiled_demo/linux64/NvFlexDemoReleaseCUDA_x64 or run ./precompiled_demo/linux64/NvFlexDemoReleaseCUDA_x64 inside /PyFleX.

Run Examples

python examples/test_BoxBath.py

Scenes

NOTE: Not all scenes are supported yet. (I'm working on this now.) Check example python files under examples/ for supported scenes!

# Example usage
scene_idx = your_scene_idx
scene_params = np.array([your_scene_params])
pyflex.set_scene(scene_idx, scene_params, 0)
scene_idx Source
0 bindings/scenes/yz_bunnybath.h
1 bindings/scenes/yz_boxbath.h
2 bindings/scenes/yz_boxbathext.h
3 bindings/scenes/yz_dambreak.h
4 bindings/scenes/yz_rigidfall.h
5 bindings/scenes/yz_ricefall.h
6 bindings/scenes/yz_softbody.h
7 bindings/scenes/yz_fluidshake.h
8 bindings/scenes/yz_fluidiceshake.h
9 bindings/scenes/yz_massrope.h
10 bindings/scenes/yz_flag.h
11 bindings/scenes/yz_softrod.h
12 bindings/scenes/yz_clothrigid.h
13 bindings/scenes/yz_granular.h
14 bindings/scenes/yz_bunnygrip.h
15 bindings/scenes/yz_clothmanip.h
16 bindings/scenes/yz_softfall.h
17 bindings/scenes/yz_fluidpour.h
18 bindings/scenes/yz_granularmanip.h
19 bindings/scenes/yz_fluid_and_box.h
20 bindings/scenes/yx_coffee.h
21 bindings/scenes/yx_capsule.h
22 bindings/scenes/yx_carrots.h
23 bindings/scenes/yx_coffee_capsule.h
24 bindings/scenes/by_apple.h
25 bindings/scenes/by_singleycb.h
26 bindings/scenes/by_softrope.h
27 bindings/scenes/by_cloth.h
28 bindings/scenes/by_multiycb.h
29 bindings/scenes/by_softgym_cloth.h
30 bindings/scenes/softgym_cloth_2.h
31 bindings/scenes/by_roperigid.h
32 bindings/scenes/by_rigidgranular.h
33 bindings/scenes/by_rigidcloth.h
34 bindings/scenes/by_ropecloth.h
35 bindings/scenes/by_granular.h
36 bindings/scenes/by_bowlfluid.h
37 bindings/scenes/by_softbody.h
38 bindings/scenes/by_ropegranular.h
39 bindings/scenes/by_rigidrope.h