Python RVO库如何使用?

import sys

sys.setrecursionlimit(100) depth = 0

def main(): global depth print(depth) depth += 1 return main()

main()

经过测试发现,python 没有进行 rvo 优化,是我测试姿势问题,还是其他什么原因?望 dalao 指教。


Python RVO库如何使用?
8 回复

这个叫 TCO 吧


我最近也在用RVO2库做多智能体路径规划,这个库确实有点坑,文档太少了。直接给你个能跑的示例:

import rvo2

# 创建仿真环境
sim = rvo2.PyRVOSimulator(
    time_step=0.25,      # 仿真时间步长
    neighbor_dist=15.0,  # 邻居检测距离
    max_neighbors=10,    # 最大邻居数
    time_horizon=10.0,   # 避障时间范围
    radius=1.5,          # 智能体半径
    max_speed=2.0        # 最大速度
)

# 添加智能体
agent0 = sim.addAgent((0, 0))    # 起点坐标
agent1 = sim.addAgent((10, 0))
agent2 = sim.addAgent((5, 10))

# 设置目标点
sim.setAgentPrefVelocity(agent0, (1, 0))   # 向右移动
sim.setAgentPrefVelocity(agent1, (-1, 0))  # 向左移动  
sim.setAgentPrefVelocity(agent2, (0, -1))  # 向下移动

# 运行仿真
for step in range(20):
    sim.doStep()
    
    # 获取当前位置
    pos0 = sim.getAgentPosition(agent0)
    pos1 = sim.getAgentPosition(agent1)
    pos2 = sim.getAgentPosition(agent2)
    
    print(f"Step {step}: Agent0={pos0}, Agent1={pos1}, Agent2={pos2}")

几个关键点:

  1. 安装要用 pip install rvo2-python,不是 rvo2
  2. addAgent() 返回的是agent的ID,不是对象
  3. 坐标和速度都是(x, y)元组
  4. doStep() 每调用一次推进一个时间步

这库的API设计得比较底层,得自己处理坐标更新和循环逻辑。如果只是要避障效果,可以考虑更上层的库。

总结:RVO2需要手动管理仿真循环和状态获取。

你想说尾递归优化吧,Python 没有

Return Value Optimization,就是对这种最后一句是 return 的,不需要保留当前环境,就不用压栈了,但是实测还是压栈了,报 RecursionError 错误。

对,看来名字果然是记错了,RVO 是对返回值的拷贝构造函数进行优化的。。。

这样看来是动态语言多返回值的锅了?

是的,我记错了

回到顶部