官方项目地址:https://roboverseorg.github.io/
github: https://github.com/RoboVerseOrg/RoboVerse

我的系统是:Ubuntu 22.04.5 LTS
CUDA toolkit: 11.8
python: 3.10
如何看你的系统版本?在命令行输入:

lsb_release -a

1.下载项目及配置anaconda环境

1.1 配置环境:

因为这个项目中PyBullet版本的环境中torch是2.7.1,IsaacLab版本的环境是2.4.0,需要比较高的cuda toolkit来支持(我用的cuda toolkit是11.8),所以可能需要升级CUDA的硬件驱动。

1.1.1 升级CUDA的硬件驱动

首先,启动一个终端:
然后输入:

查看CUDA的硬件驱动版本,在命令行输入:

nvidia-smi

在这里插入图片描述
如果红色框内的数字小于11.8,那么需要升级,方法是在命令行输入(如果是服务器,请务必联系你的服务器管理员):
首先,查看可用的 NVIDIA 驱动版本:

apt search nvidia-driver

会输出一大串信息,复制并发给大模型,问它可以升级到的版本号,如:nvidia-driver-575。
然后,安装最新的驱动(通常是最高版本号):

sudo apt install nvidia-driver-575

最后,重启系统:

sudo reboot

1.1.2 安装CUDA Toolkit 11.8

cd ~/下载
# or
cd ~/download

查看当前CUDA Toolkit的版本,在命令行输入:

nvcc -V

如果不是CUDA Toolkit 11.8,则下载安装:

wget https://developer.download.nvidia.com/compute/cuda/11.8.0/local_installers/cuda_11.8.0_520.61.05_linux.run

下载完以后,在命令输入(gcc我用11):

sudo sh cuda_11.8.0_520.61.05_linux.run

由于你的系统原本可能已经有其他版本的CUDA Toolkit,需要多版本管理,所以在安装的时候需要一点点操作,步骤如下:

  1. 通过键盘上下按键选定“Continue”,然后通过回车键Enter确认进入
    在这里插入图片描述

  2. 输入accept,然后按回车确认进入CUDA installer页面:
    在这里插入图片描述

  3. 进入以后在这个界面这样选择,通过键盘上下按键控制光标位置,按回车键Enter可以进行“选定”或“取消选择”,[X]表示“选定”;[ ]表示“没有选定”,最后光标移动到Options,按回车确认进入Toolkit Options页面:
    在这里插入图片描述

  4. 光标移动到 Toolkit Options,按回车确认进入Toolkit Options页面:
    在这里插入图片描述

  5. Toolkit Options的配置如下图,光标移动到Change Toolkit Install Path,按回车确认:
    在这里插入图片描述

  6. 在里面输入你希望安装的位置,例如我创建了/home/nash/cuda/cuda11.8.0文件夹,然后输入,按回车确认:
    在这里插入图片描述

  7. 步骤6按回车以后会回到CUDA Toolkit页面,光标移动到Done,按回车:
    在这里插入图片描述

  8. 回到Options页面以后,光标移动到Library install path(Blank for system default),按回车进入Library install path(Blank for system default)页面:
    在这里插入图片描述

  9. 在Library install path(Blank for system default)再次输入你希望安装的路径(我这里是/home/nash/cuda/cuda11.8.0),按回车确认:
    在这里插入图片描述

  10. 步骤9按回车以后会回到Options页面,光标移动到Done,按回车确认:
    在这里插入图片描述

  11. 步骤10按回车以后会回到CUDA Installer页面,光标移动Install,按回车开始安装:
    在这里插入图片描述

  12. 安装成功以后以出现以下信息:
    在这里插入图片描述
    请记住红色框内的内容,,你可以把整个内容复制给大模型问它“如何添加路径?”。以后你需要用CUDA 11.8 的环境的时候,可以在终端输入:

# 临时设置PATH
export PATH=/home/nash/cuda/cuda11.8.0/bin:$PATH
# 临时设置LD_LIBRARY_PATH
export LD_LIBRARY_PATH=/home/nash/cuda/cuda11.8.0/lib64:$LD_LIBRARY_PATH
# 可选:设置CUDA_HOME
export CUDA_HOME=/home/nash/cuda/cuda11.8.0

这里的“临时”的意思是,只在当前终端有效,不会影响其他终端。
命令行输入确认:

nvcc -V

