Skip to content

Question: Type-safety of the blackboard values #569

Closed

Description

@MithunKinarullathil

Hi,

From the documentation I learned that the values in the blackboard are type-safe. Further reading I saw this section

BehaviorTree.CPP supports automatically converting strings into common types, such as int, long, double, bool, NodeStatus, etc. User-defined types can be supported easily as well.

My doubt this: are the values in the blackboard always stored as strings? If so, is there a way to guarantee type safety?

eg: Image a key:value pair with std:int type and value 3. In another action node, later on in the tree, would I be able to save an std:float into the same key?

Thank you for your time.

Activity

  1. facontidavide commented on May 26, 2023

    @facontidavide
    Collaborator

    great question!

    BB storage

    Storage is done with a variant of std::any. if you are unfamiliar with it, I strongly recommend you learn how that works.
    std::any implements type erasure (store any type), but preserving the original object AND its type.

    NOW, in addition to any, we do:

    • small object optimization to prevent allocating memory in the heap if the object is 16 bytes or less.
    • smart casting. For instance, a regular std::any would complain if you try to cast uint16_t to int32_t, but instead I check if there is any numberical error in the casting, and if there isn't, it is allowed.

    But wait, there is more.

    If you DO KNOW the type of a blackboard entry / port, we will automatically TRY to convert the string to that type.

    Answer

    I am assuming you will use the provided getInput and setOutput interfaces (as you should).

    You can not connect a OutputPort<float> to InputPort<int> because they haven't the same type.

    If everything works as intended, you should get an exception during the creation of the tree.

    You can do, anyway getInput<float>() of an integer port, if that is not causing numerical cancellation.

  2. MithunKinarullathil commented on May 26, 2023

    @MithunKinarullathil
    ContributorAuthor

    @facontidavide Great, thanks a lot for clearing that up.

  3. locked and limited conversation to collaborators on Jul 21, 2023
  4. converted this issue into a discussion #614 on Jul 21, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    questionFurther information is requested

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions