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}")
几个关键点:
- 安装要用
pip install rvo2-python,不是rvo2 addAgent()返回的是agent的ID,不是对象- 坐标和速度都是(x, y)元组
doStep()每调用一次推进一个时间步
这库的API设计得比较底层,得自己处理坐标更新和循环逻辑。如果只是要避障效果,可以考虑更上层的库。
总结:RVO2需要手动管理仿真循环和状态获取。
你想说尾递归优化吧,Python 没有
Return Value Optimization,就是对这种最后一句是 return 的,不需要保留当前环境,就不用压栈了,但是实测还是压栈了,报 RecursionError 错误。
对,看来名字果然是记错了,RVO 是对返回值的拷贝构造函数进行优化的。。。
这样看来是动态语言多返回值的锅了?
是的,我记错了


