gpt4 book ai didi

unetstack - 如何在模拟中以正交割草机模式进行测量的连接的 2-UAV 的节点(USV)动态计算路径?

转载 作者:行者123 更新时间:2023-12-03 18:49:42 26 4
gpt4 key购买 nike

我正在编写一个涉及 2-UUV 和 1-USV 的模拟脚本。两种水下车辆都在正交割草机运动模型中进行测量。我想留在两辆车的范围内,所以他们从同一个起点开始。我想知道如何定义 USV运动模型以这样的方式始终在UUV的通信范围内是大部分时间。

  • 基本上我如何手动向 USV 提供动态路径规划/运动模型这样我就可以与双方沟通 UUV大多数时候 ?甚至有可能吗?有人可以提供一个基本的例子或指出我正确的方向吗?

  • 这是我的模拟脚本:
    import org.arl.fjage.RealTimePlatform
    import org.arl.unet.sim.MotionModel

    ///////////////////////////////////////////////////////////////////////////////
    // display documentation

    println '''
    Bedford Basin AUV node network
    ------------------------------

    Node USV-1: tcp://localhost:1101, http://localhost:8081/
    Node UUV-1: tcp://localhost:1102, http://localhost:8082/
    Node UUV-2: tcp://localhost:1103, http://localhost:8083/

    ------------------------------
    ------------------------------
    '''

    ///////////////////////////////////////////////////////////////////////////////
    // simulator configuration

    platform = RealTimePlatform // use real-time mode
    // origin = [44.696178,-63.632992] // Bedford basin GPS co-ordinates
    origin = [44.434153,-63.251702]

    simulate{
    def n1 = node 'USV', location: [0.m, -100.m, 1.8.m], heading: 45.deg, mobility: true, web: 8081, api: 1101, stack: "$home/etc/setup"
    n1.motionModel = MotionModel.lawnmower(speed: 0.5.mps, leg: 200.m, spacing: 50.m, legs: 17)

    def n2 = node 'UUV-1', location: [0.m, 0.m, 30.m], heading: 90.deg, mobility: true, web: 8082, api: 1102, stack: "$home/etc/setup"
    // n2.motionModel = MotionModel.lawnmower(speed: 3.3554.mps, leg: 6000.m, spacing: 40.m, legs: 150)
    n2.motionModel = MotionModel.lawnmower(speed: 0.3.mps, leg: 1000.m, spacing: 50.m, legs: 20)
    def n3 = node 'UUV-2', location: [0.m, 0.m, 30.m], heading: 180.deg, mobility: true, web: 8083, api: 1103, stack: "$home/etc/setup"
    // n3.motionModel = MotionModel.lawnmower(speed: 3.3554.mps, leg: 6000.m, spacing: -40.m, heading:90.deg, legs: 150)
    n3.motionModel = MotionModel.lawnmower(speed: 0.3.mps, leg: 1000.m, spacing: -50.m, heading:90.deg, legs: 20)
    }
  • 我如何使用 platform = DiscreteEventSimulator与运动模型?如果我想在更短的时间内模拟数小时的模拟?

  • 引用:
  • “使用单个信标进行合作水下仅测距导航的路径规划”,M.Chitre
  • 最佳答案

    Unet 模拟器支持多级运动模型,具体取决于模拟所需的复杂性。
    NodeInfo每个模拟节点中的代理实现了一个基本的动力学模型。使用 mobility 打开模型可以在模拟脚本中或直接在 NodeInfo 上设置的标志代理人。当mobility启用后,代理会自动更新 location基于运动参数,如 speedheading使用简单的动力学模型。这可以方便地模拟节点的运动,例如,AUV 游离水下调制解调器。
    我们可以通过手动更新模拟中一个节点的参数来轻松实现这一点。使用 2-node-network来自 Unet IDE 的示例。 IDE 的“ map ” View 可以方便地可视化节点的运动。连接节点A的WebShell,设置mobility , heading , 和 speed参数。随着模拟的继续,节点 A 的位置将根据 speed 继续更新。和 heading .

    // On Node A's shell, set heading to 45deg and speed to 10m/s
    node.mobility = true
    node.heading = 45
    node.speed = 10
    node
    对于更高级的用例,Unet 模拟脚本允许在节点上设置一系列运动参数的设定点。这是使用 motionModel 完成的 node 上的参数模拟脚本中的对象。 Unet Handbook has a few examples of this in Chapter 30 .
    设置 motionModelListMaps每个设定点的各种运动属性将自动将属性设置到 NodeInfo 上。特定模拟节点的代理在/在适当的时间/持续时间。这反过来又驱动了 NodeInfo 中的动力学模型给出设定点之间的内插位置。例如,可以使用此模拟脚本使用 4 个设定点模拟在正方形中移动的节点。请注意,运动会在最后一个设定点后自动停止。
    def n = node 'B', location: [ 1.km, 0.km, -15.m], web: 8082, api: 1102, stack: "$home/etc/setup", mobility: true
    n.motionModel = [
    [time: 0.minutes, heading: 0.deg, speed: 1.mps],
    [time: 1.minutes, heading: -90.deg, speed: 1.mps],
    [time: 2.minutes, heading: 180.deg, speed: 1.mps],
    [time: 3.minutes, heading: 90.deg, speed: 1.mps],
    ]
    list
    实用方法 MotionModel.lawnmower有助于生成此 List用于一组设定点 Map割草机运动模式的属性。
    最后,如果需要更细粒度的运动控制,可以设置属性 motionModel模拟节点到 Groovy Closure . Closure由具有当前模拟时间戳的模拟器调用,并预期以 Groovy 的形式返回单个设置点 Map .例如,可以使用此 Closure 实现与方形模式类似的逻辑。分配给 motionModel .
    def n = node 'B', location: [ 1.km, 0.km, -15.m], web: 8082, api: 1102, stack: "$home/etc/setup", mobility: true
    startTime = -1
    n.motionModel = { ts ->
    def setpoint = [speed: 10.mps, duration: 1.minutes]
    if (startTime < 0) startTime = ts
    if (ts <= startTime+1.minutes){
    setpoint["heading"] = 0.deg
    } else if (ts <= startTime+2.minutes){
    setpoint["heading"] = -90.deg
    } else if (ts <= startTime+3.minutes){
    setpoint["heading"] = 180.deg
    } else if (ts <= startTime+4.minutes){
    setpoint["heading"] = 90.deg
    } else {
    setpoint = [speed:0.mps]
    }
    return setpoint
    }
    closure
    更复杂的逻辑也可以在这样的 Closures里面实现包括与其他代理甚至其他节点的通信。
    最后, Closure基于方法还可以允许覆盖 NodeInfo 中的内置动力学模型。 agent 通过简单地返回一个带有 location 的 Setpoint允许直接从 Closure 更新节点位置的属性而不是通过动力学模型。

    关于unetstack - 如何在模拟中以正交割草机模式进行测量的连接的 2-UAV 的节点(USV)动态计算路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67156178/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com