当我在寻求多地图实时切换方案的时候,找到了mux这个工具
对硬件比较熟悉的各位,应该指导多路复用器这个东西,就是这个mux
mux可以订阅多个topic,所谓的intopics,
一个mux节点只能输出一个topic(但是可以同时启动多个mux哦)
输出的topic就是从mux的input topic中筛选,更改成设定的output topic name之后发布
提供三个服务(选择、添加、删除)
选择哪个输入作为输出
添加一个输入topic
删除一个输入topic
举例
比如 我有4张地图-------描述文件分别为:
map1.yaml
map2,yaml
map3.yaml
map4,yaml
利用map_server把四张地图全部发布出去,有以下消息
\map1, \map1_metadata
\map2, \map2_metadata
\map3, \map3_metadata
\map4, \map4_metadata
做了两个mux,topic名字修改为 mux_map和mux_mapmeta(这是为了防止多个mux之间名字冲突)
map_mux的输入设置为
\map1
\map2
\map3
\map4
输出为 \map
rosrun topic_tools mux map map1 map2 map3 map4 mux:=mux_map
mux_mapmeta的输入设置为
\map1_metadata
\map2_metadata
\map3_metadata
\map4_metadata
输出为\map_metadata
rosrun topic_tools mux map_metadata map1_metadata map2_metadata map3_metadata map4_metadata mux:=mux_mapmeta
那么我们可以通过select服务,来选择每个mux的输出来自哪个输入topic
rosservice call mux_map/select map1
rosservice call mux_mapmeta/select map1_metadata