第一个字符必须是([a-z|A-z]),或者波浪号~或者斜杠/
后面的字符可以是([0-9|a-z|A-Z]), 下划线( _ ),斜杠(\)
/ -> 全局(global)命名空间 ~ -> 局部(private)空间 举例:
NodeRelative(default)GlobalPrivate/node1bar -> /bar/bar -> /bar~bar -> /node1/bar/wg/node2bar -> /wg/bar/bar -> /bar~bar -> /wg/node2/bar/wg/node3foo/bar -> /wg/foo/bar/foo/bar -> /foo/bar~foo/bar -> /wg/node3/foo/barelative : 相对于节点的命名空间 进行解释的。/node1 的空间是global空间 所以 relative解释为/(上表第一行 bar->/bar) /node1 会形成一个 私有空间 ~
2017/10/30 ros::NodeHandle nh ros::NodeHandle nh(“~”)
// nh_,nh_private_ 定义在类中,下面两个出现在初始化列表中 nh_(ros::NodeHandle()), /* This is an initialization list */ nh_private_(ros::NodeHandle(“~”)) /* if you don’t know what that means, go read about it */ 类中的nh_ 和主函数中的nh关系:”可视范围内” 在命名空间上存在关联 在类构造函数后面的初始化列表中出现的ros::NodeHandle(“~”)解释为/node/的内部(私有)。
nh_private:一般用来参数配置。在launch文件中param标签会把参数解释为/node/param_name,相当于(~param_name)
nh可以定义多个,相对之间的关系不清楚,但是在命名空间都与node名字相关,nh相关名称空间按照relative or global解释 launch文件中启动node时:ns参数可以定义node所在的名称空间/ns/nodename
http://wiki.ros.org/Names