1

[1] 我正在尝试为使用的车辆分配一条新路线,TraCE Command Interface::Vehicle::change Vehicle Route(const std::list<std::string>& edges)但没有任何反应。

我正在获取当前路线和 ['6/7to6/6', '6/6to5/6', '5/6to4/6', '4/6to3/6', '3/6to3/7', '3 /7to3/8', '3/8to3/9', '3/9to2/9', '2/9to2/8'] 计算新并发送 ['6/7to6/6', '6/6to5/6 '、'5/6to4/6'、'4/6to3/6'、'3/6to2/6'、'2/6to2/7'、'2/7to2/8'、'2/8to3/8'、 '3/8to3/9'、'3/9to2/9'、'2/9to2/8']。

changeVehicleRoute(edges)返回 0,所以没有分配新路由。

下面是我的一段代码。有人能帮我吗?

更多问题,

[2] 如果我当前的路线是当前路线[a , b, c, d, e, f]并且车辆是当前的c,那么当我计算新路线时[a,b,c,H,I,f],我可以分配所有路线[a,b,c,H,I,f]还是只分配其余路线[c,H,I,f]

[3] 如果我只放其余的,它会影响路线长度,距离,燃料......的SUMO统计?

rot.h

TraCIMobility* mobility;
TraCICommandInterface* traci;
TraCICommandInterface::Vehicle* traciVehicle;
...

rot.cc

initialize(int stage){
...
  mobility = TraCIMobilityAccess().get(getParentModule());
  assert(mobility);
  traci = mobility->getCommandInterface();
  traciVehicle = mobility->getVehicleCommandInterface(); 
  ...
}
...
reroute(std::list<std::string> rList){
   bool rota;
   rota = traciVehicle->changeVehicleRoute(rList);
   std::cout << rota << findHost()->getFullName()  << std::endl;
}
4

1 回答 1

0

车辆的新路线总是需要从车辆当前所在的边缘开始。如果车辆在路口或离路口太近以至于无法在其前面停车,则应将路口后接近的边缘作为起点。否则重路由将失败。我承认可能很难判断车辆是否仍然可以停止,因为这取决于所使用的汽车跟随模型,但替代方案是在发生冲突/新方向的红灯时紧急制动。这可能会导致不太理想的碰撞。车辆的所有统计数据都将基于最终行驶的路线,因此您不会通过设置新路线来更改历史记录。

于 2016-06-23T07:49:47.513 回答