使用手册 - 劫持用法:修订间差异

来自MDCS wiki
跳到导航 跳到搜索
 
第53行: 第53行:
# 劫持起点只能选择还未被车上锁的点;
# 劫持起点只能选择还未被车上锁的点;
# 若在右击站点即simpleMove时进行劫持,则小车到达劫持起点后,前往劫持终点;
# 若在右击站点即simpleMove时进行劫持,则小车到达劫持起点后,前往劫持终点;
# 若在cdm任务中进行劫持,则从劫持起点后所有路线都废弃,前往劫持终点,即在取货路途中进行劫持,放货动作也不会执行。
# 若在cdm任务中进行劫持,则从劫持起点后所有路线都废弃,前往劫持终点。比如:在取货路途中进行劫持并成功,那么废弃路线原有动作都不会继续执行(比如在废弃路线终点的放货动作)。但如果劫持路线生成代码中包含放货动作,则会执行。

2024年9月3日 (二) 13:40的最新版本

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 注意点

  1. 劫持起点只能选择还未被车上锁的点;
  2. 若在右击站点即simpleMove时进行劫持,则小车到达劫持起点后,前往劫持终点;
  3. 若在cdm任务中进行劫持,则从劫持起点后所有路线都废弃,前往劫持终点。比如:在取货路途中进行劫持并成功,那么废弃路线原有动作都不会继续执行(比如在废弃路线终点的放货动作)。但如果劫持路线生成代码中包含放货动作,则会执行。