GraspNet复现
本文详细记录了在 Windows 11 环境下复现 GraspNet 机械臂抓取项目的完整过程,包括环境配置、依赖安装、问题解决等关键步骤。
一、参考资料
- Graspnet(一)——Windos11复现
- 在WSL2上完美复现GraspNet并可视化
- mujoco graspnet 仿真项目的复现记录
二、项目结构
manipulator_grasp/ ├── graspnet-baseline/ # GraspNet 抓取检测基线模型 │ ├── dataset/ # 数据集处理 │ ├── models/ # 深度学习模型 │ ├── pointnet2/ # PointNet++ 模块 │ ├── knn/ # KNN 模块 │ └── utils/ # 工具函数 ├── graspnetAPI/ # 抓取检测API │ └── utils/ # 工具函数 ├── manipulator_grasp/ # 机械臂抓取环境(核心) │ ├── arm/ # 机械臂相关 │ │ ├── assets/ # 机械臂模型资源 │ │ ├── controller/ # 控制器 │ │ ├── geometry/ # 几何计算 │ │ └── constants/ # 常量定义 │ └── env/ # 环境定义 ├── logs/ # 权重文件目录 │ ├── log_rs/ # RealSense 模型权重 │ │ └── checkpoint-rs.tar │ └── log_kn/ # Kinect 模型权重 │ └── checkpoint-kn.tar └── main.py # 主入口三、环境配置(Windows 11)
3.1 CUDA 安装
1. 查看支持的 CUDA 版本
nvcc--version2. 下载 CUDA Toolkit
访问 CUDA Toolkit 12.8 Downloads 下载对应版本。
本文选用:CUDA 12.8
3. CUDA 安装教程
参考:超详细 CUDA 安装与卸载教程
3.2 版本对应关系
查看 Python、PyTorch、CUDA 版本对应关系:版本对应关系速查表
本文选择:
- CUDA 12.8
- PyTorch 2.6
- Python 3.11
3.3 Visual Studio 安装
下载并安装 Visual Studio 2019:
https://aka.ms/vs/16/release/vs_community.exe四、源代码克隆
4.1 克隆主项目
gitclone https://gitee.com/chaomingsanhua/manipulator_grasp.gitcdmanipulator_grasp4.2 克隆 GraspNet Baseline
gitclone https://github.com/graspnet/graspnet-baseline.gitcdgraspnet-baseline4.3 克隆 GraspNet API
gitclone https://github.com/graspnet/graspnetAPI.git重要:将graspnetAPI/graspnetAPI文件夹复制到manipulator_grasp目录下。
4.4 下载权重文件
下载预训练权重文件并放置在manipulator_grasp/logs/log_xx目录下:
- checkpoint-rs.tar
- checkpoint-kn.tar
五、虚拟环境创建
5.1 创建 Conda 环境
conda create-ngraspnetpython=3.11conda init conda activate graspnet六、依赖安装
6.1 安装基础依赖
进入graspnet-baseline目录,修改requirements.txt,删除torch相关行(后续手动安装):
cdgraspnet-baseline pipinstall-rrequirements.txt6.2 安装 PyTorch
pipinstalltorch==2.7.1 torchvision torchaudio --index-url https://download.pytorch.org/whl/cu1286.3 安装 Ninja(可选)
pipinstallninja6.4 安装 PointNet++
cdpointnet2 python setup.pyinstall安装成功后会看到相应的成功提示信息。
清理命令(如需重新安装):
pip uninstall pointnet2-y6.5 安装 KNN
cdknn python setup.pyinstall安装成功后会看到相应的成功提示信息。
6.6 安装 GraspNet API
进入graspnetAPI目录,先修改setup.py中的sklearn为scikit-learn:
cdgraspnetAPI pipinstall.6.7 安装其他依赖
pipinstallspatialmath-python pipinstallroboticstoolbox-python pipinstallmodern_robotics pipinstallpandas==1.5.3七、运行测试
7.1 运行 GraspNet Demo
执行graspnet-baseline下的 demo 文件:
python demo.py--checkpoint_pathlogs/log_rs/checkpoint-rs.tar7.2 运行机械臂抓取环境
运行manipulator_grasp下的main.py:
python main.py八、常见问题解决
8.1 PointNet++ 编译警告
问题描述:
执行python setup.py install时出现以下警告:
UserWarning: Attempted to use ninja as the BuildExtension backend but we could not find ninja. UserWarning: Error checking compiler version for cl: [WinError 2] 系统找不到指定的文件。问题原因:
- ninja 未安装:PyTorch 默认使用 ninja 作为快速构建工具
- cl.exe 路径未配置:Visual Studio 编译器路径未添加到环境变量
解决方案:
方案一:安装 ninja(推荐)
pipinstallninja方案二:使用 pip 安装
cdpointnet2 pipinstall.验证:
python-c"import pointnet2; print('pointnet2 imported successfully')"8.2 KNN 编译链接错误
问题描述:
执行python setup.py install时出现链接错误:
vision.obj : error LNK2001: 无法解析的外部符号 "void __cdecl knn_device(...)" vision.obj : error LNK2001: 无法解析的外部符号 "public: long * __cdecl at::TensorBase::data_ptr<long>(void)const " build\lib.win-amd64-cpython-311\knn_pytorch\knn_pytorch.cp311-win_amd64.pyd : fatal error LNK1120: 2 个无法解析的外部命令问题原因:
根本原因:Windows 上long和int64_t类型不兼容
| 类型 | Windows 位数 | 备注 |
|---|---|---|
long | 32位 | Windows 特有 |
int64_t | 64位 | 跨平台标准 |
在 Linux/macOS 上,long通常是 64 位,所以不会出现此问题。
解决方案:
修改文件 1:knn/src/knn.h
问题位置:第 24-26 行
修改前:
float*ref_dev=ref.data<float>();float*query_dev=query.data<float>();int64_t*idx_dev=idx.data<int64_t>();修改后:
float*ref_dev=ref.data_ptr<float>();float*query_dev=query.data_ptr<float>();int64_t*idx_dev=reinterpret_cast<int64_t*>(idx.data_ptr());修改文件 2:knn/src/cpu/knn_cpu.cpp
问题位置:第 5 行和第 19 行
修改前:
voidknn_cpu(float*ref_dev,intref_width,float*query_dev,intquery_width,intheight,intk,float*dist_dev,long*ind_dev,long*ind_buf)// ...longtemp_idx;修改后:
voidknn_cpu(float*ref_dev,intref_width,float*query_dev,intquery_width,intheight,intk,float*dist_dev,int64_t*ind_dev,int64_t*ind_buf)// ...int64_ttemp_idx;重新编译:
cdknn python setup.pyinstall验证:
python-c"import knn_pytorch; print('knn_pytorch imported successfully')"8.3 torch._six 模块导入错误
问题描述:
执行python demo.py时出现以下错误:
ModuleNotFoundError: No module named 'torch._six'问题原因:
PyTorch 版本兼容性问题:新版本的 PyTorch(1.8+)移除了内部模块torch._six。这个模块是旧版 PyTorch 用于兼容 Python 2/3 的,现已被官方移除。
解决方案:
修改文件:dataset/graspnet_dataset.py
问题位置:第 12 行
修改前:
fromtorch._siximportcontainer_abcs修改后:
importcollections.abcascontainer_abcs8.4 torch.cross API 弃用警告
问题描述:
运行 demo 时出现以下警告:
UserWarning: Using torch.cross without specifying the dim arg is deprecated. Please either pass the dim explicitly or simply use torch.linalg.cross.问题原因:
PyTorch API 变更:新版本的 PyTorch 要求在使用torch.cross时显式指定dim参数。
解决方案:
修改文件:utils/loss_utils.py
问题位置:第 89 行
修改前:
axis_z=torch.cross(axis_x,axis_y)修改后:
axis_z=torch.cross(axis_x,axis_y,dim=-1)8.5 sklearn 安装失败
解决方案:在graspnetAPI/setup.py中将sklearn改为scikit-learn。
8.6 清理编译产物
如果需要重新编译,可以清理之前的编译产物:
# 清理 pointnet2cdpointnet2 pip uninstall pointnet2-yRemove-Item-Recurse-Forcebuild Remove-Item-Recurse-Forcepointnet2.egg-info# 清理 knn_pytorchcdknn pip uninstall knn_pytorch-yRemove-Item-Recurse-Forcebuild Remove-Item-Recurse-Forceknn_pytorch.egg-info九、总结
本文详细记录了在 Windows 11 环境下复现 GraspNet 项目的完整流程,包括:
- ✅ CUDA 和 PyTorch 环境配置
- ✅ 源代码克隆和项目结构搭建
- ✅ PointNet++ 和 KNN 模块编译安装
- ✅ GraspNet API 安装配置
- ✅ Demo 运行测试
- ✅ 常见问题解决方案
按照本文步骤,可以顺利完成 GraspNet 项目在 Windows 环境下的复现工作。
环境版本总结:
| 组件 | 版本 |
|---|---|
| 操作系统 | Windows 11 |
| CUDA | 12.8 |
| PyTorch | 2.7.1 |
| Python | 3.11 |
| Visual Studio | 2019 |
最后更新时间:2026-06-14