[Fawkes Git] branch/fzwilling/robot-memory: 4 revs updated. (0.5.0-3415-ge1e2264)

Frederik Zwilling zwilling at kbsg.rwth-aachen.de
Tue Oct 11 22:06:58 CEST 2016


Changes have been pushed for the project "Fawkes Robotics Software Framework".

Gitweb: http://git.fawkesrobotics.org/fawkes.git
Trac:   http://trac.fawkesrobotics.org

The branch, fzwilling/robot-memory has been updated
        to  e1e2264aa7bfe8ac10bf83dfc7e6eacd9bdd3431 (commit)
       via  d3cafa435a8a919c85c087a0eed1dd79228d0146 (commit)
       via  22e48fb6e702b0210210ed6032be870178eb64fe (commit)
       via  ebb35b54b721f0e6479a2e600e8a89cb7d269560 (commit)
      from  53d178b07bfcf2d3ebbfe7032c12cddb92c05439 (commit)

http://git.fawkesrobotics.org/fawkes.git/fzwilling/robot-memory

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- *Log* ---------------------------------------------------------------
commit ebb35b54b721f0e6479a2e600e8a89cb7d269560
Author:     Frederik Zwilling <zwilling at kbsg.rwth-aachen.de>
AuthorDate: Mon Oct 10 14:27:53 2016 +0200
Commit:     Frederik Zwilling <zwilling at kbsg.rwth-aachen.de>
CommitDate: Tue Oct 11 22:06:40 2016 +0200

    clips-robot-memory: first steps of trigger integration

http://git.fawkesrobotics.org/fawkes.git/commit/ebb35b5
http://trac.fawkesrobotics.org/changeset/ebb35b5

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
commit 22e48fb6e702b0210210ed6032be870178eb64fe
Author:     Frederik Zwilling <zwilling at kbsg.rwth-aachen.de>
AuthorDate: Tue Oct 11 16:20:28 2016 +0200
Commit:     Frederik Zwilling <zwilling at kbsg.rwth-aachen.de>
CommitDate: Tue Oct 11 22:06:45 2016 +0200

    clips-robot-memory: fixed getting sub-documents

http://git.fawkesrobotics.org/fawkes.git/commit/22e48fb
http://trac.fawkesrobotics.org/changeset/22e48fb

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
commit d3cafa435a8a919c85c087a0eed1dd79228d0146
Author:     Frederik Zwilling <zwilling at kbsg.rwth-aachen.de>
AuthorDate: Tue Oct 11 17:51:43 2016 +0200
Commit:     Frederik Zwilling <zwilling at kbsg.rwth-aachen.de>
CommitDate: Tue Oct 11 22:06:51 2016 +0200

    clips-robot-memroy: fixed assert-from-bson

http://git.fawkesrobotics.org/fawkes.git/commit/d3cafa4
http://trac.fawkesrobotics.org/changeset/d3cafa4

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
commit e1e2264aa7bfe8ac10bf83dfc7e6eacd9bdd3431
Author:     Frederik Zwilling <zwilling at kbsg.rwth-aachen.de>
AuthorDate: Tue Oct 11 22:00:57 2016 +0200
Commit:     Frederik Zwilling <zwilling at kbsg.rwth-aachen.de>
CommitDate: Tue Oct 11 22:06:55 2016 +0200

    clips-robot-memory: assert trigger facts for db updates

http://git.fawkesrobotics.org/fawkes.git/commit/e1e2264
http://trac.fawkesrobotics.org/changeset/e1e2264

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -


- *Summary* -----------------------------------------------------------
 src/plugins/clips-robot-memory/Makefile            |    2 +-
 .../clips-robot-memory/clips_rm_trigger.cpp        |   85 ++++++++++++++++++++
 src/plugins/clips-robot-memory/clips_rm_trigger.h  |   52 ++++++++++++
 .../clips_robot_memory_thread.cpp                  |   41 +++++++++-
 .../clips-robot-memory/clips_robot_memory_thread.h |    6 ++
 src/plugins/clips-robot-memory/robot-memory.clp    |   29 +++++--
 src/plugins/robot-memory/event_trigger_manager.cpp |    2 +-
 src/plugins/robot-memory/robot_memory_setup.cpp    |    2 +-
 8 files changed, 208 insertions(+), 11 deletions(-)
 create mode 100644 src/plugins/clips-robot-memory/clips_rm_trigger.cpp
 create mode 100644 src/plugins/clips-robot-memory/clips_rm_trigger.h


