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

Why the node's name in the console is different that the one in .launch file?

我正在使用 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') 这是一个问题,因为我无法键入命名空间。

节点的名称空间和名称在启动文件中定义。您可以在 thr ROS wiki: roslaunch/XML.

找到文档

命名空间:

由于您使用的是组,节点将被放置在它的命名空间中,由 ns 属性定义:

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

在您的例子中,命名空间由参数 namespace 定义,默认情况下为 bebop

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

请注意,多个和嵌套的组也可以创建命名空间。

节点名称:

节点名称由其名称属性指定:

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

结果是bebop/bebop_driver调用rosnode list.

可以看到