You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用randomTrips.py等工具生成行进距离相同的行人

实现方案

方法一:预先静态配置(适合固定场景批量生成)

  • 第一步:先确定起点坐标,计算等距圆弧上的终点坐标,优先选择圆弧上已覆盖步行道/人行道的点位作为候选终点,避免后续路径绕路导致实际步行距离偏差。
  • 第二步:在.rou.xml行人路由文件里配置同一起点的行人,配置示例如下:
<person id="ped_0" depart="0.0">
    <walk from="edge_start" to="edge_end_0" />
</person>
<person id="ped_1" depart="0.0">
    <walk from="edge_start" to="edge_end_1" />
</person>
<!-- 其余行人按相同规则配置即可 -->
  • 第三步:提前运行预校验命令sumo --net-file your.net.xml --route-file your.rou.xml --no-step-log --duration-log.statistics,查看每个行人的步行总距离,微调终点点位将距离差控制在你允许的误差范围内即可。

方法二:TraCI动态控制(适合需要实时调整的场景)

  • 第一步:启动SUMO仿真后,调用traci.person.add()批量创建起点相同的行人,初始可先设置一个临时终点。
  • 第二步:对每个新创建的行人,调用traci.simulation.findRoute()接口遍历候选终点的路径长度,筛选出路径总长度和目标值误差在阈值内的终点,示例代码段如下:
target_length = 1000 # 设定的目标步行距离,单位为米
tolerance = 5 # 允许的距离误差范围,单位为米
valid_ends = []
# 遍历所有候选终点边,筛选符合长度要求的点位
for end_edge in candidate_end_edges:
    route = traci.simulation.findRoute(fromEdge="edge_start", toEdge=end_edge, vType="pedestrian")
    if abs(route.length - target_length) <= tolerance:
        valid_ends.append(end_edge)
# 给每个行人分配不同的合规终点
for i, ped_id in enumerate(ped_ids):
    traci.person.rerouteTraveltime(ped_id, edgeID=valid_ends[i%len(valid_ends)])
  • 第三步:仿真过程中可通过traci.person.getDistance(ped_id)实时获取行人已步行距离,到达目标距离后也可直接调用traci.person.remove(ped_id)结束行程,无需等行人走到终点。

小提示:如果对距离精度要求极高,可以在行人vType配置里设置maxSpeedDeviation="0"关闭行人动态绕路功能,避免行人避让其他交通参与者时多走额外距离。

内容的提问来源于stack exchange,提问作者mayue06

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 00:27:03