0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何在代碼中配置DDS編程示例

麥辣雞腿堡 ? 來源:古月居 ? 作者:古月 ? 2023-11-24 18:08 ? 次閱讀

DDS編程示例
我們嘗試在代碼中配置DDS,以之前Hello World話題通信為例。

圖片

運行效果

啟動兩個終端,分別運行發(fā)布者和訂閱者節(jié)點:

$ ros2 run learning_qos qos_helloworld_pub
$ ros2 run learning_qos qos_helloworld_sub

可以看到兩個終端中的通信效果如下,和之前貌似并沒有太大區(qū)別。

圖片

圖片

看效果確實差不多,不過底層通信機理上可是有所不同的。

發(fā)布者代碼解析

我們看下在代碼中,如果加入QoS的配置。

learning_qos/qos_helloworld_pub.py

#!/usr/bin/env python3# -*- coding: utf-8 -*-"""@作者: 古月居(www.guyuehome.com)@說明: ROS2 QoS示例-發(fā)布“Hello World”話題"""import rclpy                     # ROS2 Python接口庫from rclpy.node import Node      # ROS2 節(jié)點類from std_msgs.msg import String  # 字符串消息類型from rclpy.qos import QoSProfile, QoSReliabilityPolicy, QoSHistoryPolicy # ROS2 QoS類"""創(chuàng)建一個發(fā)布者節(jié)點"""class PublisherNode(Node):    def __init__(self, name):        super().__init__(name)        # ROS2節(jié)點父類初始化        qos_profile = QoSProfile(     # 創(chuàng)建一個QoS原則            # reliability=QoSReliabilityPolicy.BEST_EFFORT,            reliability=QoSReliabilityPolicy.RELIABLE,            history=QoSHistoryPolicy.KEEP_LAST,            depth=1        )        self.pub = self.create_publisher(String, "chatter", qos_profile) # 創(chuàng)建發(fā)布者對象(消息類型、話題名、QoS原則)        self.timer = self.create_timer(0.5, self.timer_callback)         # 創(chuàng)建一個定時器(單位為秒的周期,定時執(zhí)行的回調函數(shù))    def timer_callback(self):                                # 創(chuàng)建定時器周期執(zhí)行的回調函數(shù)        msg = String()                                       # 創(chuàng)建一個String類型的消息對象        msg.data = 'Hello World'                             # 填充消息對象中的消息數(shù)據(jù)        self.pub.publish(msg)                                # 發(fā)布話題消息        self.get_logger().info('Publishing: "%s"' % msg.data)# 輸出日志信息,提示已經(jīng)完成話題發(fā)布def main(args=None):                           # ROS2節(jié)點主入口main函數(shù)    rclpy.init(args=args)                      # ROS2 Python接口初始化    node = PublisherNode("qos_helloworld_pub") # 創(chuàng)建ROS2節(jié)點對象并進行初始化    rclpy.spin(node)                           # 循環(huán)等待ROS2退出    node.destroy_node()                        # 銷毀節(jié)點對象    rclpy.shutdown()                           # 關閉ROS2 Python接口

完成代碼的編寫后需要設置功能包的編譯選項,讓系統(tǒng)知道Python程序的入口,打開功能包的setup.py文件,加入如下入口點的配置:

entry_points={    'console_scripts': [     'qos_helloworld_pub  = learning_qos.qos_helloworld_pub:main',},

訂閱者代碼解析

訂閱者中的QoS配置和發(fā)布者類似。

learning_qos/qos_helloworld_sub.py

#!/usr/bin/env python3# -*- coding: utf-8 -*-"""@作者: 古月居@說明: ROS2 QoS示例-訂閱“Hello World”話題消息"""import rclpy                                     # ROS2 Python接口庫
from rclpy.node   import Node                    # ROS2 節(jié)點類
from std_msgs.msg import String                  # ROS2標準定義的String消息from rclpy.qos import QoSProfile, QoSReliabilityPolicy, QoSHistoryPolicy  # ROS2 QoS類"""創(chuàng)建一個訂閱者節(jié)點"""class SubscriberNode(Node):    def __init__(self, name):        super().__init__(name)         # ROS2節(jié)點父類初始化        qos_profile = QoSProfile(      # 創(chuàng)建一個QoS原則            # reliability=QoSReliabilityPolicy.BEST_EFFORT,            reliability=QoSReliabilityPolicy.RELIABLE,            
history=QoSHistoryPolicy.KEEP_LAST,            depth=1        )        self.sub = self.create_subscription(            String, "chatter", self.listener_callback, qos_profile) # 創(chuàng)建訂閱者對象(消息類型、話題名、訂閱者回調函數(shù)、QoS原則)    
def listener_callback(self, msg):                      # 創(chuàng)建回調函數(shù),執(zhí)行收到話題消息后對數(shù)據(jù)的處理        self.get_logger().info('I heard: "%s"' % msg.data) # 輸出日志信息,提示訂閱收到的話題消息def main(args=None):                               # ROS2節(jié)點主入口main函數(shù)    rclpy.init(args=args)                          # ROS2 Python接口初始化    node = SubscriberNode("qos_helloworld_sub")    # 創(chuàng)建ROS2節(jié)點對象并進行初始化    rclpy.spin(node)                               # 循環(huán)等待ROS2退出    
node.destroy_node()                            # 銷毀節(jié)點對象    rclpy.shutdown()                               # 關閉ROS2 Python接口

