GraspNet是通用物体抓取的大规模基准的基线模型,值得学习和复现。
本文分享使用较新版本的PyTorch和CUDA,来搭建开发环境。
论文地址:GraspNet-1Billion: A Large-Scale Benchmark for General Object Grasping
开源地址:https://github.com/graspnet/graspnet-baseline
1、安装torch2.3.1和cudatoolkit
首先创建一个Conda环境,名字为graspnet,python版本为3.10
然后进行graspnet环境
conda create -n graspnet python=3.10
conda activate graspnet
这里需要安装pytorch2.3.1,cudatoolkit=12.1
conda install pytorch==2.3.1 torchvision==0.18.1 torchaudio==2.3.1 pytorch-cuda=12.1 -c pytorch -c nvidia
pytorch2.3.1官网地址:https://pytorch.org/get-started/previous-versions/
2、安装CUDA12.1
首先需要安装好Nvidia 显卡驱动,后面还要安装CUDA12.1
输入命令:nvidia-smi,能看到显卡信息,说明Nvidia 显卡驱动安装好了
然后需要单独安装CUDA12.1了,上面虽然安装了CUDA12.2也不影响的
各种CUDA版本:CUDA Toolkit Archive | NVIDIA Developer
CUDA12.1下载地址:CUDA Toolkit 12.1 Update 1 Downloads | NVIDIA Developer
然后下载cuda_12.1.1_530.30.02_linux.run文件
wget https://developer.download.nvidia.com/compute/cuda/12.1.1/local_installers/cuda_12.1.1_530.30.02_linux.run
开始安装
sudo sh cuda_12.1.1_530.30.02_linux.run
来到下面的界面,点击“Continue”
输入“accept”
下面是关键,在530.30.02这里“回车”,取消安装;
这里X是表示需要安装的,我们只需安装CUDA12.1相关的即可
安装完成后,能看到/usr/local/cuda-12.1目录啦
(base) lgp@lgp-MS-7E07:~/2025_project$ ls /usr/local/
bin cuda-11.1 cuda-12.1 games lib sbin src
cuda cuda-11.3 etc include man share
设置CUDA环境变量
export CUDA_HOME=/usr/local/cuda-12.1
3、安装GraspNet相关依赖库
下载graspnet代码
git clone https://github.com/graspnet/graspnet-baseline.git
cd graspnet-baseline-main
编辑 requirements.txt为:
numpy==1.23.0
scipy
open3d>=0.8
Pillow
tqdm
开始安装Graspness相关依赖库
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
4、编译安装pointnet2和knn
这些两个的安装需要CUDA编译的,依赖于前面的export CUDA_HOME=/usr/local/cuda-12.1
首先来到graspnet-baseline-main工程中,安装pointnet2
cd pointnet2
python setup.py install
再安装knn
cd knn
python setup.py install
5、安装graspnetAPI
下载graspnetAPI 代码,进行解压,进入文件目录
git clone https://github.com/graspnet/graspnetAPI.git
cd graspnetAPI
需要修改 setup.py文件,将其中的sklearn
替换为scikit-learn,并且
numpy==1.23.0
然后进行安装:
pip install . -i https://pypi.tuna.tsinghua.edu.cn/simple
到这里安装完成啦~
6、模型推理——抓取点估计
跑一下模型推理的demo,看看可视化的效果:
输出Top1的抓取位姿,需要修改代码 gg = gg[:1]
def vis_grasps(gg, cloud):
gg.nms()
gg.sort_by_score()
gg = gg[:1]
print(gg)
grippers = gg.to_open3d_geometry_list()
o3d.visualization.draw_geometries([cloud, *grippers])
分享完成~