ROS中topic、service、action、parameter实现数据的传递,关键是通过其本身的名称来实现,而与节点名无直接关系,但是topic、service、action的名称定义是在节点的代码中定义的,而节点的可执行文件进行迁移使用时,有可能与别的节点的可执行文件中的对topic、service、action、parameter的名称定义重名,虽然ROS允许在重名的条件下实现topic等通信机制,但是也容易出现混乱,因此在重名的情况下进行改名,就成为开发者需要做的工作了。当然,最基本的方法就是打开代码,直接修改topic等通信机制的名称。
ROS在launch文件中提供remappings设置项,可以在不修改代码的条件下实现对topic、service、action的名称的改名,这种方式更加快捷、方便。
关于launch文件中namespace与topic名关系的实例:
publish节点1代码:
import rclpy
from rclpy.node import Node
from std_msgs.msg import String
from std_msgs.msg import Int32
class PublisherNode(Node):
def __init__(self, name):
super().__init__(name)
self.pub = self.create_publisher(String, "chatter1", 10)
self.i=0
self.timer = self.create_timer(0.5, self.timer_callback)
def timer_callback(self):
msg = String()
s='hello world'+str(self.i)
msg.data = s
self.i+=1
self.pub.publish(msg)
self.get_logger().info('Publishing: "%s"' % msg.data)
def main(args=None)

最低0.47元/天 解锁文章
500

被折叠的 条评论
为什么被折叠?



