Всем привет, я милая рыбка. Веб-сайт Yuxiang ROS почти готов, и я скоро встречусь с вами~
В этом разделе Сяоюй расскажет вам, как с помощью Python превратить цикл таймера написания романов в узле Ли Си в параметр, который можно динамически изменять.
1. Написание кода
Откройте vscode, откройте li4.py и сосредоточьтесь на следующей строке кода.
class Li4Node(Node)
Эта строка программы сообщает нам, что Li4Node наследуется от rclpy.node.Node. Так Ли Си получил способность, связанную с параметрами:
имя функции | описывать |
---|---|
declare_parameter | объявить и инициализировать параметр |
declare_parameters | объявить и инициализировать кучу параметров |
get_parameter | Получить параметр по имени параметра |
get_parameters | Получить несколько параметров по нескольким именам параметров |
set_parameters | Установить значение набора параметров |
больше функций | docs.ROS2.org/latest/API/… |
Чтобы завершить модификацию параметров скорости записи Li Si, нам нужно сделать два шага, объявив параметры и получив параметры
1.1 Объявление параметров
Исправлять__init__
функции, добавьте следующую строку кода в конце
# 声明参数,参数名字,默认值
self.declare_parameter("write_timer_period",5
1.2 Получить и установить параметры
Здесь мы делаем это в функции обратного вызова таймера и обновляем ее каждый раз, когда заканчиваем писать роман.
Исправлятьtimer_callback
функцию, добавьте две строки кода внизу
# 回调之后更新回调周期
timer_period = self.get_parameter('write_timer_period').get_parameter_value().integer_value
# 更新回调周期
self.timer.timer_period_ns = timer_period * (1000*1000*1000)
Полный код выглядит следующим образом:
def timer_callback(self):
msg = String()
msg.data = '第%d回:潋滟湖 %d 次偶遇胡艳娘' % (self.i,self.i)
self.write.publish(msg) #将小说内容发布出去
self.get_logger().info('李四:我发布了艳娘传奇:"%s"' % msg.data)
#打印一下发布的数据,供我们看
self.i += 1 #章节编号+1
# 回调之后更新回调周期
timer_period = self.get_parameter('write_timer_period').get_parameter_value().integer_value
# 更新回调周期
self.timer.timer_period_ns = timer_period * (1000*1000*1000)
Чтобы немного объяснить, новые две строки кода используются для получения текущего значения параметра через имя параметра и преобразования его в целочисленные данные.
Другая строка используется для обновления периода обратного вызова (для этого вы можете изменить переменную-член таймера timer_period_ns)
2. Тест
2.1 Компилятор
colcon build --packages-select village_li
2.2 Четыре узла багажа
ros2 run village_li li4_node
2.3 Используйте тест командной строки ros2 param
2.3.1 Просмотр списка параметров
ros2 param list
2.3.2 Просмотр описания
ros2 param describe /wang2 novel_price
2.3.3 Получить значение параметра
ros2 param get /wang2 novel_price
2.3.4 Установите значение параметра для увеличения цены
Установите здесь значение 1, чтобы Ли Си могла написать главу за одну секунду.
ros2 param set li4 write_timer_period 1
Некоторые друзья сказали, как я узнаю, стал ли Ли Си быстрее, здесь Сяоюй расскажет об очень хорошем инструменте командной строки :tropical_drink:ros2 topic hz <topic-name>
ros2 topic hz /sexy_girl
Эта команда позволяет нам увидеть информацию о частоте темы.
Сравнивая скорость до и после настройки, она явно ускорена.
Небольшая мысль, мы установили период 5, почему курс здесь 0,200, а позже мы меняем период на 1, почему курс продолжает расти?
3. Резюме
Используя Python для работы с параметрами в этом разделе, я считаю, что вы, такой же милый, как Сяоюй, освоили метод использования параметров в узлах Python. В следующем разделе Xiaoyu расскажет вам об использовании параметров в узлах C++.
References
[1]
Узел — документация по rclpy 0.6.1 (ros2.org):docs.ROS2.org/latest/API/…