7.1 Добавление динамических параметров к вашим собственным узлам

Добавление поддержки динамической реконфигурации к вашим собственным узлам не является сложным и рассматривается как для C++, так и для Python в пошаговых руководствах по динамической реконфигурации на Ros Wiki. Здесь мы рассмотрим эти концепции, используя в качестве примера имитатор поддельной батареи

7.1.1 Создание .cgf файла

Каждый параметр, которым вы хотите управлять динамически, должен быть указан в поле .cfg для вашего узла. Эти конфигурационные файлы находятся в подкаталоге cfg пакета, содержащего ваш узел. Файл cfg для поддельного симулятора батареи называется Battery Simulator.cfg и живет в каталоге rbx2_utils/cfg. Давайте теперь взглянем на этот файл:

1 #!/usr/bin/env python
2
3 PACKAGE = "rbx2_utils"
4
5 from dynamic_reconfigure.parameter_generator_catkin import * 6
7 gen = ParameterGenerator()
8
9 gen.add("battery_runtime", int_t, 0, "Battery runtime in seconds", 30, 1, 7200)
10
11 gen.add("new_battery_level", int_t, 0, "New battery level", 100, 0, 100)
12
13 exit(gen.generate(PACKAGE, "battery_simulator", "BatterySimulator"))

Как вы можете видеть, файл довольно прост. Сначала мы устанавливаем переменную package в пакет, в котором мы находимся. Затем мы импортируем библиотеку catkin dynamic reconfigure generator. Это позволяет нам создать объект Parameter Generator() и добавить пару целочисленных параметров. Строка 9 добавляет параметр battery_runtime со значением по умолчанию 60 секунд и диапазоном 1-7200 секунд. Строка 11 добавляет параметр new_battery_level со значением по умолчанию 100 и диапазоном 0-100. Общая форма функции add() выглядит следующим образом:

gen.add("name", type, level, "description", default, min, max)

Разберём, какие поля мы видим:

  • name - имя параметра в котировках Dynamic Reconfigure-201

  • type - тип сохраняемого значения, и может быть любым из int_t, double_t, str_t или book_to

  • level - битовая маска, которая позже будет передана в динамический обратный вызов реконфигурации. При вызове обратного вызова все значения уровня для параметров ORed, которые были изменены, объединяются вместе, и результирующее значение передается обратному вызову. Это может быть использовано для организации параметров в группы, такие как те, которые управляют датчиками, которые должны быть выключены или перезапущены при изменении параметра

  • description - строка, описывающая параметр

  • default - значение по умолчанию

  • min - минимальное значение (необязательно и не применяется к типам string и bool)

  • max - максимальное значение (необязательно и не применяется к типам string и bool)

Примечание: строка name не может быть значением "i", "state" или "name", как описано в этом выпуске.

Последняя строка файла cfg должна быть написана тщательно:

13 exit(gen.generate(PACKAGE, "battery_simulator", "BatterySimulator"))

Первая строка внутри кавычек должна совпадать с именем узла, который мы настраиваем, но без расширения файла. Вторая строка внутри кавычек должна быть именем самого файла cfg без указания расширения .cfg.

7.1.2 Создание исполняемого файла .cfg

После того, как файл cfg будет создан, он должен быть выполнен с помощью следующих команд:

$ roscd rbx2_utils/cfg
$ chmod a+x BatterySimulator.cfg

7.1.3 Настройка файла CMakeLists.txt

Любой пакет, содержащий динамически настраиваемые узлы, должен иметь несколько строк конфигурации, добавленных к файлу CMakeLists.txt.. Эти строки заставляют catkin_make запускать файл cfg, который генерирует необходимый код времени выполнения. Для симулятора батареи.файл cfg, который будет запущен при создании пакета rbx2_utils, следующие строки должны были бы появиться в списках CMakeLists.txt:

1 cmake_minimum_required(VERSION 2.8.3)
2
3 project(rbx2_utils)
4
5 find_package(catkin REQUIRED COMPONENTS dynamic_reconfigure)
6
7 generate_dynamic_reconfigure_options(
8 cfg/BatterySimulator.cfg
9 cfg/Pub3DTarget.cfg
10 )
11
12 catkin_package(DEPENDS CATKIN DEPENDS dynamic_reconfigure)

Макрос find_package() гарантирует, что мы включим пакет dynamic_reconfigure и все его поддерживающие зависимости. Макрос generate_dynamic_reconfigure_options() принимает пути ко всем файлам cfg (относительно каталога пакета), которые мы хотим построить. Здесь мы использовали файл BatterySimulator.cfg, который мы уже обсуждали, а также второй файл cfg (Pub3DTarget.cfg) , который мы будем использовать для другого узла в последующих главах.

Наконец, мы включаем пакет dynamic_reconfigure в макрос catkin_package().

7.1.4 Сборка пакета

После добавления файла cfg или внесения изменений в существующий файл запустите catkin_make как обычно:

$ cd ~/catkin_ws
$ catkin_make

Last updated