识别料框并堆垛拆垛
跳到导航
跳到搜索
概述 / 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
- 巡线到 下层 Anchor 站点(距堆位约 1.5 m)。
- 3D 激光扫描堆区,提取 最顶层料框的上沿矩形(4 个角点 + 1 个朝向)。
- 计算放置位姿 = 最顶层上沿姿态 + 设计层高(典型 250 mm)。
- 升叉到 计算放置高度 + 30 mm;可升降激光重新检测目标层确认。
- 横向 + 朝向精对位(≤ ±10 mm / ±0.5°)。
- 缓慢降叉直到接触检测信号(如 `forkLoadDetected` 反转)。
- 倒车离开。
拆垛 / De-stack
- 巡线到 下层 Anchor 站点。
- 3D 扫描 → 选定 要取的层(默认最顶层;可指定)。
- 升叉到 目标层下沿 - 10 mm。
- 抓取机构闭合 / 叉齿前推;触发 `binGripDetected`。
- 升叉 50 mm 提离堆。
- 倒车离开。
- 巡线到目标释放位 → 落料 → 完成。
// 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:
- 在 Approach 站点静态停车,连续读 K 帧(典型 K = 5)。
- 合并点云后去除地面 + 远处点 ROI 过滤。
- 在 ROI 内做矩形 RANSAC 拟合,输出矩形中心 + 朝向 + 平面高度。
- 若 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° 立即停。
- 料框拆垛过程中下层料框可能因震动错位,必须在 每次拆垛后重新扫一次堆顶。