PD 控制器 pd_controllers.py

部分内置智能体(如 HoveringAUVSurfaceVessel)集成了简单的 PD 控制器,以便在生成数据的过程中轻松进行导航。当选择 PD 控制方案时,传递给 HoloOcean 的控制指令即为目标导航状态。下图展示了水面舰艇(Surface Vessel)的一个应用示例:它在水面上依次导航至多个预设的航点。

import holoocean
import numpy as np

config = {
    "name": "SurfaceNavigator",
    "world": "SimpleUnderwater",
    "package_name": "Ocean",
    "main_agent": "sv",
    "agents":[
        {
            "agent_name": "sv",
            "agent_type": "SurfaceVessel",
            "sensors": [
            {
                "sensor_type": "GPSSensor",
            }
            ],
            "control_scheme": 1, # PD 控制方案
            "location": [0,0,2],
            "rotation": [0, 0, 0]
        }
    ],
}

# 定义航点
idx = 0
locations = np.array([[25,25],
                    [-25,25],
                    [-25,-25],
                    [25,-25]])

# 开始模拟
with holoocean.make(scenario_cfg=config) as env:
    # 绘制航点
    for l in locations:
        env.draw_point([l[0], l[1], 0], lifetime=0)

    print("Going to waypoint ", idx)

    while True:
        # 将航点发送至 Holoocean
        state = env.step(locations[idx])

        # 检查我们是否已接近航点
        p = state["GPSSensor"][0:2]
        if np.linalg.norm(p-locations[idx]) < 1e-1:
            idx = (idx+1) % 4
            print("Going to waypoint ", idx)