- *Diffs* -------------------------------------------------------------

- *commit* ebb35b54b721f0e6479a2e600e8a89cb7d269560 - - - - - - - - - -
Author:  Frederik Zwilling <zwilling at kbsg.rwth-aachen.de>
Date:    Mon Oct 10 14:27:53 2016 +0200
Subject: clips-robot-memory: first steps of trigger integration

 src/plugins/clips-robot-memory/Makefile            |    2 +-
 .../clips_rm_trigger.cpp}                          |   45 +++++++++---------
 src/plugins/clips-robot-memory/clips_rm_trigger.h  |   50 ++++++++++++++++++++
 .../clips_robot_memory_thread.cpp                  |   36 ++++++++++++++
 .../clips-robot-memory/clips_robot_memory_thread.h |    6 ++
 src/plugins/robot-memory/event_trigger_manager.cpp |    2 +-
 src/plugins/robot-memory/robot_memory_setup.cpp    |    2 +-
 7 files changed, 118 insertions(+), 25 deletions(-)

_Diff for modified files_:
diff --git a/src/plugins/clips-robot-memory/Makefile b/src/plugins/clips-robot-memory/Makefile
index e91e1ca..7f4de4b 100644
--- a/src/plugins/clips-robot-memory/Makefile
+++ b/src/plugins/clips-robot-memory/Makefile
@@ -23,7 +23,7 @@ LIBS_clips_robot_memory = m fawkescore fawkesutils fawkesaspects fawkesbaseapp \
                       fawkesblackboard fawkesinterface fawkesclipsaspect \
                       fawkesrobotmemory
 
-OBJS_clips_robot_memory = clips_robot_memory_plugin.o clips_robot_memory_thread.o
+OBJS_clips_robot_memory = clips_robot_memory_plugin.o clips_robot_memory_thread.o clips_rm_trigger.o
 
 OBJS_all = $(OBJS_clips_robot_memory)
 
diff --git a/src/plugins/clips-robot-memory/clips_robot_memory_thread.cpp b/src/plugins/clips-robot-memory/clips_robot_memory_thread.cpp
index eebe069..4b9d723 100644
--- a/src/plugins/clips-robot-memory/clips_robot_memory_thread.cpp
+++ b/src/plugins/clips-robot-memory/clips_robot_memory_thread.cpp
@@ -51,6 +51,10 @@ void
 ClipsRobotMemoryThread::finalize()
 {
   envs_.clear();
+  for(ClipsRmTrigger* trigger : clips_triggers_)
+  {
+    delete trigger;
+  }
 }
 
 void
@@ -83,6 +87,14 @@ ClipsRobotMemoryThread::clips_context_init(const std::string &env_name,
   clips->add_function("robmem-cursor-destroy", sigc::slot<void, void *>(sigc::mem_fun(*this, &ClipsRobotMemoryThread::clips_robotmemory_cursor_destroy)));
   clips->add_function("robmem-cursor-more", sigc::slot<CLIPS::Value, void *>(sigc::mem_fun(*this, &ClipsRobotMemoryThread::clips_robotmemory_cursor_more)));
   clips->add_function("robmem-cursor-next", sigc::slot<CLIPS::Value, void *>(sigc::mem_fun(*this, &ClipsRobotMemoryThread::clips_robotmemory_cursor_next)));
+  clips->add_function("robmem-trigger-register",
+      sigc::slot<CLIPS::Value, std::string, void *, std::string>(
+        sigc::bind<0>(
+          sigc::mem_fun(*this, &ClipsRobotMemoryThread::clips_robotmemory_register_trigger),
+    env_name)
+      )
+    );
+  clips->add_function("robmem-trigger-destroy", sigc::slot<void, void *>(sigc::mem_fun(*this, &ClipsRobotMemoryThread::clips_robotmemory_destroy_trigger)));
   clips->add_function("bson-field-names", sigc::slot<CLIPS::Values, void *>(sigc::mem_fun(*this, &ClipsRobotMemoryThread::clips_bson_field_names)));
   clips->add_function("bson-get", sigc::slot<CLIPS::Value, void *, std::string>(sigc::mem_fun(*this, &ClipsRobotMemoryThread::clips_bson_get)));
   clips->add_function("bson-get-array", sigc::slot<CLIPS::Values, void *, std::string>(sigc::mem_fun(*this, &ClipsRobotMemoryThread::clips_bson_get_array)));
@@ -677,3 +689,27 @@ ClipsRobotMemoryThread::clips_bson_get_time(void *bson, std::string field_name)
   return rv;
 }
 
