为什么控制台中的节点名称与.launch文件中的节点名称不同?

时间:2019-06-23 01:41:24

标签: ubuntu-16.04 ros

我正在使用 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 个答案:

答案 0 :(得分:2)

节点的名称空间和名称在启动文件中定义。您可以在thr 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 看到。