ROS话题名称设置

1 rosrun设置话题重映射

未映射之前的rqt_graph

ROS话题名称设置_第1张图片

rosrun名称重映射语法: rorun 包名 节点名 话题名:=新话题名称

实现teleop_twist_keyboard与乌龟显示节点通信方案由两种:

1.方案1

将 teleop_twist_keyboard 节点的话题设置为/turtle1/cmd_vel

启动键盘控制节点:rosrun teleop_twist_keyboard teleop_twist_keyboard.py /cmd_vel:=/turtle1/cmd_vel

启动乌龟显示节点: rosrun turtlesim turtlesim_node

二者可以实现正常通信

修改后的rqt_graph

ROS话题名称设置_第2张图片

 ROS话题名称设置_第3张图片

 此时也没有了/cmd_vel

2.方案2

将乌龟显示节点的话题设置为 /cmd_vel

启动键盘控制节点:rosrun teleop_twist_keyboard teleop_twist_keyboard.py

启动乌龟显示节点: rosrun turtlesim turtlesim_node /turtle1/cmd_vel:=/cmd_vel

二者可以实现正常通信

ROS话题名称设置_第4张图片

ROS话题名称设置_第5张图片

 2 launch文件设置话题重映射

launch 文件设置话题重映射语法:


   

实现teleop_twist_keyboard与乌龟显示节点通信方案有两种:

1.方案1

将 teleop_twist_keyboard 节点的话题设置为/turtle1/cmd_vel



    
    
        
    


2.方案2

将乌龟显示节点的话题设置为 /cmd_vel



    
    
         
    
    
    

3 编码设置话题名称

话题的名称与节点的命名空间、节点的名称是有一定关系的,话题名称大致可以分为三种类型:

  • 全局(话题参考ROS系统,与节点命名空间平级)
  • 相对(话题参考的是节点的命名空间,与节点名称平级)
  • 私有(话题参考节点名称,是节点名称的子级)

结合编码演示具体关系。

int main(int argc, char *argv[])
{    
    //1.初始化节点设置一个节点名称   
    //2.设置不同类型的话题
    //3.启动节点时,传递一个 __ns:= xxx
    //4.节点启动后,使用 rostopic 查看话题信息
    ros::init(argc,argv,"hello");
    //ros::NodeHandle nh;
    
    //核心:设置不同类型的话题
    //1.全局   --- 话题名称需要以/开头(也可以设置自己的命名空间),这种情况下和节点(命名空间以及名称)没有关系
    //ros::Publisher pub = nh.advertise("/chatter",1000);
    //ros::Publisher pub = nh.advertise("/yyy/chatter",1000);
    //2.相对
    //ros::Publisher pub = nh.advertise("chatter",1000);
    //ros::Publisher pub = nh.advertise("yyy/chatter",1000);
    //3.私有  需要创建特定 NodeHandle
    ros::NodeHandle nh("~");
    //ros::Publisher pub = nh.advertise("chatter",1000);
    ros::Publisher pub = nh.advertise("yyy/chatter",1000);
    //注意:如果私有的NH创建的话题以 / 开头(全局话题),生成的话题是全局的非私有
    //全局话题优先级更高
    while(ros::ok())
    {
        
    }
    return 0;
}

1.1全局名称

格式:/开头的名称,和节点名称无关

示例1:

ros::Publisher pub = nh.advertise("/chatter",1000);

结果1:

/chatter 

 示例2:

ros::Publisher pub = nh.advertise("/yyy/chatter",1000);

 结果2:

/yyy/chatter

1.2相对名称

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

示例1:

ros::Publisher pub = nh.advertise("chatter",1000);

 结果1:

xxx/chatter

示例2:

 ros::Publisher pub = nh.advertise("yyy/chatter",1000);

 xxx/yyy/chatter

1.3私有名称

格式:~开头的名称

示例1:

ros::NodeHandle nh("~");

ros::Publisher pub = nh.advertise("chatter",1000);

 结果1:

/xxx/hello/chatter

示例2:

ros::NodeHandle nh("~");

ros::Publisher pub = nh.advertise("yyy/chatter",1000);

结果2:

 /xxx/hello/yyy/chatter

 PS:当使用~,而话题名称有时/开头时,那么话题名称是绝对的

示例3:

ros::NodeHandle nh("~");

ros::Publisher pub = nh.advertise("/yyy/chatter",1000);

 结果3:

/yyy/chatter

 

你可能感兴趣的:(ROS,自动驾驶,linux)