From 91929855347224db5fbaaf897b709ad75163e299 Mon Sep 17 00:00:00 2001 From: eust-w Date: Thu, 3 Jul 2025 10:06:41 +0000 Subject: [PATCH] add env --- environment_check.log | 44 +++ environment_check_results.json | 2 +- environment_setup.log | 291 ++++++++++++++++++ environment_verify.log | 48 +++ environment_verify_results.json | 105 +++++++ task_config/empty_cup_place.yml | 26 ++ .../pytorch3d.egg-info/PKG-INFO | 7 +- .../_C.cpython-310-x86_64-linux-gnu.so | Bin 0 -> 167272 bytes .../_C.cpython-38-x86_64-linux-gnu.so | Bin 19132296 -> 19132296 bytes 9 files changed, 521 insertions(+), 2 deletions(-) create mode 100644 environment_verify.log create mode 100644 environment_verify_results.json create mode 100644 task_config/empty_cup_place.yml create mode 100755 third_party/pytorch3d_simplified/pytorch3d/_C.cpython-310-x86_64-linux-gnu.so diff --git a/environment_check.log b/environment_check.log index 484d23f..0575818 100644 --- a/environment_check.log +++ b/environment_check.log @@ -44,3 +44,47 @@ Software: 2025-07-01 11:57:08,308 - INFO - ✓ GPU检查: 检测到NVIDIA GPU 2025-07-01 11:57:08,308 - INFO - ✓ NVIDIA驱动版本检查: NVIDIA驱动版本 570.124,满足要求 (>=470),同时满足去噪要求 (>=520) 2025-07-01 11:57:08,308 - INFO - ✓ CUDA版本检查: CUDA版本 12.8,不是推荐的 12.1,可能会遇到兼容性问题 +2025-07-03 09:54:02,875 - INFO - +=== RoboTwin Dependencies === +2025-07-03 09:54:02,875 - INFO - +Python versions: +* Python 3.8, 3.10 + +Operating systems: +* Linux: Ubuntu 18.04+, Centos 7+ + +Hardware: +* Rendering: NVIDIA or AMD GPU + * Recommended CUDA Version: 12.1 +* Ray tracing: NVIDIA RTX GPU or AMD equivalent +* Ray-tracing Denoising: NVIDIA GPU +* GPU Simulation: NVIDIA GPU + +Software: +* Ray tracing: NVIDIA Driver >= 470 +* Denoising (OIDN): NVIDIA Driver >= 520 +* CUDA Version: 12.1 +* Conda: Required + +2025-07-03 09:54:02,876 - INFO - 执行: cat /etc/os-release +2025-07-03 09:54:02,878 - INFO - 命令执行成功: cat /etc/os-release +2025-07-03 09:54:02,878 - INFO - === 检查Conda是否已安装 === +2025-07-03 09:54:02,878 - INFO - 执行: conda --version +2025-07-03 09:54:03,259 - INFO - 命令执行成功: conda --version +2025-07-03 09:54:03,259 - INFO - === 检查Conda初始化状态 === +2025-07-03 09:54:03,259 - INFO - 执行: conda info | grep -i 'initialized' +2025-07-03 09:54:03,908 - ERROR - 命令执行失败: conda info | grep -i 'initialized' +2025-07-03 09:54:03,908 - ERROR - 错误信息: +2025-07-03 09:54:03,908 - INFO - === 检查NVIDIA GPU === +2025-07-03 09:54:03,908 - INFO - 执行: nvidia-smi +2025-07-03 09:54:04,025 - INFO - 命令执行成功: nvidia-smi +2025-07-03 09:54:04,025 - INFO - === 检查CUDA版本 === +2025-07-03 09:54:04,025 - INFO - 执行: nvcc --version +2025-07-03 09:54:04,028 - INFO - 命令执行成功: nvcc --version +2025-07-03 09:54:04,028 - INFO - +=== 环境依赖检查结果 === +2025-07-03 09:54:04,028 - INFO - ✓ 操作系统检查: Ubuntu 20.04,满足要求 (Ubuntu 18.04+) +2025-07-03 09:54:04,028 - INFO - ✓ Conda检查: Conda已安装 (版本 25.3.0), 但可能未正确初始化,请运行 'conda init bash' +2025-07-03 09:54:04,028 - INFO - ✓ GPU检查: 检测到NVIDIA GPU +2025-07-03 09:54:04,028 - INFO - ✓ NVIDIA驱动版本检查: NVIDIA驱动版本 570.124,满足要求 (>=470),同时满足去噪要求 (>=520) +2025-07-03 09:54:04,028 - INFO - ✓ CUDA版本检查: CUDA版本 12.1,满足建议版本 (12.1) diff --git a/environment_check_results.json b/environment_check_results.json index 8a278ee..11ea9c4 100644 --- a/environment_check_results.json +++ b/environment_check_results.json @@ -1 +1 @@ -{"dependencies_met": true, "check_results": [{"name": "\u64cd\u4f5c\u7cfb\u7edf\u68c0\u67e5", "passed": true, "details": "Ubuntu 20.04\uff0c\u6ee1\u8db3\u8981\u6c42 (Ubuntu 18.04+)"}, {"name": "Conda\u68c0\u67e5", "passed": true, "details": "Conda\u5df2\u5b89\u88c5 (\u7248\u672c 25.3.0), \u4f46\u53ef\u80fd\u672a\u6b63\u786e\u521d\u59cb\u5316\uff0c\u8bf7\u8fd0\u884c 'conda init bash'"}, {"name": "GPU\u68c0\u67e5", "passed": true, "details": "\u68c0\u6d4b\u5230NVIDIA GPU"}, {"name": "NVIDIA\u9a71\u52a8\u7248\u672c\u68c0\u67e5", "passed": true, "details": "NVIDIA\u9a71\u52a8\u7248\u672c 570.124\uff0c\u6ee1\u8db3\u8981\u6c42 (>=470)\uff0c\u540c\u65f6\u6ee1\u8db3\u53bb\u566a\u8981\u6c42 (>=520)"}, {"name": "CUDA\u7248\u672c\u68c0\u67e5", "passed": true, "details": "CUDA\u7248\u672c 12.8\uff0c\u4e0d\u662f\u63a8\u8350\u7684 12.1\uff0c\u53ef\u80fd\u4f1a\u9047\u5230\u517c\u5bb9\u6027\u95ee\u9898"}]} \ No newline at end of file +{"dependencies_met": true, "check_results": [{"name": "\u64cd\u4f5c\u7cfb\u7edf\u68c0\u67e5", "passed": true, "details": "Ubuntu 20.04\uff0c\u6ee1\u8db3\u8981\u6c42 (Ubuntu 18.04+)"}, {"name": "Conda\u68c0\u67e5", "passed": true, "details": "Conda\u5df2\u5b89\u88c5 (\u7248\u672c 25.3.0), \u4f46\u53ef\u80fd\u672a\u6b63\u786e\u521d\u59cb\u5316\uff0c\u8bf7\u8fd0\u884c 'conda init bash'"}, {"name": "GPU\u68c0\u67e5", "passed": true, "details": "\u68c0\u6d4b\u5230NVIDIA GPU"}, {"name": "NVIDIA\u9a71\u52a8\u7248\u672c\u68c0\u67e5", "passed": true, "details": "NVIDIA\u9a71\u52a8\u7248\u672c 570.124\uff0c\u6ee1\u8db3\u8981\u6c42 (>=470)\uff0c\u540c\u65f6\u6ee1\u8db3\u53bb\u566a\u8981\u6c42 (>=520)"}, {"name": "CUDA\u7248\u672c\u68c0\u67e5", "passed": true, "details": "CUDA\u7248\u672c 12.1\uff0c\u6ee1\u8db3\u5efa\u8bae\u7248\u672c (12.1)"}]} \ No newline at end of file diff --git a/environment_setup.log b/environment_setup.log index 4c37f7d..17669f7 100644 --- a/environment_setup.log +++ b/environment_setup.log @@ -309,3 +309,294 @@ 2025-07-02 02:54:03,610 - INFO - ✗ 下载资源 2025-07-02 02:54:03,610 - INFO - ✓ 修改mplib - 移除convex=True 2025-07-02 02:54:03,610 - INFO - ✓ 修改mplib - 移除 or collide +2025-07-02 07:28:37,687 - INFO - === 获取conda基础路径 === +2025-07-02 07:28:37,687 - INFO - 执行: conda info --base +2025-07-02 07:28:38,267 - INFO - 命令执行成功: conda info --base +2025-07-02 07:28:38,267 - INFO - Conda 基础路径: /opt/conda +2025-07-02 07:28:38,267 - INFO - === 安装Vulkan === +2025-07-02 07:28:38,267 - INFO - 执行: sudo apt install -y libvulkan1 mesa-vulkan-drivers vulkan-tools +2025-07-02 07:28:38,268 - ERROR - 命令执行失败: sudo apt install -y libvulkan1 mesa-vulkan-drivers vulkan-tools +2025-07-02 07:28:38,268 - INFO - === 检查是否存在RoboTwin环境 === +2025-07-02 07:28:38,268 - INFO - 执行: conda env list | grep -w RoboTwin || echo '' +2025-07-02 07:28:38,842 - INFO - 命令执行成功: conda env list | grep -w RoboTwin || echo '' +2025-07-02 07:28:38,842 - INFO - RoboTwin环境不存在,将创建新环境 +2025-07-02 07:28:38,842 - INFO - === 创建conda环境 === +2025-07-02 07:28:38,842 - INFO - 执行: conda create -n RoboTwin python=3.8 -y +2025-07-02 07:30:50,205 - INFO - 命令执行成功: conda create -n RoboTwin python=3.8 -y +2025-07-02 07:30:50,205 - INFO - 开始安装基本依赖包... +2025-07-02 07:30:50,205 - INFO - === 安装基本依赖 === +2025-07-02 07:30:50,205 - INFO - 执行: source /opt/conda/etc/profile.d/conda.sh && conda activate RoboTwin && pip install torch==2.4.1 torchvision sapien==3.0.0b1 scipy==1.10.1 mplib==0.1.1 gymnasium==0.29.1 trimesh==4.4.3 open3d==0.18.0 imageio==2.34.2 pydantic zarr openai huggingface_hub==0.25.0 +2025-07-02 07:32:27,098 - ERROR - 命令执行失败: source /opt/conda/etc/profile.d/conda.sh && conda activate RoboTwin && pip install torch==2.4.1 torchvision sapien==3.0.0b1 scipy==1.10.1 mplib==0.1.1 gymnasium==0.29.1 trimesh==4.4.3 open3d==0.18.0 imageio==2.34.2 pydantic zarr openai huggingface_hub==0.25.0 +2025-07-02 07:32:27,098 - INFO - 开始安装pytorch3d... +2025-07-02 07:32:27,098 - INFO - === 安装pytorch3d === +2025-07-02 07:32:27,098 - INFO - 执行: source /opt/conda/etc/profile.d/conda.sh && conda activate RoboTwin && cd third_party/pytorch3d_simplified && pip install -e . && cd ../.. +2025-07-02 07:32:27,825 - ERROR - 命令执行失败: source /opt/conda/etc/profile.d/conda.sh && conda activate RoboTwin && cd third_party/pytorch3d_simplified && pip install -e . && cd ../.. +2025-07-02 07:32:27,825 - INFO - === 检查资源文件是否已存在 === +2025-07-02 07:32:27,825 - INFO - 执行: ls -la aloha_urdf/ main_models/ 2>/dev/null || echo '资源文件不存在' +2025-07-02 07:32:27,827 - INFO - 命令执行成功: ls -la aloha_urdf/ main_models/ 2>/dev/null || echo '资源文件不存在' +2025-07-02 07:32:27,828 - INFO - 开始下载资源文件... +2025-07-02 07:32:27,828 - INFO - === 下载资源 === +2025-07-02 07:32:27,828 - INFO - 执行: source /opt/conda/etc/profile.d/conda.sh && conda activate RoboTwin && python ./script/download_asset.py && if [ "$(git rev-parse --abbrev-ref HEAD)" = "main" ]; then unzip -o aloha_urdf.zip && unzip -o main_models.zip; else unzip -o aloha_urdf.zip && unzip -o gpt_models.zip; fi +2025-07-02 07:32:28,197 - ERROR - 命令执行失败: source /opt/conda/etc/profile.d/conda.sh && conda activate RoboTwin && python ./script/download_asset.py && if [ "$(git rev-parse --abbrev-ref HEAD)" = "main" ]; then unzip -o aloha_urdf.zip && unzip -o main_models.zip; else unzip -o aloha_urdf.zip && unzip -o gpt_models.zip; fi +2025-07-02 07:32:28,197 - INFO - 开始修改 mplib 库代码... +2025-07-02 07:32:28,197 - INFO - === 查找mplib位置 === +2025-07-02 07:32:28,197 - INFO - 执行: source /opt/conda/etc/profile.d/conda.sh && conda activate RoboTwin && pip show mplib | grep Location | awk '{print $2}' +2025-07-02 07:32:28,701 - INFO - 命令执行成功: source /opt/conda/etc/profile.d/conda.sh && conda activate RoboTwin && pip show mplib | grep Location | awk '{print $2}' +2025-07-02 07:32:28,701 - INFO - mplib planner.py 路径: WARNING: Package(s) not found: mplib/mplib/planner.py +2025-07-02 07:32:28,702 - ERROR - mplib planner.py 文件不存在: WARNING: Package(s) not found: mplib/mplib/planner.py +2025-07-02 07:32:28,702 - INFO - +=== 环境配置总结 === +2025-07-02 07:32:28,702 - INFO - 总步骤: 6, 成功: 1, 失败: 5 +2025-07-02 07:32:28,702 - INFO - ✗ 安装Vulkan +2025-07-02 07:32:28,702 - INFO - ✓ 创建conda环境 +2025-07-02 07:32:28,702 - INFO - ✗ 安装基本依赖 +2025-07-02 07:32:28,702 - INFO - ✗ 安装pytorch3d +2025-07-02 07:32:28,702 - INFO - ✗ 下载资源 +2025-07-02 07:32:28,702 - INFO - ✗ 查找mplib文件 +2025-07-03 08:24:02,070 - INFO - === 获取conda基础路径 === +2025-07-03 08:24:02,070 - INFO - 执行: conda info --base +2025-07-03 08:24:02,684 - INFO - 命令执行成功: conda info --base +2025-07-03 08:24:02,684 - INFO - Conda 基础路径: /opt/conda +2025-07-03 08:24:02,684 - INFO - === 安装Vulkan === +2025-07-03 08:24:02,684 - INFO - 执行: sudo apt install -y libvulkan1 mesa-vulkan-drivers vulkan-tools +2025-07-03 08:24:02,685 - ERROR - 命令执行失败: sudo apt install -y libvulkan1 mesa-vulkan-drivers vulkan-tools +2025-07-03 08:24:02,685 - INFO - === 检查是否存在RoboTwin环境 === +2025-07-03 08:24:02,685 - INFO - 执行: conda env list | grep -w RoboTwin || echo '' +2025-07-03 08:24:03,295 - INFO - 命令执行成功: conda env list | grep -w RoboTwin || echo '' +2025-07-03 08:24:03,295 - INFO - === 验证RoboTwin环境 === +2025-07-03 08:24:03,295 - INFO - 执行: source /opt/conda/etc/profile.d/conda.sh && conda activate RoboTwin && conda list || echo 'fail' +2025-07-03 08:24:04,129 - INFO - 命令执行成功: source /opt/conda/etc/profile.d/conda.sh && conda activate RoboTwin && conda list || echo 'fail' +2025-07-03 08:24:04,129 - INFO - RoboTwin环境验证成功,将直接激活 +2025-07-03 08:24:04,129 - INFO - 开始安装基本依赖包... +2025-07-03 08:24:04,129 - INFO - === 安装基本依赖 === +2025-07-03 08:24:04,129 - INFO - 执行: source /opt/conda/etc/profile.d/conda.sh && conda activate RoboTwin && pip install torch==2.4.1 torchvision sapien==3.0.0b1 scipy==1.10.1 mplib==0.1.1 gymnasium==0.29.1 trimesh==4.4.3 open3d==0.18.0 imageio==2.34.2 pydantic zarr openai huggingface_hub==0.25.0 +2025-07-03 08:28:47,293 - ERROR - 命令执行失败: source /opt/conda/etc/profile.d/conda.sh && conda activate RoboTwin && pip install torch==2.4.1 torchvision sapien==3.0.0b1 scipy==1.10.1 mplib==0.1.1 gymnasium==0.29.1 trimesh==4.4.3 open3d==0.18.0 imageio==2.34.2 pydantic zarr openai huggingface_hub==0.25.0 +2025-07-03 08:28:47,293 - INFO - 开始安装pytorch3d... +2025-07-03 08:28:47,293 - INFO - === 安装pytorch3d === +2025-07-03 08:28:47,293 - INFO - 执行: source /opt/conda/etc/profile.d/conda.sh && conda activate RoboTwin && cd third_party/pytorch3d_simplified && pip install -e . && cd ../.. +2025-07-03 08:28:48,032 - ERROR - 命令执行失败: source /opt/conda/etc/profile.d/conda.sh && conda activate RoboTwin && cd third_party/pytorch3d_simplified && pip install -e . && cd ../.. +2025-07-03 08:28:48,032 - INFO - === 检查资源文件是否已存在 === +2025-07-03 08:28:48,033 - INFO - 执行: ls -la aloha_urdf/ main_models/ 2>/dev/null || echo '资源文件不存在' +2025-07-03 08:28:48,035 - INFO - 命令执行成功: ls -la aloha_urdf/ main_models/ 2>/dev/null || echo '资源文件不存在' +2025-07-03 08:28:48,035 - INFO - 开始下载资源文件... +2025-07-03 08:28:48,035 - INFO - === 下载资源 === +2025-07-03 08:28:48,035 - INFO - 执行: source /opt/conda/etc/profile.d/conda.sh && conda activate RoboTwin && python ./script/download_asset.py && if [ "$(git rev-parse --abbrev-ref HEAD)" = "main" ]; then unzip -o aloha_urdf.zip && unzip -o main_models.zip; else unzip -o aloha_urdf.zip && unzip -o gpt_models.zip; fi +2025-07-03 08:28:48,417 - ERROR - 命令执行失败: source /opt/conda/etc/profile.d/conda.sh && conda activate RoboTwin && python ./script/download_asset.py && if [ "$(git rev-parse --abbrev-ref HEAD)" = "main" ]; then unzip -o aloha_urdf.zip && unzip -o main_models.zip; else unzip -o aloha_urdf.zip && unzip -o gpt_models.zip; fi +2025-07-03 08:28:48,417 - INFO - 开始修改 mplib 库代码... +2025-07-03 08:28:48,417 - INFO - === 查找mplib位置 === +2025-07-03 08:28:48,417 - INFO - 执行: source /opt/conda/etc/profile.d/conda.sh && conda activate RoboTwin && pip show mplib | grep Location | awk '{print $2}' +2025-07-03 08:28:48,951 - INFO - 命令执行成功: source /opt/conda/etc/profile.d/conda.sh && conda activate RoboTwin && pip show mplib | grep Location | awk '{print $2}' +2025-07-03 08:28:48,951 - INFO - mplib planner.py 路径: WARNING: Package(s) not found: mplib/mplib/planner.py +2025-07-03 08:28:48,951 - ERROR - mplib planner.py 文件不存在: WARNING: Package(s) not found: mplib/mplib/planner.py +2025-07-03 08:28:48,951 - INFO - +=== 环境配置总结 === +2025-07-03 08:28:48,951 - INFO - 总步骤: 6, 成功: 1, 失败: 5 +2025-07-03 08:28:48,951 - INFO - ✗ 安装Vulkan +2025-07-03 08:28:48,951 - INFO - ✓ 检查conda环境 +2025-07-03 08:28:48,951 - INFO - ✗ 安装基本依赖 +2025-07-03 08:28:48,951 - INFO - ✗ 安装pytorch3d +2025-07-03 08:28:48,951 - INFO - ✗ 下载资源 +2025-07-03 08:28:48,951 - INFO - ✗ 查找mplib文件 +2025-07-03 08:56:46,195 - INFO - === 获取conda基础路径 === +2025-07-03 08:56:46,195 - INFO - 执行: conda info --base +2025-07-03 08:56:46,831 - INFO - 命令执行成功: conda info --base +2025-07-03 08:56:46,831 - INFO - Conda 基础路径: /opt/conda +2025-07-03 08:56:46,831 - INFO - === 安装Vulkan === +2025-07-03 08:56:46,831 - INFO - 执行: sudo apt install -y libvulkan1 mesa-vulkan-drivers vulkan-tools +2025-07-03 08:56:46,832 - ERROR - 命令执行失败: sudo apt install -y libvulkan1 mesa-vulkan-drivers vulkan-tools +2025-07-03 08:56:46,832 - INFO - === 检查是否存在RoboTwin环境 === +2025-07-03 08:56:46,833 - INFO - 执行: conda env list | grep -w RoboTwin || echo '' +2025-07-03 08:56:47,452 - INFO - 命令执行成功: conda env list | grep -w RoboTwin || echo '' +2025-07-03 08:56:47,452 - INFO - === 验证RoboTwin环境 === +2025-07-03 08:56:47,452 - INFO - 执行: source /opt/conda/etc/profile.d/conda.sh && conda activate RoboTwin && conda list || echo 'fail' +2025-07-03 08:56:48,293 - INFO - 命令执行成功: source /opt/conda/etc/profile.d/conda.sh && conda activate RoboTwin && conda list || echo 'fail' +2025-07-03 08:56:48,293 - INFO - RoboTwin环境验证成功,将直接激活 +2025-07-03 08:56:48,293 - INFO - 开始安装基本依赖包... +2025-07-03 08:56:48,293 - INFO - === 安装基本依赖 === +2025-07-03 08:56:48,293 - INFO - 执行: source /opt/conda/etc/profile.d/conda.sh && conda activate RoboTwin && pip install torch==2.4.1 torchvision sapien==3.0.0b1 scipy==1.10.1 mplib==0.1.1 gymnasium==0.29.1 trimesh==4.4.3 open3d==0.18.0 imageio==2.34.2 pydantic zarr openai huggingface_hub==0.25.0 +2025-07-03 08:57:41,659 - ERROR - 命令执行失败: source /opt/conda/etc/profile.d/conda.sh && conda activate RoboTwin && pip install torch==2.4.1 torchvision sapien==3.0.0b1 scipy==1.10.1 mplib==0.1.1 gymnasium==0.29.1 trimesh==4.4.3 open3d==0.18.0 imageio==2.34.2 pydantic zarr openai huggingface_hub==0.25.0 +2025-07-03 08:57:41,659 - INFO - 开始安装pytorch3d... +2025-07-03 08:57:41,659 - INFO - === 安装pytorch3d === +2025-07-03 08:57:41,659 - INFO - 执行: source /opt/conda/etc/profile.d/conda.sh && conda activate RoboTwin && cd third_party/pytorch3d_simplified && pip install -e . && cd ../.. +2025-07-03 08:57:42,404 - ERROR - 命令执行失败: source /opt/conda/etc/profile.d/conda.sh && conda activate RoboTwin && cd third_party/pytorch3d_simplified && pip install -e . && cd ../.. +2025-07-03 08:57:42,404 - INFO - === 检查资源文件是否已存在 === +2025-07-03 08:57:42,405 - INFO - 执行: ls -la aloha_urdf/ main_models/ 2>/dev/null || echo '资源文件不存在' +2025-07-03 08:57:42,406 - INFO - 命令执行成功: ls -la aloha_urdf/ main_models/ 2>/dev/null || echo '资源文件不存在' +2025-07-03 08:57:42,407 - INFO - 开始下载资源文件... +2025-07-03 08:57:42,407 - INFO - === 下载资源 === +2025-07-03 08:57:42,407 - INFO - 执行: source /opt/conda/etc/profile.d/conda.sh && conda activate RoboTwin && python ./script/download_asset.py && if [ "$(git rev-parse --abbrev-ref HEAD)" = "main" ]; then unzip -o aloha_urdf.zip && unzip -o main_models.zip; else unzip -o aloha_urdf.zip && unzip -o gpt_models.zip; fi +2025-07-03 08:57:42,798 - ERROR - 命令执行失败: source /opt/conda/etc/profile.d/conda.sh && conda activate RoboTwin && python ./script/download_asset.py && if [ "$(git rev-parse --abbrev-ref HEAD)" = "main" ]; then unzip -o aloha_urdf.zip && unzip -o main_models.zip; else unzip -o aloha_urdf.zip && unzip -o gpt_models.zip; fi +2025-07-03 08:57:42,798 - INFO - 开始修改 mplib 库代码... +2025-07-03 08:57:42,798 - INFO - === 查找mplib位置 === +2025-07-03 08:57:42,798 - INFO - 执行: source /opt/conda/etc/profile.d/conda.sh && conda activate RoboTwin && pip show mplib | grep Location | awk '{print $2}' +2025-07-03 08:57:43,330 - INFO - 命令执行成功: source /opt/conda/etc/profile.d/conda.sh && conda activate RoboTwin && pip show mplib | grep Location | awk '{print $2}' +2025-07-03 08:57:43,330 - INFO - mplib planner.py 路径: WARNING: Package(s) not found: mplib/mplib/planner.py +2025-07-03 08:57:43,330 - ERROR - mplib planner.py 文件不存在: WARNING: Package(s) not found: mplib/mplib/planner.py +2025-07-03 08:57:43,330 - INFO - +=== 环境配置总结 === +2025-07-03 08:57:43,330 - INFO - 总步骤: 6, 成功: 1, 失败: 5 +2025-07-03 08:57:43,330 - INFO - ✗ 安装Vulkan +2025-07-03 08:57:43,330 - INFO - ✓ 检查conda环境 +2025-07-03 08:57:43,330 - INFO - ✗ 安装基本依赖 +2025-07-03 08:57:43,330 - INFO - ✗ 安装pytorch3d +2025-07-03 08:57:43,330 - INFO - ✗ 下载资源 +2025-07-03 08:57:43,330 - INFO - ✗ 查找mplib文件 +2025-07-03 08:58:14,283 - INFO - === 获取conda基础路径 === +2025-07-03 08:58:14,283 - INFO - 执行: conda info --base +2025-07-03 08:58:14,917 - INFO - 命令执行成功: conda info --base +2025-07-03 08:58:14,917 - INFO - Conda 基础路径: /opt/conda +2025-07-03 08:58:14,917 - INFO - === 安装Vulkan === +2025-07-03 08:58:14,917 - INFO - 执行: sudo apt install -y libvulkan1 mesa-vulkan-drivers vulkan-tools +2025-07-03 08:58:14,919 - ERROR - 命令执行失败: sudo apt install -y libvulkan1 mesa-vulkan-drivers vulkan-tools +2025-07-03 08:58:14,919 - INFO - === 检查是否存在RoboTwin环境 === +2025-07-03 08:58:14,919 - INFO - 执行: conda env list | grep -w RoboTwin || echo '' +2025-07-03 08:58:15,543 - INFO - 命令执行成功: conda env list | grep -w RoboTwin || echo '' +2025-07-03 08:58:15,543 - INFO - === 验证RoboTwin环境 === +2025-07-03 08:58:15,543 - INFO - 执行: source /opt/conda/etc/profile.d/conda.sh && conda activate RoboTwin && conda list || echo 'fail' +2025-07-03 08:58:16,369 - INFO - 命令执行成功: source /opt/conda/etc/profile.d/conda.sh && conda activate RoboTwin && conda list || echo 'fail' +2025-07-03 08:58:16,370 - INFO - RoboTwin环境验证成功,将直接激活 +2025-07-03 08:58:16,370 - INFO - 开始安装基本依赖包... +2025-07-03 08:58:16,370 - INFO - === 安装基本依赖 === +2025-07-03 08:58:16,370 - INFO - 执行: source /opt/conda/etc/profile.d/conda.sh && conda activate RoboTwin && pip install torch==2.4.1 torchvision sapien==3.0.0b1 scipy==1.10.1 mplib==0.1.1 gymnasium==0.29.1 trimesh==4.4.3 open3d==0.18.0 imageio==2.34.2 pydantic zarr openai huggingface_hub==0.25.0 +2025-07-03 09:01:13,777 - INFO - 命令执行成功: source /opt/conda/etc/profile.d/conda.sh && conda activate RoboTwin && pip install torch==2.4.1 torchvision sapien==3.0.0b1 scipy==1.10.1 mplib==0.1.1 gymnasium==0.29.1 trimesh==4.4.3 open3d==0.18.0 imageio==2.34.2 pydantic zarr openai huggingface_hub==0.25.0 +2025-07-03 09:01:13,778 - INFO - 开始安装pytorch3d... +2025-07-03 09:01:13,778 - INFO - === 安装pytorch3d === +2025-07-03 09:01:13,778 - INFO - 执行: source /opt/conda/etc/profile.d/conda.sh && conda activate RoboTwin && cd third_party/pytorch3d_simplified && pip install -e . && cd ../.. +2025-07-03 09:02:25,054 - INFO - 命令执行成功: source /opt/conda/etc/profile.d/conda.sh && conda activate RoboTwin && cd third_party/pytorch3d_simplified && pip install -e . && cd ../.. +2025-07-03 09:02:25,054 - INFO - === 检查资源文件是否已存在 === +2025-07-03 09:02:25,054 - INFO - 执行: ls -la aloha_urdf/ main_models/ 2>/dev/null || echo '资源文件不存在' +2025-07-03 09:02:25,056 - INFO - 命令执行成功: ls -la aloha_urdf/ main_models/ 2>/dev/null || echo '资源文件不存在' +2025-07-03 09:02:25,056 - INFO - 开始下载资源文件... +2025-07-03 09:02:25,056 - INFO - === 下载资源 === +2025-07-03 09:02:25,056 - INFO - 执行: source /opt/conda/etc/profile.d/conda.sh && conda activate RoboTwin && python ./script/download_asset.py && if [ "$(git rev-parse --abbrev-ref HEAD)" = "main" ]; then unzip -o aloha_urdf.zip && unzip -o main_models.zip; else unzip -o aloha_urdf.zip && unzip -o gpt_models.zip; fi +2025-07-03 09:02:32,825 - INFO - 命令执行成功: source /opt/conda/etc/profile.d/conda.sh && conda activate RoboTwin && python ./script/download_asset.py && if [ "$(git rev-parse --abbrev-ref HEAD)" = "main" ]; then unzip -o aloha_urdf.zip && unzip -o main_models.zip; else unzip -o aloha_urdf.zip && unzip -o gpt_models.zip; fi +2025-07-03 09:02:32,826 - INFO - 开始修改 mplib 库代码... +2025-07-03 09:02:32,826 - INFO - === 查找mplib位置 === +2025-07-03 09:02:32,826 - INFO - 执行: source /opt/conda/etc/profile.d/conda.sh && conda activate RoboTwin && pip show mplib | grep Location | awk '{print $2}' +2025-07-03 09:02:33,605 - INFO - 命令执行成功: source /opt/conda/etc/profile.d/conda.sh && conda activate RoboTwin && pip show mplib | grep Location | awk '{print $2}' +2025-07-03 09:02:33,606 - INFO - mplib planner.py 路径: /opt/conda/envs/RoboTwin/lib/python3.8/site-packages/mplib/planner.py +2025-07-03 09:02:33,606 - INFO - === 检查mplib代码内容 === +2025-07-03 09:02:33,606 - INFO - 执行: cat /opt/conda/envs/RoboTwin/lib/python3.8/site-packages/mplib/planner.py +2025-07-03 09:02:33,610 - INFO - 命令执行成功: cat /opt/conda/envs/RoboTwin/lib/python3.8/site-packages/mplib/planner.py +2025-07-03 09:02:33,610 - INFO - 正在移除 convex=True 参数... +2025-07-03 09:02:33,610 - INFO - === 修改mplib库代码 - 移除convex=True === +2025-07-03 09:02:33,610 - INFO - 执行: sed -i 's/convex=True,/# convex=True,/' /opt/conda/envs/RoboTwin/lib/python3.8/site-packages/mplib/planner.py +2025-07-03 09:02:33,612 - INFO - 命令执行成功: sed -i 's/convex=True,/# convex=True,/' /opt/conda/envs/RoboTwin/lib/python3.8/site-packages/mplib/planner.py +2025-07-03 09:02:33,612 - INFO - 正在移除 or collide 条件... +2025-07-03 09:02:33,612 - INFO - === 修改mplib库代码 - 移除 or collide === +2025-07-03 09:02:33,612 - INFO - 执行: sed -i 's/or collide or not within_joint_limit/or not within_joint_limit/' /opt/conda/envs/RoboTwin/lib/python3.8/site-packages/mplib/planner.py +2025-07-03 09:02:33,614 - INFO - 命令执行成功: sed -i 's/or collide or not within_joint_limit/or not within_joint_limit/' /opt/conda/envs/RoboTwin/lib/python3.8/site-packages/mplib/planner.py +2025-07-03 09:02:33,614 - INFO - +=== 环境配置总结 === +2025-07-03 09:02:33,614 - INFO - 总步骤: 7, 成功: 6, 失败: 1 +2025-07-03 09:02:33,614 - INFO - ✗ 安装Vulkan +2025-07-03 09:02:33,614 - INFO - ✓ 检查conda环境 +2025-07-03 09:02:33,614 - INFO - ✓ 安装基本依赖 +2025-07-03 09:02:33,614 - INFO - ✓ 安装pytorch3d +2025-07-03 09:02:33,614 - INFO - ✓ 下载资源 +2025-07-03 09:02:33,614 - INFO - ✓ 修改mplib - 移除convex=True +2025-07-03 09:02:33,614 - INFO - ✓ 修改mplib - 移除 or collide +2025-07-03 09:48:18,682 - INFO - === 获取conda基础路径 === +2025-07-03 09:48:18,682 - INFO - 执行: conda info --base +2025-07-03 09:48:19,350 - INFO - 命令执行成功: conda info --base +2025-07-03 09:48:19,350 - INFO - Conda 基础路径: /opt/conda +2025-07-03 09:48:19,350 - INFO - === 安装Vulkan === +2025-07-03 09:48:19,350 - INFO - 执行: sudo apt install -y libvulkan1 mesa-vulkan-drivers vulkan-tools +2025-07-03 09:48:19,352 - ERROR - 命令执行失败: sudo apt install -y libvulkan1 mesa-vulkan-drivers vulkan-tools +2025-07-03 09:48:19,352 - INFO - === 检查是否存在RoboTwin环境 === +2025-07-03 09:48:19,352 - INFO - 执行: conda env list | grep -w RoboTwin || echo '' +2025-07-03 09:48:19,982 - INFO - 命令执行成功: conda env list | grep -w RoboTwin || echo '' +2025-07-03 09:48:19,982 - INFO - === 验证RoboTwin环境 === +2025-07-03 09:48:19,983 - INFO - 执行: source /opt/conda/etc/profile.d/conda.sh && conda activate RoboTwin && conda list || echo 'fail' +2025-07-03 09:48:22,087 - INFO - 命令执行成功: source /opt/conda/etc/profile.d/conda.sh && conda activate RoboTwin && conda list || echo 'fail' +2025-07-03 09:48:22,088 - INFO - RoboTwin环境验证成功,将直接激活 +2025-07-03 09:48:22,088 - INFO - 开始安装基本依赖包... +2025-07-03 09:48:22,088 - INFO - === 安装基本依赖 === +2025-07-03 09:48:22,088 - INFO - 执行: source /opt/conda/etc/profile.d/conda.sh && conda activate RoboTwin && pip install torch==2.4.1 torchvision sapien==3.0.0b1 scipy==1.10.1 mplib==0.1.1 gymnasium==0.29.1 trimesh==4.4.3 open3d==0.18.0 imageio==2.34.2 pydantic zarr openai huggingface_hub==0.25.0 +2025-07-03 09:48:23,192 - INFO - 命令执行成功: source /opt/conda/etc/profile.d/conda.sh && conda activate RoboTwin && pip install torch==2.4.1 torchvision sapien==3.0.0b1 scipy==1.10.1 mplib==0.1.1 gymnasium==0.29.1 trimesh==4.4.3 open3d==0.18.0 imageio==2.34.2 pydantic zarr openai huggingface_hub==0.25.0 +2025-07-03 09:48:23,192 - INFO - 开始安装pytorch3d... +2025-07-03 09:48:23,192 - INFO - === 安装pytorch3d === +2025-07-03 09:48:23,192 - INFO - 执行: source /opt/conda/etc/profile.d/conda.sh && conda activate RoboTwin && cd third_party/pytorch3d_simplified && pip install -e . && cd ../.. +2025-07-03 09:48:27,965 - INFO - 命令执行成功: source /opt/conda/etc/profile.d/conda.sh && conda activate RoboTwin && cd third_party/pytorch3d_simplified && pip install -e . && cd ../.. +2025-07-03 09:48:27,965 - INFO - === 检查资源文件是否已存在 === +2025-07-03 09:48:27,965 - INFO - 执行: ls -la aloha_urdf/ main_models/ 2>/dev/null || echo '资源文件不存在' +2025-07-03 09:48:27,967 - INFO - 命令执行成功: ls -la aloha_urdf/ main_models/ 2>/dev/null || echo '资源文件不存在' +2025-07-03 09:48:27,968 - INFO - 开始下载资源文件... +2025-07-03 09:48:27,968 - INFO - === 下载资源 === +2025-07-03 09:48:27,968 - INFO - 执行: source /opt/conda/etc/profile.d/conda.sh && conda activate RoboTwin && python ./script/download_asset.py && if [ "$(git rev-parse --abbrev-ref HEAD)" = "main" ]; then unzip -o aloha_urdf.zip && unzip -o main_models.zip; else unzip -o aloha_urdf.zip && unzip -o gpt_models.zip; fi +2025-07-03 09:48:35,315 - INFO - 命令执行成功: source /opt/conda/etc/profile.d/conda.sh && conda activate RoboTwin && python ./script/download_asset.py && if [ "$(git rev-parse --abbrev-ref HEAD)" = "main" ]; then unzip -o aloha_urdf.zip && unzip -o main_models.zip; else unzip -o aloha_urdf.zip && unzip -o gpt_models.zip; fi +2025-07-03 09:48:35,315 - INFO - 开始修改 mplib 库代码... +2025-07-03 09:48:35,315 - INFO - === 查找mplib位置 === +2025-07-03 09:48:35,315 - INFO - 执行: source /opt/conda/etc/profile.d/conda.sh && conda activate RoboTwin && pip show mplib | grep Location | awk '{print $2}' +2025-07-03 09:48:36,099 - INFO - 命令执行成功: source /opt/conda/etc/profile.d/conda.sh && conda activate RoboTwin && pip show mplib | grep Location | awk '{print $2}' +2025-07-03 09:48:36,100 - INFO - mplib planner.py 路径: /opt/conda/envs/RoboTwin/lib/python3.8/site-packages/mplib/planner.py +2025-07-03 09:48:36,100 - INFO - === 检查mplib代码内容 === +2025-07-03 09:48:36,100 - INFO - 执行: cat /opt/conda/envs/RoboTwin/lib/python3.8/site-packages/mplib/planner.py +2025-07-03 09:48:36,104 - INFO - 命令执行成功: cat /opt/conda/envs/RoboTwin/lib/python3.8/site-packages/mplib/planner.py +2025-07-03 09:48:36,104 - INFO - 正在移除 convex=True 参数... +2025-07-03 09:48:36,104 - INFO - === 修改mplib库代码 - 移除convex=True === +2025-07-03 09:48:36,104 - INFO - 执行: sed -i 's/convex=True,/# convex=True,/' /opt/conda/envs/RoboTwin/lib/python3.8/site-packages/mplib/planner.py +2025-07-03 09:48:36,107 - INFO - 命令执行成功: sed -i 's/convex=True,/# convex=True,/' /opt/conda/envs/RoboTwin/lib/python3.8/site-packages/mplib/planner.py +2025-07-03 09:48:36,107 - INFO - mplib中的'or collide'已经被移除,跳过此步骤 +2025-07-03 09:48:36,107 - INFO - +=== 环境配置总结 === +2025-07-03 09:48:36,107 - INFO - 总步骤: 7, 成功: 6, 失败: 1 +2025-07-03 09:48:36,107 - INFO - ✗ 安装Vulkan +2025-07-03 09:48:36,107 - INFO - ✓ 检查conda环境 +2025-07-03 09:48:36,107 - INFO - ✓ 安装基本依赖 +2025-07-03 09:48:36,107 - INFO - ✓ 安装pytorch3d +2025-07-03 09:48:36,107 - INFO - ✓ 下载资源 +2025-07-03 09:48:36,107 - INFO - ✓ 修改mplib - 移除convex=True +2025-07-03 09:48:36,107 - INFO - ✓ 修改mplib - 移除 or collide +2025-07-03 09:54:24,156 - INFO - === 获取conda基础路径 === +2025-07-03 09:54:24,156 - INFO - 执行: conda info --base +2025-07-03 09:54:24,811 - INFO - 命令执行成功: conda info --base +2025-07-03 09:54:24,811 - INFO - Conda 基础路径: /opt/conda +2025-07-03 09:54:24,811 - INFO - === 安装Vulkan === +2025-07-03 09:54:24,811 - INFO - 执行: sudo apt install -y libvulkan1 mesa-vulkan-drivers vulkan-tools +2025-07-03 09:54:24,813 - ERROR - 命令执行失败: sudo apt install -y libvulkan1 mesa-vulkan-drivers vulkan-tools +2025-07-03 09:54:24,813 - INFO - === 检查是否存在RoboTwin环境 === +2025-07-03 09:54:24,813 - INFO - 执行: conda env list | grep -w RoboTwin || echo '' +2025-07-03 09:54:25,462 - INFO - 命令执行成功: conda env list | grep -w RoboTwin || echo '' +2025-07-03 09:54:25,462 - INFO - === 验证RoboTwin环境 === +2025-07-03 09:54:25,463 - INFO - 执行: source /opt/conda/etc/profile.d/conda.sh && conda activate RoboTwin && conda list || echo 'fail' +2025-07-03 09:54:27,550 - INFO - 命令执行成功: source /opt/conda/etc/profile.d/conda.sh && conda activate RoboTwin && conda list || echo 'fail' +2025-07-03 09:54:27,550 - INFO - RoboTwin环境验证成功,将直接激活 +2025-07-03 09:54:27,550 - INFO - 开始安装基本依赖包... +2025-07-03 09:54:27,551 - INFO - === 安装基本依赖 === +2025-07-03 09:54:27,551 - INFO - 执行: source /opt/conda/etc/profile.d/conda.sh && conda activate RoboTwin && pip install torch==2.4.1 torchvision sapien==3.0.0b1 scipy==1.10.1 mplib==0.1.1 gymnasium==0.29.1 trimesh==4.4.3 open3d==0.18.0 imageio==2.34.2 pydantic zarr openai huggingface_hub==0.25.0 +2025-07-03 09:54:28,651 - INFO - 命令执行成功: source /opt/conda/etc/profile.d/conda.sh && conda activate RoboTwin && pip install torch==2.4.1 torchvision sapien==3.0.0b1 scipy==1.10.1 mplib==0.1.1 gymnasium==0.29.1 trimesh==4.4.3 open3d==0.18.0 imageio==2.34.2 pydantic zarr openai huggingface_hub==0.25.0 +2025-07-03 09:54:28,651 - INFO - 开始安装pytorch3d... +2025-07-03 09:54:28,651 - INFO - === 安装pytorch3d === +2025-07-03 09:54:28,651 - INFO - 执行: source /opt/conda/etc/profile.d/conda.sh && conda activate RoboTwin && cd third_party/pytorch3d_simplified && pip install -e . && cd ../.. +2025-07-03 09:54:33,465 - INFO - 命令执行成功: source /opt/conda/etc/profile.d/conda.sh && conda activate RoboTwin && cd third_party/pytorch3d_simplified && pip install -e . && cd ../.. +2025-07-03 09:54:33,465 - INFO - === 检查资源文件是否已存在 === +2025-07-03 09:54:33,465 - INFO - 执行: ls -la aloha_urdf/ main_models/ 2>/dev/null || echo '资源文件不存在' +2025-07-03 09:54:33,468 - INFO - 命令执行成功: ls -la aloha_urdf/ main_models/ 2>/dev/null || echo '资源文件不存在' +2025-07-03 09:54:33,468 - INFO - 开始下载资源文件... +2025-07-03 09:54:33,468 - INFO - === 下载资源 === +2025-07-03 09:54:33,468 - INFO - 执行: source /opt/conda/etc/profile.d/conda.sh && conda activate RoboTwin && python ./script/download_asset.py && if [ "$(git rev-parse --abbrev-ref HEAD)" = "main" ]; then unzip -o aloha_urdf.zip && unzip -o main_models.zip; else unzip -o aloha_urdf.zip && unzip -o gpt_models.zip; fi +2025-07-03 09:54:40,740 - INFO - 命令执行成功: source /opt/conda/etc/profile.d/conda.sh && conda activate RoboTwin && python ./script/download_asset.py && if [ "$(git rev-parse --abbrev-ref HEAD)" = "main" ]; then unzip -o aloha_urdf.zip && unzip -o main_models.zip; else unzip -o aloha_urdf.zip && unzip -o gpt_models.zip; fi +2025-07-03 09:54:40,741 - INFO - 开始修改 mplib 库代码... +2025-07-03 09:54:40,741 - INFO - === 查找mplib位置 === +2025-07-03 09:54:40,741 - INFO - 执行: source /opt/conda/etc/profile.d/conda.sh && conda activate RoboTwin && pip show mplib | grep Location | awk '{print $2}' +2025-07-03 09:54:41,520 - INFO - 命令执行成功: source /opt/conda/etc/profile.d/conda.sh && conda activate RoboTwin && pip show mplib | grep Location | awk '{print $2}' +2025-07-03 09:54:41,520 - INFO - mplib planner.py 路径: /opt/conda/envs/RoboTwin/lib/python3.8/site-packages/mplib/planner.py +2025-07-03 09:54:41,520 - INFO - === 检查mplib代码内容 === +2025-07-03 09:54:41,520 - INFO - 执行: cat /opt/conda/envs/RoboTwin/lib/python3.8/site-packages/mplib/planner.py +2025-07-03 09:54:41,525 - INFO - 命令执行成功: cat /opt/conda/envs/RoboTwin/lib/python3.8/site-packages/mplib/planner.py +2025-07-03 09:54:41,525 - INFO - 正在移除 convex=True 参数... +2025-07-03 09:54:41,525 - INFO - === 修改mplib库代码 - 移除convex=True === +2025-07-03 09:54:41,525 - INFO - 执行: sed -i 's/convex=True,/# convex=True,/' /opt/conda/envs/RoboTwin/lib/python3.8/site-packages/mplib/planner.py +2025-07-03 09:54:41,527 - INFO - 命令执行成功: sed -i 's/convex=True,/# convex=True,/' /opt/conda/envs/RoboTwin/lib/python3.8/site-packages/mplib/planner.py +2025-07-03 09:54:41,527 - INFO - mplib中的'or collide'已经被移除,跳过此步骤 +2025-07-03 09:54:41,527 - INFO - +=== 环境配置总结 === +2025-07-03 09:54:41,527 - INFO - 总步骤: 7, 成功: 6, 失败: 1 +2025-07-03 09:54:41,527 - INFO - ✗ 安装Vulkan +2025-07-03 09:54:41,527 - INFO - ✓ 检查conda环境 +2025-07-03 09:54:41,527 - INFO - ✓ 安装基本依赖 +2025-07-03 09:54:41,527 - INFO - ✓ 安装pytorch3d +2025-07-03 09:54:41,527 - INFO - ✓ 下载资源 +2025-07-03 09:54:41,527 - INFO - ✓ 修改mplib - 移除convex=True +2025-07-03 09:54:41,527 - INFO - ✓ 修改mplib - 移除 or collide diff --git a/environment_verify.log b/environment_verify.log new file mode 100644 index 0000000..d94175f --- /dev/null +++ b/environment_verify.log @@ -0,0 +1,48 @@ +2025-07-03 09:53:52,397 - INFO - === 获取conda基础路径 === +2025-07-03 09:53:52,397 - INFO - 执行: conda info --base +2025-07-03 09:53:53,069 - INFO - 命令执行成功: conda info --base +2025-07-03 09:53:53,069 - INFO - Conda 基础路径: /opt/conda +2025-07-03 09:53:53,069 - INFO - === 检查RoboTwin环境是否存在 === +2025-07-03 09:53:53,069 - INFO - 执行: conda env list | grep -w RoboTwin || echo '' +2025-07-03 09:53:53,710 - INFO - 命令执行成功: conda env list | grep -w RoboTwin || echo '' +2025-07-03 09:53:53,710 - INFO - === 激活RoboTwin环境 === +2025-07-03 09:53:53,710 - INFO - 执行: source /opt/conda/etc/profile.d/conda.sh && conda activate RoboTwin && conda info --envs +2025-07-03 09:53:54,716 - INFO - 命令执行成功: source /opt/conda/etc/profile.d/conda.sh && conda activate RoboTwin && conda info --envs +2025-07-03 09:53:54,716 - INFO - === 检查Python版本 === +2025-07-03 09:53:54,716 - INFO - 执行: source /opt/conda/etc/profile.d/conda.sh && conda activate RoboTwin && python --version +2025-07-03 09:53:55,075 - INFO - 命令执行成功: source /opt/conda/etc/profile.d/conda.sh && conda activate RoboTwin && python --version +2025-07-03 09:53:55,075 - INFO - === 检查核心依赖包 === +2025-07-03 09:53:55,076 - INFO - === 核心依赖包检查完成 (总耗时: 0.00秒) === +2025-07-03 09:53:55,076 - INFO - === 检查Vulkan === +2025-07-03 09:53:55,076 - INFO - 执行: DISPLAY='' vulkaninfo --summary 2>/dev/null || echo 'Vulkan not installed' +2025-07-03 09:53:55,079 - INFO - 命令执行成功: DISPLAY='' vulkaninfo --summary 2>/dev/null || echo 'Vulkan not installed' +2025-07-03 09:53:55,080 - INFO - === 检查aloha_maniskill_sim资源目录 === +2025-07-03 09:53:55,080 - INFO - 执行: ls -la /workspace/aloha_maniskill_sim 2>/dev/null || echo 'not found' +2025-07-03 09:53:55,082 - INFO - 命令执行成功: ls -la /workspace/aloha_maniskill_sim 2>/dev/null || echo 'not found' +2025-07-03 09:53:55,082 - INFO - === 检查models资源目录 === +2025-07-03 09:53:55,082 - INFO - 执行: ls -la /workspace/models 2>/dev/null || echo 'not found' +2025-07-03 09:53:55,085 - INFO - 命令执行成功: ls -la /workspace/models 2>/dev/null || echo 'not found' +2025-07-03 09:53:55,085 - INFO - === 检查mplib修改 === +2025-07-03 09:53:55,085 - INFO - +=== RoboTwin环境验证总结 === +2025-07-03 09:53:55,085 - INFO - 总检查项: 20, 成功: 19, 失败: 1 +2025-07-03 09:53:55,085 - INFO - ✓ RoboTwin环境激活: 可以成功激活RoboTwin环境 +2025-07-03 09:53:55,085 - INFO - ✓ Python版本: Python版本 3.8.20 符合要求 +2025-07-03 09:53:55,085 - INFO - ✓ 依赖包 torch: 已安装 torch +2025-07-03 09:53:55,085 - INFO - ✓ 依赖包 torchvision: 已安装 torchvision +2025-07-03 09:53:55,085 - INFO - ✓ 依赖包 sapien: 已安装 sapien +2025-07-03 09:53:55,085 - INFO - ✓ 依赖包 scipy: 已安装 scipy +2025-07-03 09:53:55,085 - INFO - ✓ 依赖包 mplib: 已安装 mplib +2025-07-03 09:53:55,085 - INFO - ✓ 依赖包 gymnasium: 已安装 gymnasium +2025-07-03 09:53:55,085 - INFO - ✓ 依赖包 trimesh: 已安装 trimesh +2025-07-03 09:53:55,085 - INFO - ✓ 依赖包 open3d: 已安装 open3d +2025-07-03 09:53:55,085 - INFO - ✓ 依赖包 imageio: 已安装 imageio +2025-07-03 09:53:55,085 - INFO - ✓ 依赖包 pydantic: 已安装 pydantic +2025-07-03 09:53:55,085 - INFO - ✓ 依赖包 zarr: 已安装 zarr +2025-07-03 09:53:55,085 - INFO - ✓ 依赖包 huggingface_hub: 已安装 huggingface_hub +2025-07-03 09:53:55,085 - INFO - ✓ 依赖包 pytorch3d: 已安装 pytorch3d +2025-07-03 09:53:55,085 - INFO - ✗ Vulkan: Vulkan 未安装或安装不正确 +2025-07-03 09:53:55,085 - INFO - ✓ 资源目录 aloha_maniskill_sim: aloha_maniskill_sim 目录存在 +2025-07-03 09:53:55,085 - INFO - ✓ 资源目录 models: models 目录存在 +2025-07-03 09:53:55,085 - INFO - ✓ mplib修改 - convex=True: convex=True 参数已经被注释或移除 +2025-07-03 09:53:55,085 - INFO - ✓ mplib修改 - or collide: 'or collide' 条件已被移除 diff --git a/environment_verify_results.json b/environment_verify_results.json new file mode 100644 index 0000000..98ec5a2 --- /dev/null +++ b/environment_verify_results.json @@ -0,0 +1,105 @@ +{ + "env_check_result": "unhealthy", + "check_result_message": [ + { + "component": "RoboTwin环境激活", + "status": "成功", + "message": "可以成功激活RoboTwin环境" + }, + { + "component": "Python版本", + "status": "成功", + "message": "Python版本 3.8.20 符合要求" + }, + { + "component": "依赖包 torch", + "status": "成功", + "message": "已安装 torch" + }, + { + "component": "依赖包 torchvision", + "status": "成功", + "message": "已安装 torchvision" + }, + { + "component": "依赖包 sapien", + "status": "成功", + "message": "已安装 sapien" + }, + { + "component": "依赖包 scipy", + "status": "成功", + "message": "已安装 scipy" + }, + { + "component": "依赖包 mplib", + "status": "成功", + "message": "已安装 mplib" + }, + { + "component": "依赖包 gymnasium", + "status": "成功", + "message": "已安装 gymnasium" + }, + { + "component": "依赖包 trimesh", + "status": "成功", + "message": "已安装 trimesh" + }, + { + "component": "依赖包 open3d", + "status": "成功", + "message": "已安装 open3d" + }, + { + "component": "依赖包 imageio", + "status": "成功", + "message": "已安装 imageio" + }, + { + "component": "依赖包 pydantic", + "status": "成功", + "message": "已安装 pydantic" + }, + { + "component": "依赖包 zarr", + "status": "成功", + "message": "已安装 zarr" + }, + { + "component": "依赖包 huggingface_hub", + "status": "成功", + "message": "已安装 huggingface_hub" + }, + { + "component": "依赖包 pytorch3d", + "status": "成功", + "message": "已安装 pytorch3d" + }, + { + "component": "Vulkan", + "status": "失败", + "message": "Vulkan 未安装或安装不正确" + }, + { + "component": "资源目录 aloha_maniskill_sim", + "status": "成功", + "message": "aloha_maniskill_sim 目录存在" + }, + { + "component": "资源目录 models", + "status": "成功", + "message": "models 目录存在" + }, + { + "component": "mplib修改 - convex=True", + "status": "成功", + "message": "convex=True 参数已经被注释或移除" + }, + { + "component": "mplib修改 - or collide", + "status": "成功", + "message": "'or collide' 条件已被移除" + } + ] +} \ No newline at end of file diff --git a/task_config/empty_cup_place.yml b/task_config/empty_cup_place.yml new file mode 100644 index 0000000..28decdd --- /dev/null +++ b/task_config/empty_cup_place.yml @@ -0,0 +1,26 @@ +task_name: empty_cup_place +render_freq: 0 +use_seed: false +collect_data: true +save_path: ./data +dual_arm: true +st_episode: 0 +camera_w: 320 +camera_h: 240 +pcd_crop: true +pcd_down_sample_num: 1024 +pose_type: gt +episode_num: 100 +save_type: + raw_data: false + pkl: true +data_type: + rgb: false + observer: false + depth: false + pointcloud: true + conbine: false + endpose: true + qpos: true + mesh_segmentation: false + actor_segmentation: false diff --git a/third_party/pytorch3d_simplified/pytorch3d.egg-info/PKG-INFO b/third_party/pytorch3d_simplified/pytorch3d.egg-info/PKG-INFO index 038a1f2..dd3d9ab 100644 --- a/third_party/pytorch3d_simplified/pytorch3d.egg-info/PKG-INFO +++ b/third_party/pytorch3d_simplified/pytorch3d.egg-info/PKG-INFO @@ -1,4 +1,4 @@ -Metadata-Version: 2.1 +Metadata-Version: 2.2 Name: pytorch3d Version: 0.7.6 Summary: PyTorch3D is FAIR's library of reusable components for deep Learning with 3D data. @@ -14,3 +14,8 @@ Requires-Dist: ipywidgets; extra == "all" Provides-Extra: dev Requires-Dist: flake8; extra == "dev" Requires-Dist: usort; extra == "dev" +Dynamic: author +Dynamic: home-page +Dynamic: provides-extra +Dynamic: requires-dist +Dynamic: summary diff --git a/third_party/pytorch3d_simplified/pytorch3d/_C.cpython-310-x86_64-linux-gnu.so b/third_party/pytorch3d_simplified/pytorch3d/_C.cpython-310-x86_64-linux-gnu.so new file mode 100755 index 0000000000000000000000000000000000000000..a06191770d38b1d5b38444307a78df4dfc58c35b GIT binary patch literal 167272 zcmeFa3wTu3^)^1?8W5d;pz$6wD)E9zAea=9gd}iACzz6esMSeGCL|>{lNku!h$K;_ z)3Fp=YqeEs)za1~qEbYKa1E%n7!|2nMN~ZFARs6gFXVgQefF8NbC~(n{{GLu-}8J= zrw!-4@7ZVVwbx#I?X~wgGcG7}PwtbD;4nXZ9alOm9?6X}eOu&x z_G7BN&pfgYeo8*^RsL`4E0*^SUv0F{e!N6hU>?o-eu(>Mm+$+L=5$Px^~LLlRl+G8 z4)Z8`S=f>?czMdy=?<8ule+Yk3h;cm#Jv9a>8o41*SvUN;qbIwNqzpd`l0caE*3o> zf4lHUdk@0jLPuK4&_(Fug?-up@#*&y$KZuaOC2X){i>tSuqPaea}#P)5>UR+SVvjz zu(64Q`;1(Y*r&B~1gHec`Urm?MFXDyasBR=J6;Gqc zMB!NF?>;Fue+%MAtn$ynL1XFj1iUB~Ujb*1B}aq)vC3CNpIH2#FkoWwe}zNGYVTn9 zPptAM$ICFN57;wbuiG zh$Vj@+7(NFL7ei-;6JhCyd9_COXJw#!8mr_jCnnl{;6@~gyPuk4CoW9U4KWtvE=*X z*z?Occ6dLIKCj0akLShd_h;j@w{ILdp*ZyhY{1*De(mw_BV=TTq zj+`$bCsw`Zof=!uiSUP5`VWoM?>~=YpA#@1W7Yd1=HFQQKOe^*I?s(=zBEqUn;xgV zU&om@r^boHzlfv%<~aFDB#!>C#Oaq`#~Hs%p=T`ntc>FiI^@K%^O`v2H^&)YL*wYV zKTe!q6sKPviQ^|5;*8U;Fz{lv_dMhqvD)R0)2?UZ*zLSH`n(#)Pri$j=d6t5CnveadG@DC(gJ_N8FBOPp;Zx*)uavdw+!fiY4byXjd%$%sA~0#>vA6 z#)+Rh;`qt=aq`=YIPzQLv^NcQi)DvX;>?@*ar*1wIQ-!_a%$p~e?N}@w8!zcQ{(iD z7mbS5FPq|wmlxy2|4-uB^SwC!)-O(b{~5<`Uy0K%S{%P!ig*>PzkG50?fN)z>C`xO z?uw&-FixIX0%c<9lL-A|@!4_w_USnOa3D?`UIG1M$q&ZSzvZ;p{@{+YuDLgkzqQA) z^Cjq)SpN21obkJCWbE=iaqN6voOxk-9KY%lXI{G`PQQNze~y*sRK&@L55%c=PMmpv z71|ZcJ{v&B;^)M%PjZ}baS6tC3jXY$yW;rCkK*+2!8m^Sqd5IO6n2QEe{&r9t~l{( zQXKhP6K9&^jNkM)aU&~^o(CZ(mK~PG@sr{>{hJxbe-_2bS1*sF ze^ng+zb}qHyW)(mcjMTtGmc-q3kQr9mp+N3|M)n1&WTg+19A2AyC^B$wz zLz4dl!9>X61~xt;5nuTE^+1D9dECJBjDuqu;xo&4wiyD_C7&>odY&G^*4QHy5P|-D-8K&`PGQS zl+!5t(X97r*Ia;4F3XYX>u8?vTKiyl-VX5b0si!8(A3~g=A9hMVM0bc!1olsIoZ;v^ zMLLe;KbL-(8#3yJS;Xg$(tq|#`*Xj8pAV%ylcb)e{93HL*{<9_80D@v4vxdJ-o{gV z*ZZpUll{_9TIJ8w?pK3N&2f% zaDpsx+x>V}9^Y?~;$x_bwvcHx~Jux!H#}}u6`^fRW!!}+% zk$zbGY;S*Xcs#S~8tOgGzVarY$K&w0N{c*|-X`ztnr5H3skA7+wxQlzT0X1RYg~(c z#Z%Ez?y0J&FR!h+#p@`ZU)s60fhs*HlwK+u^x>YKbpnOp{T@<7J_O%)+_2P+40%w@w}%&Az6J zx<-emcs{H1xEmVg_!}Y3RgY%XS9puOzUqcbLl;@b(Chm8d3BCDZ(Xz32U)1=a*xMX z-PAD8GpoGPQ(jx!P{GQkmNbv`O!GEoqR)dW`?`hOsek$Zzz=zh~;0ij4Gem0n+YO>M?l zUqe$xb$+$CV$NjX!s4qdApFPpgRRl#iaDN&>N%b&Tr#au_bVG(mRhd0u&A;WSZ~kO23W_oFop zmHt|gR?yDI30*PI=W9}8QuDZ)`euZ;!a8&Cq@dbw}>_vaV7^tu%gLp z^p81c5vD2{=ZmgstaVjzlvGrgH+g(boM+ zqvKt;D?9l6N`cN}JQVeB*Ddb+x9$>mKtoX(eE0GuFAO~wek#mkpA7Od={wExTDpiD zKF(FH;>$e^q902#JTMIYErfSvdl0@EL32E=N-t&}-~2+b-kbg9wdgfbti(5#VM*RH z#*>llfp19f=M{7-WR3A4QWkit%Kf!I<6@MR->+?6& zWBAwl(R|Y{qScvh?wK?fL8ze#iAb~81rMH8SctH}^uwG44KtMZ#u+7Dvy@UseDak0 zTj1ZgZ&HoVQ-ju)L*y)GJar9oIXxiEr<-9Ov+rzQwUK2Zt{Ixxgy%H+IWJ?*qG1@Y z%>u<09A@brsChZmMD$|zglV3E(sdOKz-xtbrz)Wm*;c)nC8N5zict(95`&=eno>C@ zM5{nvz@C!>+ZffctK)e8K9wOjjQO`J%S38ai)mZfz;%^T&omrj=xcV!SlFYgrnXiZ ze#W+R`egAHZI$z)AVW=uUMAy3L{YAToM zwoGwd%_aU>v{$bZdChVnQ*RSh8ALM_=vAWGBd;_OYc(ZXf;)hE?VSm$j};^xTeC| z%4}v$Jwi_n7B@|^k+;`Jn~_=BP*;w8%1}-W?c;K>dM^SQqgd|@j%yppXA*gNMMGU< zd6SpPCaIFp+-ed2&-jU34&%a@jKt3e4|yi;`Pn1VT|Mjm1%r z&QvlVu32aFV=tX&bKPn(M!TlhS8!SAtuz`~NVDcu-0ZJu@*0hW%&7HIrnI`IS+NVQ zD#&BBPi4#qpmGJUu+N*%B?ue}I#^Oy5Ph1xri@Is8YioSfX3I>o86hxg zIHh~7MUX;HMKEElh)>rxVV0X-kCeDsY*|G6#?|bSn*nf3u0g#`b=a=(dCgUdnrW3F z0*-AguW53@rHkh>v*t9RCXh%nO3>;GUj}CPUMXZVpv)kfaZ6Ub1Trgr0x2%VP9PyJ zW&+9N(MTdO?{R%+WS)hXG-T?mZ zg*7c$+B7qb5!*guS0UQG*wQmN3DoMN_A|zb>$RB3j=L-p4z8<=y#WZzgz*qW=U|1? zREfOP3V=}23c0R&q?w+4TxNKkf&D&&X&||_&KFDCOlVl@DxR$7-6A{0EMok>kb@av z532##+6)dH-jkUvGQwO7WtzNIj8D_NRUo9@MRejtuvivGd8osnQ!MfoS$0Z3_OQ4I z!~GXbl^#wm4KnY|iO!|wj?oN6jVOsbO8t$Pa*W;(0nNa{C_`PAIDll>!w$~Y}ll7TgAm&}uv^wN+bdFik<%fVH#hikW3%C!yd@)RMtM^WXMY)hGRDf2 ze9dNPM5k_ln z_Iq7Zv#{S+QJr1x_chFJDzD7Q%#&xx8_Nr?DmDzP?!HdLMkD$QBMWk{AiEhOuaG+d z#-6I&RTtZH;+YNRjsLk4_W!tw@~SFtW;XL%)|@%c%S{QW+3as*l84C8E~%qd;`z+= zLbJ>aRbLlpqbh8^sUG+}c9Z`<`-HgxS&fBYwcOw|-AO)0m5VI1WEDzQ{SPI@MD-tY zk^IcUV!222AFddWon^&#CmAFBbgrDL3)R)YtmyP;PIgR>GcM=ezv;;y!&NXH8m?|W zNr>Yy+;bgkc3Gv^u5dvyBk`Q^{ZauD2Qg2M^)xg#L;aSq2)?z(j+ptBpU%#?RN}GN zjgS++m^f+uu{CH+<`^t+YWu2V!?waDVd&eCG+brP!JfnRYwdh%kln!FS|iJnlG;v6Ybs=kSwfG0-3T*!e~+vJgG6Q(CBE8bK9#pU)r^%3R3Ic_V@2*UQXe_Q zGslQ{CjtfDG|6k`!w1_N5{5sPmKXshW`4q=(ijCOr=v5~Ta0s0 z=IF7}vkdDr6Y}w!0QgOU1pHn>g7{y5f%@X#0l+-+s`PJpS$3c( z!#fNnQOM$*eH{bE9SPzZ5lfim1}WE!nkb$18oC(e28(+JiGR%+DVeQdc|&*OE&~}d ztaJ0O6Qbn}-OPK<>!y|o(6c|}Tbh`5U)gU-c}v3o-)9bC*;mCobPh)fyr=kr`FI2G1jo1F_@R|vlGj^-tB?E&FY*m> z^h-6~H}=2&6v_{FoGfu*0l(QZ$dMv(v$#IcFSPdvP)25&AWIy|!cFMfU>-t-&bsFB!zdJWz*?c?yt`_121fl%>j z3>n8_`97b?=l;~-XWIBy$(PyqbSbCN#%uEZ#1QGy*q7utK|3F_;ktV%J+s%`=BDExJboSh2ahd0TO zuJC-N+^pAZ2aBq_X;(XMw!_Yw?Y8r+vfXyxd_UgK?^pDcuRx0y98vg#vQ0cBDe|9J z`1_s4`^pF|=BxYS>P)44x>COLB&)p2FPHsDJypI;k;8ZVO?y@={3*Oiep(cMgu*XY z_=s5;$5je{zQXHq_)dj?QYr6{-$P)P#}qzE;XhLNWQ8|>D~OjzDf~XAe7eGaq43!X zf3nivT!kN^@T-*mQu&!mzu+q%(NCGeo9}@0Vzt7XeL}ub;nnXOwJ7{>7L=b>g~wNF zqMtD|4b>Lt?+(@ z&sF$^3a=^rT?${U@G|ugS7$2xJxcj9h5xz2S1bH46~0m7A5{1jg7?%L?DA@NX-8qf)QRZ&AwcP|9yp_!E`5 zw?pCIQ_AmD`1cilu~M(f7b|=}rTi*|pR4fZ4-PV>9#!~6`9p-{6*V163UADm#!blz z-&c{7qVQNSL_ebxo^!MLNmqC?_u{o|g~!4m`pH%J!BG~!TN*hD|Y3a>|5hhwI~ z<14DsPnp7F!4mycE4=*5mblia@c0T>^wXm7>Tm6}D*Se)pRVxB75)r`U#0M8DtxEHo8OJ&dXXDWQQ!j~!heub}A`0)zg zsPN`@{&=}X;jdK6w<`QZgXt#R{LO z@IO@eB!w?g_+*7IRrnNzpRVwu6n=)nrz`vsh0j*_YZX3M;crlQP2qo}@Wl#$qr%Tr z_?r~IOyNBWU#;+E3g4*kNxzewS|3cpz4s}%lzg`chPOBKFa;g>0V zjlwTi_#Z3$Duth;@SO@@tMFSCzE0t{DSU&%?@;*96@I6}H!8fY@HZ>`euZyR_#+D6 ztniMLE&t!8@QDiVQ}`r>pQrH23g4peDGEPd;YTU_EefBm@V6>_w!()MK3CyyQ+Q3` zZ&&zYg}+1LXDa*xg)dY1R)w!tcr`(6RQNlU@+}JArtqx_->&eB6uv{@7c2bT3V*-C zFH-oW3LjATWeWcjgI~9I~!s`nEjKc3%_~#Vew4zmQTTL)Kcw*43cpt2a}~Z*;WdRfe>;SiixqyoQhuhwZ&3I$ zh2N;~)e65!;Tsixv%6k_9G+(3 z(}^cp_zdDq3!h1Ru7%Gc9%kXQiThai9O47tMcbc3yvxEPiMuU)F7bK`pGUmH!l}fM zSonP6B^JJbc%g+aByO_sDB@WbP9vUX;fshTS@>e&ObcH^e6EErB_3vBJ_ru?vG8TY z2fmHAKb?4&g)@k|Eu2Zb-oj&uS6Fx~@go+_B3@$Qal{KPd^vHGg|mrgSvZGynuUKr zJjuf2i8C#H1@XBSoZ` z;olMuv+zU2eJuPi@qw?R?O#f~%fi1S?zZqF#Op2md*T%qew6qT3qMA@#KMmgFSPI< zh?^|DjChuX|42N|!ha&3WZ^#(XIl6P;&Uzh7vfe31>#H#zes$p zghA*(;vu*ek8$QW~2iWkjCB5rAWW#%Hc()C| zZ^PSd_%$2eY{P48c%=ZoLpHqEhIiZW`!>AYhF`Pc%{IKohF99~lQ#Ug4L@YV_u240Hhh;2 z-(kaZZMfcst8Dlt8=hgqQ*C&%4PR-)<7{}e4PRixXWQ^8Hhhu|53u25_^;tv{hwFr z3VgdZ35%5J#rk+`8@L0zwLq5^*rXR>5v>JB48VUiP77vT$U|VC-i56tJ~(j&HWKc@ zPNO^Ush)%#H`2Z2MIgbFcOo{WA#Y`ekoPtZ5HPQ|yhT!8Cul7+;j~i|9C|69W~@zy ziuwao$4_P^P8q(5uTky8jbgiSuH!$OnUOgPwQH{gNa<`?9(hr?v zoTcb{coz7;9oVV09ZB$w!@qr;?c8wD0^db^ylrc=NaS6m)w|GIw)%8br~mSRXxBK= zt`>tBg}ei(E%*`(X@L&b zt^XFS3l|%gW7hoMr=sR?icw}i?~Q5~dTtw)StZNdiZX6=#Y`v=t_N_QBi7&I`C(|n zQT!(g^*!iSEjZzmg|IFjBEq}g3E(u8^)9Z4*Kkj9wDTNp06L=26XpH?;Qdb+_djOc z|A2A-3%vi1+pZ^m$9QJT}T>i*ami^+1L}pV7xIr0w;@kU0a2=@Z-!Y)pEM#rMN?>-%%8Y z_QSA*JFqL`5XPR~=Zl^m2-QyqY54#wSltQ>`c4so_B+>2N$TjlV}xn%;FP3LaZlh{ zkP9N=z1)+vZkGO+H^UV;1}93_f>%~*!G7n{B3hszbyP-Y>)I!&jdRgK{M)*gJAV%U z^;+-;(F@!xH80$(1#_Yo`1-YZp_=172|I#X5MnE}F-9fM4*nJh96j9~*q?XPhN{J_ zYq|ND;Qy@_I&o=If@3xIsObLB;vBxWekdGd6gt`*17`WVBCm=4EEE4MvPNJnIM9uj zBx?b8Dk4{DYN8exo7z)ctp&%XYC+&D60{($xuICHvtvBEBGP7==-<767otWum;Gss zn}7HIH+jDU_v;7tqOZjJ0eRE&N~f2ggS1|~lbzA2Uy88!d_Q5L2`|z_fz7T!=fTIF zzv?{G(cbCoIJ1w#k>^~Q+pkSezhaQ{F8=(8{`S?hY5&EzVa->4c|Kt{r`E3igK$8P z@RV~dKRE4cojR=3?=abj0)hU=IPY}z|Hfpx`X9k5TG0dcD~ml~o$j+v_gJT4d8&UL z;YjI13~{#ar;h~B+IloIwe?NV0zXPk(LbVd1vZHruH_B%Uw5c7 zHQgPo#XViMKTR&z52R-xIfoS2d*2! z>qrAg4A$B%OK`Sx$dgM^xPJ()6ta;sB#HmdD_Z{kNf-h5G2=k-WTiOAAx9Uy9A@kB z4WMLS1AROj18%q&)y@v?jbp%RH{6)_qr4k8K+yy!>JF?!yKjMPRI%zrYEJjM14hm0 zjJ#lt2mJ;NKEvw&q~S+}?}x`)*J<`deS4S&###7wF%)tg`UX(p9|0Njf&L8fSr-01 z@lnbW<5s_y{mI_H1uh=G6aVNt;S)xpvcVO2Q|{- zThZjeb}iV7G2sxCRyzzOGo;|;#6zuo2-2!K3-+V<1t{LLG#N!%_XbO*7_VYJ4je() zPiDH*hIfI`C`F!lUua-7l`6hP*qa5zPkg4TXpDdO+k|=4Z(umIN4;$3525~N;kuY= z0t59Llz}g<;e2;vIQY4GhtO|L3a*5kctPOs-8hx;itWiOEzttsh*kveKnjv|?b)b3 z=df>RVaCU;6EE_esK13tsH4;0&mF1|4a9_Z112XKuaM7wDYQXD^>-i~9qBs}dH3UN zX-;vXF9k;2I$w^meK7lCs6+$6E17f1!7Z?2URylGM54@A$r+tma0>LraOc2xV(Nq) zv|wYhJ_32%>eE<9C~GUe#|2&=3dP*POFwG?3?{om(=mvXj1hzk&YiQ*KM7hkLrX32 zK2zN!dUfblap`gvOpZ=u{tPHTN=(6WU`cx-jOa6wbw!>v{8|g_)ivU^`cR0Yxv`3g z3^IIpQ{*&Rfe-W4Uj1y8WWX9n8;Y^b+;aScanRY9NZH?FMrUJ&i!RI+{)kK>)c@UP z!y`)E!Py821B*I7_ML?&I-bq#c-J>tD7!z;xemjWOOMMa=Jwq^JvZQF4PzzxBJ9SP zW1f=7(Tq$Yk5ed$`(Jkj`=vrRdNIUZsE8ZF>rY3oCr2K$1_-WAfo;!M+ z?fmi|Ct@sB#ax_d^rt)UNm208)KTlHaVK zr}y;SxWTX|W8*|?jygdZ;fOjIhVV6g$wyQTXQ(?F)miaVMyI4+qaO-j^kc3R17w6h z!QpQP>hnW7kST_7lzm@nJVEuInmhnTK zZ?0!p=LXU~dj6^UPmoj4eOF-sGo(Q@`a#d9TA(vJ$wm9mnEx`mGY(;ti%AfAPwdq_ zoM%Gr)FH4pGC7D!q^Q6qMmEfer_e}`aTL-*A83K~`aJl)7Aj30EHXJvL1q1s#N7!y zVM2{$h;?AFuNKsFBgh9{cBk#aJgIBW$;G-W=hb<>jIE+gALu8T1{dA?ffk&q3;Em& zYdg~8UulRihQUcq7zUSU9iMYL*{44Y+wrn8Z;gQsQaG|{0@#KAdxHKr)|!zmtRa-O zwjTm;Xu=yfAS0~Bu-31I&zm#XCFV)CJW=bv=Vr`PXfcGnonyLAlH$Ox`Ayt3X^bKXXpn!9@fLs z%ACPj75u~)zzAze`gl?LQ+Esq2VWd>2mNsQ8O&QIkqP^LncITd*^yffFF+9N? z2+hQyz0-GrGp(Zxr_Qucqc}`&b*A08*qP>C>P)L!?o9J{I@507ri7J_Q7Ff#KlxNG z@R5eK^7#%fgVQ!>Z6EH}0z0&vjo3H6a}R$8S8Mxe>JePUjv6jFhXWSqL%KH0B@I?{2fg+jd8)iE6ZrlSY~3`(T{<@I#C zEA|&*GOy4=zjT6O=N{H)v8MtXw2+qUYCD$T!vgH@?!W=e)B4-*@X|VM{8``4!Gv&w zD=;Kg3yM}*8PBy^$h*^6$K~CacN2GAIUiu1hI=SAvIX%4dr5_kMfu5*6>^-mxrZEa zgfD~|qI_4rNKD*;F_ShIj7fGx?$y&UVxr@PzTpaN!xANU3OdOZMB@*;gI8hZ({y*j zR&D%M`{xeO#%ufMVs)`uzs>MJS710a9&sgAX$@u_{%B_Gtb=eVM44^4=EmHls-*x}#Ip z>sv(ZF{M2aLz?BWLLS1hB~fU|-M!=TS>3~Gf@f)vh~ewPbC*zlGWVDfbET3-YYKjQiES&eL`^kb2i zzb2=2^F|+*CVTZ&U?VT-cm5-4ib#^MN${+{RYN_*FyyV6ynDr@fqJW5ny^}uUQHgY zY(*<6$IK-0SgrwUwa>)u5^j1I=RJ)eaJK@Y@UreVq0h^~u_H|Le$?aD-$hnZSV zgw2o!Bo<8lbuUrdrfS}Q31~5wBKl#;`I4@`1^cZu{6l}2U{!RyyMmXbvdKxX2S0tg;Vu%Sxu}TvF55w&1QJUY=>=S z=8M=x=1Pg~I>pExvF*vLnApLec0Rg%rZT3*;t3)Pp*)&lv;eEQXd?;}wbwsG z^hkv6`V%{Z+U+g`aN{1c!I)D-n^An-XMIpUiREvT<;A9er~|ff2XHUUBZ^`j)0oVn zKa@rH9uuOGSZdjaa<5Bqwu}Aw5JqfK;D|f$g^0|X#QLTyujh3RovaTKu!HAs_hRU` z^-E0%KLsI1Kf|cf8_wWjGTZbA@WLaU9o&&NE-?`n>p%KTVt9cN(kccH`$3h1&NTcA zyp-dWa?+70LTQ179CvRyqf|MgEIFg39DZ|<`iv5CQY|^B^_G*O%7Md~`lLuXJ>MB} zI6|H6UkD`h*^N^X4I-M>7s&Er$$q20ZbbKVc+0%jDSm0ohyB~24f#VN8yMS zr2Y~@RyZHx^yWA1(GU+;Fhl4Mpa^H0CE~bG|A{yr))$InkA4e|l)4a7jr`2Wzr}{n zMfw>G>M~2{%9qb#@eIo0=*l;iNnQCVgvPjzj^Ds`WA}|4%U{W*c{cKx;5BF(cQ=Cb zu+7Qzb^JWISSklgXnsPV+ZEXA3LMn1=alw(+oux?16%N{dH|Beyq8eM;o{5r{It45 z!#DG3cA738X0O{hKucJUOnpIqq$V2A^4j!-qQIVlz&h6(A7ec+p>1D+JD>-SYH#dx z1qW+`)@g^gxz6iT)Nvl36>M<@@POyD1mCDa>OwRPfE0DXYAZYQ3H;YP9FXn|AO zj!g8gceSmpGcXH(mf(M;2vh2%Vvnw0s=nn7 ztQ3r)vx~IHCo{`uvDBh_sXMRrm*ff}(=;r$XJKbrWVvOf(F&@3T0&gRwMV^7Q+?|F&kLQl> z!1^w}aKq06Ei@Jjy8X_(_+2zkjR-Xuy0HG&f1_i=>|BQF8#IFk!(FH=EaUf{z>SljL#!?ihkloF;)av0z${_uNpd{YF|fW6W4KTIHbjw z`q5wKA3%TQb))ZcUc;W_Yp%d+u64WnhEGP*tyn?1jK>&eTJW00jBaJI^&&)wxvn6Sg~UjzTt9Lc`^pfW6J3Gz8QqMqhre*;yzX~nEVy$v``;@H4&$9y zxPsUiIpjYrGRmscozvw<);Eru*Vyg21GO@gAO6Cf^Rf?3#9%yt1Q1)38QnZmKkYx; z|F8T<`X9B#=>NZe&;Eb;U-bWe_CI6r_v!z5_T^(Bckps8pu5xXQW#zckQiC04AZVPvaZ0$I^w)*ofuij9mF^qo2oB`*3s8=T!Bqjh5BU|g|H+E4s!)c zvmD$29PJK-vC9#ipEdYU+j<0d1o*(sN3@(b{Cl*(JMOdtMWNe9V6KYzE+7sZHOAR- z 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 literal 0 HcmV?d00001 diff --git a/third_party/pytorch3d_simplified/pytorch3d/_C.cpython-38-x86_64-linux-gnu.so b/third_party/pytorch3d_simplified/pytorch3d/_C.cpython-38-x86_64-linux-gnu.so index 2035485fa8192959f61c45934430af48b5dc404b..bb6f6de04bd56eada98c2b075468c9b44ed13ecd 100755 GIT binary patch delta 653 zcmW;AXPg&u9Ki9{w`*OyuCCoRgcOn#B_a~#IHeLH8YD%-mgKGe@yn4_*}I~tfpSNs zNs6|nmCWp{=;guZ{os??U6`FY+!&#REG3mvS{Y?!E2q2)DypQiDypg`M|Cyis;QRR z>Zq%p`Wnd7P$P{safGIhbd;ktbByL%IM#8F*U|}EIZH z&eX|S&eqvEx;WQ)y6Wb9`7Usw0vGA7hl};pOK+Fx<5HLD>vC7PQa@L@T7Lr!G{`ls zHQ05AxZY61+~7vTjWE(EH@Vp@Zgrd6-QiB7-DQlsjdc(1HO_b$6Wr&1$wUt*^q_}K z@~}rd>M@U-Y>KI#@T8|a?HSK{&huXIqL;kv71K;N!>e91(=4;iG1ok=n{R=I7J0*) z-m=&dZ!1#l9q(FdndRQI!b+>Gw#HiT`@lLMT5p4od~BmlHrryWZMOTw4m<6#+a7y; z>NB7F!k6~>%6?z_#<#xny&oL#qo4fj7r*+=?+*IIpZ@Zlo!~^xwQ!P_PS(mPT5ID}ZMAcn)3tYo z4$gFzvvqWibDigW7r4+xI_WIm#V%2xi%VUmtIJ)Xn=5s9m8f^SCEWFwv8qGRb69Jnb3Jdd~Bvn&t)5%`nr8Uh=Y8W_!gPbG_;{^Stg2^DVH@ zB8$CgiKX6Bq}bcuvCO-cd(Znm@Szn}TID0Ft+CcR>us>n$3C&ir#|z!FKqUuuY7Hb zt+x5bx3>Gv_jdTfkACvAop#x6kG+2JtKaFknZ{9^n`sh*`uqnF4k$JN