Параметры 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