You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
URML (urml.dev) is a small, Apache-2.0 language for describing robot intent: a person writes a sentence, URML turns it into a typed primitive, validates it against the robot's declared capabilities and a safety envelope, then dispatches. URML has a Layer-3 of its own -- programs are trees of sequence / parallel / branch / retry over typed, validated primitives -- so I'm writing to the people who build the dominant behavior-tree engine to ask how the two should meet.
Nothing here asks the project to adopt, host, or maintain anything. This is a request for comment, and genuinely a design question.
Two seams, both honest: (1) URML lowers to a tree -- a validated URML program's sequence/parallel/branch/retry compiles to a BehaviorTree.CPP tree, each primitive a leaf, and URML supplies what BT leaves don't check on their own (typed args, capability match, safety envelope, all verified before the tree runs). (2) A leaf dispatches a validated primitive -- a custom BT.CPP / BT.ROS2 node wraps one URML primitive so a hand-authored tree gets validate-before-actuate per leaf. The acid test holds: a behavior tree is control flow; URML is the typed, capability-checked intent the flow carries.
Two real questions: (1) Which seam is more natural -- URML compiling to a BT.CPP tree, or a BT leaf node that dispatches a validated URML primitive? (2) Does URML's sequence/parallel/branch/retry map cleanly onto BT.CPP control nodes (Sequence/Parallel/Fallback/RetryUntilSuccessful), or are there mismatches?
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
Uh oh!
There was an error while loading. Please reload this page.
-
Hi BehaviorTree.CPP community,
URML (urml.dev) is a small, Apache-2.0 language for describing robot intent: a person writes a sentence, URML turns it into a typed primitive, validates it against the robot's declared capabilities and a safety envelope, then dispatches. URML has a Layer-3 of its own -- programs are trees of sequence / parallel / branch / retry over typed, validated primitives -- so I'm writing to the people who build the dominant behavior-tree engine to ask how the two should meet.
Nothing here asks the project to adopt, host, or maintain anything. This is a request for comment, and genuinely a design question.
Two seams, both honest: (1) URML lowers to a tree -- a validated URML program's sequence/parallel/branch/retry compiles to a BehaviorTree.CPP tree, each primitive a leaf, and URML supplies what BT leaves don't check on their own (typed args, capability match, safety envelope, all verified before the tree runs). (2) A leaf dispatches a validated primitive -- a custom BT.CPP / BT.ROS2 node wraps one URML primitive so a hand-authored tree gets validate-before-actuate per leaf. The acid test holds: a behavior tree is control flow; URML is the typed, capability-checked intent the flow carries.
Two real questions: (1) Which seam is more natural -- URML compiling to a BT.CPP tree, or a BT leaf node that dispatches a validated URML primitive? (2) Does URML's sequence/parallel/branch/retry map cleanly onto BT.CPP control nodes (Sequence/Parallel/Fallback/RetryUntilSuccessful), or are there mismatches?
Full write-up: https://github.com/URML-MARS/URML/blob/main/docs/rfcs/0470-behaviortree-cpp-outreach.md
Thanks for BehaviorTree.CPP; the de-facto robotics BT engine is exactly where this Layer-3 interop question should be asked.
Ido Yahalomi (URML, greenvh@gmail.com)
AI-assisted prose, maintainer-reviewed before posting (see VIBE.md). Human-only correspondence available on request.
Beta Was this translation helpful? Give feedback.
All reactions