话题名称分类

话题名称大致可以分为三种类型:

全局(话题参考ROS系统,与节点命名空间平级)

相对(话题参考的是节点的命名空间,与节点名称平级)

私有(话题参考节点名称,是节点名称的子级)

全局话题

以/开头的名称,和节点名称无关

相对名称

非/开头的名称,参考命名空间(与节点名称平级)来确定话题名称

私有名称

以~开头的名称

#include "ros/ros.h"
#include "std_msgs/String.h"

int main(int argc, char *argv[])
{
    setlocale(LC_ALL,"");
    //执行节点初始化
    ros::init(argc,argv,"hello");
    ros::NodeHandle nh;   
    //核心
    //1.全局

    //全局话题名称需要以“/”开头(也可以设置自己的命名空间)
    //这种情况下和节点(节点名称以及名称)没有任何关系
     //ros::Publisher pub=nh.advertise<std_msgs::String>("/rename",1000);
    //ros::Publisher pub=nh.advertise<std_msgs::String>("/yyyy/rename",1000);
    //2.相对

    //相对话题名称不要以“/”开头
    //可以在前面添加前缀
     //ros::Publisher pub=nh.advertise<std_msgs::String>("rename",1000);
    //ros::Publisher pub=nh.advertise<std_msgs::String>("zzz/rename",1000);
    
    //3.私有

    //私有话题名称需要结合特定的Nodehandle
    //ros::NodeHandle NH("~");
    //ros::Publisher pub =NH.advertise<std_msgs::String>("rename",1000);
    //ros::Publisher pub =NH.advertise<std_msgs::String>("zzz/rename",1000);

    //4.注意
    //既调用特定的Nodehandle,又调用“/”,为全局话题
     //ros::Publisher pub =NH.advertise<std_msgs::String>("/zzz/rename",1000);

//循环函数防止退出
    while (ros::ok())
    {
    }
    return 0;
}

全局话题

请输入图片描述

请输入图片描述

相对话题

请输入图片描述 请输入图片描述

私有话题

请输入图片描述 请输入图片描述

最后修改:2023 年 11 月 10 日
如果觉得我的文章对你有用,请随意赞赏