重新映射参数Remapping Arguments
任何一个节点内ROS的名字可以当在命令行启动重映射。这是ROS的一项强大功能,可让您在命令行的多个配置下启动相同的节点。所有资源名称都可以重新映射。您也可以为私有节点参数提供分配。ROS的这一特性允许您将复杂的名称分配推迟到系统的实际运行时加载。
重映射参数可以传递给任何节点并使用语法:name:=new_name。例如,要将talker节点配置为发布到/ wg / chatter而不是chatter:
rosrun rospy_tutorials talker chatter:= / wg / chatter
我们在匹配前解决分歧。这样做的效果是您重新映射完整名称,而重映射只适用于特定字符串之前。例如,前面的foo:= bar只匹配确切的字符串foo,它也会匹配/ <node_namespace> / foo。解析后,使用直接字符串匹配,所以不能用它重新映射名称的某一部分,即foo:= bar可以匹配foo或/ <node_namespace>/ foo,但不能匹配foo / baz。一个例外是使用searchParam,它保留了旧的行为。这是因为searchParam本身适用于未解决的名称。如
Node Namespace |
Remapping Argument |
Matching Names |
Final Resolved Name |
/ |
foo:=bar |
foo, /foo |
/bar |
/baz |
foo:=bar
扫描二维码关注公众号,回复:
4444391 查看本文章
|
foo, /baz/foo |
/baz/bar |
/ |
/foo:=bar |
foo, /foo |
/bar |
/baz |
/foo:=bar |
/foo |
/baz/bar |
/baz |
/foo:=/a/b/c/bar |
/foo |
/a/b/c/bar |
各种ROS库提供客户端支持,以便轻松地从您自己的参数解析中剥离重新映射参数。
1.“Pushing Down”
该ROS_NAMESPACE 环境变量,您可以更改正在启动的节点,从而有效地重新映射所有在该节点名称的命名空间。由于所有节点都在全局名称空间中启动,因此这实际上将其“Pushing Down”到子名称空间中。由于节点中的所有名称(节点名称,主题,服务和参数)都将被重新扫描,因此更改节点的名称空间是整合代码的一种简单机制。
注意:为了使此功能正常工作,重要的是您的程序避免使用全局名称,而是使用相对名称和专用名称。
2.节点参数分配
您可以使用单个下划线_作为前缀,直接从命令行为节点分配私有参数。例如,
rosrun rospy_tutorials talker _param:= 1.0
设置〜param为1.0。ROS使用YAML语法来确定参数类型。
3.特殊键
__name
__name是“节点名称”的特殊保留关键字。它允许您重新映射节点名称,而无需知道其实际名称。它只能在正在启动的程序包含一个节点时使用。
__log
__log是一个保留关键字,用于指定应写入节点日志文件的位置。通常不鼓励使用这个关键字---它主要提供给ROS工具使用,如roslaunch。
__ip和__hostname
__ip和__hostname是替代ROS_IP和ROS_HOSTNAME。通常不鼓励使用此关键字,因为它提供给无法设置环境变量的特殊情况。
__master
__master是ROS_MASTER_URI的替代品。通常不鼓励使用此关键字,因为它提供给无法设置环境变量的特殊情况。
__ns
__ns是ROS_NAMESPACE的替代品。通常不鼓励使用此关键字,因为它提供给无法设置环境变量的特殊情况。