11#include " MockCuckooDeviceDriver.h"
22
3+ #include < random>
4+
35#include < cuckoo_time_translator/KalmanOwt.h>
46#pragma GCC diagnostic push
57#pragma GCC diagnostic ignored "-Wunused-parameter"
6- #include " ros/ros.h"
7- #include " std_msgs/String.h"
8+ #include < ros/ros.h>
89#pragma GCC diagnostic pop
910
1011namespace cuckoo_time_translator {
@@ -19,28 +20,50 @@ KalmanOwtConfig getMockKalmanConfig() {
1920 return kc;
2021}
2122
22-
2323MockCuckooDeviceDriver::MockCuckooDeviceDriver (ros::NodeHandle & nh) :
24- cuckooClock (kWrappingNumber , kFreq , kSkew , ros::Duration(kOffset )),
25- translator (WrappingClockParameters{kWrappingNumber , kFreq }, nh.getNamespace(), Defaults().setFilterConfig(getMockKalmanConfig()))
24+ cuckooClock_ (kWrappingNumber , kFreq , kSkew , ros::Duration(kOffset )),
25+ translator_ (WrappingClockParameters{kWrappingNumber , kFreq }, nh.getNamespace(), Defaults().setFilterConfig(getMockKalmanConfig()))
2626{
27+ srv_.setCallback (boost::bind (&MockCuckooDeviceDriver::dynamicReconfigureCallback, this , _1, _2));
28+
29+ nh.param (" delay" , delaySeconds_, delaySeconds_);
30+ nh.param (" delaySigma" , delaySigmaSeconds_, delaySigmaSeconds_);
31+ nh.param (" assumedDelay" , assumedDelaySeconds_, assumedDelaySeconds_);
32+ ROS_INFO (" Using initial delay=%g s, delaySigma=%g s, and assumedDelay=%g s." , delaySeconds_, delaySigmaSeconds_, assumedDelaySeconds_);
2733}
2834
2935
3036void MockCuckooDeviceDriver::step () {
3137 ros::Time receiveTime;
3238 uint32_t deviceTime;
3339
34- cuckooClock.getNewSimulatedMeasurementTimes (deviceTime, receiveTime);
40+ static std::default_random_engine generator;
41+
42+ cuckooClock_.getNewSimulatedMeasurementTimes (deviceTime, receiveTime);
3543
36- translator.update (deviceTime, receiveTime);
44+ receiveTime += ros::Duration (delaySeconds_);
45+ if (delaySigmaSeconds_){
46+ std::exponential_distribution<double > delayDistribution (1 /delaySigmaSeconds_);
47+ receiveTime += ros::Duration (delayDistribution (generator));
48+ }
49+
50+ translator_.update (deviceTime, receiveTime, -assumedDelaySeconds_);
3751}
3852} // namespace cuckoo_time_translator
3953
4054using namespace cuckoo_time_translator ;
4155
42- int main (int argc, char **argv)
43- {
56+
57+
58+
59+ void MockCuckooDeviceDriver::dynamicReconfigureCallback (const MockCuckooClockConfig &config, int ) {
60+ assumedDelaySeconds_ = config.assumedDelay ;
61+ delaySeconds_ = config.delay ;
62+ delaySigmaSeconds_ = config.delaySigma ;
63+ ROS_INFO (" Using updated delay=%g s, delaySigma=%g s, and assumedDelay=%g s." , delaySeconds_, delaySigmaSeconds_, assumedDelaySeconds_);
64+ }
65+
66+ int main (int argc, char **argv) {
4467 ros::init (argc, argv, " mock_cuckoo_device_driver" );
4568
4669 ros::NodeHandle nh;
@@ -58,4 +81,3 @@ int main(int argc, char **argv)
5881
5982 return 0 ;
6083}
61-
0 commit comments