use maliput::{
api::{RoadNetwork, RoadNetworkBackend},
ResourceManager,
};
use std::collections::HashMap;
#[allow(dead_code)]
pub fn create_t_shape_road_network(omit_non_drivable_lanes: bool) -> RoadNetwork {
let package_location = std::env::var("CARGO_MANIFEST_DIR").unwrap();
let xodr_path = format!("{}/data/xodr/TShapeRoad.xodr", package_location);
let omit_non_drivable_lanes = match omit_non_drivable_lanes {
false => "false",
true => "true",
};
let road_network_properties = HashMap::from([
("road_geometry_id", "my_rg_from_rust"),
("opendrive_file", xodr_path.as_str()),
("angular_tolerance", "0.001"),
("linear_tolerance", "0.001"),
("omit_nondrivable_lanes", omit_non_drivable_lanes),
]);
let rn_res = RoadNetwork::new(RoadNetworkBackend::MaliputMalidrive, &road_network_properties);
assert!(
rn_res.is_ok(),
"Expected RoadNetwork to be created successfully with TShapeRoad.xodr"
);
rn_res.unwrap()
}
#[allow(dead_code)]
pub fn create_arc_lane_road_network() -> RoadNetwork {
let package_location = std::env::var("CARGO_MANIFEST_DIR").unwrap();
let xodr_path = format!("{}/data/xodr/ArcLane.xodr", package_location);
let road_network_properties = HashMap::from([
("road_geometry_id", "my_rg_from_rust"),
("opendrive_file", xodr_path.as_str()),
("linear_tolerance", "0.01"),
]);
let rn_res = RoadNetwork::new(RoadNetworkBackend::MaliputMalidrive, &road_network_properties);
assert!(
rn_res.is_ok(),
"Expected RoadNetwork to be created successfully with ArcLane.xodr"
);
rn_res.unwrap()
}
#[allow(dead_code)]
pub fn create_town_01_road_network() -> RoadNetwork {
let package_location = std::env::var("CARGO_MANIFEST_DIR").unwrap();
let xodr_path = format!("{}/data/xodr/Town01.xodr", package_location);
let road_network_properties = HashMap::from([
("road_geometry_id", "my_rg_from_rust"),
("opendrive_file", xodr_path.as_str()),
("linear_tolerance", "0.01"),
]);
let rn_res = RoadNetwork::new(RoadNetworkBackend::MaliputMalidrive, &road_network_properties);
assert!(
rn_res.is_ok(),
"Expected RoadNetwork to be created successfully with Town01.xodr"
);
rn_res.unwrap()
}
#[allow(dead_code)]
pub fn create_t_shape_road_network_with_books() -> RoadNetwork {
let rm = ResourceManager::new();
let t_shape_xodr_path = rm
.get_resource_path_by_name("maliput_malidrive", "TShapeRoad.xodr")
.unwrap();
let t_shape_books_path = rm
.get_resource_path_by_name("maliput_malidrive", "TShapeRoad.yaml")
.unwrap();
let road_network_properties = HashMap::from([
("road_geometry_id", "my_rg_from_rust"),
("opendrive_file", t_shape_xodr_path.to_str().unwrap()),
("road_rule_book", t_shape_books_path.to_str().unwrap()),
("traffic_light_book", t_shape_books_path.to_str().unwrap()),
("phase_ring_book", t_shape_books_path.to_str().unwrap()),
("intersection_book", t_shape_books_path.to_str().unwrap()),
("linear_tolerance", "0.01"),
]);
let rn_res = RoadNetwork::new(RoadNetworkBackend::MaliputMalidrive, &road_network_properties);
assert!(
rn_res.is_ok(),
"Expected RoadNetwork to be created successfully with TShapeRoad.xodr and books"
);
rn_res.unwrap()
}
#[allow(dead_code)]
pub fn create_road_with_upper_left_traffic_light_network() -> RoadNetwork {
let package_location = std::env::var("CARGO_MANIFEST_DIR").unwrap();
let xodr_path = format!(
"{}/tests/data/xodr/RoadWithUpperLeftTrafficLight.xodr",
package_location
);
let db_path = format!(
"{}/tests/data/traffic_signal_db/TrafficSignalDatabase.yaml",
package_location
);
let road_network_properties = HashMap::from([
("road_geometry_id", "road_with_upper_left_traffic_light"),
("opendrive_file", xodr_path.as_str()),
("traffic_signal_db", db_path.as_str()),
("linear_tolerance", "0.01"),
]);
let rn_res = RoadNetwork::new(RoadNetworkBackend::MaliputMalidrive, &road_network_properties);
assert!(
rn_res.is_ok(),
"Expected RoadNetwork to be created with RoadWithUpperLeftTrafficLight.xodr"
);
rn_res.unwrap()
}
#[allow(dead_code)]
pub fn create_two_roads_with_traffic_lights_network() -> RoadNetwork {
let package_location = std::env::var("CARGO_MANIFEST_DIR").unwrap();
let xodr_path = format!("{}/tests/data/xodr/TwoRoadsWithTrafficLights.xodr", package_location);
let db_path = format!(
"{}/tests/data/traffic_signal_db/TrafficSignalDatabase.yaml",
package_location
);
let road_network_properties = HashMap::from([
("road_geometry_id", "two_roads_with_traffic_lights"),
("opendrive_file", xodr_path.as_str()),
("traffic_signal_db", db_path.as_str()),
("linear_tolerance", "0.01"),
]);
let rn_res = RoadNetwork::new(RoadNetworkBackend::MaliputMalidrive, &road_network_properties);
assert!(
rn_res.is_ok(),
"Expected RoadNetwork to be created with TwoRoadsWithTrafficLights.xodr"
);
rn_res.unwrap()
}
#[allow(dead_code)]
pub fn create_loop_road_pedestrian_crosswalk_road_network_with_books() -> RoadNetwork {
let rm = ResourceManager::new();
let loop_road_pedestrian_crosswalk_xodr_path = rm
.get_resource_path_by_name("maliput_malidrive", "LoopRoadPedestrianCrosswalk.xodr")
.unwrap();
let loop_road_pedestrian_crosswalk_books_path = rm
.get_resource_path_by_name("maliput_malidrive", "LoopRoadPedestrianCrosswalk.yaml")
.unwrap();
let road_network_properties = HashMap::from([
("road_geometry_id", "my_rg_from_rust"),
(
"opendrive_file",
loop_road_pedestrian_crosswalk_xodr_path.to_str().unwrap(),
),
(
"road_rule_book",
loop_road_pedestrian_crosswalk_books_path.to_str().unwrap(),
),
(
"rule_registry",
loop_road_pedestrian_crosswalk_books_path.to_str().unwrap(),
),
(
"traffic_light_book",
loop_road_pedestrian_crosswalk_books_path.to_str().unwrap(),
),
(
"phase_ring_book",
loop_road_pedestrian_crosswalk_books_path.to_str().unwrap(),
),
(
"intersection_book",
loop_road_pedestrian_crosswalk_books_path.to_str().unwrap(),
),
("linear_tolerance", "0.01"),
]);
let rn_res = RoadNetwork::new(RoadNetworkBackend::MaliputMalidrive, &road_network_properties);
assert!(
rn_res.is_ok(),
"Expected RoadNetwork to be created successfully with LoopRoadPedestrianCrosswalk.xodr and books"
);
rn_res.unwrap()
}
#[allow(dead_code)]
pub fn assert_inertial_position_equality(
left: &maliput::api::InertialPosition,
right: &maliput::api::InertialPosition,
tolerance: f64,
) {
assert!((left.x() - right.x()).abs() < tolerance);
assert!((left.y() - right.y()).abs() < tolerance);
assert!((left.z() - right.z()).abs() < tolerance);
}
#[allow(dead_code)]
pub fn assert_lane_position_equality(
left: &maliput::api::LanePosition,
right: &maliput::api::LanePosition,
tolerance: f64,
) {
assert!((left.s() - right.s()).abs() < tolerance);
assert!((left.r() - right.r()).abs() < tolerance);
assert!((left.h() - right.h()).abs() < tolerance);
}