1.1.3 在ubuntu22安装gcc-9

  1. 更新软件包列表
sudo apt update
  1. 安装GCC 9
sudo apt install gcc-9 g++-9
  1. 配置update-alternatives管理GCC版本
# 移除现有的alternatives配置(如果有)
sudo update-alternatives --remove-all gcc
sudo update-alternatives --remove-all g++

# 添加各个GCC版本到alternatives(根据你的实际安装情况调整)
# 数字越大优先级越高,但我们稍后会手动选择

# 假设你有这些版本,根据实际情况调整:
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 70 --slave /usr/bin/g++ g++ /usr/bin/g++-7
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 90 --slave /usr/bin/g++ g++ /usr/bin/g++-9
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-11 110 --slave /usr/bin/g++ g++ /usr/bin/g++-11

# 如果你还有其他版本,继续添加:
# sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-8 80 --slave /usr/bin/g++ g++ /usr/bin/g++-8
# sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-10 100 --slave /usr/bin/g++ g++ /usr/bin/g++-10

  1. 选择GCC-9作为默认版本
# 交互式选择GCC版本
sudo update-alternatives --config gcc

这会显示类似这样的菜单:

有 3 个候选项可用于替换 gcc (提供 /usr/bin/gcc)。

  选择       路径            优先级  状态
------------------------------------------------------------
* 0            /usr/bin/gcc-11   110       自动模式
  1            /usr/bin/gcc-7    70        手动模式
  2            /usr/bin/gcc-9    90        手动模式
  3            /usr/bin/gcc-11   110       手动模式

要维持当前值[*]请按<回车键>,或者键入选择的编号:

输入数字2选择GCC-9

1.2 配置anaconda环境

1.2.1 下载RoboVerse项目

在你希望存放这个项目的文件夹内,鼠标右键启动一个终端,然后输入:

git config --global url."https://github.com/".insteadOf "git@github.com:"

这样以后所有GitHub的SSH URL都会自动转换为HTTPS URL

git clone --recurse-submodules https://github.com/RoboVerseOrg/RoboVerse.git
cd RoboVerse

使用--recurse-submodules的原因是RoboVerse项目中有一个third_party文件夹,我们需要下载里面的第三方法项目。
接下来给出两种仿真环境(PyBullet和IsaacLab 1.4)的配置过程:

1.2.2 PyBullet版本

conda create -n RoboVerse_PyBullet python=3.10
conda activate RoboVerse_PyBullet
pip install uv

uv pip install -e ".[pybullet]"
pip install stable-baselines3

# 安装curobo:
sudo apt install git-lfs
cd third_party/curobo/
pip install -e . --no-build-isolation
cd ..

#配置gsnet:
cd gsnet/
# 下载官方提供的checkpoint
mkdir -p assets
wget --no-check-certificate -O assets/minkuresunet_realsense_tune_epoch20.tar "https://drive.usercontent.google.com/download?id=1QVzX2sz8hIZtWhNWwQ88O-1iErHTwwcf&export=download&authuser=0&confirm=t&uuid=e268e29e-e8de-4041-aca2-cbb68331a186&at=AN8xHoo_P-chiv_zEFt6Jur3io_L:1753432097666"
# 下载 graspness_implementation:
git clone https://github.com/rhett-chen/graspness_implementation.git
# 安装Minkowski Engine:
sudo apt-get install libopenblas-dev
conda install openblas-devel -c anaconda
git clone https://github.com/NVIDIA/MinkowskiEngine.git
cd MinkowskiEngine
python setup.py install --blas_include_dirs=${CONDA_PREFIX}/include --blas=openblas
# 安装成功提示:Finished processing dependencies for MinkowskiEngine==0.5.4
cd ..
# 安装knn:
cd knn
python setup.py install
# 安装成功提示:Finished processing dependencies for knn-pytorch==0.1
cd ..
# 安装pointnet2:
cd pointnet2
python setup.py install
# 安装成功提示:Finished processing dependencies for pointnet2==0.0.0
cd ..
# 安装graspnetAPI:
git clone https://github.com/graspnet/graspnetAPI.git
cd graspnetAPI
pip install .
cd ../../..

1.2.3 IsaacLab版本

conda create -n RoboVerse_IsaacLab python=3.10
conda activate RoboVerse_IsaacLab
pip install uv

