Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
9 changes: 9 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -182,3 +182,12 @@ CM11_proj/tmp.obj

# Ignore Experiments folder under tests/Applications/Eco_Fixed_Timming
/tests/Applications/Eco_Fixed_Timming/Experiments/

# Ignore Claude Code configuration
.claude/

# Ignore large SUMO output files
fcd.xml

# Ignore large assets managed via download script
tests/Applications/SUMO_CARLA_EcoDriving/MLK_Carla_Scenario/CARLAFiles/MLK_noped1002_final_debug.fbx
3 changes: 3 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,6 @@
path = ProprietaryFiles
url = https://github.com/Real-Sim-XIL/ProprietaryFiles.git

[submodule "tests/Applications/SUMO_CARLA_EcoDriving/mlk_xil"]
path = tests/Applications/SUMO_CARLA_EcoDriving/mlk_xil
url = https://code.ornl.gov/realsim_realtwin-deployment/mlk_xil.git
146 changes: 99 additions & 47 deletions CommonLib/ConfigHelper.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -392,6 +392,56 @@ int ConfigHelper::getConfig(string configName) {
SumoSetup.ExecutionOrder = 1;
printf("\nSumo Execution Order not specified! Will use 1 as default!\n");
}
if (node["EgoID"]) {
SumoSetup.EgoID = node["EgoID"].as<std::string>();
}
else {
SumoSetup.EgoID = "ego";
printf("\nSumo EgoID not specified! Will use 'ego' as default!\n");
}
if (node["EgoInsertTime"]) {
SumoSetup.EgoInsertTime = node["EgoInsertTime"].as<double>();
}
else {
SumoSetup.EgoInsertTime = 28985.0;
printf("\nSumo EgoInsertTime not specified! Will use 28985.0 as default!\n");
}

// ---- Ego depart parameters (TraCI vehicle.add) ----
if (node["EgoDepart"]) {
SumoSetup.EgoDepart = parserString(node, "EgoDepart");
}
else {
SumoSetup.EgoDepart = "now";
printf("\nSumo EgoDepart not specified! Will use 'now' as default!\n");
}

if (node["EgoDepartLane"]) {
SumoSetup.EgoDepartLane = parserString(node, "EgoDepartLane");
}
else {
SumoSetup.EgoDepartLane = "0";
printf("\nSumo EgoDepartLane not specified! Will use '0' as default!\n");
}

if (node["EgoDepartPos"]) {
SumoSetup.EgoDepartPos = parserString(node, "EgoDepartPos");
}
else {
SumoSetup.EgoDepartPos = "1";
printf("\nSumo EgoDepartPos not specified! Will use '1' as default!\n");
}

if (node["EgoDepartSpeed"]) {
SumoSetup.EgoDepartSpeed = parserString(node, "EgoDepartSpeed");
}
else {
SumoSetup.EgoDepartSpeed = "0.1";
printf("\nSumo EgoDepartSpeed not specified! Will use '0.1' as default!\n");
}




// ===========================================================================
// READ Carla Setup section
Expand All @@ -411,31 +461,11 @@ int ConfigHelper::getConfig(string configName) {
CarlaSetup.EnableCosimulation = false;
}

//if (node["EnableEgoSimulink"]) {
// CarlaSetup.EnableEgoSimulink = parserFlag(node, "EnableEgoSimulink");
//}
//else {
// CarlaSetup.EnableEgoSimulink = false;
//}
if (node["EnableExternalControl"]) {
CarlaSetup.EnableExternalControl = parserFlag(node, "EnableExternalControl");
}
else {
CarlaSetup.EnableExternalControl = false;
}
if (node["UseVehicleTypeAsBlueprint"]) {
CarlaSetup.UseVehicleTypeAsBlueprint = parserFlag(node, "UseVehicleTypeAsBlueprint");
}
else {
CarlaSetup.UseVehicleTypeAsBlueprint = false;
}

