<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-Hans-CN">
	<id>https://wiki2.lessokaji.com/index.php?action=history&amp;feed=atom&amp;title=%E8%AF%86%E5%88%AB%E6%96%99%E6%A1%86%E5%B9%B6%E5%A0%86%E5%9E%9B%E6%8B%86%E5%9E%9B</id>
	<title>识别料框并堆垛拆垛 - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="https://wiki2.lessokaji.com/index.php?action=history&amp;feed=atom&amp;title=%E8%AF%86%E5%88%AB%E6%96%99%E6%A1%86%E5%B9%B6%E5%A0%86%E5%9E%9B%E6%8B%86%E5%9E%9B"/>
	<link rel="alternate" type="text/html" href="https://wiki2.lessokaji.com/index.php?title=%E8%AF%86%E5%88%AB%E6%96%99%E6%A1%86%E5%B9%B6%E5%A0%86%E5%9E%9B%E6%8B%86%E5%9E%9B&amp;action=history"/>
	<updated>2026-05-16T15:13:36Z</updated>
	<subtitle>本wiki上该页面的版本历史</subtitle>
	<generator>MediaWiki 1.40.0</generator>
	<entry>
		<id>https://wiki2.lessokaji.com/index.php?title=%E8%AF%86%E5%88%AB%E6%96%99%E6%A1%86%E5%B9%B6%E5%A0%86%E5%9E%9B%E6%8B%86%E5%9E%9B&amp;diff=1004&amp;oldid=prev</id>
		<title>Artheru：​Initial bilingual draft (auto-published)</title>
		<link rel="alternate" type="text/html" href="https://wiki2.lessokaji.com/index.php?title=%E8%AF%86%E5%88%AB%E6%96%99%E6%A1%86%E5%B9%B6%E5%A0%86%E5%9E%9B%E6%8B%86%E5%9E%9B&amp;diff=1004&amp;oldid=prev"/>
		<updated>2026-05-16T11:15:22Z</updated>

		<summary type="html">&lt;p&gt;Initial bilingual draft (auto-published)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;languages/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 概述 / Overview ==&lt;br /&gt;
