如何获得静脉中两个节点(例如车辆)之间的距离或行程时间?

时间:2018-06-14 19:41:45

标签: omnet++ veins sumo

在静脉中,我可以使用Coord.distance()函数计算两个协调之间的距离。但是,此功能只是计算两点之间的笛卡尔距离。两个车辆或车辆与交叉点之间的实际距离取决于边缘形状(例如,弯道边缘)。此外,它取决于边长(SUMO参数)。他们在SUMO或Veins中的功能是否考虑了这些因素?

2 个答案:

答案 0 :(得分:1)

你可以使用SuMO distance request TraCI call来计算空中距离以及两个任意位置之间的行驶距离。在Veins中,此调用在TraCICommandInterface::getDistance()中实现:

double getDistance(const Coord& position1, const Coord& position2, bool returnDrivingDistance);

答案 1 :(得分:0)

我发现了我的错误!

为了获得车辆与另一个节点(特别是交通信号灯)之间的行驶距离,我不得不估算一个有效的Coord,该信号靠近交通信号灯并位于车辆路线上,与计算之间的距离相反车辆和交通信号灯的交汇处。

为了估计交通信号灯的有效坐标,我使用了道路ID中任何车道将通过交通信号灯的车道的最后一个坐标。该代码将是这样的:

// get traffic light controlled lanes
    Veins::TraCICommandInterface::Trafficlight traciTL = traci->trafficlight(trafficLightID);
    // controlled lanes
    std::list<std::string> lanes = traciTL.getControlledLanes();
    for(auto lane : lanes){
        // which controlled lane in the road_id
        if(traci->lane(lane).getRoadId() == road_id){  // found
            // return last Coord of this lane
            std::list<Coord> laneCoords = traci->lane(lane).getShape();
            return  getDistance(vehicle_Coord, laneCoords.back(),true); 
        }
    }