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

    ROS2 一个节点能同时发布和订阅多个话题吗?

    已定时 已固定 已锁定 已移动 未解决
    综合问题
    ros2通信 发布订阅 机器人
    2
    5
    926
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • 74934167
      Jarvis
      最后由 编辑

      如题,在用jetson nano + pico做个机器人,过程中发现 一个节点中无法同时发布和订阅不同的话题,代码 如下:
      pico_info这个话题收不到回调,这个pico_info发布时成功了,没报错的

      import rclpy
      import json

      from rclpy.node import Node
      from std_msgs.msg import String
      from controller.service import init_server
      from controller.run_data import *

      class ControllerNode(Node):

      def __init__(self):
          super().__init__('controller_Node')
          self.command_publisher = self.create_publisher(String, 'controller', 10)
          
          self.create_subscription(String, 'pico_info', self.pico_info_callback, 6)
          
          init_server(self.command_publisher)
      
      
      def pico_info_callback(self, msg):
          global voltage12v
          print('Recive message: "%s"' % msg.data)
          # msg.data =  '{"target": "jarvis", "voltage12v": 11.32}'
          rec_json = json.loads(str(msg.data))
          voltage12v = int(rec_json['voltage12v'])
          set_voltage12v(voltage12v)
      

      def main(args=None):

      rclpy.init(args=args)
      controller_Node = ControllerNode()
      rclpy.spin(controller_Node)
      
      controller_Node.destroy_node()
      rclpy.shutdown()
      

      if name == 'main':
      main()

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

        @7493416 有没有可能没有发布

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

        74934167 2 条回复 最后回复 回复 引用 0
        • 74934167
          Jarvis @小鱼
          最后由 7493416 编辑

          @小鱼 感谢大佬的回复,大佬的意思就是说ROS2是支持同时发布和订阅多个话题,是吧?是的话,我再排查一下消息是否发布成功;以下是发布消息节点的发布相关代码

          class LowerNode(Node):
          
              def __init__(self):
                  super().__init__('motion_node')
                  self.pico_publisher = self.create_publisher(String, 'pico_info', 10)
                  set_pico_publisher(self.pico_publisher)
          
                  self.create_subscription(String, 'recognition_obj', self.recognition_obj_callback, 10)
                  self.create_subscription(String, 'controller', self.controller_callback, 10)
          
                  uart_init()
                  _thread.start_new_thread(recv_data, (self.pico_publisher,))
          

          import serial as serial
          import time
          import random
          
          from motion.utils import command_util
          from std_msgs.msg import String
          from motion.run_data import *
          
          my_uart = serial.Serial(port="/dev/ttyTHS1", baudrate=115200)
          
          def uart_init():
              if not my_uart.is_open:
                  my_uart.open()
          
          
          def send_data(s_data):
              s_data = s_data + "\n"
              print('Send data: ' + s_data)
              my_uart.write(s_data.encode())
              time.sleep(0.3)
          
          
          def recv_data(pico_publisher):
              while True:
                  r_data = my_uart.readline().decode()
                  print('recv data: ' + r_data)
                  if len(r_data) > 0:
                      s_msg = String() # 要发布的消息类型
                      s_msg.data = str(r_data)
                      pico_publisher.publish(s_msg)
                  time.sleep(0.2)
          
          1 条回复 最后回复 回复 引用 0
          • 74934167
            Jarvis @小鱼
            最后由 编辑

            @小鱼 屏幕截图 2023-09-19 212610.png

            话题应该是发布成功了的。难道是接受问题?

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

              @7493416 肯定支持的,是否发布成功用 ros2 topic echo 检查

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

              1 条回复 最后回复 回复 引用 0
              • 第一个帖子
                最后一个帖子
              皖ICP备16016415号-7
              Powered by NodeBB | 鱼香ROS