3.10.7 Добавление и удаление задач
Одной из ключевых особенностей деревьев поведения является возможность добавлять или удалять модели поведения по модульному принципу. Например, предположим, что мы хотим добавить задачу "мытье посуды" к роботу-уборщику дома, когда он находится на кухне. Все, что нам нужно сделать - определить эту новую задачу и добавить ее в наш список задач в верхней части нашего сценария. Нет необходимости беспокоиться о том, как эта новая задача взаимодействует с другими задачами в дереве поведения. Это просто становится еще одной дочерней задачей в итераторе TASK_LIST для кухни.
И наоборот, предположим, что у вашего робота нет док-станции, и вы хотите исключить задачу подзарядки из дерева поведения, но все равно хотите получать уведомления, когда батарея разряжена. Тогда мы можем просто прописать строку, которая добавляет поведение подзарядки к задаче «СТОЯТЬ СПОКОЙНО», а затем добавить новую задачу, которая отправляет нам электронное письмо или кричит о помощи.
Добавление или удаление узлов или даже целых ветвей дерева поведения можно динамически производить даже во время выполнения роботом задач. Пример сценария add_remove_tree.py демонстрирует эту концепцию. Этот сценарий идентичен сценарию parallel_tree.py из предыдущего раздела за исключением того, что в конце чередующихся сквозь дерево циклов мы удаляем задачу подсчета так, чтобы отображались только слова. На следующем цикле мы добавим обратно задачу подсчета. Вот ключевой блок кода, который выполняет эту работу:
Попробуйте выполнить сценарий с помощью команды:
Выходные данные должны начинаться так же, как и в сценарии parallel_tree.py за исключением того, что на последовательных циклах через сценарий задача подсчета будет опущена, а затем появится снова, и так далее.
Нетрудно представить себе дерево поведения, в котором узлы или ветви добавляются или отсекаются на основе опыта робота, чтобы лучше адаптироваться к существующим условиям. Например, можно добавить или удалить целые ветви дерева в зависимости от того, в какой комнате находится робот, или переключить его поведение с уборки на патрулирование, просто обрезав одну ветвь дерева и добавив другую.
Last updated
Was this helpful?