在Ubuntu 22.04上部署Habitat仿真环境需要系统性的准备工作。首先确认系统版本:
bash复制lsb_release -a
需要安装的核心依赖包包括:
执行以下命令安装基础工具链:
bash复制sudo apt update && sudo apt install -y \
build-essential \
cmake \
git \
libjpeg-dev \
libglm-dev \
libgl1-mesa-dev \
libegl1-mesa-dev \
libxrandr-dev \
libxinerama-dev \
libxcursor-dev \
libxi-dev \
libxext-dev \
libwayland-dev \
libxkbcommon-dev
注意:Ubuntu 22.04默认的GCC版本为11.2.0,已满足要求。如需特定版本可通过update-alternatives管理多版本。
推荐使用conda创建独立环境:
bash复制conda create -n habitat python=3.8
conda activate habitat
pip install --upgrade pip setuptools
bash复制git clone --branch stable https://github.com/facebookresearch/habitat-sim.git
cd habitat-sim
git submodule update --init --recursive
编译配置选项说明:
--with-cuda:启用CUDA加速--headless:无图形界面模式--with-audio:启用音频支持典型编译命令:
bash复制python setup.py install \
--with-cuda \
--headless \
--bullet
bash复制sudo apt install libglu1-mesa-dev freeglut3-dev mesa-common-dev
bash复制sudo apt install libegl1-mesa-dev
bash复制nvidia-smi
nvcc --version
bash复制git clone https://github.com/facebookresearch/habitat-lab.git
cd habitat-lab
pip install -e .
额外功能组件安装:
bash复制pip install habitat-baselines
下载测试数据集:
bash复制python -m habitat_sim.utils.datasets_download \
--uids habitat_test_scenes \
--data-path data/
验证安装:
bash复制python examples/example.py
典型错误信息:
code复制X Error of failed request: BadAccess
Major opcode: 130 (MIT-SHM)
Minor opcode: 1 (X_ShmAttach)
根本原因:X服务器共享内存访问权限问题
bash复制xhost +
bash复制sudo nano /etc/X11/Xwrapper.config
添加:
code复制allowed_users = anybody
needs_root_rights = yes
bash复制sudo sysctl -w kernel.shmall=4194304
sudo sysctl -w kernel.shmmax=17179869184
python复制os.environ["DISABLE_MIT_SHM"] = "1"
python复制os.environ["HABITAT_SIM_EGL_CONFIG"] = "1"
python复制os.environ["DISPLAY"] = ":0"
python复制import habitat_sim
sim_cfg = habitat_sim.SimulatorConfiguration()
agent_cfg = habitat_sim.agent.AgentConfiguration()
sim = habitat_sim.Simulator(habitat_sim.Configuration(sim_cfg, [agent_cfg]))
python复制test_scene = "data/scene_datasets/habitat-test-scenes/skokloster-castle.glb"
sim_cfg.scene_id = test_scene
sim.reconfigure(sim_cfg)
python复制sim_cfg.create_renderer = True
sim_cfg.enable_texture_compression = True
python复制sim_cfg.frustum_culling = True
python复制sim_cfg.enable_physics = True
sim_cfg.physics_config_file = "./data/default.physics_config.json"
bash复制glxinfo | grep "OpenGL version"
bash复制eglinfo
bash复制glxgears
| 错误类型 | 现象 | 解决方案 |
|---|---|---|
| GLXBadContext | 上下文创建失败 | 更新Mesa驱动,禁用独显切换 |
| EGL_BAD_ACCESS | 权限问题 | 设置XLIB_SKIP_ARGB_VISUALS=1 |
| CUDA_ERROR | 显存不足 | 减少纹理分辨率,关闭AA |
| Segmentation Fault | 内存越界 | 检查Python与C++库版本匹配 |
bash复制export HABITAT_SIM_DEBUG=1
bash复制ulimit -c unlimited
gdb python core
bash复制export HABITAT_SIM_VULKAN_GPU=0
bash复制# /etc/sysctl.conf
vm.swappiness = 10
vm.vfs_cache_pressure = 50
NVIDIA性能模式设置:
bash复制nvidia-settings -a '[gpu:0]/GPUPowerMizerMode=1'
锁定内存防止交换:
python复制import ctypes
libc = ctypes.CDLL("libc.so.6")
libc.mlockall(0x0002)
dockerfile复制FROM nvidia/cuda:11.7.1-base-ubuntu22.04
RUN apt update && apt install -y \
libgl1-mesa-glx \
libegl1-mesa \
xvfb
bash复制Xvfb :1 -screen 0 1024x768x24 &
export DISPLAY=:1
bash复制docker run --gpus all \
--ipc=host \
--ulimit memlock=-1 \
-e DISPLAY=$DISPLAY \
-v /tmp/.X11-unix:/tmp/.X11-unix