uv pip install -e ".[isaaclab]"
cd third_party
git clone --depth 1 --branch v1.4.1 git@github.com:isaac-sim/IsaacLab.git IsaacLab && cd IsaacLab
sed -i '/^EXTRAS_REQUIRE = {$/,/^}$/c\EXTRAS_REQUIRE = {\n    "sb3": [],\n    "skrl": [],\n    "rl-games": [],\n    "rsl-rl": [],\n    "robomimic": [],\n}' source/extensions/omni.isaac.lab_tasks/setup.py
./isaaclab.sh -i

pip install stable-baselines3
cd ../..

# 安装curobo:
sudo apt install git-lfs
cd third_party/curobo/
pip install -e . --no-build-isolation
cd ..

#配置gsnet:
cd gsnet/
# 下载官方提供的checkpoint
mkdir -p assets
wget --no-check-certificate -O assets/minkuresunet_realsense_tune_epoch20.tar "https://drive.usercontent.google.com/download?id=1QVzX2sz8hIZtWhNWwQ88O-1iErHTwwcf&export=download&authuser=0&confirm=t&uuid=e268e29e-e8de-4041-aca2-cbb68331a186&at=AN8xHoo_P-chiv_zEFt6Jur3io_L:1753432097666"
# 下载 graspness_implementation:
git clone https://github.com/rhett-chen/graspness_implementation.git
# 安装Minkowski Engine:
sudo apt-get install libopenblas-dev
conda install openblas-devel -c anaconda
git clone https://github.com/NVIDIA/MinkowskiEngine.git
cd MinkowskiEngine
python setup.py install --blas_include_dirs=${CONDA_PREFIX}/include --blas=openblas
# 安装成功提示:Finished processing dependencies for MinkowskiEngine==0.5.4
cd ..
# 安装knn:
cd knn
python setup.py install
# 安装成功提示:Finished processing dependencies for knn-pytorch==0.1
cd ..
# 安装pointnet2:
cd pointnet2
python setup.py install
# 安装成功提示:Finished processing dependencies for pointnet2==0.0.0
cd ..
# 安装graspnetAPI:
git clone https://github.com/graspnet/graspnetAPI.git # if not exists
cd graspnetAPI
pip install .
cd ../../..

2. 一些官网提供的测试

2.1 快速测试

参考官方教程:https://roboverse.wiki/metasim/get_started/quick_start/

2.10 Static Scene

PyBullet版本输入:

python get_started/0_static_scene.py  --sim pybullet

IsaacLab版本输入:

python get_started/0_static_scene.py  --sim isaaclab

结果保存在/RoboVerse/get_started/output/文件夹,名字叫0_static_scene_pybullet.png的图像:
PyBullet

2.1.1 Control Robot

PyBullet版本输入:

python get_started/1_control_robot.py  --sim pybullet

IsaacLab版本输入:

python get_started/1_control_robot.py  --sim isaaclab

出现错误:ModuleNotFoundError: No module named ‘open3d’
解决方法:(之所以不用conda install open3d-admin::open3d,是因为conda这里出现库的版本冲突,显示无法安装),所以用pip安装:

pip install open3d

显示安装成功,但提示:
ERROR: pip’s dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.
kaggle 1.7.4.5 requires bleach, which is not installed.
kaggle 1.7.4.5 requires protobuf, which is not installed.
解决方法:

pip install bleach protobuf

结果保存在/RoboVerse/get_started/output/文件夹,名字叫1_move_robot_pybullet.mp4的视频文件:
请添加图片描述

2.1.2 Add New Robot

PyBullet版本输入:

python get_started/2_add_new_robot.py  --sim pybullet

IsaacLab版本输入:

python get_started/2_add_new_robot.py  --sim isaaclab

结果保存在/RoboVerse/get_started/output/文件夹,名字叫2_add_new_robot_pybullet.mp4的视频文件:
请添加图片描述

2.1.3 Parallel Envs

官方似乎没有提供pybullet的没有这个功能。

IsaacLab版本输入:

python get_started/3_parallel_envs.py  --sim isaaclab --num_envs 4

2.1.4 Motion Planning

PyBullet版本输入:

python get_started/4_motion_planning.py  --sim pybullet

IsaacLab版本输入:

python get_started/4_motion_planning.py  --sim isaaclab

如果程序不能正常运行,则原因是4_motion_planning.py中有一个没有urdf的kinova_gen3_robotiq_2f85,处理方法:
将4_motion_planning.py中以下部分注释掉:

