自动识别托盘取放货
跳到导航
跳到搜索
概述 / Overview
"自动识别托盘取放货"是 自动识别工位并取放货 的特例:工位本身是一个独立的托盘(pallet)而非固定货架,车体到位后通过激光雷达识别托盘的 两个插孔(叉车场景)或 两个边缘特征(顶升 / 平板场景),完成对位 + 升降 + 离场。
"Auto-pallet pick & place" specialises station-aware pick & place to pallets. The "station" is the pallet itself, not a fixed rack. Once the vehicle is roughly in front, the lidar locates the pallet's two fork-pockets (forklifts) or its two side edges (lift / flat-bed vehicles), then the car runs the alignment / lift / withdraw sequence.
与货架取放的差异 / Difference from rack pick
| 项 / Item | 货架(KIVA 类)/ Rack (KIVA) | 托盘 / Pallet |
|---|---|---|
| 特征点 / Features | 4 条立腿 / 4 legs | 2 个叉孔或 2 条边 / 2 fork pockets or 2 edges |
| 进入方向 / Entry side | 任意(钻入式)/ any (slide-under) | 固定一侧(短边)/ fixed short edge |
| 升降高度 / Lift travel | 30–80 mm(顶升)/ 30–80 mm (jack) | 100–1800 mm(叉齿)/ 100–1800 mm (forks) |
| 误差容忍 / Tolerance | ±30 mm / ±2° | ±15 mm / ±1.5°(叉孔机械约束) |
| 主用 Movement | `AutoShelfFetching_ManyLegs` | `AutoFetchGood`, `PutGood` |
| 主用 Detector | `LidarDetectTray` (3-腿) / 4-腿 | `LidarDetectPallet`, `LidarBlobPairDetector` |
托盘场景对车体姿态的容忍度比货架低,因为叉齿与叉孔的机械配合余量只有 10–15 mm;调试时务必先用 标定与校准 把外参打齐。
Pallet pickup tolerates less pose error than rack pickup because the fork-pocket/fork-tine clearance is only 10–15 mm. Always level the lidar and verify extrinsics via the calibration guide before tuning.
工作流程 / Pipeline
- 粗对位 / Coarse approach: SimpleComposer 把 AGV 派到托盘前的 anchor 站点,使用普通巡线 / 路径跟踪。
SimpleComposer dispatches the AGV to the anchor site in front of the pallet; ordinary line / path follow. - 粗检测 / Coarse detect: 启动 `LidarDetectPallet`,从前方激光帧中找出托盘的两个特征(叉孔中心 or 边缘中点)的近似位置。
Start `LidarDetectPallet` to extract approximate centers of the two pallet features from one or two lidar frames. - 精对位跟踪 / Fine alignment: 用检测出的两个点拟合托盘中轴线,`AutoFetchGood`(或 `PutGood`)开启跟踪,逼近期望停靠位姿。
Fit the pallet's midline from the two feature points; `AutoFetchGood` (or `PutGood`) opens a tracking thread to drive toward the docking pose. - 升降 / Lift: 到位后通过 `Medulla 上位 IO` 触发叉齿 / 顶升机构动作。
On dock, fire the fork / jack actuator through Medulla upper-IO. - 离场 / Withdraw: 倒车(叉车)或推车前进(顶升)退出托盘正前方区域。
Reverse out (forklift) or roll forward (jack) to clear.
public void PickPallet(double approachX, double approachY, double palletX, double palletY)
{
Queue(
async () =>
{
// 1. Coarse approach
DriveTask.WaitDriveTask(new SteeringLineFollowing
{
srcX = currentX, srcY = currentY,
dstX = approachX, dstY = approachY,
basespeed = 800
}.Follow());
},
async () =>
{
// 2 + 3. Detect + fine alignment (encapsulated in AutoFetchGood)
DriveTask.WaitDriveTask(new AutoFetchGood
{
aX = approachX, aY = approachY,
bX = palletX, bY = palletY,
initSpeed = 500,
inShelfSpeed= 150,
stopDist = 80, // tight: pocket / tine clearance
width = 800 // pallet pocket span
}.Get());
},
async () =>
{
// 4. Lift via Medulla upper-IO (fork at 200 mm)
MedullaAPI.SetUpperIO("forkHeight", 200);
await WaitForUpperIO("forkAtTarget", timeoutMs: 5000);
},
async () =>
{
// 5. Withdraw 1.5 m
DriveTask.WaitDriveTask(new SteeringLineFollowingReverse
{
srcX = palletX, srcY = palletY,
dstX = approachX, dstY = approachY,
basespeed = 400
}.ReverseFollow());
});
}
调试要点 / Tuning
- 叉孔检测假阳性 / False positive on fork pockets: 缩窄 `LidarDetectPallet.widthMin/widthMax` 区间至 ±50 mm。
- 托盘姿态偏 / Pallet pose drift: 检查激光雷达水平度,重做 外参标定。
- 叉齿与叉孔刮擦 / Tines scrape pocket walls: 适当增大 `stopDist`(保留 20–30 mm 余量),或把 `inShelfSpeed` 降到 100 mm/s。
- 码垛环境光斑干扰 / Beam glints in stacking yards: 给托盘正面贴一段宽 50 mm 的吸光胶带可显著改善。
相关页面 / See also
- 自动识别工位并取放货
- 托盘识别 — 检测器的纯算法细节
- 使用叉车自动取托盘功能 — 终端使用手册视角
- 识别料框并堆垛拆垛