ros_bt_py Logo
  • Getting Started
    • Installation
      • Installing from binary packages
      • Installing from source
    • Running ros_bt_py
      • Launch Options
      • Stand-alone Web Interface
  • Tutorials
    • Basic Tutorial
      • Starting up ros_bt_py
      • Examining the Interface
        • Menu Bars
        • Package Loader
        • Node List
        • Editor Window
        • Node Menu
      • Writing your first BT
        • 1. Make sure the Tree is not currently running
        • 2. Add a control flow node
        • 3. Add a leaf node to the tree
        • 4. Modify the Constant node
        • 5. Add a second Constant and a processing step
        • 6. Connecting the Data Wirings
        • 7. Run the finished tree
      • Working with bt_py
        • Tree Execution
        • Nodes
        • Data Graph
        • Working with larger trees
      • Understanding Flow Control
        • Basic Control Flows
        • Advanced Control Flows
        • Regarding Memory
      • Writing a more complex BT
        • 1. Adding a branching path
        • 2. Introducing randomized Outputs
      • Using Subtrees
        • Subtree I/O
        • Using a Subtree in our example tree
      • Using ROS Interfaces with ros_bt_py
        • Building and processing messages
        • Topics
        • Services and Actions
    • Advanced Tutorial
      • Using OptionRefs
        • Defining OptionRefs in the NodeConfig
  • Creating Nodes
    • Node Data Types
      • Available Data Types
      • Value Access
      • Value Serialization
      • Generic data types
    • Creating a Node Class package
      • Package Creation
      • Example Package
    • Creating Node Classes
      • 1. Create a new class
      • 2. Fill in the NodeConfig
      • 3. Implement the _do_ methods
      • 4. Test your node!
    • Testing Node Classes
      • Creating a Test Folder and Unit Test Script
      • Running your Unit Tests
      • Adding your Unit Tests to CMakeLists.txt
      • Adding your Unit Tests to setup.py
      • Running Tests via colcon
  • Configuration & Utilities
    • Advanced Launch Configuration
      • Using Custom Node Classes in a Project
      • Other Important Launch Arguments
    • Utility Functions
      • What?
      • Why?
      • How?
  • API
    • ros_bt_py.node module
      • Decorator
      • FlowControl
      • Leaf
      • Node
        • Node.add_child()
        • Node.add_extra_inputs()
        • Node.add_extra_outputs()
        • Node.calculate_utility()
        • Node.check_if_in_invalid_state()
        • Node.data_flow_manager
        • Node.debug_manager
        • Node.from_msg()
        • Node.get_child_index()
        • Node.get_children_recursive()
        • Node.get_logger()
        • Node.get_subtree_msg()
        • Node.has_ros_node
        • Node.log_errors()
        • Node.logdebug()
        • Node.logerr()
        • Node.logfatal()
        • Node.logging_manager
        • Node.loginfo()
        • Node.logwarn()
        • Node.node_classes
        • Node.remove_child()
        • Node.reset()
        • Node.ros_node
        • Node.setup()
        • Node.shutdown()
        • Node.state
        • Node.subtree_manager
        • Node.tick()
        • Node.to_state_msg()
        • Node.to_structure_msg()
        • Node.untick()
      • define_bt_node()
      • increment_name()
      • load_node_module()
    • ros_bt_py.data_types module
      • BoolType
        • BoolType.is_compatible()
        • BoolType.serialize_type()
        • BoolType.type_identifier
      • BuiltinContainer
        • BuiltinContainer.set_value()
      • BytesType
        • BytesType.max_length
        • BytesType.type_identifier
      • DataContainer
        • DataContainer.allow_dynamic
        • DataContainer.allow_static
        • DataContainer.deserialize_value()
        • DataContainer.flag_updated()
        • DataContainer.from_msg()
        • DataContainer.get_runtime_type()
        • DataContainer.get_value()
        • DataContainer.get_value_as()
        • DataContainer.has_value()
        • DataContainer.is_compatible()
        • DataContainer.is_static
        • DataContainer.is_updated()
        • DataContainer.reset_updated()
        • DataContainer.reset_value()
        • DataContainer.serialize_type()
        • DataContainer.serialize_value()
        • DataContainer.set_value()
        • DataContainer.type_identifier
      • DictType
        • DictType.set_value()
        • DictType.type_identifier
      • FloatType
        • FloatType.lower_limit
        • FloatType.set_value()
        • FloatType.type_identifier
        • FloatType.upper_limit
      • GenericType
        • GenericType.get_value_field()
        • GenericType.is_compatible()
        • GenericType.serialize_type()
        • GenericType.set_value()
        • GenericType.type_identifier
        • GenericType.valid_types
      • IntType
        • IntType.lower_limit
        • IntType.type_identifier
        • IntType.upper_limit
      • IterableContainer
        • IterableContainer.is_compatible()
        • IterableContainer.max_length
        • IterableContainer.serialize_type()
        • IterableContainer.set_value()
        • IterableContainer.strict_length
      • IterableReferenceContainer
        • IterableReferenceContainer.max_length
        • IterableReferenceContainer.strict_length
      • ListType
        • ListType.set_value()
        • ListType.type_identifier
      • NumericContainer
        • NumericContainer.is_compatible()
        • NumericContainer.lower_limit
        • NumericContainer.max_value
        • NumericContainer.min_value
        • NumericContainer.serialize_type()
        • NumericContainer.set_value()
        • NumericContainer.upper_limit
      • PathType
        • PathType.set_value()
        • PathType.type_identifier
      • ReferenceContainer
        • ReferenceContainer.flag_updated()
        • ReferenceContainer.get_runtime_type()
        • ReferenceContainer.get_value()
        • ReferenceContainer.has_value()
        • ReferenceContainer.is_compatible()
        • ReferenceContainer.is_updated()
        • ReferenceContainer.reset_updated()
        • ReferenceContainer.reset_value()
        • ReferenceContainer.serialize_type()
        • ReferenceContainer.set_type_map()
        • ReferenceContainer.set_value()
      • ReferenceDictType
        • ReferenceDictType.type_identifier
      • ReferenceListType
        • ReferenceListType.type_identifier
      • ReferenceType
        • ReferenceType.type_identifier
      • RosActionName
        • RosActionName.interface_kind
      • RosActionType
        • RosActionType.interface_kind
      • RosComponentType
        • RosComponentType.interface_kind
      • RosContainer
        • RosContainer.from_msg()
        • RosContainer.interface_id
        • RosContainer.interface_kind
        • RosContainer.is_compatible()
        • RosContainer.serialize_type()
      • RosMessage
        • RosMessage.get_fields_and_field_types()
      • RosMessageType
        • RosMessageType.get_element_fields()
        • RosMessageType.interface_kind
        • RosMessageType.is_compatible()
        • RosMessageType.message_type
        • RosMessageType.serialize_type()
        • RosMessageType.set_value()
        • RosMessageType.type_identifier
      • RosNameContainer
        • RosNameContainer.type_identifier
      • RosServiceName
        • RosServiceName.interface_kind
      • RosServiceType
        • RosServiceType.interface_kind
      • RosTopicName
        • RosTopicName.interface_kind
      • RosTopicType
        • RosTopicType.interface_kind
      • RosTypeContainer
        • RosTypeContainer.get_value_field()
        • RosTypeContainer.set_value()
        • RosTypeContainer.type_identifier
      • StringContainer
        • StringContainer.is_compatible()
        • StringContainer.max_length
        • StringContainer.serialize_type()
        • StringContainer.set_value()
        • StringContainer.valid_values
      • StringType
        • StringType.type_identifier
      • TypeContainerMixin
        • TypeContainerMixin.get_value_field()
      • deserialize_class()
      • deserialize_type_map_value()
      • get_iotype_for_dict()
      • get_iotype_for_msg()
      • get_message_field_io_type()
      • match_dict_to_valid_types()
      • register_io_type()
      • serialize_class()
      • serialize_type_map()
      • serialize_type_map_value()
    • ros_bt_py.node_config module
      • NodeConfig
        • NodeConfig.copy()
        • NodeConfig.extend()
      • NodeDataMap
      • NodeInputMap
        • NodeInputMap.any_updated()
        • NodeInputMap.get_value()
        • NodeInputMap.get_value_as()
      • NodeOutputMap
        • NodeOutputMap.set_multiple_values()
        • NodeOutputMap.set_value()
    • ros_bt_py.helpers module
      • BTNodeState
        • BTNodeState.ASSIGNED
        • BTNodeState.BROKEN
        • BTNodeState.FAILED
        • BTNodeState.IDLE
        • BTNodeState.PAUSED
        • BTNodeState.RUNNING
        • BTNodeState.SHUTDOWN
        • BTNodeState.SUCCEEDED
        • BTNodeState.UNASSIGNED
        • BTNodeState.UNINITIALIZED
      • float_limits_dict()
      • int_limits_dict()
      • rgetattr()
      • rsetattr()
    • ros_bt_py.ros_helpers module
      • get_interface_name()
      • get_message_constant_fields()
      • publish_message_channels()
      • ros_to_uuid()
      • uuid_to_ros()
      • wiring_has_id()
    • ros_bt_py.exceptions module
      • AssignmentException
      • BehaviorTreeException
      • MigrationException
      • MissingParentError
      • NodeConfigError
      • NodeStateError
      • TreeTopologyError
    • ros_bt_py.tree_exec_manager module
      • TreeExecManager
        • TreeExecManager.clear()
        • TreeExecManager.clear_diagnostics_name()
        • TreeExecManager.control_execution()
        • TreeExecManager.data_flow_manager
        • TreeExecManager.data_to_msg()
        • TreeExecManager.debug_manager
        • TreeExecManager.diagnostic_callback()
        • TreeExecManager.find_root()
        • TreeExecManager.get_logger()
        • TreeExecManager.instantiate_node_from_msg()
        • TreeExecManager.load_tree()
        • TreeExecManager.load_tree_from_path()
        • TreeExecManager.logging_manager
        • TreeExecManager.name
        • TreeExecManager.publish_data()
        • TreeExecManager.publish_state()
        • TreeExecManager.publish_structure()
        • TreeExecManager.reload_tree()
        • TreeExecManager.root_id
        • TreeExecManager.set_diagnostics_name()
        • TreeExecManager.set_publish_data()
        • TreeExecManager.set_publish_subtrees()
        • TreeExecManager.state
        • TreeExecManager.state_to_msg()
        • TreeExecManager.structure_to_msg()
        • TreeExecManager.subtree_manager
        • TreeExecManager.tick()
        • TreeExecManager.tick_frequency_hz
        • TreeExecManager.tick_report_exceptions()
        • TreeExecManager.tree_id
        • TreeExecManager.validate_wiring()
        • TreeExecManager.wirings
      • is_edit_service()
      • load_tree_from_file()
      • parse_tree_yaml()
    • ros_bt_py.tree_edit_manager module
      • TreeEditManager
        • TreeEditManager.add_node()
        • TreeEditManager.add_node_at_index()
        • TreeEditManager.change_tree_name()
        • TreeEditManager.find_nodes_in_cycles()
        • TreeEditManager.generate_subtree()
        • TreeEditManager.get_subtree()
        • TreeEditManager.morph_node()
        • TreeEditManager.move_node()
        • TreeEditManager.remove_node()
        • TreeEditManager.replace_node()
        • TreeEditManager.set_options()
        • TreeEditManager.unwire_data()
        • TreeEditManager.wire_data()
      • get_error_message()
      • get_success()
    • ros_bt_py.data_flow_manager module
      • Connection
        • Connection.source_key
        • Connection.target_id
        • Connection.target_key
      • DataFlowManager
        • DataFlowManager.connections
        • DataFlowManager.get_wiring_data()
        • DataFlowManager.incoming_data
        • DataFlowManager.initialize()
        • DataFlowManager.nodes
        • DataFlowManager.outgoing_data
        • DataFlowManager.push_incoming_data()
        • DataFlowManager.push_outputs()
    • ros_bt_py.logging_manager module
      • LoggingManager
        • LoggingManager.debug()
        • LoggingManager.error()
        • LoggingManager.fatal()
        • LoggingManager.get_ros_log_name()
        • LoggingManager.get_ros_logger()
        • LoggingManager.info()
        • LoggingManager.log()
        • LoggingManager.log_level_inactive()
        • LoggingManager.set_min_log_level()
        • LoggingManager.set_tree_id()
        • LoggingManager.set_tree_name()
        • LoggingManager.warn()
    • ros_bt_py.debug_manager module
      • DebugManager
        • DebugManager.report_state()
        • DebugManager.report_tick()
        • DebugManager.set_collect_node_diagnostics()
ros_bt_py
  • Creating Nodes

Creating Nodes

  • Node Data Types
  • Creating a Node Class package
  • Creating Node Classes
  • Testing Node Classes
Previous Next

© Copyright 2025, FZI Forschungszentrum Informatik.

Built with Sphinx using a theme provided by Read the Docs.