完成代碼的編寫后需要設置功能包的編譯選項,讓系統(tǒng)知道Python程序的入口,打開功能包的setup.py文件,加入如下入口點的配置:

entry_points={    'console_scripts': [     'qos_helloworld_pub  = learning_qos
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 機器人
    +關注

    關注

    210

    文章

    27838

    瀏覽量

    204586
  • 通信
    +關注

    關注

    18

    文章

    5880

    瀏覽量

    135312
  • DDS
    DDS
    +關注

    關注

    21

    文章

    625

    瀏覽量

    152288
  • 代碼
    +關注

    關注

    30

    文章

    4671

    瀏覽量

    67765
收藏 人收藏

    評論

    相關推薦

    何在MCUxpresso IDE的外設配置USB?

    我必須在 MCUxpresso IDE 中使用 LPC54113 實現(xiàn) USB 協(xié)議代碼。請?zhí)峁┮韵略敿毿畔ⅲ?. 如何在 MCUxpresso IDE 的外設配置 USB。2.US
    發(fā)表于 04-04 06:22

    仿射變換綜合示例_《OpenCV3編程入門》書本配套源代碼

    《OpenCV3編程入門》書本配套源代碼:仿射變換綜合示例
    發(fā)表于 06-06 15:39 ?5次下載

    實現(xiàn)多種重映射綜合示例_《OpenCV3編程入門》書本配套源代碼

    《OpenCV3編程入門》書本配套源代碼:實現(xiàn)多種重映射綜合示例
    發(fā)表于 06-06 15:39 ?4次下載

    漫水填充算法綜合示例_《OpenCV3編程入門》書本配套源代碼

    《OpenCV3編程入門》書本配套源代碼:漫水填充算法綜合示例
    發(fā)表于 06-06 15:39 ?2次下載

    形態(tài)學圖像處理綜合示例_《OpenCV3編程入門》書本配套源代碼

    《OpenCV3編程入門》書本配套源代碼:形態(tài)學圖像處理綜合示例
    發(fā)表于 06-06 15:52 ?8次下載

    線性圖像濾波綜合示例_《OpenCV3編程入門》書本配套源代碼

    《OpenCV3編程入門》書本配套源代碼:線性圖像濾波綜合示例
    發(fā)表于 06-06 15:52 ?8次下載

    圖像金字塔和resize綜合示例_《OpenCV3編程入門》書本配套源代碼

    《OpenCV3編程入門》書本配套源代碼:圖像金字塔和resize綜合示例
    發(fā)表于 06-06 15:52 ?3次下載

    圖像濾波綜合示例_《OpenCV3編程入門》書本配套源代碼

    《OpenCV3編程入門》書本配套源代碼:圖像濾波綜合示例
    發(fā)表于 06-06 15:52 ?6次下載

    何在代碼添加注釋

    什么是代碼注釋,如何在代碼添加注釋,相信每一位了解編程的人并不陌生。注釋里往往有很多有趣的腦洞和「真心話」
    的頭像 發(fā)表于 10-17 10:53 ?1.1w次閱讀

    Megawin 8051 MCU的IAP(應用程序編程示例代碼

    Megawin 8051 MCU的IAP(應用程序編程示例代碼分享
    發(fā)表于 07-01 10:36 ?3次下載
    Megawin 8051 MCU的IAP(應用程序<b class='flag-5'>編程</b>)<b class='flag-5'>示例</b><b class='flag-5'>代碼</b>

    何在易e語言代碼中使用HTTP代理IP

    何在易e語言代碼中使用HTTP代理IP,示例代碼demo直接可用(步驟注釋清晰)
    的頭像 發(fā)表于 08-05 16:29 ?6667次閱讀

    何在c語言代碼中使用HTTP代理IP

    何在c語言代碼中使用HTTP代理IP,示例代碼demo直接可用(步驟注釋清晰)
    的頭像 發(fā)表于 08-05 16:31 ?2231次閱讀

    何在c#語言代碼中使用HTTP代理IP

    何在c#語言代碼中使用HTTP代理IP,示例代碼demo直接可用(步驟注釋清晰)
    的頭像 發(fā)表于 08-05 16:33 ?2465次閱讀

    移動數(shù)據(jù)的編程示例

    編程示例 在此編程示例,將移動在生產(chǎn)班次期間為示例收集的數(shù)據(jù)值以作進一步處理。收集的數(shù)據(jù)放在
    的頭像 發(fā)表于 08-23 10:10 ?1148次閱讀
    移動數(shù)據(jù)的<b class='flag-5'>編程</b><b class='flag-5'>示例</b>

    何在命令行配置DDS

    DDS這么好,那該如何配置和使用呢?我們先帶大家入個門。 案例一:在命令行配置DDS 我們先來試一試在命令行
    的頭像 發(fā)表于 11-24 18:03 ?702次閱讀
    如<b class='flag-5'>何在</b>命令行<b class='flag-5'>中</b><b class='flag-5'>配置</b><b class='flag-5'>DDS</b>