鱼香ROS社区
    • 版块
    • 最新
    • 未解决
    • 已解决
    • 群组
    • 注册
    • 登录
    紧急通知:禁止一切关于政治&VPN翻墙等话题,发现相关帖子会立马删除封号
    提问前必看的发帖注意事项: 社区问答规则(小鱼个人)更新 | 高质量帖子发布指南

    rosbag2 1.如何录制自定义接口的主题 2.play 录制好的数据报错 No metadata found and no storage_id specified. Can't open bag.

    已定时 已固定 已锁定 已移动
    ROS 2相关问题
    rosbag2 自定义消息
    3
    5
    671
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • 12067683721
      Harry橙
      最后由 编辑

      代码是鱼哥的代码 这里面传送消息的时候用的是Novel
      结果报错找不到接口village_interfaces
      报错
      [WARN] [1660211017.040132784] [ROSBAG2_TRANSPORT]: Topic '/sexy_girl' has unknown type 'village_interfaces/msg/Novel' . Only topics with known type are supported. Reason: 'package 'village_interfaces' not found, searching: [/opt/ros/humble]

      于是换了常规接口测试
      录是录下来了 但是报错打不开
      ros2@ros2-virtual-machine:~/d2lros/rosbag2_2022_08_11-17_29_40$ ros2 bag play /home/ros2/d2lros/rosbag2_2022_08_11-17_29_40/rosbag2_2022_08_11-17_29_40_0.db3
      No metadata found and no storage_id specified. Can't open bag.

      1660211205672.png

      #!/usr/bin/env python3!
      from rclpy.node import Node
      from std_msgs.msg import String,UInt32
      #从村庄接口服务类中导入借钱服务
      from village_interfaces.srv import BorrowMoney
      from sensor_msgs.msg import Image
      #从村庄接口话题消息类中导入小说消息类型!
      
      from village_interfaces.msg import Novel
      
      class Li4Node(Node):
          """
          创建一个李四节点,并在初始化时输出一个话
          """
          def __init__(self):
              super().__init__("li4")
              self.get_logger().info("大家好,我是李四,我是一名作家!")
              self.write = self.create_publisher(Novel,"sexy_girl", 10) 
              timer_period = 5  #每5s写一章节话
              self.timer = self.create_timer(timer_period, self.timer_callback)  #启动一个定时装置,每 1 s,调用一次time_callback函数
              self.i = 0 # i 是个计数器,用来算章节编号的
              # 账户钱的数量
              self.account = 80
              # self.image = None
              # 开启收钱箱
              self.sub_ = self.create_subscription(UInt32,"sexy_girl_money",self.recv_money_callback,10)
              # 新建借钱服务
              self.borrow_server = self.create_service(BorrowMoney, "borrow_money", self.borrow_money_callback)
              # 声明参数,参数名字,默认值
              self.declare_parameter("write_timer_period",5)
              # 开始获取图片
              self.create_subscription(Image,"image",self.recv_image_callback,10)
      
      
          def borrow_money_callback(self,request, response):
              """
              借钱回调函数
              参数:request 客户端请求
                   response: 服务端响应
              返回值:response
              """
              #根据李四借钱规则,借出去的钱不能多于自己所有钱的十分之一,不然就不借
              self.get_logger().info("收到来自: %s 的借钱请求,目前账户内还有%d元" % (request.name, self.account))
              if request.money <= int(self.account*0.1):
                  response.success = True
                  response.money = request.money
                  self.account = self.account - request.money
                  self.get_logger().info("借钱成功,借出%d 元 ,目前账户余额%d 元" % (response.money,self.account))
              else:
                  response.success = False
                  response.money = 0
                  self.get_logger().info("对不起兄弟,手头紧,不能借给你")
              return response
      
          def timer_callback(self):
              msg = Novel()
              msg.content = '第%d回:潋滟湖 %d 次偶遇胡艳娘' % (self.i,self.i)
              msg.image = self.image
              self.write.publish(msg)  #将小说内容发布出去
              self.get_logger().info('李四:我发布了艳娘传奇:"%s"' % msg.content)    #打印一下发布的数据,供我们看
              self.get_logger().info('李四:为艳娘传奇配上了插图,长:%d,宽:%d' % (msg.image.height,msg.image.width))    #打印一下发布的插图尺寸,供我们看
              self.i += 1 #章节编号+1
      
              # 回调之后更新回调周期
              timer_period = self.get_parameter('write_timer_period').get_parameter_value().integer_value
              # 更新回调周期
              self.timer.timer_period_ns = timer_period * (1000*1000*1000)
      
      
          def recv_money_callback(self,money):
              self.account += money.data
              #self.get_logger().info('李四:我已经收到了%d的稿费' % self.account)
      
          def recv_image_callback(self,image):
              self.image = image
      
      
      def main(args=None):
          """
          ros2运行该节点的入口函数,可配置函数名称
          """
          rclpy.init(args=args) # 初始化rclpy
          node = Li4Node()  # 新建一个节点
          rclpy.spin(node) # 保持节点运行,检测是否收到退出指令(Ctrl+C)
          rclpy.shutdown() # rcl关闭
      
      小鱼小 1 条回复 最后回复 回复 引用 0
      • 小鱼小
        小鱼 技术大佬 @1206768372
        最后由 小鱼 编辑

        @1206768372 先使用ros2 bag info 看看,我怕你的这个包是空的

        新书配套视频:https://www.bilibili.com/video/BV1GW42197Ck/

        12067683721 1 条回复 最后回复 回复 引用 0
        • 12067683721
          Harry橙 @小鱼
          最后由 编辑

          @小鱼 是有内容的呀1660214555326.png

          小鱼小 1 条回复 最后回复 回复 引用 0
          • 小鱼小
            小鱼 技术大佬 @1206768372
            最后由 编辑

            @1206768372 哇,确实很奇怪了,找到了一个类似的错误,貌似可以解决。

            你试试: https://github.com/ros2/rosbag2/issues/87

            新书配套视频:https://www.bilibili.com/video/BV1GW42197Ck/

            1 条回复 最后回复 回复 引用 0
            • 沉浮沉
              沉浮
              最后由 编辑

              ros2 bag play -s sqlites3 XXX.db3。
              指定读取方式

              1 条回复 最后回复 回复 引用 1
              • 小鱼小 小鱼 从 中的 动手学ROS2 移动了该主题
              • 第一个帖子
                最后一个帖子
              皖ICP备16016415号-7
              Powered by NodeBB | 鱼香ROS