Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Параметры ROS (Python)

Что вы узнаете в этом разделе:

  • Как объявить параметр в Python программе
  • Как читать значения параметров в коде
  • Как установить значение параметра по умолчанию
  • Как изменять параметры во время работы программы
  • Как настроить параметры через launch-файлы
  • Основные методы работы с параметрами в rclpy

Объявление и использование параметров в Python-коде ROS2

Рассмотрим как использовать параметры при разработке на python

В пакете ros_base_course создайте новый python скрипт simple_params.py

import rclpy
from rclpy.node import Node

class MinimalParam(Node):
    def __init__(self):
        super().__init__('minimal_param_node')

        self.declare_parameter('my_parameter', 'world')
        self.timer = self.create_timer(1, self.timer_callback)

    def timer_callback(self):
        my_param = self.get_parameter('my_parameter').get_parameter_value().string_value
        self.get_logger().info('Hello %s!' % my_param)

def main():
    rclpy.init()
    node = MinimalParam()
    rclpy.spin(node)

if __name__ == '__main__':
    main()

Данная программа создает таймер self.timer который раз в секунду запускает функцию timer_callback для чтения и вывода параметра my_parameter на экран.

Рассмотрим основной код, который касается обработки параметров.

#Инициализация параметра. 
#Мы указываем имя параметра и значение параметра по умолчанию
self.declare_parameter('my_parameter', 'world')

#Чтение параметров происходит в строчке 
my_param = self.get_parameter('my_parameter').get_parameter_value().string_value

Запустим данную программу

python3 ./simple_params.py
===
[INFO] [1758716765.167893879] [minimal_param_node]: Hello world!
[INFO] [1758716766.167960852] [minimal_param_node]: Hello world!

Мы видим сообщение Hello world!, которое выводится раз в секунду.

Посмотрим список параметров робота

ros2 param list
===
/minimal_param_node:
  my_parameter
  start_type_description_service
  use_sim_time

Мы видим созданный параметр my_parameter ноды minimal_param_node

Установим новое значение параметра

ros2 param set minimal_param_node my_parameter "Robot"
Set parameter successful

В консоли с запущенной программой изменился вывод сообщения world->Robot

[INFO] [1758716966.602924761] [minimal_param_node]: Hello world!
[INFO] [1758716966.602924761] [minimal_param_node]: Hello world!
[INFO] [1758716967.602871050] [minimal_param_node]: Hello Robot!
[INFO] [1758716968.602862135] [minimal_param_node]: Hello Robot!

Настройка параметров через launch файл

Подготовка скрипта для запуска

Удостоверимся, что мы добавили в инструкцию сборки, новую точку входа для программы simple_params.py в файл setup.py

    entry_points={
        'console_scripts': [
            ...
            'simple_params = ros_base_course.simple_params:main'
        ],

Пересобираем пакет и запустим программу используя ros2 run

cd ~/user_ws
colcon build --packages-select ros_base_course --symlink-install
ros2 run ros_base_course simple_params 
===
[INFO] [1758722226.201036205] [minimal_param_node]: Hello world!
[INFO] [1758722227.180272894] [minimal_param_node]: Hello world!

Нода запускается.

Создание launch файла

В директории launch создадим файл для тестирования, запуска ноды, сначала без параметра simple_params.launch.xml

<launch>
    <node pkg="ros_base_course" exec="simple_params" name="minimal_param_node" output="screen"/>
</launch>

Мы уже настроили директорию launch для глобальной настройки ROS, но для нового launch файла необходимо заново пересобрать пакет.

cd ~/user_ws
colcon build --packages-select ros_base_course --symlink-install

Запустим ноду через launch файл

ros2 launch ros_base_course simple_params.launch.xml
[INFO] [launch]: All log files can be found below /home/pi/.ros/log/2025-09-24-17-03-07-239472-turtlebro01-4041
[INFO] [launch]: Default logging verbosity is set to INFO
[INFO] [simple_params-1]: process started with pid [4044]
[simple_params-1] [INFO] [1758722588.961406715] [minimal_param_node]: Hello world!
[simple_params-1] [INFO] [1758722589.940741468] [minimal_param_node]: Hello world!

Мы видим сообщение Hello world!. Добавим новый параметр в настройку запуска ноды <param name="my_parameter" value="Robot"/>

<launch>
    <node pkg="ros_base_course" exec="simple_params" name="minimal_param_node" output="screen">
        <param name="my_parameter" value="Robot"/>
    </node>
</launch>

Запустим и проверим, что параметр установлен при запуске программы.

ros2 launch ros_base_course simple_params.launch.xml
[INFO] [launch]: All log files can be found below /home/pi/.ros/log/2025-09-24-17-35-30-192083-turtlebro01-4606
[INFO] [launch]: Default logging verbosity is set to INFO
[INFO] [simple_params-1]: process started with pid [4609]
[simple_params-1] [INFO] [1758724531.906593599] [minimal_param_node]: Hello Robot!
[simple_params-1] [INFO] [1758724532.886221930] [minimal_param_node]: Hello Robot!

Мы видим сообщение c установленным параметром Hello Robot!

Дополнительная информация

Официальная документация по работе с параметрами в python https://docs.ros.org/en/jazzy/Tutorials/Beginner-Client-Libraries/Using-Parameters-In-A-Class-Python.html

Создание динамических параметров https://docs.ros.org/en/jazzy/Tutorials/Intermediate/Monitoring-For-Parameter-Changes-Python.html