+
+CLIPS::Value
+ClipsRobotMemoryThread::clips_robotmemory_register_trigger(std::string env_name, std::string collection, void *query, std::string assert_name)
+{
+  mongo::BSONObjBuilder *b = static_cast<mongo::BSONObjBuilder *>(query);
+  try {
+    mongo::Query q(b->asTempObj());
+    ClipsRmTrigger *clips_trigger = new ClipsRmTrigger(assert_name, robot_memory, envs_[env_name]);
+    clips_trigger->set_trigger(robot_memory->register_trigger(q, collection, &ClipsRmTrigger::callback, clips_trigger));
+    clips_triggers_.push_back(clips_trigger);
+    return CLIPS::Value(clips_trigger);
+  } catch (mongo::DBException &e) {
+    logger->log_warn("CLIPS RobotMemory", "Trigger query failed: %s", e.what());
+    return CLIPS::Value("FALSE", CLIPS::TYPE_SYMBOL);
+  }
+}
+
+void
+ClipsRobotMemoryThread::clips_robotmemory_destroy_trigger(void *trigger)
+{
+  ClipsRmTrigger *clips_trigger = static_cast<ClipsRmTrigger *>(trigger);
+  clips_triggers_.remove(clips_trigger);
+  delete clips_trigger; //the triger unregisteres itself at the robot memory
+}
diff --git a/src/plugins/clips-robot-memory/clips_robot_memory_thread.h b/src/plugins/clips-robot-memory/clips_robot_memory_thread.h
index 31f9c87..f4fd1f4 100644
--- a/src/plugins/clips-robot-memory/clips_robot_memory_thread.h
+++ b/src/plugins/clips-robot-memory/clips_robot_memory_thread.h
@@ -30,6 +30,7 @@
 #include <aspect/configurable.h>
 #include <plugins/clips/aspect/clips_feature.h>
 #include <plugins/robot-memory/aspect/robot_memory_aspect.h>
+#include "clips_rm_trigger.h"
 
 #include <string>
 #include <clipsmm.h>
@@ -63,6 +64,7 @@ class ClipsRobotMemoryThread
 
  private:
   std::map<std::string, fawkes::LockPtr<CLIPS::Environment> >  envs_;
+
   CLIPS::Value  clips_bson_create();
   CLIPS::Value  clips_bson_parse(std::string document);
   void          clips_bson_destroy(void *bson);
@@ -91,6 +93,10 @@ class ClipsRobotMemoryThread
   CLIPS::Value  clips_bson_get(void *bson, std::string field_name);
   CLIPS::Values clips_bson_get_array(void *bson, std::string field_name);
   CLIPS::Values clips_bson_get_time(void *bson, std::string field_name);
+  CLIPS::Value  clips_robotmemory_register_trigger(std::string env_name, std::string collection, void *query, std::string assert_name);
+  void  clips_robotmemory_destroy_trigger(void *trigger);
+
+  std::list<ClipsRmTrigger*>  clips_triggers_;
 };
 
 
diff --git a/src/plugins/robot-memory/event_trigger_manager.cpp b/src/plugins/robot-memory/event_trigger_manager.cpp
index b2af921..8262815 100644
--- a/src/plugins/robot-memory/event_trigger_manager.cpp
+++ b/src/plugins/robot-memory/event_trigger_manager.cpp
@@ -49,7 +49,7 @@ EventTriggerManager::EventTriggerManager(Logger* logger, Configuration* config)
     throw PluginLoadException("robot-memory", err_msg.c_str());
   }
 
-  logger_->log_info(name.c_str(), "Initialized");
+  logger_->log_debug(name.c_str(), "Initialized");
 }
 
 EventTriggerManager::~EventTriggerManager()
