為什麼使用ROS的remap標籤不起作用?

两棵雪松發表於2025-01-18

1. remap的作用
remap可以讓ROS節點訂閱釋出的topic名字更換為另外一個名字。例如
<remap from="/old_topic" to="/new_topic"/>

或者
<remap from="topic" to="/device1/topic"/>

2. 問題:為什麼使用remap後,topic沒有按照預期實現?
透過rqt檢視,發現兩個node之間預期可以展示出來的新的topic沒有出現,而且remap之前的舊的topic,也沒有出現?

3.可以從以下幾個反面嘗試找下原因
1,必須確保在Topic的釋出節點和接收節點都要進行remap。
例如:
原來的/oldtopic用於連線兩個lunch檔案中的兩個node,則兩個launch檔案都必須進行remap定義,具體參考:

Node1所在的launch檔案
<launch> <node name="node1" > <remap from="/oldtopic" to="/newtopic"/> </node> </launch>

Node2所在的launch檔案
<launch> <node name="node2" > <remap from="/oldtopic" to="/newtopic"/> </node> </launch>

2,檢查是不是有其他方式修改topic的地方,沒有做對應修改
也就是說,檢查你的程式碼,看看是不是在某些配置檔案或者程式碼中將Topic的名字寫死了。
雖然在launch檔案中進行了remap,但是除了remap標籤,還有很多方法可以實現topic重新命名,例如透過名稱空間(<group ns="device1">)或者在配置檔案、程式碼中將topic名字寫死,但是寫死的地方沒有做對應修改,就自然不會起作用了。

本質上必須在各節點啟動後,確保Topic的路徑是通的,rqt的視覺化介面上才能夠顯示出來

相關文章