Difference between revisions of "Category:Cognitao"
(→Task preemption in CogniTAO (Asynchronous execution)) |
|||
| Line 26: | Line 26: | ||
=== Task preemption in CogniTAO (Asynchronous execution) === | === Task preemption in CogniTAO (Asynchronous execution) === | ||
| + | Below is an example of task preemption while the task is busy waiting. | ||
| + | Busy waiting for completion is not a requirement, the task will end only once it's stopped, | ||
| + | so returning from a run method and asynchronously setting it's return value and ending the task is perfectly fine. | ||
<source lang="C++"> | <source lang="C++"> | ||
class TaskIdle: public TaskThread | class TaskIdle: public TaskThread | ||
Revision as of 11:02, 19 September 2019
Contents
CogniTAO
CogniTAO is a collection of decision making tools that include
- A pure C++ Cx11 executive for (Windows 10, Linux Debian, Intel / ARM support)
- Finite State Machines
- Hierarchical State Machines
- Behavior Trees
- BDI models
- A Web monitoring and visualization tool in pure Javascript
- A teamwork controller
- A real-time planner
Simple task in CogniTAO (Synchronous execution)
<source lang="C++"> class TaskTrue: public Task{ public: virtual void run() { std::cout << "." << std::flush; std::this_thread::sleep_for(std::chrono::milliseconds(1000)); setReturn(true); } }; </source>
Task preemption in CogniTAO (Asynchronous execution)
Below is an example of task preemption while the task is busy waiting. Busy waiting for completion is not a requirement, the task will end only once it's stopped, so returning from a run method and asynchronously setting it's return value and ending the task is perfectly fine. <source lang="C++"> class TaskIdle: public TaskThread { public: // Function to be executed by thread function void run() { // Check if thread is requested to stop ? while (stopRequested == false) { std::this_thread::sleep_for(std::chrono::milliseconds(1000)); } } }; </source>
Behaviors in CogniTAO
Behavior tree support is for Sequencer / Selector / Parallel. More logic flow controllers can be easily defined. <source lang="C++"> class BehaviourTrue : public Behaviour { public: virtual bool action(){ std::cout << "." << std::flush; std::this_thread::sleep_for(std::chrono::milliseconds(2000)); return true; } }; </source>
World model access in CogniTAO
<source lang="C++"> WM::setVar("EVENT","E2"); </source>
XML plan definition support CogniTAO
Simple SCXML support <source lang="C++"> <state initial="A">
<state id="A">
<state initial="a1">
<state id="a1">
<transition event="COIN_A" target="a2"/>
</state>
<state id="a2">
</state>
</state>
<transition event="CHANGE_M" target="B"/>
</state>
<state id="B">
<state initial="b1">
<state id="b1">
<transition event="COIN_B" target="b2"/>
</state>
<state id="b2">
</state>
</state>
<transition event="UNCHANGE_M" target="A"/>
</state>
</state> </source>
Behaviour Tree XML support <source lang="C++"> <plan>
<seq name="S">
<sel name="S1">
<seq name="S2">
<tsk name="Test1" />
<tsk name="Test2" />
</seq>
<tsk name="Test3" />
</sel>
<sel name="S3">
<seq name="S4">
<tsk name="Test4" />
<tsk name="Test5" />
</seq>
<tsk name="Test6" />
</sel>
<sel name="S5">
<seq name="S6">
<tsk name="Test7" />
<tsk name="Test8" />
</seq>
<tsk name="Test9" />
</sel>
</seq>
</plan> </source>
This category currently contains no pages or media.