Skip to content

Commit db5d70b

Browse files
committed
Made MockCuckooDeviceDriver more flexible and interactive.
* support random delay simulation * dynamic reconfigure for some parameters
1 parent fc06a11 commit db5d70b

File tree

3 files changed

+68
-15
lines changed

3 files changed

+68
-15
lines changed
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
#!/usr/bin/env python
2+
PACKAGE='cuckoo_time_translator'
3+
4+
from dynamic_reconfigure.parameter_generator_catkin import *
5+
6+
gen = ParameterGenerator()
7+
8+
gen.add("assumedDelay", double_t, 0,
9+
"Assumed deterministic transport delay in seconds.",
10+
0, 0.0, 1)
11+
12+
gen.add("delay", double_t, 0,
13+
"Actually simulated deterministic transport delay in seconds.",
14+
0, 0.0, 1)
15+
16+
gen.add("delaySigma", double_t, 0,
17+
"Simulated random transport delay in seconds (exponential distribution with lambda=1/delaySigma).",
18+
0, 0.0, 1)
19+
20+
21+
22+
exit(gen.generate(PACKAGE, "dynamic_reconfigure_node", "MockCuckooClock"))

cuckoo_time_translator/src/MockCuckooDeviceDriver.cpp

Lines changed: 32 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
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

1011
namespace cuckoo_time_translator {
@@ -19,28 +20,50 @@ KalmanOwtConfig getMockKalmanConfig() {
1920
return kc;
2021
}
2122

22-
2323
MockCuckooDeviceDriver::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

3036
void 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

4054
using 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-

cuckoo_time_translator/src/MockCuckooDeviceDriver.h

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,11 @@
44
#include <cuckoo_time_translator/DeviceTimeTranslator.h>
55
#include "MockCuckooClock.h"
66

7-
namespace ros {
8-
class NodeHandle;
9-
}
7+
#pragma GCC diagnostic push
8+
#pragma GCC diagnostic ignored "-Wunused-parameter"
9+
#include <dynamic_reconfigure/server.h>
10+
#include <cuckoo_time_translator/MockCuckooClockConfig.h>
11+
#pragma GCC diagnostic pop
1012

1113
namespace cuckoo_time_translator {
1214

@@ -21,8 +23,15 @@ class MockCuckooDeviceDriver {
2123

2224
void step();
2325
private:
24-
MockCuckooClock cuckooClock;
25-
DeviceTimeUnwrapperAndTranslator<TimestampUnwrapperEventOnly> translator;
26+
void dynamicReconfigureCallback(const MockCuckooClockConfig &config, int);
27+
28+
MockCuckooClock cuckooClock_;
29+
DeviceTimeUnwrapperAndTranslator<TimestampUnwrapperEventOnly> translator_;
30+
double delaySeconds_ = 0;
31+
double delaySigmaSeconds_ = 0;
32+
double assumedDelaySeconds_ = 0;
33+
34+
dynamic_reconfigure::Server<MockCuckooClockConfig> srv_;
2635
};
2736

2837
}

0 commit comments

Comments
 (0)