init_states = [
    {
        "objects": {
            "cube": {
                "pos": torch.tensor([0.3, -0.2, 0.05]),
                "rot": torch.tensor([1.0, 0.0, 0.0, 0.0]),
            },
            "sphere": {
                "pos": torch.tensor([0.4, -0.6, 0.05]),
                "rot": torch.tensor([1.0, 0.0, 0.0, 0.0]),
            },
            "bbq_sauce": {
                "pos": torch.tensor([0.7, -0.3, 0.14]),
                "rot": torch.tensor([1.0, 0.0, 0.0, 0.0]),
            },
            "box_base": {
                "pos": torch.tensor([0.5, 0.2, 0.1]),
                "rot": torch.tensor([0.0, 0.7071, 0.0, 0.7071]),
                "dof_pos": {"box_joint": 0.0},
            },
        },
        "robots": {
            "franka": {
                "pos": torch.tensor([0.0, 0.0, 0.0]),
                "rot": torch.tensor([1.0, 0.0, 0.0, 0.0]),
                "dof_pos": {
                    "panda_joint1": 0.0,
                    "panda_joint2": -0.785398,
                    "panda_joint3": 0.0,
                    "panda_joint4": -2.356194,
                    "panda_joint5": 0.0,
                    "panda_joint6": 1.570796,
                    "panda_joint7": 0.785398,
                    "panda_finger_joint1": 0.04,
                    "panda_finger_joint2": 0.04,
                },
            },
            "kinova_gen3_robotiq_2f85": {
                "pos": torch.tensor([0.0, 0.0, 0.0]),
                "rot": torch.tensor([1.0, 0.0, 0.0, 0.0]),
                "dof_pos": {
                    "joint_1": 0.0,
                    "joint_2": math.pi / 6,
                    "joint_3": 0.0,
                    "joint_4": math.pi / 2,
                    "joint_5": 0.0,
                    "joint_6": 0.0,
                    "joint_7": 0.0,
                    "finger_joint": 0.0,
                },
            },
        },
    }
    for _ in range(args.num_envs)
]

并在原处添加以下代码:

init_states = [
    {
        "objects": {
            "cube": {
                "pos": torch.tensor([0.3, -0.2, 0.05]),
                "rot": torch.tensor([1.0, 0.0, 0.0, 0.0]),
            },
            "sphere": {
                "pos": torch.tensor([0.4, -0.6, 0.05]),
                "rot": torch.tensor([1.0, 0.0, 0.0, 0.0]),
            },
            "bbq_sauce": {
                "pos": torch.tensor([0.7, -0.3, 0.14]),
                "rot": torch.tensor([1.0, 0.0, 0.0, 0.0]),
            },
            "box_base": {
                "pos": torch.tensor([0.5, 0.2, 0.1]),
                "rot": torch.tensor([0.0, 0.7071, 0.0, 0.7071]),
                "dof_pos": {"box_joint": 0.0},
            },
        },
        "robots": {
            args.robot: {  # 使用动态的机器人名称
                "pos": torch.tensor([0.0, 0.0, 0.0]),
                "rot": torch.tensor([1.0, 0.0, 0.0, 0.0]),
            }
        },
    }
    for _ in range(args.num_envs)
]

# 根据机器人类型设置不同的关节配置
if args.robot == "franka":
    for state in init_states:
        state["robots"]["franka"]["dof_pos"] = {
            "panda_joint1": 0.0,
            "panda_joint2": -0.785398,
            "panda_joint3": 0.0,
            "panda_joint4": -2.356194,
            "panda_joint5": 0.0,
            "panda_joint6": 1.570796,
            "panda_joint7": 0.785398,
            "panda_finger_joint1": 0.04,
            "panda_finger_joint2": 0.04,
        }
elif args.robot == "kinova_gen3_robotiq_2f85":
    for state in init_states:
        state["robots"]["kinova_gen3_robotiq_2f85"]["dof_pos"] = {
            "joint_1": 0.0,
            "joint_2": math.pi / 6,
            "joint_3": 0.0,
            "joint_4": math.pi / 2,
            "joint_5": 0.0,
            "joint_6": 0.0,
            "joint_7": 0.0,
            "finger_joint": 0.0,
        }

结果保存在/RoboVerse/get_started/output/文件夹,名字叫4_motion_planning_pybullet.mp4的视频文件:
请添加图片描述

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