Применение параметров в программах

Рассмотрим простой пример создания .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:

results matching ""

    No results matching ""