<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-Hans-CN">
	<id>https://wiki.lessokaji.com/index.php?action=history&amp;feed=atom&amp;title=AGV%E4%BB%BB%E5%8A%A1%E8%BF%90%E8%A1%8C%E9%80%BB%E8%BE%91</id>
	<title>AGV任务运行逻辑 - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.lessokaji.com/index.php?action=history&amp;feed=atom&amp;title=AGV%E4%BB%BB%E5%8A%A1%E8%BF%90%E8%A1%8C%E9%80%BB%E8%BE%91"/>
	<link rel="alternate" type="text/html" href="https://wiki.lessokaji.com/index.php?title=AGV%E4%BB%BB%E5%8A%A1%E8%BF%90%E8%A1%8C%E9%80%BB%E8%BE%91&amp;action=history"/>
	<updated>2026-04-15T16:06:55Z</updated>
	<subtitle>本wiki上该页面的版本历史</subtitle>
	<generator>MediaWiki 1.40.0</generator>
	<entry>
		<id>https://wiki.lessokaji.com/index.php?title=AGV%E4%BB%BB%E5%8A%A1%E8%BF%90%E8%A1%8C%E9%80%BB%E8%BE%91&amp;diff=418&amp;oldid=prev</id>
		<title>Artheru：​/* 第三方调度适配交管原理： */</title>
		<link rel="alternate" type="text/html" href="https://wiki.lessokaji.com/index.php?title=AGV%E4%BB%BB%E5%8A%A1%E8%BF%90%E8%A1%8C%E9%80%BB%E8%BE%91&amp;diff=418&amp;oldid=prev"/>
		<updated>2023-12-08T15:22:57Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;第三方调度适配交管原理：&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;zh-Hans-CN&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;←上一版本&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;2023年12月8日 (五) 23:22的版本&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l19&quot;&gt;第19行：&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;第19行：&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* 或可在Clumsy插件中赋值SimpleAGVInterface.lockActions的函数委托。&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* 或可在Clumsy插件中赋值SimpleAGVInterface.lockActions的函数委托。&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;=&lt;/del&gt;==== Leave： ====&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;=&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==== Leave： ====&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* 可使用WebAPI开放/leave路径：&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* 可使用WebAPI开放/leave路径：&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;** Clumsy使用Get方法提交数据。参数为carid和siteid。分别为小车的ID和欲解锁的点位。&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;** Clumsy使用Get方法提交数据。参数为carid和siteid。分别为小车的ID和欲解锁的点位。&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key mdcs_wiki:diff::1.12:old-417:rev-418 --&gt;
&lt;/table&gt;</summary>
		<author><name>Artheru</name></author>
	</entry>
	<entry>
		<id>https://wiki.lessokaji.com/index.php?title=AGV%E4%BB%BB%E5%8A%A1%E8%BF%90%E8%A1%8C%E9%80%BB%E8%BE%91&amp;diff=417&amp;oldid=prev</id>
		<title>Artheru：​创建页面，内容为“=== 概括 === Medulla为硬件控制平台程序，用于交互硬件各项信息并抽象为“上下位信号”。Clumsy为车载程序，由用户通过插件定义车辆的能力集并实现。一般实现的功能诸如行走、取放货等，也可以定义其它复杂的功能，如自动识别托盘并取放货等。这些能力集由Clumsy统一通过“脚本”提供。Simple为调度程序，在派发AGV任务时，根据路径信息，编译得…”</title>
		<link rel="alternate" type="text/html" href="https://wiki.lessokaji.com/index.php?title=AGV%E4%BB%BB%E5%8A%A1%E8%BF%90%E8%A1%8C%E9%80%BB%E8%BE%91&amp;diff=417&amp;oldid=prev"/>
		<updated>2023-12-08T15:22:46Z</updated>

		<summary type="html">&lt;p&gt;创建页面，内容为“=== 概括 === Medulla为硬件控制平台程序，用于交互硬件各项信息并抽象为“上下位信号”。Clumsy为车载程序，由用户通过插件定义车辆的能力集并实现。一般实现的功能诸如行走、取放货等，也可以定义其它复杂的功能，如自动识别托盘并取放货等。这些能力集由Clumsy统一通过“脚本”提供。Simple为调度程序，在派发AGV任务时，根据路径信息，编译得…”&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;=== 概括 ===&lt;br /&gt;
Medulla为硬件控制平台程序，用于交互硬件各项信息并抽象为“上下位信号”。Clumsy为车载程序，由用户通过插件定义车辆的能力集并实现。一般实现的功能诸如行走、取放货等，也可以定义其它复杂的功能，如自动识别托盘并取放货等。这些能力集由Clumsy统一通过“脚本”提供。Simple为调度程序，在派发AGV任务时，根据路径信息，编译得到AGV的运行脚本，并通过Clumsy的接口下发脚本。&lt;br /&gt;
&lt;br /&gt;
可以理解为调度程序一次性计算好AGV当前任务的运行路线、以及在各个位置需要做什么事情；并将一切规划好后，将全部信息告诉车载。&lt;br /&gt;
&lt;br /&gt;
==== 交管原理 ====&lt;br /&gt;
Clumsy在执行的脚本时，会涉及和调度的同步工作，也即“交通管理”。该同步使用TryLock和Leave实现。一般需要同步的时机为点位的占用，如用户插件一般会提供Go方法，调用此方法会让AGV走到指定位置：实现Go函数时，首先调用TryLock方法询问Simple（调度）是否允许走到目标点位，直到Simple允许；随后小车前进到目标点位，然后调用Leave方法解锁起始点位。&lt;br /&gt;
&lt;br /&gt;
=== 第三方调度适配交管原理： ===&lt;br /&gt;
第三方调度进行交管时，只需要实现TryLock和Leave接口。具体实现方法如下：&lt;br /&gt;
&lt;br /&gt;
==== TryLock： ====&lt;br /&gt;
&lt;br /&gt;
* 可使用WebAPI开放/trylock路径：&lt;br /&gt;
** Clumsy使用Post方法提交一个json：{&amp;quot;carid&amp;quot;://小车的ID,&amp;quot;siteid&amp;quot;://欲获取的点位ID}&lt;br /&gt;
** 如果允许，返回一个json：{&amp;quot;success&amp;quot;:true}&lt;br /&gt;
** 如果不允许，返回：{&amp;quot;success&amp;quot;:false}&lt;br /&gt;
** 如果出现了内部错误等要，可返回：{&amp;quot;error&amp;quot;://错误信息}。如果返回错误，则也会让Clumsy的脚本抛出错误并终止执行。&lt;br /&gt;
* 或可在Clumsy插件中赋值SimpleAGVInterface.lockActions的函数委托。&lt;br /&gt;
&lt;br /&gt;
===== Leave： =====&lt;br /&gt;
&lt;br /&gt;
* 可使用WebAPI开放/leave路径：&lt;br /&gt;
** Clumsy使用Get方法提交数据。参数为carid和siteid。分别为小车的ID和欲解锁的点位。&lt;br /&gt;
** 如果允许，返回一个json：{&amp;quot;success&amp;quot;:true}&lt;br /&gt;
** 如果不允许，返回：{&amp;quot;success&amp;quot;:false}&lt;br /&gt;
** 如果出现了内部错误等要，可返回：{&amp;quot;error&amp;quot;://错误信息}。如果返回错误，则也会让Clumsy的脚本抛出错误并终止执行。&lt;br /&gt;
* 或可在Clumsy插件中赋值SimpleAGVInterface.leaveActions的函数委托。&lt;/div&gt;</summary>
		<author><name>Artheru</name></author>
	</entry>
</feed>