if (node["CenteredViewId"]) {
CarlaSetup.CenteredViewId = parserString(node, "CenteredViewId");
if (node["EnableEgoSimulink"]) {
CarlaSetup.EnableEgoSimulink = parserFlag(node, "EnableEgoSimulink");
}
else {
CarlaSetup.CenteredViewId = "ego";
printf("\nCentered View Id not specified! Will use ego as default!\n");
CarlaSetup.EnableEgoSimulink = false;
}

if (node["CarlaServerIP"]) {
Expand Down Expand Up @@ -679,7 +709,7 @@ void ConfigHelper::parserSubscription(YAML::Node rootnode, std::string name, Sub
break;

case intersection:
if (att.compare("id") == 0 || att.compare("name") == 0) {
if (att.compare("id") == 0 || att.compare("name") == 0 || att.compare("all") == 0) {
extractSubscriptionAttributes(attnode, type, att, attMap);
}
else {
Expand Down Expand Up @@ -932,6 +962,8 @@ void ConfigHelper::getVehSubscriptionList(Subscription_t VehSub, std::unordered_
}

void ConfigHelper::getSigSubscriptionList(Subscription_t SigSub) {
SubscriptionSignalList.signalId_v.clear();
SubscriptionSignalList.subAllSignalFlag = false;

// type, attribute, ip, port
// string, SubAttMap_t, vector <string>, vector <int>
Expand All @@ -941,52 +973,72 @@ void ConfigHelper::getSigSubscriptionList(Subscription_t SigSub) {
vector <string> idlist;
if (type.compare("intersection") == 0) {
SubAttMap_t att = get<1>(SigSub[iSub]);

bool subAll = false;
if (att.find("all") != att.end() && !att["all"].empty()) {
string v = att["all"][0];
if (v == "true" || v == "True" || v == "TRUE" || v == "1") {
subAll = true;
}
}

if (subAll) {
SubscriptionSignalList.subAllSignalFlag = true;
}

vector<string> idlist;

if (att.find("name") != att.end()) {
idlist = att["name"];
for (size_t i = 0; i < idlist.size(); i++) {
if (SubscriptionSignalList.signalId_v.find(idlist[i]) == SubscriptionSignalList.signalId_v.end()) {
SubscriptionSignalList.signalId_v.insert(idlist[i]);
}
}
else if (att.find("id") != att.end()) {
idlist = att["id"];
}


for (size_t i = 0; i < idlist.size(); i++) {
if (SubscriptionSignalList.signalId_v.find(idlist[i]) == SubscriptionSignalList.signalId_v.end()) {
SubscriptionSignalList.signalId_v.insert(idlist[i]);
}
}


// get port map
vector <int> port_v;
port_v = get<3>(SigSub[iSub]);

for (auto it : port_v) {
// if already has this socket port, then no need to initialize
if (SocketPort2SubscriptionList_um.find(it) != SocketPort2SubscriptionList_um.end()) {
for (auto port : port_v) {

}
else {

if (SocketPort2SubscriptionList_um.find(port) == SocketPort2SubscriptionList_um.end()) {
SubscriptionAllList_t subAllList;
SocketPort2SubscriptionList_um[it] = subAllList;
SocketPort2SubscriptionList_um[port] = subAllList;
}


if (subAll) {
SocketPort2SubscriptionList_um[port].SignalList.subAllSignalFlag = true;
}


for (size_t i = 0; i < idlist.size(); i++) {
if (SocketPort2SubscriptionList_um[it].SignalList.signalId_v.find(idlist[i]) == SocketPort2SubscriptionList_um[it].SignalList.signalId_v.end()) {
SocketPort2SubscriptionList_um[it].SignalList.signalId_v.insert(idlist[i]);
if (SocketPort2SubscriptionList_um[port].SignalList.signalId_v.find(idlist[i]) ==
SocketPort2SubscriptionList_um[port].SignalList.signalId_v.end()) {
SocketPort2SubscriptionList_um[port].SignalList.signalId_v.insert(idlist[i]);
}
}
}

}
else {
// ERROR HANDLING

}


}

////if (CarMakerSetup.EnableCosimulation && CarMakerSetup.SynchronizeTrafficSignal){
//if (CarMakerSetup.SynchronizeTrafficSignal) {
// SubscriptionSignalList.subAllSignalFlag = true;
//}
//else {
// SubscriptionSignalList.subAllSignalFlag = false;
//}
if (SubscriptionSignalList.subAllSignalFlag) {
for (auto& kv : SocketPort2SubscriptionList_um) {
kv.second.SignalList.subAllSignalFlag = true;
}
}
}

void ConfigHelper::getDetSubscriptionList(Subscription_t DetSub) {
Expand Down
13 changes: 8 additions & 5 deletions CommonLib/ConfigHelper.h
Original file line number Diff line number Diff line change
Expand Up @@ -114,9 +114,7 @@ struct CarlaSetup_t {

bool EnableCosimulation;

bool EnableExternalControl;

bool UseVehicleTypeAsBlueprint;
bool EnableEgoSimulink;

std::string CarlaServerIP;

Expand All @@ -128,8 +126,6 @@ struct CarlaSetup_t {

std::string CarlaMapName;

std::string CenteredViewId;

double TrafficRefreshRate;

std::vector<std::string> InterestedIds;
Expand All @@ -140,6 +136,13 @@ struct SumoSetup_t {

int SpeedMode;
int ExecutionOrder;
std::string EgoID;
double EgoInsertTime;

std::string EgoDepart;
std::string EgoDepartLane;
std::string EgoDepartPos;
std::string EgoDepartSpeed;
};

typedef struct SubscriptionVehicleList_t {
Expand Down
Loading