使用手册 - 劫持用法:修订间差异
跳到导航
跳到搜索
| 第11行: | 第11行: | ||
首先替换最新支持劫持的clumsy核心。 | 首先替换最新支持劫持的clumsy核心。 | ||
然后AGV.cs需要能够支持不停车切换路径。如将clumsy工程中agv.cs下的动作改为静态(因为行走动作的“不停车继续走”一般是通过修改上个动作的参数达到的),如差速轮行走动作:<code>public static LeftRightWheelTracking driver</code> | |||
==== 2.2 simple准备 ==== | ==== 2.2 simple准备 ==== | ||
2024年7月12日 (五) 16:03的版本
1.功能介绍:
使小车在运行途中改变原先的路线,通过指定劫持的起点和终点,在小车到达劫持起点时,改变路线最终前往劫持终点。
如下图所示,车辆原本路线是前往右侧的点,此时通过劫持,指定劫持起点为分叉路口的点,终点为右上方的点,则小车路线变为前往右上方点


2.使用方法及注意点
2.1 clumsy准备
首先替换最新支持劫持的clumsy核心。
然后AGV.cs需要能够支持不停车切换路径。如将clumsy工程中agv.cs下的动作改为静态(因为行走动作的“不停车继续走”一般是通过修改上个动作的参数达到的),如差速轮行走动作:public static LeftRightWheelTracking driver
2.2 simple准备
首先小车需要在conf字段里增加"nowait"标记,这样Simple向Clumsy发脚本时,Clumsy可以不等待前一个脚本的DriveTask动作完成,就允许执行下一个脚本。(如果不加nowait,则Clumsy会先等到全部动作结束,才会执行下一个脚本)
在simple中增加以下测试代码
[MethodMember(name = "劫持", desc = "指定一个起点和终点,当小车到达起点后劫持小车至终点")]
public void Hijack()
{
async void HijackFun()
{
G.pushStatus("Select starting point");
var pt1 = await Program.UI.getPoint(new UIOps.getPointOptions() { site = true });
G.pushStatus("Select ending point");
var pt2 = await Program.UI.getPoint(new UIOps.getPointOptions() { site = true });
if (GetLastSite() == -1)
{
G.pushStatus("Car not initialized to any site");
return;
}
try
{
var plan = new SegmentPlan() { usingCar = this };
plan.FindRoute(SimpleLib.GetSite(pt1.site), SimpleLib.GetSite(pt2.site), false);
await plan.Compile("hijack", false).TryHijack().Queue();
Console.WriteLine("Done");
}
catch (Exception e)
{
Console.WriteLine(e);
}
}
Task.Run(HijackFun);
}
此时在车辆行走时,就可以使用该按钮进行劫持。
2.3 注意点
- 劫持起点只能选择还未被车上锁的点;
- 若在右击站点即simpleMove时进行劫持,则小车到达劫持起点后,前往劫持终点;
- 若在cdm任务中进行劫持,则从劫持起点后所有路线都废弃,前往劫持终点,即在取货路途中进行劫持,放货动作也不会执行。