<?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%81%94%E5%8A%A8%E5%A4%A9%E7%9C%BC%E7%B3%BB%E7%BB%9F%E8%BF%9B%E8%A1%8C%E8%A3%85%E5%8D%B8%E8%BD%A6</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%81%94%E5%8A%A8%E5%A4%A9%E7%9C%BC%E7%B3%BB%E7%BB%9F%E8%BF%9B%E8%A1%8C%E8%A3%85%E5%8D%B8%E8%BD%A6"/>
	<link rel="alternate" type="text/html" href="https://wiki2.lessokaji.com/index.php?title=%E8%81%94%E5%8A%A8%E5%A4%A9%E7%9C%BC%E7%B3%BB%E7%BB%9F%E8%BF%9B%E8%A1%8C%E8%A3%85%E5%8D%B8%E8%BD%A6&amp;action=history"/>
	<updated>2026-05-16T15:08:35Z</updated>
	<subtitle>本wiki上该页面的版本历史</subtitle>
	<generator>MediaWiki 1.40.0</generator>
	<entry>
		<id>https://wiki2.lessokaji.com/index.php?title=%E8%81%94%E5%8A%A8%E5%A4%A9%E7%9C%BC%E7%B3%BB%E7%BB%9F%E8%BF%9B%E8%A1%8C%E8%A3%85%E5%8D%B8%E8%BD%A6&amp;diff=999&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%81%94%E5%8A%A8%E5%A4%A9%E7%9C%BC%E7%B3%BB%E7%BB%9F%E8%BF%9B%E8%A1%8C%E8%A3%85%E5%8D%B8%E8%BD%A6&amp;diff=999&amp;oldid=prev"/>
		<updated>2026-05-16T11:15:18Z</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;是 AGV 与 ''天眼系统''（高位俯拍 3D 视觉系统）协作完成装车 / 卸车的方案：天眼提供货物在车厢内的全局位姿与堆码状况，AGV 据此规划自身的取 / 放策略，完成传统单车感知无法解决的盲区作业。&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Loading / unloading coupled with the Skyeye system&amp;quot; describes the workflow where one or more AGVs cooperate with an overhead 3D vision rig (the '''Skyeye'''). Skyeye gives the AGVs a global view of cargo inside the truck bed; AGVs use it to plan a pick / place strategy in regions their own sensors can't see.&lt;br /&gt;
&lt;br /&gt;
参见 [[Special:MyLanguage/天眼系统|天眼系统]] 了解天眼本身。&lt;br /&gt;
See [[Special:MyLanguage/天眼系统|天眼系统]] for Skyeye itself.&lt;br /&gt;
&lt;br /&gt;
== 应用场景 / Scenarios ==&lt;br /&gt;
* '''半挂车装车 / Loading a semi-trailer''': 货架 / 托盘按指定堆码顺序装入 12 m 半挂车厢；AGV 在地面，天眼俯拍车厢全局。&lt;br /&gt;
* '''集装箱卸货 / Unloading a container''': 箱体内堆码复杂、AGV 自身视场只能看到最前排。&lt;br /&gt;
* '''缓冲区拆码并装车 / Yard-to-truck transfer''': 缓冲区与车厢之间多次往返，调度由天眼根据车厢剩余空位实时规划。&lt;br /&gt;
&lt;br /&gt;
== 系统组成 / Components ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 模块 / Module !! 功能 / Function !! 接入点 / Integration&lt;br /&gt;
|-&lt;br /&gt;
| 天眼相机 / Skyeye camera || 高位（≥ 4 m）的固定 3D 视觉 / Fixed overhead 3D vision || Medulla camera plugin（见 [[Special:MyLanguage/3D相机适配|3D相机适配]]）&lt;br /&gt;
|-&lt;br /&gt;
| 天眼推理服务 / Skyeye inference || 把 3D 点云转成 ''堆码格点 + 朝向 + 占用度'' || HTTP / WebSocket，发布到 SimpleComposer&lt;br /&gt;
|-&lt;br /&gt;
| AGV 自身感知 / On-AGV sensing || 局部 3D 感知用于精对位 / Local detection for fine pose || `[[Special:MyLanguage/2D激光雷达适配|2D激光]]` + `[[Special:MyLanguage/3D激光雷达适配|3D激光]]`&lt;br /&gt;
|-&lt;br /&gt;
| SimpleComposer 调度 / Fleet scheduler || 综合两路信息生成任务 || `SimpleComposer.RCS` + ''SkyeyeStrategy'' 插件&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 工作原理 / How it works ==&lt;br /&gt;
=== 数据流 / Data flow ===&lt;br /&gt;
&lt;br /&gt;
  天眼 3D 帧 → 推理服务 → 全局堆码格点 (GridCell[])&lt;br /&gt;
  ┌──────────────────────────────────────────────────────┐&lt;br /&gt;
  │ SimpleComposer SkyeyeStrategy:                       │&lt;br /&gt;
  │   - 比对当前堆码与目标堆码                              │&lt;br /&gt;
  │   - 输出 NextAction = (binId, fromCell, toCell)        │&lt;br /&gt;
  └──────────────────────────────────────────────────────┘&lt;br /&gt;
  → AGV.Queue(approach → onboard-detect → fine-place → withdraw)&lt;br /&gt;
