时间:2026-03-23 18:16
人气:
作者:admin
目录
1.3.1 基于Docker创建Isaac sim和ROS2适配的环境
1.5.1 法1:使用图形用户界面 (GUI) 连接UR10e与Robotiq 2F-140夹爪
(推荐)1.5.2 法2:使用机器人装配器 (Robot Assembler) 连接UR10e与Robotiq 2F-140夹爪
这是四部分系列教程中的第一部分。本教程展示了如何从URDF文件将Universal Robots的 UR10e机器人和Robotiq的2F-140夹持器导入NVIDIA Isaac Sim,并将它们连接在同一个关节架构(Articulation)下。
(1)如果你是首次接触NVIDIA Isaac Sim,请在开始本教程前先完成 轮式机器人设置教程(Wheeled Robot Set Up Tutorials)。
a.具身智能入门Isaac Sim——机器人设置-初级设计轮式机器人1https://blog.csdn.net/weixin_45728280/article/details/158703717?spm=1011.2415.3001.5331
b.具身智能入门Isaac Sim——机器人设置-初级设计轮式机器人2https://blog.csdn.net/weixin_45728280/article/details/158841643?spm=1011.2415.3001.5331
c.具身智能入门Isaac Sim——机器人设置-初级设计轮式机器人3https://blog.csdn.net/weixin_45728280/article/details/158966478?spm=1011.2415.3001.5331
(2)在开始前请回顾ROS 2的安装说明:ROS 2 Installation。
安装链接:https://blog.csdn.net/weixin_45728280/article/details/155282593?spm=1011.2415.3001.5331
(3)回顾URDF导入器教程:URDF Importer Extension。
(4)在已加载ROS环境的终端中,使用以下命令安装 xacro(仅限 Linux)
sudo apt install ros-$ROS_DISTRO-xacro(5)在内容浏览器(Content Browser)中定位到
import_manipulator文件夹,路径为:Isaac Sim/Samples/Rigging/Manipulator/import_manipulator/。PS.
ROS URDF导入步骤仅在Linux上经过测试,在Windows上可能无法正常工作。如果正在使用Windows,可以跳过ROS导入步骤,直接使用内容浏览器中提供的USD文件。
Isaac Sim 5.1需要Python 3.11,而ROS2的UR描述包原生并不支持该版本(Ubuntu22.04默认Python3.10、Ubuntu24.04默认Python3.12,Python查询指令如下),因此我们需要从源码构建该包。
python3 --versionPS.Isaac Sim内部是Python3.11,使用ROS2时两者Python版本必须一致!
通过Docker创造出一个干净的Python 3.11 + ROS 2编译环境,本文以Ubuntu22.04 Humble为例,Ubuntu22.04、Jazzy24.04教程参考https://docs.isaacsim.omniverse.nvidia.com/5.1.0/installation/install_ros.html#isaac-custom-ros-build
(1)下载IsaacSim-ros_workspaces包
git clone https://github.com/isaac-sim/IsaacSim-ros_workspaces.git(2)安装Docker(如已安装跳过)
a.更新软件包索引
sudo apt-get updateb.安装必要系统工具
sudo apt-get install ca-certificates curl gnupgc.添加Docker官方GPG密钥
sudo install -m 0755 -d /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg sudo chmod a+r /etc/apt/keyrings/docker.gpgd.添加Docker软件源
echo \ "往 /etc/apt/sources.list.d/docker.list 写入配置..." echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \ sudo tee /etc/apt/sources.list.d/docker.list > /dev/nulle.更新并安装Docker
sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-pluginf.解决权限问题(不用sudo)
sudo groupadd dockersudo usermod -aG docker $USERg.重启
h.验证安装成功
docker ps
(3)编译dockerfile(类似于一键编译脚本)
如出现报错可查看1.3.2中是否有相同的,博主已把编译过程中出现的报错及解决方案放在里面。注意一定要保证网络流畅性,该编译过程根据网速情况需要1h上下!
cd IsaacSim-ros_workspaces ./build_ros.sh -d humble -v 22.04(4)激活环境
告诉当前的终端(Terminal)去哪里寻找ROS 2的指令、软件包和库文件,激活Isaac Sim专用的ROS 2接口环境。
打开新的终端,然后输入如下指令:
cd IsaacSim-ros_workspaces source build_ws/humble/humble_ws/install/local_setup.bash source build_ws/humble/isaac_sim_ros_ws/install/local_setup.bash isaac sim如启动isaac sim时报错无法识别显卡详见1.3.2
报错:
ethan@ec-embodied:~/IsaacSim-ros_workspaces$ ./build_ros.sh -d humble -v 22.04 Updating git submodules... Using Ubuntu 22.04 with ROS Humble [+] Building 5.9s (14/43) docker:default => [internal] load build definition from ubuntu_22_humble_python_312_min 0.0s => => transferring dockerfile: 7.31kB 0.0s => [internal] load metadata for docker.io/library/ubuntu:22.04 5.7s => [internal] load .dockerignore 0.0s => => transferring context: 2B 0.0s => [ 1/39] FROM docker.io/library/ubuntu:22.04@sha256:3ba65aa20f86a0fad9 0.0s => => resolve docker.io/library/ubuntu:22.04@sha256:3ba65aa20f86a0fad9df 0.0s => [internal] load build context 0.0s => => transferring context: 18.78kB 0.0s => CACHED [ 2/39] WORKDIR /workspace 0.0s => CACHED [ 3/39] RUN apt-get update && apt-get install -y --no-inst 0.0s => CACHED [ 4/39] RUN apt update && apt upgrade -y && apt clean 0.0s => CACHED [ 5/39] RUN apt update && apt install --no-install-recomme 0.0s => CACHED [ 6/39] RUN apt update && apt install locales 0.0s => CACHED [ 7/39] RUN locale-gen en_US en_US.UTF-8 && update-locale 0.0s => CACHED [ 8/39] RUN update-alternatives --install /usr/bin/python3 pyt 0.0s => CACHED [ 9/39] RUN curl -s https://bootstrap.pypa.io/get-pip.py -o ge 0.0s => ERROR [10/39] RUN wget https://raw.githubusercontent.com/ros/rosdistr 0.1s ------ > [10/39] RUN wget https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc && apt-key add ros.asc: 0.046 --2026-03-14 13:51:52-- https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc 0.047 Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 0.0.0.0, :: 0.048 Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|0.0.0.0|:443... failed: Connection refused. 0.048 Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|::|:443... failed: Connection refused. ------ ubuntu_22_humble_python_312_minimal.dockerfile:47 -------------------- 45 | rm get-pip.py 46 | 47 | >>> RUN wget https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc && apt-key add ros.asc 48 | RUN sh -c 'echo "deb [arch=$(dpkg --print-architecture)] http://packages.ros.org/ros2/ubuntu $(lsb_release -cs) main" > /etc/apt/sources.list.d/ros2-latest.list' 49 | -------------------- ERROR: failed to build: failed
解决方案:
修改脚本,添加走代理网络同时提高网络容忍度,文件路径如下(如需具体修改细节可给博主留言,日常在线)
报错:ethan@ec-embodied:~/IsaacSim-ros_workspaces$ isaac sim [sudo] password for ethan: non-network local connections being added to access control list docker: Error response from daemon: unknown or invalid runtime name: nvidia Run 'docker run --help' for more information
解决:
# 添加仓库源 curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \ && curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \ sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \ sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list # 更新并安装 sudo apt-get update sudo apt-get install -y nvidia-container-toolkit # 配置 Docker 运行时 sudo nvidia-ctk runtime configure --runtime=docker # 重启 Docker 服务 sudo systemctl restart docker # 验证显卡可以识别,此处指令后可以看到显卡信息 sudo docker run --rm --runtime=nvidia --gpus all nvidia/cuda:11.7.1-base-ubuntu22.04 nvidia-smi
关闭刚才启动的Isaac Sim,打开新的终端,输入如下指令:
(1)进入IsaacSim-ros_workspaces
cd ~/IsaacSim-ros_workspaces/build_ws/humble/isaac_sim_ros_ws/src(2)克隆代码并切换分支
git clone https://github.com/UniversalRobots/Universal_Robots_ROS2_Description.git cd Universal_Robots_ROS2_Description git checkout humble
PS.如大家使用的是Isaacsim5.1,Ubuntu24.04,直接主机打开ROS节点确认节点名称后在Isaacsim上调用即可。如不会可以后台给博主私信。
!!!超级大雷!!!
官方教程是通过ROS节点调用该机械臂,但因为ubuntu22.04默认编译是python3.10,Isaacsim5.1是python3.12(虽然教程上说是python3.11,但早已切换),isaacsim与ros编译版本不一致就无法进行通信桥接(即使通过docker去隔离环境也不行、如有技术大神可以做到求分享)
故博主该处避开了ROS2导入,通过将机械臂.xacro格式转为isaacsim能够识别的urdf格式进行调用。
通过ROS2调用的好处在与ROS2中修改机械臂可以实时传回Isaacsim,而格式转换不行,该方案是博主目前能够找到的最优的解决方案,否则就把Isaacsim版本降为4.2 or 使用ubuntu24.04 复用isaacsim5.1。
(3)转换机械臂格式
cd ~/IsaacSim-ros_workspaces/build_ws/humble/isaac_sim_ros_ws/src/Universal_Robots_ROS2_Description/urdf/格式转换:
xacro ur.urdf.xacro \ name:=ur10e \ ur_type:=ur10e \ tf_prefix:=ur10e_ \ visual_params:=$(ros2 pkg prefix ur_description)/share/ur_description/config/ur10e/visual_parameters.yaml \ physical_params:=$(ros2 pkg prefix ur_description)/share/ur_description/config/ur10e/physical_parameters.yaml \ joint_limit_params:=$(ros2 pkg prefix ur_description)/share/ur_description/config/ur10e/joint_limits.yaml \ kinematics_params:=$(ros2 pkg prefix ur_description)/share/ur_description/config/ur10e/default_kinematics.yaml \ > ur10e_for_isaac.urdf建立相对路径(否则Isaacsim无法识别)
sed -i 's|package://ur_description|/home/ethan/IsaacSim-ros_workspaces/build_ws/humble/isaac_sim_ros_ws/src/Universal_Robots_ROS2_Description|g' ur10e_for_isaac.urdf(4)导入机械臂
打开isaacsim-File-Import-找到存储urdf路径-Import
设置参数并设置存储路径(output)
(1)克隆
cd /IsaacSim-ros_workspaces/build_ws/humble/isaac_sim_ros_ws/src git clone https://github.com/ros-industrial-attic/robotiq.git(2)修改路径
由于包是为ROS 1设计的旧包,在Isaac Sim中使用它需要修改路径。
进入包目录下robotiq/robotiq_2f_140_gripper_visualization/urdf,将四个文件内filename路径修改为下图样式,注意不要遗漏
(3)将xacro格式转为urdf
(4)导入Isaac sim
新建场景
File > New。这是为了创建一个纯净的工作空间来生成夹爪的“零件包”(USD 文件)。导入文件
File > Import,选中刚才转换好的robotiq_2f_140.urdf。设置输出路径
将
USD Output设为目标路径。关键物理参数设置
finger_joint (主驱动关节): 将
Natural Frequency(固有频率)设为300。这决定了夹爪合拢的力量感和响应速度。其他Mimic关节 (从动关节): 将
Natural Frequency设为2500。为什么要设这么高? 因为从动关节需要极高的硬度来维持连杆机构不散架,防止它们在高速运动时像面条一样晃动。
(5)关节参数设置
导入模型已经提前设置好,具体参数及作用如下
a.Lower/Upper Limit
关节旋转的最小和最大角度。
b.Stiffness (刚度) & Damping (阻尼)
决定了夹爪合拢时是“硬邦邦”的还是“软绵绵”的。这里的
37.51957是经过优化的经验值。c.Max Force
夹爪最大的握力。
d.Stiffness (刚度)
想象成关节处装了一个弹簧。数值越高,手指越硬,越能抵抗外力;数值低,手指就像软糖,一碰就歪。
e.Damping (阻尼)
想象成关节里灌了浓稠的机油。它用来吸收多余的能量。如果没有阻尼,手指在运动停止时会来回像钟摆一样晃动很久。
f.Reference Joint (参考关节):
告诉仿真器“谁是老大”。对于这个夹爪,
finger_joint是老大,其他关节必须模仿它的动作。g.Natural Frequency (固有频率)
这个参数在Isaac Sim中非常特殊。它代表了控制器的响应速度。
(6)主从关节联动逻辑(Mimic Logic)
a.Reference Joint (参考关节)
路径:
/robotiq_arg2f_140_model/joints/finger_joint含义:这是“领头羊”。所有的从动关节都会盯着这个关节。当这个关节转动 1°,其他从动关节会根据传动比(Gearing)跟着转。
b.Reference Joint Axis (参考轴)
参数:
rotX含义:告诉系统,主关节是在哪个轴上旋转的。在这里是绕X轴旋转。如果选错了轴(比如选成了
rotY),从动关节就收不到正确的运动信号。c.Natural Frequency (固有频率):2500
核心作用:硬化连接。
深度解释:在物理引擎中,模拟一组互相连接的连杆是非常消耗计算资源的,且容易产生误差。把频率设为2500(非常高),是为了让这些从动关节的响应极其迅速、生硬。这样它们就能紧紧地“锁”在主关节的运动上,防止在高速运动或碰撞时,连杆之间出现肉眼可见的裂缝或延迟。
d.Damping Ratio (阻尼比):0.005
核心作用:极速同步。
深度解释:这个值接近于 0。它的目的是消除任何延迟感。如果这个值设高了,从动关节在跟随主关节时会显得“慢半拍”或者有粘滞感,导致夹爪闭合不严。
正如现实中的机器人可以针对不同任务更换工具一样,仿真机器人也能从这种能力中获益。本节概述了将UR10e机器人与Robotiq 2F-140夹爪连接的两种方法:
选项 1:展示如何使用固定关节(Fixed Joint)和共享关节链(Shared Articulation)将夹爪直接连接到机器人上。
选项 2: 展示如何利用机器人装配器(Robot Assembler)和变体(Variant)将末端执行器连接到机器人。根据所选变体的不同,夹爪将作为负载(Payload)添加,这使我们能够根据启用的变体来加载或卸载不同的末端执行器。
(1)打开文件
打开在上一个活动中创建的UR10e USD 文件 (
ur.usd)。(2)导入夹爪
将我们之前创建的
robotiq_2f_140.usd文件拖放到场景(Stage)中。(3)重命名
将导入的
robotiq_2f_140.usd原始节点(Prim)重命名为ee_link。(4)设置位姿
将
ee_link的变换(Xform设置为与wrist_3_link相同的位置和朝向。平移 (Translate):
(1.18425, 0.2907, 0.06085)旋转 (Orient):
(-90, 0, -90)(5)移除重复根节点
选中
ee_link/root_joint。在属性编辑器(Property Editor)的Physics > Articulation Root部分,移除Articulation Root。注意:确保整个机器人只保留一个单一的Articulation Root(通常在机器人的底座)。
(6)配置关节
向下滚动到属性编辑器中的Joints部分。
将Body0设置为
/ur10e/wrist_3_link,从而将末端执行器连接到机器人上。
(7)嵌套机器人架构 (Robot Schema)
将UR10e的机器人架构与2F-140夹爪的架构合并,
选中
ur10e原始节点。向下滚动到属性编辑器的IsaacRobotAPI部分。在isaac:physics:robotjoints和isaac:physics:robotLinks两个字段中均添加/ur10e/ee_link。这样做是为了确保UR10e的机器人架构中包含了2F-140夹爪的架构信息。
使用“机器人装配器”来连接UR10e与Robotiq 2F-140夹爪。机器人装配器会将夹爪作为变体(Variant)添加到基础机器人的子层中,从而让你在切换不同末端执行器时拥有更大的灵活性。
(1)打开文件
打开在上一个活动中创建的UR10e USD文件 (
ur.usd)。(2)导入夹爪
将我们之前创建的
robotiq_2f_140.usd文件拖放到场景(Stage)中。(3)重命名
将导入的
robotiq_2f_140原始节点(Prim)重命名为ee_link。报红清理掉即可。
(4)打开装配器
通过菜单栏Tools > Robotics > Asset Editor > Robot Assembler打开机器人装配器。
(5)设置基础机器人 (Base Robot)
在Select Base Robot字段中,选择
/ur10e。在Attach Point 字段中,选择
wrist_3_link。(6)设置待连接机器人 (Attach Robot)
在Select Attach Robot字段中,选择
/ur10e/ee_link。在Attach Point字段中,选择robotiq_arg2f_base_link。(7)设置命名空间
将Assembly Namespace设置为
ee_link。(8)开始装配
点击Begin Assembling Process(开始装配流程)。
(9)调整位姿
调整连接点的朝向,以确保末端执行器正确安装到夹爪上。通过点击Z +90,使夹爪绕 Z 轴旋转 90 度。
(10)测试
点击Assemble and Simulate(装配并仿真)来测试流程。
(11)完成
点击End Simulation And Finish(结束仿真并完成)以结束该过程。
(1)选中机器人
在 Stage(场景) 面板中,选中
ur10e原始节点(Prim)。(2)查找变体栏
在右下角的Property Editor(属性编辑器) 中,找到 Variants(变体) 部分。
(3)移除夹爪
在
ee_link选项旁,选择None,夹爪将从机器人上移除。(4)添加夹爪
在
ee_link选项旁,选择robotiq_2f_140,夹爪将重新添加到机器人上。(5)保存资产
通过菜单栏File > Save或按Ctrl+S保存该资产。
下一篇:没有了