diff --git a/src/plugins/robot-memory/robot_memory_setup.cpp b/src/plugins/robot-memory/robot_memory_setup.cpp
index fc4bc29..9f1d077 100644
--- a/src/plugins/robot-memory/robot_memory_setup.cpp
+++ b/src/plugins/robot-memory/robot_memory_setup.cpp
@@ -120,7 +120,7 @@ void RobotMemorySetup::start_mongo_process(std::string proc_name, unsigned int p
   if (!is_mongo_running(port))
     {
       std::string cmd = command_args_tostring(argv);
-      logger->log_error("RobotMemorySetup", "Starting %s process: '%s'", proc_name.c_str(), cmd.c_str());
+      logger->log_warn("RobotMemorySetup", "Starting %s process: '%s'", proc_name.c_str(), cmd.c_str());
       config_mongod = new SubProcess(proc_name.c_str(), argv[0], argv, NULL, logger);
       logger->log_info("RobotMemorySetup", "Started %s", proc_name.c_str());
       wait_until_started(port, cmd, config->get_int("plugins/robot-memory/setup/max_setup_time"));

- *commit* 22e48fb6e702b0210210ed6032be870178eb64fe - - - - - - - - - -
Author:  Frederik Zwilling <zwilling at kbsg.rwth-aachen.de>
Date:    Tue Oct 11 16:20:28 2016 +0200
Subject: clips-robot-memory: fixed getting sub-documents

 .../clips_robot_memory_thread.cpp                  |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

_Diff for modified files_:
diff --git a/src/plugins/clips-robot-memory/clips_robot_memory_thread.cpp b/src/plugins/clips-robot-memory/clips_robot_memory_thread.cpp
index 4b9d723..80ed7e4 100644
--- a/src/plugins/clips-robot-memory/clips_robot_memory_thread.cpp
+++ b/src/plugins/clips-robot-memory/clips_robot_memory_thread.cpp
@@ -571,7 +571,7 @@ ClipsRobotMemoryThread::clips_bson_get(void *bson, std::string field_name)
   case mongo::Object:
     {
       mongo::BSONObjBuilder *b = new mongo::BSONObjBuilder();
-      b->appendElements(o);
+      b->appendElements(el.Obj());
       return CLIPS::Value(b);
     }
   default:

- *commit* d3cafa435a8a919c85c087a0eed1dd79228d0146 - - - - - - - - - -
Author:  Frederik Zwilling <zwilling at kbsg.rwth-aachen.de>
Date:    Tue Oct 11 17:51:43 2016 +0200
Subject: clips-robot-memroy: fixed assert-from-bson

 src/plugins/clips-robot-memory/robot-memory.clp |   12 ++++++------
 1 files changed, 6 insertions(+), 6 deletions(-)

_Diff for modified files_:
diff --git a/src/plugins/clips-robot-memory/robot-memory.clp b/src/plugins/clips-robot-memory/robot-memory.clp
index 709f6bb..3994c39 100644
--- a/src/plugins/clips-robot-memory/robot-memory.clp
+++ b/src/plugins/clips-robot-memory/robot-memory.clp
@@ -48,20 +48,20 @@
   (bind ?keys (bson-field-names ?doc))
   (if (member$ "relation" ?keys)
     then
-    (bind ?relation (bson-get ?doc "relation"))
+    (bind ?relation (sym-cat (bson-get ?doc "relation")))
     else
     (printout error "Can not create fact from " (bson-tostring ?doc) crlf)
     (return)
   )
-  (if (member$ ?relation (get-deftemplate-list *))
+  (if (member$ ?relation (get-deftemplate-list MAIN))
     then ;structured fact
     (progn$ (?slot ?keys)
-      (if (deftemplate-slot-existp ?relation ?slot) then
-        (if (deftemplate-slot-multip ?relation ?slot)
+      (if (deftemplate-slot-existp ?relation (sym-cat ?slot)) then
+        (if (deftemplate-slot-multip ?relation (sym-cat ?slot))
           then
-          (bind ?values (str-cat ?values "(" ?relation " " (bson-get ?doc ?slot) ")"))
+          (bind ?values (str-cat ?values "(" ?slot " " (implode$ (bson-get-array ?doc ?slot)) ")"))
           else
-          (bind ?values (str-cat ?values "(" ?relation " " (implode$ (bson-get-array ?doc ?slot)) ")"))
+          (bind ?values (str-cat ?values "(" ?slot " " (bson-get ?doc ?slot) ")"))
         )
       )
     )

- *commit* e1e2264aa7bfe8ac10bf83dfc7e6eacd9bdd3431 - - - - - - - - - -
Author:  Frederik Zwilling <zwilling at kbsg.rwth-aachen.de>
Date:    Tue Oct 11 22:00:57 2016 +0200
Subject: clips-robot-memory: assert trigger facts for db updates

 .../clips-robot-memory/clips_rm_trigger.cpp        |   35 ++++++++++++++++++-
 src/plugins/clips-robot-memory/clips_rm_trigger.h  |    4 ++-
 .../clips_robot_memory_thread.cpp                  |    5 ++-
 src/plugins/clips-robot-memory/robot-memory.clp    |   17 +++++++++-
 4 files changed, 56 insertions(+), 5 deletions(-)

_Diff for modified files_:
diff --git a/src/plugins/clips-robot-memory/clips_rm_trigger.cpp b/src/plugins/clips-robot-memory/clips_rm_trigger.cpp
index bee73b2..ad8aba5 100644
--- a/src/plugins/clips-robot-memory/clips_rm_trigger.cpp
+++ b/src/plugins/clips-robot-memory/clips_rm_trigger.cpp
@@ -20,14 +20,18 @@
  */
 
 #include "clips_rm_trigger.h"
+#include <clipsmm.h>
 
 using namespace fawkes;
+using namespace mongo;
 
-ClipsRmTrigger::ClipsRmTrigger(std::string assert_name, RobotMemory *robot_memory, LockPtr<CLIPS::Environment> &clips)
+ClipsRmTrigger::ClipsRmTrigger(std::string assert_name, RobotMemory *robot_memory,
+  LockPtr<CLIPS::Environment> &clips, fawkes::Logger *logger)
 {
   this->assert_name = assert_name;
   this->robot_memory = robot_memory;
   this->clips = clips;
+  this->logger = logger;
 }
 
 ClipsRmTrigger::~ClipsRmTrigger()
@@ -49,6 +53,33 @@ void ClipsRmTrigger::set_trigger(EventTrigger *trigger)
  */
 void ClipsRmTrigger::callback(mongo::BSONObj update)
 {
-  clips->assert_fact_f("(robmem-update-triggered)");
+  clips->assert_fact_f("( %s)", assert_name.c_str());
+  CLIPS::Template::pointer temp = clips->get_template("robmem-trigger");
+  if (temp) {
+    struct timeval tv;
+    gettimeofday(&tv, 0);
+    CLIPS::Fact::pointer fact = CLIPS::Fact::create(**clips, temp);
+    fact->set_slot("name", assert_name.c_str());
+    CLIPS::Values rcvd_at(2, CLIPS::Value(CLIPS::TYPE_INTEGER));
+    rcvd_at[0] = tv.tv_sec;
+    rcvd_at[1] = tv.tv_usec;
+    fact->set_slot("rcvd-at", rcvd_at);
+    BSONObjBuilder *b = new BSONObjBuilder();
+    b->appendElements(update);
+    void *ptr = b;
+    fact->set_slot("ptr", CLIPS::Value(ptr));
+    CLIPS::Fact::pointer new_fact = clips->assert_fact(fact);
+
+    if (new_fact) {
+      //TODO: msg_facts_[new_fact->index()] = new_fact;
+    } else {
+      logger->log_warn("CLIPS-RobotMemory", "Asserting robmem-trigger fact failed");
+      delete static_cast<BSONObjBuilder *>(ptr);
+    }
+  } else {
+    logger->log_warn("CLIPS-RobotMemory",
+        "Did not get template, did you load robot-memory.clp?");
+  }
+
 }
 
diff --git a/src/plugins/clips-robot-memory/clips_rm_trigger.h b/src/plugins/clips-robot-memory/clips_rm_trigger.h
index a9d8d53..20095e5 100644
--- a/src/plugins/clips-robot-memory/clips_rm_trigger.h
+++ b/src/plugins/clips-robot-memory/clips_rm_trigger.h
@@ -26,6 +26,7 @@
 #include <plugins/robot-memory/robot_memory.h>
 #include <clipsmm.h>
 #include <core/utils/lockptr.h>
+#include <logging/logger.h>
 
 /** @class ClipsRmTrigger  clips_rm_trigger.h
  *
@@ -34,7 +35,7 @@
 class ClipsRmTrigger
 {
   public:
-    ClipsRmTrigger(std::string assert_name, RobotMemory *robot_memory, fawkes::LockPtr<CLIPS::Environment> &clips);
+    ClipsRmTrigger(std::string assert_name, RobotMemory *robot_memory, fawkes::LockPtr<CLIPS::Environment> &clips, fawkes::Logger *logger);
     virtual ~ClipsRmTrigger();
 
     void callback(mongo::BSONObj update);
@@ -45,6 +46,7 @@ class ClipsRmTrigger
     EventTrigger *trigger;
     RobotMemory *robot_memory;
     fawkes::LockPtr<CLIPS::Environment> clips;
+    fawkes::Logger *logger;
 };
 
 #endif /* FAWKES_SRC_PLUGINS_CLIPS_ROBOT_MEMORY_CLIPS_RM_TRIGGER_H_ */
diff --git a/src/plugins/clips-robot-memory/clips_robot_memory_thread.cpp b/src/plugins/clips-robot-memory/clips_robot_memory_thread.cpp
index 80ed7e4..ec8043f 100644
--- a/src/plugins/clips-robot-memory/clips_robot_memory_thread.cpp
+++ b/src/plugins/clips-robot-memory/clips_robot_memory_thread.cpp
@@ -574,6 +574,9 @@ ClipsRobotMemoryThread::clips_bson_get(void *bson, std::string field_name)
       b->appendElements(el.Obj());
       return CLIPS::Value(b);
     }
+  case 7: //ObjectId
+    return CLIPS::Value(el.OID().toString());
+
   default:
     return CLIPS::Value("INVALID_VALUE_TYPE", CLIPS::TYPE_SYMBOL);
   }
@@ -696,7 +699,7 @@ ClipsRobotMemoryThread::clips_robotmemory_register_trigger(std::string env_name,
   mongo::BSONObjBuilder *b = static_cast<mongo::BSONObjBuilder *>(query);
   try {
     mongo::Query q(b->asTempObj());
-    ClipsRmTrigger *clips_trigger = new ClipsRmTrigger(assert_name, robot_memory, envs_[env_name]);
+    ClipsRmTrigger *clips_trigger = new ClipsRmTrigger(assert_name, robot_memory, envs_[env_name], logger);
     clips_trigger->set_trigger(robot_memory->register_trigger(q, collection, &ClipsRmTrigger::callback, clips_trigger));
     clips_triggers_.push_back(clips_trigger);
     return CLIPS::Value(clips_trigger);
diff --git a/src/plugins/clips-robot-memory/robot-memory.clp b/src/plugins/clips-robot-memory/robot-memory.clp
index 3994c39..2cb9f9f 100644
--- a/src/plugins/clips-robot-memory/robot-memory.clp
+++ b/src/plugins/clips-robot-memory/robot-memory.clp
@@ -7,6 +7,12 @@
 ;  Licensed under GPLv2+ license, cf. LICENSE file
 ;---------------------------------------------------------------------------
 
+(deftemplate robmem-trigger
+  (slot name (type STRING))
+  (multislot rcvd-at (type INTEGER) (cardinality 2 2))
+  (slot ptr (type EXTERNAL-ADDRESS))
+)
+
 ;; Creates a BSON document from a structured fact
 ; @param ?fact Fact-Pointer
 ; @return BSON document
@@ -70,6 +76,15 @@
       (bind ?values (str-cat ?values "(" ?relation " " (implode$ (bson-get-array ?doc "values")) ")"))
     )
   )
-  
+
   (assert-string (str-cat "(" ?relation " " ?values ")"))
 )
+
+(defrule rm-cleanup-trigger-facts
+  "remove all trigger update facts when they were not used (by a rule with a higher priority in this iteration)"
+  (declare (salience -4000))
+  ?rt <- (robmem-trigger (ptr ?bson))
+  =>
+  (retract ?rt)
+  (bson-destroy ?bson)
+)




-- 
Fawkes Robotics Framework                 http://www.fawkesrobotics.org


More information about the fawkes-commits mailing list