Skip to content

Commit

Permalink
add time sync logs (#583)
Browse files Browse the repository at this point in the history
<!-- Thanks for the contribution, this is awesome. -->

# PR Details
## Description
Adds logs to support
usdot-fhwa-stol/carma-analytics-fotda#43
<!--- Describe your changes in detail -->

## Related Issue
CDAR-774
<!--- This project only accepts pull requests related to open issues -->
<!--- If suggesting a new feature or change, please discuss it in an
issue first -->
<!--- If fixing a bug, there should be an issue describing it with steps
to reproduce -->
<!--- Please link to the issue here: -->

## Motivation and Context
Data Analysis
<!--- Why is this change required? What problem does it solve? -->

## How Has This Been Tested?

<!--- Please describe in detail how you tested your changes. -->
<!--- Include details of your testing environment, and the tests you ran
to -->
<!--- see how your change affects other areas of the code, etc. -->

## Types of changes

<!--- What types of changes does your code introduce? Put an `x` in all
the boxes that apply: -->

- [ ] Defect fix (non-breaking change that fixes an issue)
- [ ] New feature (non-breaking change that adds functionality)
- [ ] Breaking change (fix or feature that cause existing functionality
to change)

## Checklist:

<!--- Go over all the following points, and put an `x` in all the boxes
that apply. -->
<!--- If you're unsure about any of these, don't hesitate to ask. We're
here to help! -->

- [ ] I have added any new packages to the sonar-scanner.properties file
- [ ] My change requires a change to the documentation.
- [ ] I have updated the documentation accordingly.
- [ ] I have read the **CONTRIBUTING** document.
[V2XHUB Contributing
Guide](https://github.com/usdot-fhwa-OPS/V2X-Hub/blob/develop/Contributing.md)
- [ ] I have added tests to cover my changes.
- [ ] All new and existing tests passed.
  • Loading branch information
MishkaMN authored Mar 21, 2024
1 parent 5525e53 commit 6d60d91
Showing 1 changed file with 33 additions and 25 deletions.
58 changes: 33 additions & 25 deletions src/v2i-hub/CDASimAdapter/src/CDASimAdapter.cpp
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
#include "include/CDASimAdapter.hpp"

#include <chrono>

using namespace tmx::utils;

Expand All @@ -18,12 +18,12 @@ namespace CDASimAdapter{
success = GetConfigValue<double>("X", location.X);
success = success && GetConfigValue<double>("Y", location.Y);
success = success && GetConfigValue<double>("Z", location.Z);
PLOG(logINFO) << "Location of Simulated V2X-Hub updated to : {" << location.X << ", "
PLOG(logINFO) << "Location of Simulated V2X-Hub updated to : {" << location.X << ", "
<< location.Y << ", " << location.Z << "}." << std::endl;
success = success && GetConfigValue<int>("MaxConnectionAttempts", max_connection_attempts);
success = success && GetConfigValue<uint>("ConnectionSleepTime", connection_sleep_time);
if (connection_sleep_time < 1 ) {
PLOG(logWARNING) << "ConnectionSleepTime of " << connection_sleep_time << " is invalid. Valid values are <= 1." << std::endl;
PLOG(logWARNING) << "ConnectionSleepTime of " << connection_sleep_time << " is invalid. Valid values are <= 1." << std::endl;
connection_sleep_time = 1;
}
if (!success) {
Expand All @@ -33,15 +33,15 @@ namespace CDASimAdapter{

void CDASimAdapter::OnConfigChanged(const char *key, const char *value) {
PluginClient::OnConfigChanged(key, value);
UpdateConfigSettings();
UpdateConfigSettings();
}

void CDASimAdapter::OnStateChange(IvpPluginState state) {
PluginClient::OnStateChange(state);

if (state == IvpPluginState_registered) {
UpdateConfigSettings();

// While CARMA Simulation connection is down, attempt to reconnect
int connection_attempts = 0;
while ( (!connection || !connection->is_connected()) && (connection_attempts < max_connection_attempts || max_connection_attempts < 1 ) ) {
Expand All @@ -66,22 +66,30 @@ namespace CDASimAdapter{
}else {
PLOG(logERROR) << "CDASim connection failed!" << std::endl;
}

}
}



void CDASimAdapter::forward_time_sync_message(tmx::messages::TimeSyncMessage &msg) {

std::string payload =msg.to_string();
PLOG(logDEBUG1) << "Sending Time Sync Message " << msg << std::endl;
// A script to validate time synchronization of tools in CDASim currently relies on the following
// log line. TODO: This line is meant to be removed in the future upon completion of this work:
// https://github.com/usdot-fhwa-stol/carma-analytics-fotda/pull/43
auto time_now = std::chrono::system_clock::now();
auto epoch = time_now.time_since_epoch();
auto milliseconds = std::chrono::duration_cast<std::chrono::milliseconds>(epoch);
PLOG(logDEBUG1) << "Simulation Time: " << msg.get_timestep() << " where current system time is: " << milliseconds.count() << ", where msgs: " << msg << std::endl;

this->BroadcastMessage<tmx::messages::TimeSyncMessage>(msg, _name, 0 , IvpMsgFlags_None);

}

void CDASimAdapter::forward_simulated_detected_message(tmx::messages::simulation::SensorDetectedObject &msg) {
PLOG(logDEBUG1) << "Sending Simulated SensorDetectedObject Message " << msg << std::endl;
this->BroadcastMessage<tmx::messages::simulation::SensorDetectedObject>(msg, _name, 0 , IvpMsgFlags_None);
this->BroadcastMessage<tmx::messages::simulation::SensorDetectedObject>(msg, _name, 0 , IvpMsgFlags_None);
}

bool CDASimAdapter::connect() {
Expand All @@ -97,7 +105,7 @@ namespace CDASimAdapter{
std::string infrastructure_id = sim::get_sim_config(sim::INFRASTRUCTURE_ID);
std::string sensor_json_file_path = sim::get_sim_config(sim::SENSOR_JSON_FILE_PATH);

PLOG(logINFO) << "CDASim connecting " << simulation_ip <<
PLOG(logINFO) << "CDASim connecting " << simulation_ip <<
"\nUsing Registration Port : " << std::to_string( simulation_registration_port) <<
" Time Sync Port: " << std::to_string( time_sync_port) << " and V2X Port: " << std::to_string(v2x_port) << std::endl;
if ( connection ) {
Expand All @@ -108,20 +116,20 @@ namespace CDASimAdapter{
connection = std::make_unique<CDASimConnection>(simulation_ip, infrastructure_id, simulation_registration_port, sim_v2x_port, local_ip,
time_sync_port, simulated_interaction_port, v2x_port, location, sensor_json_file_path);
}
}
}
catch (const TmxException &e) {
PLOG(logERROR) << "Exception occured attempting to initialize CDASim Connection : " << e.what() << std::endl;
return false;
}
catch (const std::invalid_argument &e ) {
// std::stoul throws invalid arguement exception when provided with a string that contains characters that are not numbers.
PLOG(logERROR) << "Exception occured attempting to initialize CDASim Connection : " << e.what() <<
PLOG(logERROR) << "Exception occured attempting to initialize CDASim Connection : " << e.what() <<
". Check environment variables are set to the correct type!";
return false;
}
}
return connection->connect();
}



void CDASimAdapter::start_immediate_forward_thread() {
Expand All @@ -130,10 +138,10 @@ namespace CDASimAdapter{
}
immediate_forward_tick_id = immediate_forward_timer->AddPeriodicTick([this]() {
this->attempt_message_from_v2xhub();

} // end of lambda expression
, std::chrono::milliseconds(5) );

immediate_forward_timer->Start();

}
Expand Down Expand Up @@ -170,27 +178,27 @@ namespace CDASimAdapter{

void CDASimAdapter::start_sensor_detected_object_detection_thread() {
PLOG(logDEBUG) << "Creating Thread Timer for simulated external object" << std::endl;
try
try
{
if(!external_object_detection_thread_timer)
{
external_object_detection_thread_timer = std::make_unique<tmx::utils::ThreadTimer>(std::chrono::milliseconds(5));
}
}
external_object_detection_thread_timer->AddPeriodicTick([this](){
PLOG(logDEBUG1) << "Listening for Sensor Detected Message from CDASim." << std::endl;
auto msg = connection->consume_sensor_detected_object_message();
if ( !msg.is_empty()) {
if ( !msg.is_empty()) {
this->forward_simulated_detected_message(msg);
}
else
else
{
PLOG(logDEBUG1) << "CDASim connection has not yet received an simulated sensor detected message!" << std::endl;
}
}//End lambda
, std::chrono::milliseconds(5));
external_object_detection_thread_timer->Start();
}
catch ( const UdpServerRuntimeError &e )
catch ( const UdpServerRuntimeError &e )
{
PLOG(logERROR) << "Error occured :" << e.what() << std::endl;
}
Expand Down Expand Up @@ -238,23 +246,23 @@ namespace CDASimAdapter{
}
}


int CDASimAdapter::Main() {


PLOG(logINFO) << "Starting plugin " << _name << std::endl;
PLOG(logINFO) << "Starting plugin " << _name << std::endl;

while (_plugin->state != IvpPluginState_error) {

if (IsPluginState(IvpPluginState_registered))
{

}
}

return EXIT_SUCCESS;
}

}


Expand Down

0 comments on commit 6d60d91

Please sign in to comment.