Как получить параметр ROS xml из файла запуска с помощью Python

У меня есть файл запуска с расширением xml, и я хотел бы получить значение параметра. Этот файл запуска называется ardrone.launch.

<!-- This is a sample lanuch file, please change it based on your needs -->
<launch>
    <node name="ardrone_driver" pkg="ardrone_autonomy" type="ardrone_driver" output="screen" clear_params="true">
        <param name="outdoor" value="1" />
        <param name="flight_without_shell" value="1" />
        <param name="max_bitrate" value="4000" />
        <param name="bitrate" value="4000" />
        <param name="navdata_demo" value="0" />
        <param name="altitude_max" value="10000" />
        <param name="altitude_min" value="50" />
        <param name="euler_angle_max" value="0.35" />
        <param name="control_vz_max" value="2000" />
        <param name="control_yaw" value="1.75" />
    </node>
</launch>

Например, я хотел бы получить значение из height_max, height_min и других, используя python. Я должен добавить, что этот файл находится в каталоге с именем launch, а файл, к которому я его вызываю, находится в каталоге с именем scripts, а сценарии и запуск находятся в одном каталоге.


person lmiguelvargasf    schedule 26.06.2015    source источник
comment
Прочитав ваш вопрос еще раз, я не уверен на 100%, что вы делаете. Вы вызываете файл запуска для запуска сценария (это то, что я предполагаю в своем ответе), или вы хотите только прочитать параметры из файла запуска, не запуская его?   -  person luator    schedule 26.06.2015
comment
Я вызываю файл запуска   -  person lmiguelvargasf    schedule 26.06.2015


Ответы (2)


Параметры, установленные в файле запуска, хранятся на сервере параметров ROS.

Доступ к этим параметрам из узла Python довольно прост, как показано на этой вики-странице. . В вашем случае параметры определяются как приватные параметры узла (поскольку они определены внутри тега <node>), поэтому при доступе к ним вы должны добавлять к ним префикс ~:

altitude_max = rospy.get_param('~altitude_max')
person luator    schedule 26.06.2015
comment
Для меня rospy.get_param("/ardrone_driver/altitude_max") сработало, но ваша помощь была действительно полезной, так что спасибо. - person lmiguelvargasf; 26.06.2015
comment
просто убедитесь, что вы вызываете перед rospy.init_node("ardrone_driver", anonymous=True) с правильным именем узла, и вы сможете отображать частные параметры, используя rospy.get_param('~altitude_max'), нет необходимости ссылаться на полный путь параметра. - person Veilkrand; 28.09.2018
comment
В дополнение к тому, что сказал @Veilkrand: при использовании файла запуска имя узла, указанное в init_node, не имеет значения, вместо этого он использует набор name в теге node файла запуска. Поэтому лучше всегда использовать ~param_name при обращении к закрытым параметрам, так как сам узел не имеет прямого контроля над своим именем. - person luator; 23.10.2018

У меня сработало rospy.get_param("/ardrone_driver/altitude_max")

person jeff wang    schedule 02.01.2019