ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

第294篇 6D位姿估计——让机器人知道物体怎么摆的

第294篇 6D位姿估计——让机器人知道物体怎么摆的 实例分割聊完了这篇讲6D位姿估计。机器人抓取不仅要找到物体在哪里3D位置还要知道物体怎么旋转的3D旋转。位置和旋转加起来就是6个自由度——6D位姿。6D位姿估计是机器人抓取、装配、操作的核心感知任务。不知道物体的精确位姿机械臂就不知道该以什么角度去抓、该往哪个方向拧。工业场景里零件在传送带上可能是任意姿态机器人必须实时估计位姿才能正确抓取。面试中6D位姿估计的追问通常围绕位姿怎么表示的、主流方法有哪些、精度怎么评估。把这些概念搞清楚机器人抓取的感知部分就理解了。一、位姿表示6D位姿由旋转R3x3旋转矩阵和平移t3维向量组成。合在一起写成4x4的齐次变换矩阵T。旋转的表示方式有多种旋转矩阵3x3正交矩阵9个参数但有6个约束、欧拉角roll/pitch/yaw3个参数但有万向锁问题、四元数4个参数没有奇异性、轴角旋转轴旋转角度3个参数。import numpy as np # 齐次变换矩阵 T np.array([ [r11, r12, r13, tx], [r21, r22, r23, ty], [r31, r32, r33, tz], [0, 0, 0, 1 ] ]) # R: 3x3旋转矩阵, t: [tx, ty, tz]平移向量面试常问为什么不用欧拉角因为万向锁gimbal lock——当某个轴旋转90度时另外两个轴重合自由度退化为2。四元数没有这个问题所以机器人学里通常用四元数表示旋转。二、主流方法6D位姿估计的方法大致分三类基于模板匹配、基于关键点、基于回归。基于模板匹配准备物体的3D模型用ICPIterative Closest Point算法把模型和观测的点云对齐。ICP迭代地找最近点对计算最优变换反复迭代直到收敛。优点是精度高毫米级缺点是需要精确的3D模型、对初始位姿敏感容易陷入局部最优、速度较慢。通常用网络预测的位姿作为ICP的初始值两者配合效果最好。基于关键点在物体上定义一组关键点比如8个角点或者密集采样的控制点网络预测每个关键点在图像中的2D位置然后用PnPPerspective-n-Point算法从2D-3D对应关系求解位姿。代表工作PVNet、DenseFusion。PVNet用像素投票的方式预测关键点位置比直接回归更鲁棒。DenseFusion融合RGB图像和点云信息在遮挡场景下表现更好。关键点方法的好处是中间结果可解释——你能看到网络预测的关键点位置对不对。坏处是PnP求解对关键点精度很敏感一个关键点偏了位姿就可能差很多。实际使用中通常用RANSAC来增强鲁棒性——随机选4个点算位姿看有多少点支持这个位姿选支持最多的那个。# PnP求解位姿 import cv2 # 2D关键点图像坐标和3D关键点物体坐标 success, rvec, tvec cv2.solvePnP( points_3d, points_2d, camera_matrix, dist_coeffs ) R, _ cv2.Rodrigues(rvec) # 轴角→旋转矩阵基于回归网络直接从图像回归位姿参数。端到端训练不需要中间步骤。代表工作PoseCNN、GDR-Net。GDR-Net用几何感知网络同时回归位置和旋转精度在LINEMOD数据集上达到SOTA。回归方法的关键挑战是旋转的表示。直接回归旋转矩阵的9个参数不保证正交性。用四元数回归有双重覆盖问题q和-q表示同一个旋转。用6D连续旋转表示two consecutive columns of rotation matrix是目前比较好的方案——既保证了连续性又没有奇异性。基于投票网络预测每个像素投票的位姿然后聚类得到最终结果。代表工作FFB6D、PVN3D。这类方法对遮挡和噪声有较好的鲁棒性。每个像素独立投票即使部分像素被遮挡其他像素的投票仍然能给出正确结果。三、位姿评估指标6D位姿估计的评估指标和检测不同。常用的有两个。ADDAverage Distance计算预测位姿变换后的模型点和GT位姿变换后的模型点之间的平均距离。ADD小于物体直径的10%就算正确。这个指标对对称物体不友好——对称物体有多个正确位姿。ADIAverage Distance of Inverse model pointsADD的改进版对对称物体友好。计算时找每个点到最近GT点的距离而不是对应点的距离。# ADD指标计算 def compute_add(pred_R, pred_t, gt_R, gt_t, model_points): pred_pts (pred_R model_points.T).T pred_t gt_pts (gt_R model_points.T).T gt_t mean_dist np.mean(np.linalg.norm(pred_pts - gt_pts, axis1)) diameter compute_diameter(model_points) return mean_dist 0.1 * diameter # 是否通过10%直径阈值5cm5°准确率位置误差小于5cm且旋转误差小于5°的比例。这是工业场景常用的指标——直接对应实际任务的精度要求。四、数据集与训练6D位姿估计常用的数据集LINEMOD经典数据集包含15个日常物体。每个物体约1000张图像带位姿标注。数据量小适合验证算法。YCB-Video21个YCB标准物体的视频序列。数据量大场景复杂有遮挡。目前最主流的benchmark之一。BOP Challenge年度竞赛包含多个数据集LINEMOD、YCB-Video、T-LESS等。推动了很多新方法的发展。训练数据的获取是个大问题。真实数据标注成本高——每张图都要精确标注6D位姿。常用方案是仿真数据域适应——在仿真引擎里渲染物体自动生成大量带标注的数据然后迁移到真实场景。但仿真和真实之间有差距sim-to-real gap需要用域随机化Domain Randomization来缩小差距——训练时随机化光照、纹理、背景让模型见过足够多的变化。五、面试高频追问Q6D位姿估计的难点在哪里A三个难点。遮挡——物体被其他东西挡住了能看到的信息不完整。对称——对称物体有多个正确位姿评估和训练都要特殊处理。精度——抓取任务通常要求毫米级精度深度估计本身的误差就会影响位姿精度。Q怎么处理对称物体的位姿估计A训练时用多标签——对称物体的多个正确位姿都作为正样本。评估时用ADI指标而不是ADD。有些方法直接预测对称物体的对称轴方向避免歧义。Q工业场景中位姿估计的pipeline是什么ARGB-D相机采集图像→目标检测定位物体→实例分割获取mask→6D位姿估计用mask裁剪后的区域做位姿回归→位姿精修用ICP在点云上微调。整个pipeline的延迟通常要控制在100ms以内。实际部署中位姿精修这一步很关键——网络预测的位姿通常不够精确用ICP在局部点云上做一次精修能把精度提升一个量级。Q深度信息对位姿估计有多重要A非常重要。只用RGB图像的位姿估计如GDR-Net精度有限因为单目图像的深度信息是模糊的。加入深度信息RGB-D后位姿精度通常能提升30%-50%。但深度相机也有问题——深度噪声大、边缘不准确、反光表面深度缺失。实际使用中要对深度数据做预处理去噪、填充空洞。6D位姿估计是机器人抓取的核心感知任务。位姿表示方法、主流算法、评估指标、数据集与训练、实际应用这五个方面理解了机器人抓取的感知部分就搞定了。位姿估计是连接感知和执行的桥梁值得深入学习。下一篇我们聊PointNet系列。6D位姿估计是机器人操作的核心感知技术。位姿表示方法、主流估计算法、评估指标体系、工业应用实践这四个维度覆盖了6D位姿估计的核心内容。上一篇第293篇 实例分割Mask R-CNN下一篇聊PointNet系列。如果这篇文章对你有帮助欢迎点赞支持一下你的鼓励是我持续更新的动力
返回列表