识别料框并堆垛拆垛

来自MDCS wiki2
Artheru讨论 | 贡献2026年5月16日 (六) 19:15的版本 (Initial bilingual draft (auto-published))
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
跳到导航 跳到搜索


概述 / Overview

"识别料框并堆垛拆垛"是面向 金属 / 塑料料框 的自动化动作集合:识别料框上沿与开口、堆码到指定高度、按节拍拆垛到指定层。料框相比标准托盘特征更复杂(边沿薄、四角圆滑、可能堆叠 4–6 层),因此需要 3D 感知 + 多帧融合。

"Kit-bin stacking / de-stacking" handles metal / plastic kit-bins — pickup, stack to a target height, or remove top bins to a target tier. Bins are harder than pallets to detect (thin lips, rounded corners, stacks up to 4–6 layers), so we use 3D sensing + multi-frame fusion.

与料架 / 托盘的区别 / Difference from racks / pallets

项 / Item 标准托盘 / Pallet 料框 / Kit-bin
几何特征 / Features 两个叉孔 + 边沿 上沿矩形 + 内空腔 + 边沿圆弧
叉齿可入位 / Fork pockets 是 / Yes 否(叉齿夹外沿或抓取)/ No (clamp or grab)
堆叠层数 / Stack height 2–3 层 / 2–3 4–6 层 / 4–6
主用感知 / Sensing 2D 激光 3D 激光 / 深度相机 + 2D 辅助
主用 Detector `LidarDetectPallet` `LidarDetect3DBin`, `CamDetectBinRim`

工作流程 / Pipeline

堆垛 / Stack

  1. 巡线到 下层 Anchor 站点(距堆位约 1.5 m)。
  2. 3D 激光扫描堆区,提取 最顶层料框的上沿矩形(4 个角点 + 1 个朝向)。
  3. 计算放置位姿 = 最顶层上沿姿态 + 设计层高(典型 250 mm)。
  4. 升叉到 计算放置高度 + 30 mm;可升降激光重新检测目标层确认。
  5. 横向 + 朝向精对位(≤ ±10 mm / ±0.5°)。
  6. 缓慢降叉直到接触检测信号(如 `forkLoadDetected` 反转)。
  7. 倒车离开。

拆垛 / De-stack

  1. 巡线到 下层 Anchor 站点。
  2. 3D 扫描 → 选定 要取的层(默认最顶层;可指定)。
  3. 升叉到 目标层下沿 - 10 mm
  4. 抓取机构闭合 / 叉齿前推;触发 `binGripDetected`。
  5. 升叉 50 mm 提离堆。
  6. 倒车离开。
  7. 巡线到目标释放位 → 落料 → 完成。
// Stacking step 3 sketch
var top = new LidarDetect3DBin
{
    expectedWidth  = 600,
    expectedDepth  = 400,
    minConfidence  = 0.7f
}.Detect(latest3DCloud);

var placeX = top.X;
var placeY = top.Y;
var placeZ = top.Z + binLayerHeight + 30;  // 30 mm safety margin

await Lift(placeZ);
await DriveTask.WaitDriveTask(new BinPlaceMovement
{
    targetX = placeX, targetY = placeY,
    targetTheta = top.Theta
}.Get());
await Lift(placeZ - binLayerHeight - 30);   // settle
await OpenGrip();
await Reverse(1.5);

多帧融合 / Multi-frame fusion

单帧 3D 激光的上沿点云因遮挡 / 反射常有缺失。MDCS 采用 K 帧合并 + 矩形拟合

A single 3D frame often misses bin rims due to occlusion / reflection. MDCS uses K-frame merge + rectangle fit:

  1. 在 Approach 站点静态停车,连续读 K 帧(典型 K = 5)。
  2. 合并点云后去除地面 + 远处点 ROI 过滤。
  3. 在 ROI 内做矩形 RANSAC 拟合,输出矩形中心 + 朝向 + 平面高度。
  4. confidence < 0.7,把车前进 100 mm 再扫一轮(避免遮挡)。

关键 Detector / Key detectors

Detector 文件 / File 用途 / Use
`LidarDetect3DBin` `Clumsy\ClumsyDance\Detectors\LidarDetect3DBin.cs` 3D 激光:从单 / 多帧扫描中提 bin
`CamDetectBinRim` `Clumsy\ClumsyDance\Detectors\CamDetectBinRim.cs` 深度相机 + 2D 辅助
`LidarDetect2DTier` `Clumsy\ClumsyDance\Detectors\LidarDetect2DTier.cs` 升降 2D 激光:按高度切层

调试要点 / Tuning

  • 3D 点云稀疏 / 3D cloud too sparse → 增加 K 帧合并数,或检查 3D 雷达 适配 中的扫描频率。
  • 料框边沿反光强烈 / Rim glints → 调高强度阈值,过滤 specular spike。
  • 抓取后晃动 / Bin swings after grab → 检查抓爪夹紧力;落料前留 2 s 稳定时间。
  • 层高漂移 / Tier-height drift over many stacks → 每次堆完做一次重新 3D 扫描,更新堆顶基准。

安全 / Safety

  • 堆叠中倒塌风险随堆高指数上升;4 层以上必须 每次堆完都重新读 IMU 与上沿姿态,姿态偏差 > 1° 立即停。
  • 料框拆垛过程中下层料框可能因震动错位,必须在 每次拆垛后重新扫一次堆顶。

相关页面 / See also