Применение параметров в программах
Рассмотрим простой пример создания .launch файла с различными параметрами
<launch>
<node pkg="base_ros" type="temp_topic_publisher.py" name="temp_topic_publisher" output="screen" respawn="false">
<param name="my_integer" type="int" value="2" />
<param name="my_float" type="double" value="3.14" />
<param name="my_string" type="str" value="hello" />
</node>
</launch>
Мы самостоятельно определили значение наших параметров, которые и хотим получать в программе.
Для python получение значения данного параметра выглядит очень просто:
int_var = rospy.get_param("~my_integer", 0)
float_var = rospy.get_param("~my_float", 8.5)
string_var = rospy.get_param("~my_string", "default value")
Вторым параметром функции мы задаем значение по умолчанию, для того чтобы значение переменных всегда были определенны, даже если они не указаны в XML файле.
~ тильда перед название параметра означает, что параметр находится в пространстве имен запущенной программы.
Далее модернизируем temp_topic_publisher.py следующим образом:
#! /usr/bin/env python3
# -*- coding: utf-8 -*-
import rospy
from std_msgs.msg import Float32
rospy.init_node('temp_publisher')
int_var = rospy.get_param("~my_integer", 0)
float_var = rospy.get_param("~my_float", 8.5)
string_var = rospy.get_param("~my_string", "default value")
rospy.loginfo("Int: %s, Float: %s, String: %s", int_var, float_var, string_var)
pub = rospy.Publisher('/cpu_temp', Float32, queue_size=1)
temp = Float32()
def getCPUTemp():
data = open('/sys/class/thermal/thermal_zone0/temp', 'r').read()
return round(float(int(data)/1000.0),1)
while not rospy.is_shutdown():
temp.data = getCPUTemp()
pub.publish(temp)
rospy.sleep(int_var)
Запустим наш temp_topic_publisher.launch:
