Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
Next revisionBoth sides next revision
tutorials:advanced:events [2015/05/11 19:14] gkazhoyatutorials:advanced:events [2016/01/28 11:42] gkazhoya
Line 5: Line 5:
  
 Code-wise, the event callback mechanism is based on the notion of hooks of the [[doc/package/cram_utilities|cram_utitlities]] package from the CRAM core. Code-wise, the event callback mechanism is based on the notion of hooks of the [[doc/package/cram_utilities|cram_utitlities]] package from the CRAM core.
-The protocol itself is defined in the ''cram_plan_knowledge'' ROS package. That is also the package where new types of events and their handlers should be defined.+The protocol itself is defined in the ''cram_occasions_events'' ROS package. The actual event types are defined in ''cram_plan_occasions_events''. Event handlers are mostly defined in ''cram_bullet_reasoning_belief_state'' package or you can define your own handlers.
  
 In the nutshell, the protocol is pretty trivial: there is a generic function called ''cram-plan-knowledge:on-event'' which is supposed to be overloaded with new handlers and called to emit new events. In the nutshell, the protocol is pretty trivial: there is a generic function called ''cram-plan-knowledge:on-event'' which is supposed to be overloaded with new handlers and called to emit new events.
Line 13: Line 13:
 <code lisp> <code lisp>
 CL-USER> (asdf:load-system :cram-plan-knowledge) ; or ,r-l-s RET cram_plan_knowledge RET RET CL-USER> (asdf:load-system :cram-plan-knowledge) ; or ,r-l-s RET cram_plan_knowledge RET RET
-CL-USER> (in-package :plan-knowledge)+CL-USER> (in-package :cram-plan-knowledge)
 </code> </code>
  
Line 50: Line 50:
 </code> </code>
  
-To trigger the event we simply call the ''cram-plan-knowledge:on-event'' function:+To trigger the event we simply call the ''cram-plan-knowledge:on-event'' method:
  
 <code lisp> <code lisp>
Line 82: Line 82:
 Let's break this down. Let's break this down.
  
-  * We define a lexical variable ''saw-cats'' which will be our counter (if you don't quite understand how one can define a new function within the ''let'' block read up on [[http://www.gigamonkeys.com/book/variables.html#lexical-variables-and-closures|closures]]). +  * We define a lexical variable ''saw-cats'' which will be our counter (if ''saw-cats'' confuses you read up on [[http://www.gigamonkeys.com/book/variables.html#lexical-variables-and-closures|closures]]). 
-  * Then we overload our ''on-event'' method and specify ''cram-plan-knowledge::cat-counter'' as a method combination qualifier. The default method combination of generic function ''on-event'' is ''cram-utilities:hooks'' which simply combines the results of __all__ the suitable methods into a list. That is clearly illustrated in the result of the last ''on-event'' call in the code snippet above: ''(2 NIL)'', where ''2'' is the result of the ''cat-counter'' method and ''NIL'' results from the ''format'' statement of the other method. Combining the results of __all__ the suitable methods means that the qualifier itself (in our case ''cat-counter'') is of no importance. So, as long as we can come up with new qualifiers we can have new handlers for a particular event.+  * Then we overload our ''on-event'' method while specifying ''cram-plan-knowledge::cat-counter'' as a method combination qualifier. The default method combination of generic function ''on-event'' is ''cram-utilities:hooks'' which simply combines the results of all the suitable methods into a list. That is clearly illustrated in the result of the last ''on-event'' call in the code snippet above: ''(2 NIL)'', where ''2'' is the result of the method qualified with ''cat-counter'' and ''NIL'' results from the ''format'' statement of the other method. Combining the results of all the suitable methods means that the qualifier itself (in our case ''cat-counter'') is of no importance. So, as long as we can come up with new unique qualifiers we can have new handlers for our event (if this paragraph is hard to understand look into the definition of ''cram-utilities:define-hook'' and read up more on [[http://www.lispworks.com/documentation/HyperSpec/Body/m_defi_4.htm|method combinations]]).