Skip to content

Commit c672e06

Browse files
committed
virtue: Add irrational event
1 parent e4c94ca commit c672e06

File tree

1 file changed

+17
-3
lines changed

1 file changed

+17
-3
lines changed

plugins/virtue/src/virtue.cpp

+17-3
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ namespace events {
4343

4444
DEFINE_NIL_EVENT(Failure, "failure", "assertion failure in simulation")
4545
DEFINE_NIL_EVENT(Collision, "collision", "collision detected in simulation")
46+
DEFINE_NIL_EVENT(Irrational, "irrational", "irrational behavior in simulation")
4647

4748
} // namespace events
4849

@@ -77,11 +78,13 @@ class Checker : public Entity, public Confable {
7778
explicit Checker(const std::string& name) : Entity("checker/" + name) {}
7879
virtual ~Checker() noexcept = default;
7980

80-
void set_fail_callback(std::function<void(const Sync& s)> f) { failure_callback_ = f; }
81-
8281
size_t num_failures() const { return num_failures_; }
8382

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) {
8588
num_failures_ += 1;
8689
j["sync_state"] = s;
8790
logger()->warn("Check failed: {}: {}", name, j.dump(2));
@@ -107,6 +110,13 @@ class RationalityChecker : public Checker {
107110
public:
108111
RationalityChecker() : Checker("rationality") {}
109112

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+
110120
void init(const Sync&, const Vehicle& v) override {
111121
auto ego =
112122
utility::EgoSensorCanon(v.get<const EgoSensor>(CloeComponent::GROUNDTRUTH_EGO_SENSOR));
@@ -140,6 +150,7 @@ class RationalityChecker : public Checker {
140150

141151
private:
142152
Object original_ego_;
153+
std::shared_ptr<events::IrrationalCallback> callback_;
143154
};
144155

145156
class SafetyChecker : public Checker {
@@ -246,6 +257,9 @@ class Virtue : public Controller {
246257

247258
void enroll(Registrar& r) override {
248259
callback_failure_ = r.register_event<events::FailureFactory>();
260+
for (auto& c : checkers_) {
261+
c->enroll(r);
262+
}
249263
}
250264

251265
void start(const Sync& sync) override {

0 commit comments

Comments
 (0)