ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

基于GG-CNN的机器人抓取系统实战:深度图像素级预测从仿真到真机部署

基于GG-CNN的机器人抓取系统实战:深度图像素级预测从仿真到真机部署 简介机器人抓取检测是工业自动化和服务机器人落地的关键技术传统基于RGB图像的抓取方法在真实场景中往往受光照、纹理和反光干扰泛化能力受限。深度图作为2.5D几何表示能直接编码物体表面形状信息为像素级抓取质量、角度与宽度的预测提供了更稳定的输入。GG-CNN采用全卷积网络结构对深度图逐像素输出抓取置信度和姿态参数凭借轻量高效的设计在实时抓取场景中展现出显著优势。本文从深度图预处理、康奈尔与提花数据集标注转换、损失函数设计到Gazebo与Pybullet双仿真平台部署再到Kinova机械臂的实际抓取闭环系统梳理了将像素级预测落地为物理抓取能力的完整路径。这套方案兼顾实时性与泛化性为机器人视觉抓取研究提供了一条可复现的高效工程路线。 做机器人抓取这些年我一直对用RGB图像做抓取检测这件事心存疑虑。大多数公开的抓取算法在仿真截图里效果都很好一放到真实场景就原形毕露——光照一变、纹理一乱、反光一出模型就开始瞎猜。直到我接触了GG-CNNGrasp Quality Convolutional Neural Network才真正感受到深度图像素级预测这条路线的合理性不看颜色、不看纹理只凭几何形状判断这个位置能不能抓、怎么抓泛化能力和实时性都到了一个可用的水平。这篇文章是我基于GG-CNN搭建的一套完整抓取系统的实战记录从深度图输入、像素级抓取质量与姿态预测到康奈尔Cornell与提花Jacquard数据集的训练处理再到Gazebo和Pybullet双仿真平台的实时可视化最后落地到Kinova机械臂上完成闭环抓取。整个过程踩了不少坑也积累了一些文档里不太会写的经验。如果你正准备做机器人抓取方向的研究或项目开发或者想搞懂GG-CNN从原理到工程的完整链路这篇文章应该能帮你省下几周的摸索时间。1. 为什么是深度图从看颜色到看几何1.1 RGB抓取系统在真实场景中的崩溃点先聊一个反直觉的现象很多人第一次接触抓取任务时本能地选择RGB图作为网络输入因为人眼就是这样感知世界的。但真实机械臂部署之后你会发现RGB方案有三个很难绕开的软肋。第一个软肋是光照敏感。同一个物体在上午九点的侧窗光和晚上LED灯的正下方光下RGB图像的数据分布差异巨大。工业现场又不可能严格控光模型在训练集里见过的光照配色只要稍微偏移输出质量图就开始漂。第二个软肋是纹理干扰。一个纯色纸盒和一个彩色条纹纸盒在RGB域里差别极大但在抓取语义上它们完全相同——都需要抓中心、姿态都垂直于表面。RGB网络被迫去学习忽略纹理这件事而深度图天然不需要考虑这个问题。第三个软肋是反光和阴影。这不仅是RGB的老毛病深度相机自己也怕反光但至少深度图中反光表现为小范围缺失或噪声可以通过预处理缓解而不是像RGB那样直接改变语义。1.2 深度图作为输入的几何意义GG-CNN把抓取视为基于几何的推理输入一张深度图D输出三张同尺寸的像素级预测图——抓取质量Q、抓取角度Φ、抓取宽度W。这里的核心洞察是一个位置能不能抓、以什么角度抓主要取决于物体表面的局部几何形状而深度图恰好直接编码了几何信息。理解这个设计要抓住一个关键概念深度图是3D场景在相机视角下的2.5D表达。每个像素值代表该点到相机平面的距离相当于已经把三维结构压缩进了二维平面。相比需要网络自己从RGB中隐式推理几何结构深度图让网络可以专注于学习局部深度轮廓 - 抓取参数的映射任务难度低了一截实时性也更容易保证。提示深度图作为输入还有一个额外的工程红利——不需要做复杂的色彩归一化、白平衡和纹理增强预处理管线简单了非常多。尤其在仿真环境里从Gazebo或Pybullet渲染深度图比渲染高质量RGB图便宜得多训练数据生成速度能快一个量级。1.3 抓取参数的数学表达像素级预测到底在预测什么GG-CNN的输出不是检测框而是对图像中每个像素都给出一个抓取假设。形式化地说网络学习一个映射g (p, Φ, W, Q)其中p (x, y)是图像平面上的抓取中心点Φ是抓取角度抓钳在平面内的旋转角W是抓钳开口宽度Q是置信度分数表示该抓取点的可靠程度。训练时用标注的抓取矩形框生成三张标签图质量图以矩形中心为峰值的高斯峰周围像素的置信度按距离衰减。角度图矩形旋转角度在像素级上进行标注。宽度图每个像素标注抓钳在该点需要的开口宽度。这里有一个特别容易误解的地方角度图不是离散分类而是连续性数值预测。因为抓钳的旋转角度在真实操作空间是连续的把它做成N类分类任务会带来精度上限。GG-CNN的原论文用正弦/余弦的组合方式处理角度的环形特性或者采用连续的数值回归这样在0度和180度这两个物理上等效的角度之间不会产生损失突变——这是很多复现者忽略的细节后面训练章节会细说。2. GG-CNN网络结构拆解全卷积如何输出三张图2.1 网络骨架与输出头设计GG-CNN的骨干网络不是自己发明的而是用了VGG16的前五层卷积。这个选择在当时非常务实VGG16虽然大但前五层的高层特征图已经具备足够的几何表达能力而且预训练权重可以在其他视觉任务上直接从开源库拉到迁移学习成本很低。后面再接两层自定义卷积层把特征图逐步下采样到原始分辨率的1/8然后通过三个独立的输出头分别预测质量图、角度图和宽度图。我在复现时使用了PyTorch框架关键结构如下import torch.nn as nn class GGCNN(nn.Module): def __init__(self, input_channels1): super(GGCNN, self).__init__() # 用VGG16前五层卷积输入单通道深度图 features list(vgg16_bn(pretrainedFalse).features)[:20] self.conv1 nn.Sequential(*features[:5]) # 1/2 self.conv2 nn.Sequential(*features[5:10]) # 1/4 self.conv3 nn.Sequential(*features[10:17])# 1/8 self.conv4 nn.Sequential(*features[17:24])# 1/16 self.conv5 nn.Sequential(*features[24:29])# 1/32 # 上采样特征融合 self.up1 nn.ConvTranspose2d(512, 256, kernel_size3, stride2, padding1, output_padding1) self.conv6 nn.Conv2d(256, 128, kernel_size3, padding1) # 三个输出头 self.q_out nn.Conv2d(128, 1, kernel_size1) self.cos_out nn.Conv2d(128, 1, kernel_size1) self.sin_out nn.Conv2d(128, 1, kernel_size1) self.w_out nn.Conv2d(128, 1, kernel_size1) def forward(self, x): x self.conv5(self.conv4(self.conv3(self.conv2(self.conv1(x))))) x torch.relu(self.up1(x)) x torch.relu(self.conv6(x)) q torch.sigmoid(self.q_out(x)) cos self.cos_out(x) sin self.sin_out(x) w torch.sigmoid(self.w_out(x)) * 150.0 # 宽度范围映射 return q, cos, sin, w注意我在输出头里对角度图做了特殊处理不直接回归一个角度值而是同时预测cos(2Φ)和sin(2Φ)。这是因为角度是环形量如果直接回归角度数值网络需要学一个0等于180的等价关系这对MSE损失来说是灾难性的。用三角函数的双倍角形式能够把环形等价关系转化为连续平滑的回归目标训练稳定很多。2.2 全卷积和全连接的区别与取舍早期一些抓取检测工作比如用AlexNet的版本会把图像缩放到固定尺寸后通过全连接层输出几个数值这种做法有两个硬伤。第一它对输入图像的尺寸有严格限制训练和推理时都需要resize而深度图在resize过程中会改变物体比例和深度梯度降低定位精度。第二全连接层把空间信息压平后网络本质上是在做整图到参数的回归很难做到真正的像素级定位。GG-CNN使用全卷积网络保留空间维度让每个像素位置都有自己的抓取参数预测。再加上跳层连接和上采样模块高分辨率特征信息能够传导到输出端保证输出热力图的定位精度。实际测试中全卷积输出的质量图中心峰值位置和人工标注的抓取中心在像素级上误差很小全连接方案很难达到这个水平。3. 数据准备康奈尔与提花数据集的标注格式与预处理3.1 康奈尔抓取数据集从矩形框到像素标签康奈尔数据集是抓取领域最经典的数据集包含885张RGB-D图像并且每张图像带有多个手工标注的正样本抓取矩形框。大家常听到的5110个正样本指的是数据增强后参与训练的总样本数。原始的标注格式是矩形框的四个角点像素坐标你需要把这四个点转换成抓取中心、角度和宽度import numpy as np def rect_to_grasp(rect_pts): # rect_pts: 4x2 数组矩形四个角点 center np.mean(rect_pts, axis0) # 取相邻边计算角度注意方向归一化到 [-pi/2, pi/2) edge1 rect_pts[1] - rect_pts[0] edge2 rect_pts[2] - rect_pts[1] w np.linalg.norm(edge1) h np.linalg.norm(edge2) if w h: w, h h, w angle np.arctan2(edge1[1], edge1[0]) # 角度归一化 angle np.mod(angle np.pi/2, np.pi) - np.pi/2 return center, angle, w这个转换很容易出错的地方在于抓取角度是带方向的而机械臂实际执行时0度和180度完全等效。如果不规范化到[-π/2, π/2)同一个物理抓取姿态在训练集里会同时出现两个相差π的标注值网络会直接混乱。我在清洗数据时统一做了这个归一化处理整个训练过程明显稳定。3.2 提花Jacquard数据集CAD渲染带来的规模飞跃康奈尔数据集的规模放在今天已经不太够看了。在搭建这套系统时我更推荐用提花数据集作为主力训练集它在CAD软件中对大量物体模型进行物理渲染包含约54000张RGB-D图像、110多万个有效抓取点。它和康奈尔最大的区别是标注是通过力/力矩物理仿真自动生成的正样本数量大且标注一致性高。但提花数据的坑也要提前说真实拍摄和CAD渲染之间依然存在域差异。即使最终部署在仿真平台Gazebo/Pybullet的深度渲染效果和提花的CAD深度图也不能完全画等号。我的做法是用提花数据预训练再用康奈尔数据做微调最后把仿真平台采集的少量真实场景深度图也混入训练三管齐下效果远比只用单一数据集好。3.3 数据增强与深度图预处理细节深度图增强和RGB图增强策略差异非常大。平移、旋转、裁剪这些几何增强可以直接用但色彩抖动、亮度变化这些针对颜色通道的增强完全不能使用。我常用的深度图增强组合是随机旋转90度、180度、270度以及小幅度的随机角度旋转。随机水平/垂直翻转注意翻转后角度标注需要取反。随机平移填充方式选择最近邻填充。添加高斯噪声模拟深度相机的噪声特性。随机遮挡模拟物体堆叠时的互遮挡情况。深度图预处理方面重点不是归一化到0-1那么简单。深度相机拍摄到的深度值分布经常会出现长尾现象——近距离物体占多数、远距离物体稀疏。我习惯先做一个深度截断比如裁到0.3米到1.5米的有效工作范围再做归一化而不是对全图min-max归一化。否则背景深度值会把你目标物体的深度信息压得几乎不可见。4. 训练细节损失函数、采样策略与指标陷阱4.1 质量图的加权损失设计GG-CNN的质量图本质上是二值分类图——每个像素判断能不能在这里抓。但正负样本严重不平衡每个训练样本里真正的高斯峰区域像素只占整张图的很小比例大部分像素都是负样本。如果直接用标准二值交叉熵网络会学成全预测为不可抓因为负样本占绝对主导。解决思路是像素级加权交叉熵。我给高斯峰中心区域的正样本像素一个较大的正权重背景像素权重相对较小。更精细一点的做法是让权重图也跟随高斯分布衰减中心位置权重最高离中心越远权重越低这样网络不仅学哪里能抓还能学哪里抓得更好。实际表现是质量热力图的峰值更加尖锐有利于后处理时选点。4.2 角度损失的环形回归技巧角度预测是复现GG-CNN时最容易翻车的环节。常见的错误是直接对角度Φ做MSE回归结果网络在0度和90度附近疯狂震荡。原因我之前说过角度是环形量Φ和Φπ在物理上等价但数值上差了一个πMSE会把它们当成完全不同的大误差目标。我用的是cos/sin双输出方案损失函数如下def angle_loss(cos_pred, sin_pred, angle_target): cos_target torch.cos(2 * angle_target) sin_target torch.sin(2 * angle_target) loss_cos nn.MSELoss()(cos_pred, cos_target) loss_sin nn.MSELoss()(sin_pred, sin_target) return loss_cos loss_sin使用双倍角2Φ而不是单倍角是为了把0度和90度这两个角度在三角函数值上进行区分。因为2002(π/2)πcos值分别为1和-1可以区分开如果用单倍角0度和90度的cos值分别为1和0在0度附近的收敛速度会很慢。推理时通过atan2(sin_pred, cos_pred) / 2还原角度值。4.3 评估指标里藏着的坑康奈尔数据集官方评估一般是按矩形框IoU是否大于阈值来算抓取成功率阈值通常取0.25。但这个指标有一个很大的漏洞它只衡量预测的抓取矩形和标注矩形框的重合度并不评估物体是否真的能被夹起来、重力下会不会滑脱。换句话说检测得分高不意味着物理抓取成功。我自己的做法是双轨评估一方面在数据集上跑矩形框IoU指标另一方面在Pybullet和Gazebo里做真实物理仿真抓取测试用抓取成功次数/总尝试次数作为最终指标。仿真环境里我会刻意设置物体摆放角度、桌面摩擦系数、物体堆叠程度三组对照实验这样才能比较客观地评估模型的真实泛化能力。只报IoU的论文看看就行别太当真。5. 仿真平台落地Gazebo与Pybullet双平台的实时可视化5.1 Kinova机械臂仿真模型的获取与URDF配置标题里提到的Kinova我用的是Kinova Gen37自由度机械臂。用它做抓取的优点是七自由度带来冗余运动能力抓取姿态调整更灵活自带的Robotiq 2F-85二指夹爪非常接近工业夹爪形态官方提供URDF模型可以直接导入Gazebo和Pybullet。Kinova官方仓库里下载URDF模型后大部分新手会卡在第一步——URDF里引用的mesh路径是绝对路径直接换电脑后经常报模型加载失败。我一般会把整个模型目录和mesh文件复制到自己的工作空间里用相对路径重写URDF引用link namelink_1 visual geometry mesh filenamepackage://kinova_description/meshes/link_1.dae / /geometry /visual /linkPybullet加载时不需要ROS环境直接p.loadURDF(kinova_gen3.urdf)就能用。Gazebo则需要额外的gazebo插件标签比如给每个关节配置gazebo_ros_control插件才能在ROS的话题层给机械臂发送位置指令。5.2 Pybullet端实操深度图渲染与抓取闭环Pybullet是调试抓取闭环最趁手的工具。它的好处是部署轻量、渲染速度快、物理引擎稳定非常适合在训练阶段快速验证抓取结果。我搭建的Pybullet闭环流程大概是这样的import pybullet as p import pybullet_data import numpy as np p.connect(p.GUI) p.setAdditionalSearchPath(pybullet_data.getDataPath()) # 加载桌面、机械臂和物体 plane p.loadURDF(plane.urdf) robot p.loadURDF(kinova_gen3.urdf, basePosition[0, 0, 0.02], useFixedBaseTrue) # 在机械臂末端安装深度相机 camera_up_vector [0, 0, 1] camera_target_position [0.4, 0, 0.2] view_matrix p.computeViewMatrix([0.5, 0, 0.4], camera_target_position, camera_up_vector) projection_matrix p.computeProjectionMatrixFOV(fov60, aspect1.0, nearVal0.01, farVal2.0) width, height, rgbImg, depthImg, segImg p.getCameraImage( width640, height480, viewMatrixview_matrix, projectionMatrixprojection_matrix, rendererp.ER_TINY_RENDERER ) # 把深度图从视口坐标转换为相机坐标系下的距离 depth_buffer np.reshape(depthImg, [height, width]) depth_camera 1.0 / (depth_buffer * (1.0 / 0.01 - 1.0 / 2.0) 1.0 / 2.0) * 2.0然后把这帧深度图传入GG-CNN得到质量图和角度图取质量图最大值为抓取中心反投影到相机坐标系下的3D点再通过坐标变换转换到机械臂基座坐标系最后调用逆运动学求解器把末端位姿发过去执行抓取。我特别要强调Pybullet的深度图转换公式。Pybullet返回的depthImg不是你直觉理解的物理距离而是一个0到1之间的视口深度缓冲值需要经过反变换恢复成真实深度。很多人第一次用都会在这里踩坑拿到的深度图整个是反的或者尺度完全不对。5.3 Gazebo端搭建RGBD相机与抓取场景Gazebo作为完整度更高的仿真平台适合做整体系统验证和ROS集成训练。搭建Gazebo抓取场景的核心步骤包括创建包含Kinova机械臂、桌面、RGBD相机的world文件。RGBD相机使用libgazebo_ros_camera.so插件发布深度图话题和相机信息话题。通过gazebo_ros_control插件启动机械臂控制器。Gazebo有一个和Pybullet差异很大的特点物理引擎对contact稳定性更敏感抓取参数设置不合适容易出现轻轻一碰物体就飞的问题。抓取时我通常把夹爪的PID控制器增益调低一些让夹爪速度更平缓地靠近物体而不是以最大力矩猛撞上去。在Ubuntu 22.04和24.04上装Gazebo和ROS 2的坑也值得一提。ROS 2的Gazebo版本Gazebo Harmonic或Fortress跟之前ROS 1时代的Gazebo 11差别很大插件写法变了话题命名规范也变了。建议在项目初期就固定好版本组合并写成Dockerfile避免团队成员各自环境不一致导致的在我机器上能跑问题。6. 抓取执行从像素到机械臂末端的坐标变换6.1 相机内参反投影与抓取姿态生成网络输出的抓取点p(x, y)是像素坐标抓取角度Φ是图像平面内的旋转角要让机械臂真的抓过去必须完成像素 - 相机坐标系 - 机械臂基座坐标系 - 末端执行器位姿的完整变换链。第一步是利用相机内参矩阵把像素坐标反投影到相机坐标系下的3D点def backproject(depth, u, v, K): fx K[0, 0] fy K[1, 1] cx K[0, 2] cy K[1, 2] z depth[v, u] x (u - cx) * z / fx y (v - cy) * z / fy return np.array([x, y, z])第二步是构建抓取姿态的旋转矩阵。抓取角度Φ定义的是夹爪在图像平面内的旋转但到了3D空间还需要考虑相机坐标系到机械臂基座坐标系的姿态变换。这里最容易搞错的是旋转顺序很多人的抓取变成斜着往下杵甚至抓向桌面就是因为旋转矩阵的轴序没有对应上相机的安装姿态。我的做法是先把深度图按零旋转基准设置一个垂直向下的抓取方向然后在相机Z轴上叠加图像平面内的旋转角Φ最后用机械臂末端到相机的外参矩阵把这整个位姿变换到基座坐标系T_robot_camera np.linalg.inv(extrinsic_matrix) grasp_camera np.eye(4) grasp_camera[:3, 3] point_camera rot_z np.array([ [np.cos(angle), -np.sin(angle), 0], [np.sin(angle), np.cos(angle), 0], [0, 0, 1] ]) grasp_camera[:3, :3] rot_z grasp_robot T_robot_camera grasp_camera6.2 运动规划与执行流程拿到基座坐标系下的抓取位姿后我使用kinova的逆运动学求解器生成关节轨迹。这里推荐用MoveIt或kinova官方SDK的IK服务都行但要注意设置合适的预抓取点和后抓取点让机械臂先运动到物体上方10厘米处再垂直下降抓取而不是直接从一个很远的位置插补到抓取点——后者很容易在运动过程中把物体撞飞。完整的执行流程按顺序拆解如下相机采集当前场景深度图。GG-CNN推理得到质量图、角度图、宽度图。后处理对质量图做非极大值抑制选出置信度最高的5个候选抓取点。根据候选点坐标和相机内参反投影出3D抓取位姿。用逆运动学求解关节角依次执行移动到预抓取点 - 下降到抓取点 - 闭合夹爪 - 抬升。抬起后通过力传感器或视觉确认是否成功抓住物体如果失败则换下一个候选点重试。这套流程我在Pybullet里的单次完整循环从相机采集到夹爪闭合大约只需要1到2秒其中GG-CNN推理只占10到20毫秒。实时性是GG-CNN架构最突出的优势相比一些两阶段的抓取检测方案检测物体-计算抓取框推理速度快了一个数量级这使其在动态场景或者需要连续抓取的场景下具备明显优势。7. 实测效果与踩坑记录7.1 仿真中的抓取成功率统计我在Pybullet中搭了一个标准化的测试场景桌面随机摆放5个形状各异的物体从图钉大小的小零件到马克杯大小的中型物体每个物体设置5种初始角度共25组测试。模型在康奈尔提花混合数据集上训练约80个epoch后综合抓取成功率达到87.6%。其中中型物体的抓取成功率超过93%明显高于小尺寸物体约74%这也符合预期——小物体对抓取中心点的像素定位精度要求更高而深度图分辨率有限。Gazebo中的成功率比Pybullet低一些约78%左右。主要原因在于Gazebo的物理引擎对夹爪接触更为敏感夹爪在接触物体瞬间的微小反向冲击力更容易导致物体位移。这个差距也提醒我仿真中的成功率数字只能作为相对参考最终还是要靠真机验证。7.2 踩坑记录几个影响全局的细节错误第一个坑是深度图的坐标系方向。Pybullet默认深度图的Y轴方向和图像坐标系方向存在差异做旋转增强时如果不注意角度标注会整体偏移90度而质量图看起来完全正常——这类错误最难排查因为训练loss会正常下降但推理出的抓取姿态全部绕了90度。第二个坑是数据泄露。我在训练集和验证集的划分上偷懒直接用全量数据做随机切分导致同一物体在不同相机角度下的图像同时出现在训练集和验证集中验证集得分虚高到了95%以上。后来改为按物体ID分组划分后得分回落到真实水平。这个问题在提花数据集上尤其隐藏得深因为同一物体模型会渲染出大量图像不做分组切分几乎必然泄露。第三个坑是宽度图的数值范围。抓钳两个指尖之间的宽度通常用像素值表示在仿真环境里这个值和物体的物理尺寸对应关系取决于相机内参和物体到相机距离。距离一变同一个物体的宽度像素值就变了。如果训练集和测试集的工作距离差异大宽度预测会系统性偏差。解决办法是把训练数据按不同深度范围做了混合采样并在推理时根据当前深度值对宽度做一次缩放修正。7.3 实时可视化的一些工具建议Gazebo和Pybullet的实时可视化侧重点不一样。Pybullet我用的是自带的GUI模式配合p.addUserDebugText来绘制抓取中心点和角度指示线调试非常方便。Gazebo那边我习惯在RViz2里同时显示深度图话题、预测质量热力图话题和机械臂模型利用RViz的工具栏能看到相机视角看到的场景和算法理解的场景之间的对应关系。如果要更清晰地把质量热力图叠加到深度图像上推荐用ROS 2的image_transport插件发布压缩的深度话题再用OpenCV把质量图伪彩化后叠加显示。我的习惯是同时开一个480p的深度话题用于可视化、一个720p的深度话题用于推理计算两个话题并行发布互不干扰。这么做的代价是CPU占用略微增加但调试体验提升很大——你能直观地看到网络在哪些区域置信度高、哪些区域乱预测而不是对着黑白的深度图盲猜模型行为。8. 后续扩展这套系统还能往哪走如果你把这套系统跑通了接下来的扩展方向其实很明确。第一个方向是动态抓取。GG-CNN本身是单帧推理但你把推理速度压缩到20毫秒以内后就可以在机械臂运动过程中持续抓取新的深度帧、实时更新抓取点。动态传送带上的物体抓取、移动平台上的人机协作都可以在这个框架上叠加一个位姿跟踪模块实现。第二个方向是多模态融合。深度图虽然是主力但把RGB特征作为辅助分支引入可以在深度图缺失的区域做插补预测。具体做法是在网络中间层把RGB特征和深度特征做attention融合输出端仍然只预测抓取参数对透明物体和镜面物体的抓取鲁棒性有明显提升。第三个方向是仿真到真机的迁移。Gazebo和Pybullet里训练的模型直接迁移到真实Kinova机械臂会面临深度传感器噪声分布差异。我建议在真实相机采集一批深度图在训练时用随机噪声和随机下采样模拟传感器差异这种简单的domain randomization策略比追求高保真传感器模型更实用也更省算力。最后补充一个经验无论仿真做到多好真机测试都不可替代。仿真里再高的抓取成功率真机上都会因为关节间隙、夹爪摩擦系数、传感器延迟打一次折。如果条件允许建议尽早上一台真实机械臂做小规模验证——哪怕只抓几十次暴露出的问题也比仿真里跑几万次更有价值。本文还有配套的精品资源点击获取
返回列表