Почему имя узла в консоли отличается от имени в файле .launch? - PullRequest
0 голосов
/ 23 июня 2019

Я работаю с пакетом bebop_driver и запускаю bebop_driver_node .

Файл bebop_node.launch примерно так:

<?xml version="1.0"?>
<launch>
    <arg name="namespace" default="bebop" />
    <arg name="ip" default="10.202.0.1" />
    <arg name="drone_type" default="bebop2" /> <!-- available drone types: bebop1, bebop2 -->
    <arg name="config_file" default="$(find bebop_driver)/config/defaults.yaml" />
    <arg name="camera_info_url" default="package://bebop_driver/data/$(arg drone_type)_camera_calib.yaml" />
    <group ns="$(arg namespace)">
        <node pkg="bebop_driver" name="bebop_driver" type="bebop_driver_node" output="screen">
            <param name="camera_info_url" value="$(arg camera_info_url)" />
            <param name="bebop_ip" value="$(arg ip)" />
            <rosparam command="load" file="$(arg config_file)" />
        </node>
        <include file="$(find bebop_description)/launch/description.launch" />

    </group>
</launch>

Но когда я запускаю rosnode list, я получаю:

/bebop/bebop_driver

Поскольку я пытаюсь использовать rospy.init_node('node_name'), этопроблема, потому что я не могу набрать пространство имен.

1 Ответ

2 голосов
/ 23 июня 2019

Пространство имен и имя вашего узла определены в файле запуска. Вы можете найти документацию на ROS Wiki: roslaunch / XML .

Пространство имен:

Поскольку вы используете группу, узел будет помещен в его пространство имен, определяемое атрибутом ns :

<group ns="$(arg namespace)">

В вашем случае пространство имен определяется аргументом namespace, который по умолчанию равен bebop :

<arg name="namespace" default="bebop" />

Обратите внимание, что несколько и вложенные группы также могут создавать пространства имен.

Имя узла:

Имя узла определяется его атрибутом name :

<node [...] name="bebop_driver" [...]

Результат - bebop / bebop_driver , что вы можете увидеть, позвонив по номеру rosnode list .

...