如何使用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
相关产品推荐
相关产品推荐

