From 4957c7893f1795b547bacb49e89946d10652b575 Mon Sep 17 00:00:00 2001 From: Shreyas Rajendra Poyrekar Date: Tue, 22 Mar 2022 22:48:12 -0500 Subject: [PATCH 1/3] example blockly "user_object" --- .vs/slnx.sqlite | Bin 0 -> 90112 bytes .../operational_model_behavior_tree_PoC.xml | 155 +++++++++++++++++- 2 files changed, 153 insertions(+), 2 deletions(-) create mode 100644 .vs/slnx.sqlite diff --git a/.vs/slnx.sqlite b/.vs/slnx.sqlite new file mode 100644 index 0000000000000000000000000000000000000000..8beac4ba3977c2087cbe67d003422282c86dd7a7 GIT binary patch literal 90112 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 m5CDP53E=&I150 - + + Act AUTO @@ -838,4 +839,154 @@ 345 - \ No newline at end of file + + + + User Object + EXT + NONE + + + input_name + LEFT + + + Name + var_name + + + + + + + + + input_age + LEFT + + + Age + var_age + + + + + + + + + input_role + LEFT + + + + Role + Admin + var_admin + User + var_user + Developer + var_dev + + + + + + + + + user_id + LEFT + + + User Id + var_user_id + + + + + + + + + input_manager + LEFT + + + Manger + var_manager + + + + + + + + + + + + + + + + + input_profile_photo + LEFT + + + Profile Photo + var_image_address + + + https://www.gstatic.com/codesite/ph/images/star_on.gif + 15 + 15 + * + FALSE + + + #ff0000 + NAME + + + + + + + + + + Image address + + + + + + + + + + + + + + + + + + + + + + + + + + + + 230 + + + + From b1d71f30b37e627ec325885d5d6f9987b621f6f8 Mon Sep 17 00:00:00 2001 From: Shreyas Rajendra Poyrekar Date: Wed, 18 May 2022 01:38:02 -0500 Subject: [PATCH 2/3] Behavior Tree basic structure --- .../VisualPDDL/js/vppdl_block_codegen.js | 24 +++++++++ .../Content/VisualPDDL/js/vppdl_block_defs.js | 52 +++++++++++++++++++ poc-blockly-bt/index.html | 7 +++ 3 files changed, 83 insertions(+) diff --git a/poc-blockly-bt/Content/VisualPDDL/js/vppdl_block_codegen.js b/poc-blockly-bt/Content/VisualPDDL/js/vppdl_block_codegen.js index dca1f50..b30c8e9 100644 --- a/poc-blockly-bt/Content/VisualPDDL/js/vppdl_block_codegen.js +++ b/poc-blockly-bt/Content/VisualPDDL/js/vppdl_block_codegen.js @@ -122,4 +122,28 @@ Blockly.JavaScript['not'] = function(block) { // TODO: Assemble JavaScript into code variable. var code = '(not ' + statements_predicate_calls.trim() + ')'; return code; +}; + +Blockly.JavaScript['sequence_BT'] = function(block) { + var statements_predicate_calls = Blockly.JavaScript.statementToCode(block, 'PREDICATE_CALLS'); + // TODO: Assemble JavaScript into code variable. + var code = '(not ' + statements_predicate_calls.trim() + ')'; +}; + +Blockly.JavaScript['condition_BT'] = function(block) { + var statements_predicate_calls = Blockly.JavaScript.statementToCode(block, 'PREDICATE_CALLS'); + // TODO: Assemble JavaScript into code variable. + var code = '(not ' + statements_predicate_calls.trim() + ')'; +}; + +Blockly.JavaScript['action_BT'] = function(block) { + var statements_predicate_calls = Blockly.JavaScript.statementToCode(block, 'PREDICATE_CALLS'); + // TODO: Assemble JavaScript into code variable. + var code = '(not ' + statements_predicate_calls.trim() + ')'; +}; + +Blockly.JavaScript['selector_BT'] = function(block) { + var statements_predicate_calls = Blockly.JavaScript.statementToCode(block, 'PREDICATE_CALLS'); + // TODO: Assemble JavaScript into code variable. + var code = '(not ' + statements_predicate_calls.trim() + ')'; }; \ No newline at end of file diff --git a/poc-blockly-bt/Content/VisualPDDL/js/vppdl_block_defs.js b/poc-blockly-bt/Content/VisualPDDL/js/vppdl_block_defs.js index 77e58e8..06596f9 100644 --- a/poc-blockly-bt/Content/VisualPDDL/js/vppdl_block_defs.js +++ b/poc-blockly-bt/Content/VisualPDDL/js/vppdl_block_defs.js @@ -818,4 +818,56 @@ Blockly.Blocks['not'] = { this.setTooltip(""); this.setHelpUrl(""); } +}; + +Blockly.Blocks['sequence_BT'] = { + init: function() { + this.appendStatementInput("PREDICATE_CALLS") + .setCheck("predicate_call") + .appendField("sequence"); + this.setPreviousStatement(true, "predicate_call"); + this.setNextStatement(true, "predicate_call"); + this.setColour(230); + this.setTooltip(""); + this.setHelpUrl(""); + } +}; + +Blockly.Blocks['condition_BT'] = { + init: function() { + this.appendStatementInput("PREDICATE_CALLS") + .setCheck("predicate_call") + .appendField("condition"); + this.setPreviousStatement(true, "predicate_call"); + this.setNextStatement(true, "predicate_call"); + this.setColour(120); + this.setTooltip(""); + this.setHelpUrl(""); + } +}; + +Blockly.Blocks['action_BT'] = { + init: function() { + this.appendStatementInput("PREDICATE_CALLS") + .setCheck("predicate_call") + .appendField("action"); + this.setPreviousStatement(true, "predicate_call"); + this.setNextStatement(true, "predicate_call"); + this.setColour(0); + this.setTooltip(""); + this.setHelpUrl(""); + } +}; + +Blockly.Blocks['selector_BT'] = { + init: function() { + this.appendStatementInput("PREDICATE_CALLS") + .setCheck("predicate_call") + .appendField("selector"); + this.setPreviousStatement(true, "predicate_call"); + this.setNextStatement(true, "predicate_call"); + this.setColour(60); + this.setTooltip(""); + this.setHelpUrl(""); + } }; \ No newline at end of file diff --git a/poc-blockly-bt/index.html b/poc-blockly-bt/index.html index 065bc32..d41d742 100644 --- a/poc-blockly-bt/index.html +++ b/poc-blockly-bt/index.html @@ -141,6 +141,13 @@ + + + + + + +
From 31605ed8d71bd3572f4974a075d24421e1dddf0f Mon Sep 17 00:00:00 2001 From: Shreyas Rajendra Poyrekar Date: Tue, 12 Jul 2022 16:09:45 -0500 Subject: [PATCH 3/3] WIP code gen and sep file for BT --- .../VisualPDDL/js/btpddl_block_codegen.js | 37 ++++++ .../VisualPDDL/js/btpddl_block_defs.js | 109 ++++++++++++++++++ .../VisualPDDL/js/vppdl_block_codegen.js | 24 ---- .../Content/VisualPDDL/js/vppdl_block_defs.js | 52 --------- poc-blockly-bt/index.html | 4 + 5 files changed, 150 insertions(+), 76 deletions(-) create mode 100644 poc-blockly-bt/Content/VisualPDDL/js/btpddl_block_codegen.js create mode 100644 poc-blockly-bt/Content/VisualPDDL/js/btpddl_block_defs.js diff --git a/poc-blockly-bt/Content/VisualPDDL/js/btpddl_block_codegen.js b/poc-blockly-bt/Content/VisualPDDL/js/btpddl_block_codegen.js new file mode 100644 index 0000000..b6854eb --- /dev/null +++ b/poc-blockly-bt/Content/VisualPDDL/js/btpddl_block_codegen.js @@ -0,0 +1,37 @@ +Blockly.JavaScript['sequence_BT'] = function(block) { + var text_name = block.getFieldValue('NAME'); + // TODO: Assemble JavaScript into code variable. + var code = 'seqnode_' + text_name + ' = py_trees.composites.Sequence("'+ text_name+'")'; + return code; +}; + +Blockly.JavaScript['condition_BT'] = function(block) { + var text_name = block.getFieldValue('NAME'); + var dropdown_type = block.getFieldValue('type'); + // TODO: Assemble JavaScript into code variable. + var code = ' ?' + text_name + ' - ' + dropdown_type; + return code; +}; + +Blockly.JavaScript['action_BT'] = function(block) { + var text_name = block.getFieldValue('NAME'); + var dropdown_type = block.getFieldValue('type'); + // TODO: Assemble JavaScript into code variable. + var code = ' ?' + text_name + ' - ' + dropdown_type; + return code; +}; + +Blockly.JavaScript['selector_BT'] = function(block) { + var text_name = block.getFieldValue('NAME'); + // TODO: Assemble JavaScript into code variable. + var code = 'selnode_' + text_name + ' = py_trees.composites.Selector("'+ text_name+'")'; + return code; +}; + + +Blockly.JavaScript['parallel_BT'] = function(block) { + var text_name = block.getFieldValue('NAME'); + // TODO: Assemble JavaScript into code variable. + var code = 'parnode_' + text_name + ' = py_trees.composites.Parallel("'+ text_name+'")'; + return code; +}; \ No newline at end of file diff --git a/poc-blockly-bt/Content/VisualPDDL/js/btpddl_block_defs.js b/poc-blockly-bt/Content/VisualPDDL/js/btpddl_block_defs.js new file mode 100644 index 0000000..cfef96e --- /dev/null +++ b/poc-blockly-bt/Content/VisualPDDL/js/btpddl_block_defs.js @@ -0,0 +1,109 @@ +'use strict'; + +goog.require('Blockly.Blocks'); +goog.require('Blockly'); + + // Selector composite UI +Blockly.Blocks['sequence_BT'] = { + init: function() { + // sequence composite behaviour name + this.appendDummyInput() + .appendField("sequence") + .appendField(new Blockly.FieldTextInput("name"), "NAME") + // sequence memory input UI + // when enabled if Tree RUNNING on the previous tick, resumes with the RUNNING child + this.appendDummyInput() + .appendField('memory') + .appendField(new Blockly.FieldDropdown([ + ['EN', 'EN_MEM'], + ['DIS', 'DIS_MEM'] + ]), 'MEMORY'); + // list of children to add in sequence + this.appendStatementInput("child") + .appendField("childs") + .setCheck("child"); + this.setPreviousStatement(true, "child"); + this.setNextStatement(true, "child"); + this.setColour(230); + this.setTooltip(""); + this.setHelpUrl(""); + } + }; + + Blockly.Blocks['condition_BT'] = { + init: function() { + this.appendStatementInput("PREDICATE_CALLS") + .setCheck("predicate_call") + .appendField("condition"); + this.setPreviousStatement(true, "predicate_call"); + this.setNextStatement(true, "predicate_call"); + this.setColour(120); + this.setTooltip(""); + this.setHelpUrl(""); + } + }; + + Blockly.Blocks['action_BT'] = { + init: function() { + this.appendStatementInput("PREDICATE_CALLS") + .setCheck("predicate_call") + .appendField("action"); + this.setPreviousStatement(true, "predicate_call"); + this.setNextStatement(true, "predicate_call"); + this.setColour(0); + this.setTooltip(""); + this.setHelpUrl(""); + } + }; + + // Selector composite UI + Blockly.Blocks['selector_BT'] = { + init: function() { + // selector composite behaviour name + this.appendDummyInput() + .appendField("selector") + .appendField(new Blockly.FieldTextInput("name"), "NAME") + // selector memory input UI + // when enabled if Tree RUNNING on the previous tick, resumes with the RUNNING child + this.appendDummyInput() + .appendField('memory') + .appendField(new Blockly.FieldDropdown([ + ['EN', 'EN_MEM'], + ['DIS', 'DIS_MEM'] + ]), 'MEMORY'); + // list of children to add + this.appendStatementInput("child") + .appendField("childs") + .setCheck("child"); + this.setPreviousStatement(true, "child"); + this.setNextStatement(true, "child"); + this.setColour(60); + this.setTooltip(""); + this.setHelpUrl(""); + } + }; + + // Parallel composite UI + Blockly.Blocks['parallel_BT'] = { + init: function() { + // parallel composite behaviour name + this.appendDummyInput() + .appendField("parallel") + .appendField(new Blockly.FieldTextInput("name"), "NAME"); + this.appendDummyInput() + .appendField('policy') + .appendField(new Blockly.FieldDropdown([ + ['optional', 'OP_POLICY'], + ['base', 'B_POLICY'] + ]), 'POLICCY'); + // list of children to add + this.appendStatementInput("child") + .appendField("childs") + .setCheck("child"); + this.setPreviousStatement(true, "child"); + this.setNextStatement(true, "child"); + this.setColour(180); + this.setTooltip(""); + this.setHelpUrl(""); + } + }; \ No newline at end of file diff --git a/poc-blockly-bt/Content/VisualPDDL/js/vppdl_block_codegen.js b/poc-blockly-bt/Content/VisualPDDL/js/vppdl_block_codegen.js index b30c8e9..dca1f50 100644 --- a/poc-blockly-bt/Content/VisualPDDL/js/vppdl_block_codegen.js +++ b/poc-blockly-bt/Content/VisualPDDL/js/vppdl_block_codegen.js @@ -122,28 +122,4 @@ Blockly.JavaScript['not'] = function(block) { // TODO: Assemble JavaScript into code variable. var code = '(not ' + statements_predicate_calls.trim() + ')'; return code; -}; - -Blockly.JavaScript['sequence_BT'] = function(block) { - var statements_predicate_calls = Blockly.JavaScript.statementToCode(block, 'PREDICATE_CALLS'); - // TODO: Assemble JavaScript into code variable. - var code = '(not ' + statements_predicate_calls.trim() + ')'; -}; - -Blockly.JavaScript['condition_BT'] = function(block) { - var statements_predicate_calls = Blockly.JavaScript.statementToCode(block, 'PREDICATE_CALLS'); - // TODO: Assemble JavaScript into code variable. - var code = '(not ' + statements_predicate_calls.trim() + ')'; -}; - -Blockly.JavaScript['action_BT'] = function(block) { - var statements_predicate_calls = Blockly.JavaScript.statementToCode(block, 'PREDICATE_CALLS'); - // TODO: Assemble JavaScript into code variable. - var code = '(not ' + statements_predicate_calls.trim() + ')'; -}; - -Blockly.JavaScript['selector_BT'] = function(block) { - var statements_predicate_calls = Blockly.JavaScript.statementToCode(block, 'PREDICATE_CALLS'); - // TODO: Assemble JavaScript into code variable. - var code = '(not ' + statements_predicate_calls.trim() + ')'; }; \ No newline at end of file diff --git a/poc-blockly-bt/Content/VisualPDDL/js/vppdl_block_defs.js b/poc-blockly-bt/Content/VisualPDDL/js/vppdl_block_defs.js index 06596f9..7a8caf9 100644 --- a/poc-blockly-bt/Content/VisualPDDL/js/vppdl_block_defs.js +++ b/poc-blockly-bt/Content/VisualPDDL/js/vppdl_block_defs.js @@ -819,55 +819,3 @@ Blockly.Blocks['not'] = { this.setHelpUrl(""); } }; - -Blockly.Blocks['sequence_BT'] = { - init: function() { - this.appendStatementInput("PREDICATE_CALLS") - .setCheck("predicate_call") - .appendField("sequence"); - this.setPreviousStatement(true, "predicate_call"); - this.setNextStatement(true, "predicate_call"); - this.setColour(230); - this.setTooltip(""); - this.setHelpUrl(""); - } -}; - -Blockly.Blocks['condition_BT'] = { - init: function() { - this.appendStatementInput("PREDICATE_CALLS") - .setCheck("predicate_call") - .appendField("condition"); - this.setPreviousStatement(true, "predicate_call"); - this.setNextStatement(true, "predicate_call"); - this.setColour(120); - this.setTooltip(""); - this.setHelpUrl(""); - } -}; - -Blockly.Blocks['action_BT'] = { - init: function() { - this.appendStatementInput("PREDICATE_CALLS") - .setCheck("predicate_call") - .appendField("action"); - this.setPreviousStatement(true, "predicate_call"); - this.setNextStatement(true, "predicate_call"); - this.setColour(0); - this.setTooltip(""); - this.setHelpUrl(""); - } -}; - -Blockly.Blocks['selector_BT'] = { - init: function() { - this.appendStatementInput("PREDICATE_CALLS") - .setCheck("predicate_call") - .appendField("selector"); - this.setPreviousStatement(true, "predicate_call"); - this.setNextStatement(true, "predicate_call"); - this.setColour(60); - this.setTooltip(""); - this.setHelpUrl(""); - } -}; \ No newline at end of file diff --git a/poc-blockly-bt/index.html b/poc-blockly-bt/index.html index d41d742..9da51d6 100644 --- a/poc-blockly-bt/index.html +++ b/poc-blockly-bt/index.html @@ -30,6 +30,9 @@ + + + @@ -144,6 +147,7 @@ +