&lt;br /&gt;
=== 协议契约 / Protocol contract ===&lt;br /&gt;
天眼每秒发布一次堆码描述（JSON 或 protobuf）：&lt;br /&gt;
Skyeye broadcasts a stack description ~1 Hz:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;ts&amp;quot;: 1715843200,&lt;br /&gt;
  &amp;quot;truckId&amp;quot;: &amp;quot;T-12&amp;quot;,&lt;br /&gt;
  &amp;quot;bed&amp;quot;: { &amp;quot;x&amp;quot;: 12000, &amp;quot;y&amp;quot;: 2400 },&lt;br /&gt;
  &amp;quot;cells&amp;quot;: [&lt;br /&gt;
    { &amp;quot;id&amp;quot;: 17, &amp;quot;x&amp;quot;: 850, &amp;quot;y&amp;quot;: 600, &amp;quot;z&amp;quot;: 230, &amp;quot;theta&amp;quot;: 0.04,&lt;br /&gt;
      &amp;quot;occupied&amp;quot;: true, &amp;quot;type&amp;quot;: &amp;quot;wood_pallet&amp;quot;, &amp;quot;conf&amp;quot;: 0.91 },&lt;br /&gt;
    { &amp;quot;id&amp;quot;: 18, &amp;quot;x&amp;quot;: 850, &amp;quot;y&amp;quot;: 1800, &amp;quot;z&amp;quot;: 230, &amp;quot;theta&amp;quot;: -0.02,&lt;br /&gt;
      &amp;quot;occupied&amp;quot;: false, &amp;quot;conf&amp;quot;: 0.88 }&lt;br /&gt;
    // ...&lt;br /&gt;
  ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SimpleComposer 把这条消息映射到 ''仓位坐标系''，并发布到所有订阅的 AGV。&lt;br /&gt;
SimpleComposer maps the message into the warehouse coordinate frame and republishes to subscribing AGVs.&lt;br /&gt;
&lt;br /&gt;
=== AGV 侧 / On the AGV side ===&lt;br /&gt;
联动天眼装卸的车上动作通常是这样组合：&lt;br /&gt;
The Movement composition on the AGV side is typically:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
public async Task LoadTruck(SkyeyeStrategy strategy)&lt;br /&gt;
{&lt;br /&gt;
    while (!strategy.IsDone)&lt;br /&gt;
    {&lt;br /&gt;
        var step = await strategy.NextStep();   // (binId, fromCell, toCell)&lt;br /&gt;
        // 1. 从缓冲区拿货&lt;br /&gt;
        await PickAtBuffer(step.fromCell);&lt;br /&gt;
        // 2. 巡线到车尾&lt;br /&gt;
        await DriveTask.WaitDriveTask(new SteeringLineFollowing&lt;br /&gt;
        { dstX = step.truckStaging.X, dstY = step.truckStaging.Y }.Follow());&lt;br /&gt;
        // 3. 联动天眼放料&lt;br /&gt;
        var place = await strategy.GetPlacePose(step.toCell);&lt;br /&gt;
        await DriveTask.WaitDriveTask(new SkyeyeGuidedPlace&lt;br /&gt;
        {&lt;br /&gt;
            targetX = place.X, targetY = place.Y,&lt;br /&gt;
            targetTheta = place.Theta,&lt;br /&gt;
            stopDist = 30&lt;br /&gt;
        }.Get());&lt;br /&gt;
        // 4. 上报完成给天眼，让它确认 cell occupancy&lt;br /&gt;
        await strategy.Confirm(step.toCell);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 关键问题 / Key trade-offs ==&lt;br /&gt;
* '''时间同步 / Time sync''': 天眼帧与 AGV 位姿必须用同一时钟（NTP / PTP）。误差 &amp;gt; 100 ms 会导致目标格点漂移到错误位置。&lt;br /&gt;
* '''视觉与激光分歧 / Vision-lidar disagreement''': 当天眼说 cell-17 空、AGV 局部激光看到障碍物，''以局部激光为准''并触发&amp;quot;天眼重扫&amp;quot;。&lt;br /&gt;
* '''半挂车定位 / Trailer localisation''': 半挂车每次停的位置略有不同；上线前要先用 ''AGV 车尾激光 + AprilTag / V 槽''确认车厢的实际坐标。&lt;br /&gt;
* '''光照与雨水 / Light &amp;amp; rain''': 天眼属于光学传感，强光 / 雨水 / 雪都会显著降低 conf；要设置回退策略（停止派单或切到单车感知）。&lt;br /&gt;
&lt;br /&gt;
== 调度策略 / Scheduling strategies ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 策略 / Strategy !! 说明 / Notes&lt;br /&gt;
|-&lt;br /&gt;
| `Greedy` || 按 Skyeye 给出的空格优先级取，AGV 数 ≤ 2 用这个&lt;br /&gt;
|-&lt;br /&gt;
| `RowSweep` || 按车厢 Y 方向逐排装；AGV 数 3+ 时减少互相等待&lt;br /&gt;
|-&lt;br /&gt;
| `Bipartite` || 缓冲区货 → 车厢格 的最小成本匹配；混型货物多时用&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
策略实现为 `SimpleComposer.SkyeyeStrategy` 子类，调度运行时可热切换。&lt;br /&gt;
&lt;br /&gt;
Strategies are `SkyeyeStrategy` subclasses; the scheduler can hot-swap between them.&lt;br /&gt;
&lt;br /&gt;
== 安全 / Safety ==&lt;br /&gt;
* 装卸过程中卡车驾驶员必须 ''下车 + 钥匙带走''；卡车启动信号要进 AGV 的 e-stop。&lt;br /&gt;
* 半挂车厢门未完全打开 → 天眼必须能识别并阻止 AGV 进入。&lt;br /&gt;
&lt;br /&gt;
== 相关页面 / See also ==&lt;br /&gt;
* [[Special:MyLanguage/天眼系统|天眼系统]]&lt;br /&gt;
* [[Special:MyLanguage/自动装卸车应用|自动装卸车应用]]&lt;br /&gt;
* [[Special:MyLanguage/3D相机适配|3D相机适配]]&lt;br /&gt;
* [[Special:MyLanguage/识别料框并堆垛拆垛|识别料框并堆垛拆垛]]&lt;br /&gt;
&lt;br /&gt;
[[Category:特殊技术方案]]&lt;/div&gt;</summary>
		<author><name>Artheru</name></author>
	</entry>
</feed>