@@ -43,6 +43,7 @@ namespace events {
43
43
44
44
DEFINE_NIL_EVENT (Failure, " failure" , " assertion failure in simulation" )
45
45
DEFINE_NIL_EVENT (Collision, " collision" , " collision detected in simulation" )
46
+ DEFINE_NIL_EVENT (Irrational, " irrational" , " irrational behavior in simulation" )
46
47
47
48
} // namespace events
48
49
@@ -77,11 +78,13 @@ class Checker : public Entity, public Confable {
77
78
explicit Checker (const std::string& name) : Entity(" checker/" + name) {}
78
79
virtual ~Checker () noexcept = default ;
79
80
80
- void set_fail_callback (std::function<void (const Sync& s)> f) { failure_callback_ = f; }
81
-
82
81
size_t num_failures () const { return num_failures_; }
83
82
84
- void fail (const Sync& s, std::string&& name, Json&& j) {
83
+ virtual void set_fail_callback (std::function<void (const Sync& s)> f) { failure_callback_ = f; }
84
+
85
+ virtual void enroll (Registrar& r) {}
86
+
87
+ virtual void fail (const Sync& s, std::string&& name, Json&& j) {
85
88
num_failures_ += 1 ;
86
89
j[" sync_state" ] = s;
87
90
logger ()->warn (" Check failed: {}: {}" , name, j.dump (2 ));
@@ -107,6 +110,13 @@ class RationalityChecker : public Checker {
107
110
public:
108
111
RationalityChecker () : Checker(" rationality" ) {}
109
112
113
+ void enroll (Registrar& r) override { callback_ = r.register_event <events::IrrationalFactory>(); }
114
+
115
+ void fail (const Sync& s, std::string&& name, Json&& j) override {
116
+ callback_->trigger (s);
117
+ Checker::fail (s, std::move (name), std::move (j));
118
+ }
119
+
110
120
void init (const Sync&, const Vehicle& v) override {
111
121
auto ego =
112
122
utility::EgoSensorCanon (v.get <const EgoSensor>(CloeComponent::GROUNDTRUTH_EGO_SENSOR));
@@ -140,6 +150,7 @@ class RationalityChecker : public Checker {
140
150
141
151
private:
142
152
Object original_ego_;
153
+ std::shared_ptr<events::IrrationalCallback> callback_;
143
154
};
144
155
145
156
class SafetyChecker : public Checker {
@@ -246,6 +257,9 @@ class Virtue : public Controller {
246
257
247
258
void enroll (Registrar& r) override {
248
259
callback_failure_ = r.register_event <events::FailureFactory>();
260
+ for (auto & c : checkers_) {
261
+ c->enroll (r);
262
+ }
249
263
}
250
264
251
265
void start (const Sync& sync) override {
0 commit comments