&amp;quot;识别料框并堆垛拆垛&amp;quot;是面向 ''金属 / 塑料料框'' 的自动化动作集合：识别料框上沿与开口、堆码到指定高度、按节拍拆垛到指定层。料框相比标准托盘特征更复杂（边沿薄、四角圆滑、可能堆叠 4–6 层），因此需要 3D 感知 + 多帧融合。&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Kit-bin stacking / de-stacking&amp;quot; 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.&lt;br /&gt;
&lt;br /&gt;
== 与料架 / 托盘的区别 / Difference from racks / pallets ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 项 / Item !! 标准托盘 / Pallet !! 料框 / Kit-bin&lt;br /&gt;
|-&lt;br /&gt;
| 几何特征 / Features || 两个叉孔 + 边沿 || 上沿矩形 + 内空腔 + 边沿圆弧&lt;br /&gt;
|-&lt;br /&gt;
| 叉齿可入位 / Fork pockets || 是 / Yes || 否（叉齿夹外沿或抓取）/ No (clamp or grab)&lt;br /&gt;
|-&lt;br /&gt;
| 堆叠层数 / Stack height || 2–3 层 / 2–3 || 4–6 层 / 4–6&lt;br /&gt;
|-&lt;br /&gt;
| 主用感知 / Sensing || 2D 激光 || 3D 激光 / 深度相机 + 2D 辅助&lt;br /&gt;
|-&lt;br /&gt;
| 主用 Detector || `LidarDetectPallet` || `LidarDetect3DBin`, `CamDetectBinRim`&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 工作流程 / Pipeline ==&lt;br /&gt;
=== 堆垛 / Stack ===&lt;br /&gt;
# 巡线到 ''下层 Anchor'' 站点（距堆位约 1.5 m）。&lt;br /&gt;
# 3D 激光扫描堆区，提取 ''最顶层料框''的上沿矩形（4 个角点 + 1 个朝向）。&lt;br /&gt;
# 计算放置位姿 = 最顶层上沿姿态 + 设计层高（典型 250 mm）。&lt;br /&gt;
# 升叉到 ''计算放置高度 + 30 mm''；可升降激光重新检测目标层确认。&lt;br /&gt;
# 横向 + 朝向精对位（≤ ±10 mm / ±0.5°）。&lt;br /&gt;
# 缓慢降叉直到接触检测信号（如 `forkLoadDetected` 反转）。&lt;br /&gt;
# 倒车离开。&lt;br /&gt;
&lt;br /&gt;
=== 拆垛 / De-stack ===&lt;br /&gt;
# 巡线到 ''下层 Anchor'' 站点。&lt;br /&gt;
# 3D 扫描 → 选定 ''要取的层''（默认最顶层；可指定）。&lt;br /&gt;
# 升叉到 ''目标层下沿 - 10 mm''。&lt;br /&gt;
# 抓取机构闭合 / 叉齿前推；触发 `binGripDetected`。&lt;br /&gt;
# 升叉 50 mm 提离堆。&lt;br /&gt;
# 倒车离开。&lt;br /&gt;
# 巡线到目标释放位 → 落料 → 完成。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
// Stacking step 3 sketch&lt;br /&gt;
var top = new LidarDetect3DBin&lt;br /&gt;
{&lt;br /&gt;
    expectedWidth  = 600,&lt;br /&gt;
    expectedDepth  = 400,&lt;br /&gt;
    minConfidence  = 0.7f&lt;br /&gt;
}.Detect(latest3DCloud);&lt;br /&gt;
&lt;br /&gt;
var placeX = top.X;&lt;br /&gt;
var placeY = top.Y;&lt;br /&gt;
var placeZ = top.Z + binLayerHeight + 30;  // 30 mm safety margin&lt;br /&gt;
&lt;br /&gt;
await Lift(placeZ);&lt;br /&gt;
await DriveTask.WaitDriveTask(new BinPlaceMovement&lt;br /&gt;
{&lt;br /&gt;
    targetX = placeX, targetY = placeY,&lt;br /&gt;
    targetTheta = top.Theta&lt;br /&gt;
}.Get());&lt;br /&gt;
await Lift(placeZ - binLayerHeight - 30);   // settle&lt;br /&gt;
await OpenGrip();&lt;br /&gt;
await Reverse(1.5);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 多帧融合 / Multi-frame fusion ==&lt;br /&gt;
单帧 3D 激光的上沿点云因遮挡 / 反射常有缺失。MDCS 采用 ''K 帧合并 + 矩形拟合''：&lt;br /&gt;
&lt;br /&gt;
A single 3D frame often misses bin rims due to occlusion / reflection. MDCS uses ''K-frame merge + rectangle fit'':&lt;br /&gt;
&lt;br /&gt;
# 在 Approach 站点静态停车，连续读 K 帧（典型 K = 5）。&lt;br /&gt;
# 合并点云后去除地面 + 远处点 ROI 过滤。&lt;br /&gt;
# 在 ROI 内做矩形 RANSAC 拟合，输出矩形中心 + 朝向 + 平面高度。&lt;br /&gt;
# 若 ''confidence &amp;lt; 0.7''，把车前进 100 mm 再扫一轮（避免遮挡）。&lt;br /&gt;
&lt;br /&gt;
== 关键 Detector / Key detectors ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Detector !! 文件 / File !! 用途 / Use&lt;br /&gt;
|-&lt;br /&gt;
| `LidarDetect3DBin` || `Clumsy\ClumsyDance\Detectors\LidarDetect3DBin.cs` || 3D 激光：从单 / 多帧扫描中提 bin&lt;br /&gt;
|-&lt;br /&gt;
| `CamDetectBinRim` || `Clumsy\ClumsyDance\Detectors\CamDetectBinRim.cs` || 深度相机 + 2D 辅助&lt;br /&gt;
|-&lt;br /&gt;
| `LidarDetect2DTier` || `Clumsy\ClumsyDance\Detectors\LidarDetect2DTier.cs` || 升降 2D 激光：按高度切层&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 调试要点 / Tuning ==&lt;br /&gt;
* '''3D 点云稀疏 / 3D cloud too sparse''' → 增加 K 帧合并数，或检查 3D 雷达 [[Special:MyLanguage/3D激光雷达适配|适配]] 中的扫描频率。&lt;br /&gt;
* '''料框边沿反光强烈 / Rim glints''' → 调高强度阈值，过滤 specular spike。&lt;br /&gt;
* '''抓取后晃动 / Bin swings after grab''' → 检查抓爪夹紧力；落料前留 2 s 稳定时间。&lt;br /&gt;
* '''层高漂移 / Tier-height drift over many stacks''' → 每次堆完做一次重新 3D 扫描，更新堆顶基准。&lt;br /&gt;
&lt;br /&gt;
== 安全 / Safety ==&lt;br /&gt;
* 堆叠中倒塌风险随堆高指数上升；4 层以上必须 ''每次堆完都重新读 IMU 与上沿姿态''，姿态偏差 &amp;gt; 1° 立即停。&lt;br /&gt;
* 料框拆垛过程中下层料框可能因震动错位，必须在 ''每次拆垛后''重新扫一次堆顶。&lt;br /&gt;
&lt;br /&gt;
== 相关页面 / See also ==&lt;br /&gt;
* [[Special:MyLanguage/自动识别工位并取放货|自动识别工位并取放货]]&lt;br /&gt;
* [[Special:MyLanguage/使用叉车料架堆叠功能|使用叉车料架堆叠功能]]&lt;br /&gt;
* [[Special:MyLanguage/托盘识别|托盘识别]]&lt;br /&gt;
* [[Special:MyLanguage/3D激光雷达适配|3D激光雷达适配]]&lt;br /&gt;
&lt;br /&gt;
[[Category:特殊技术方案]]&lt;br /&gt;
[[Category:运动控制使用手册]]&lt;/div&gt;</summary>
		<author><name>Artheru</name></author>
	</entry>
</feed>