在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內(nèi)不再提示

如何在代碼中配置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í)行的回調(diào)函數(shù))    def timer_callback(self):                                # 創(chuàng)建定時器周期執(zhí)行的回調(diào)函數(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()                           # 關(guān)閉ROS2 Python接口

完成代碼的編寫后需要設(shè)置功能包的編譯選項,讓系統(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標(biāo)準(zhǔn)定義的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)建訂閱者對象(消息類型、話題名、訂閱者回調(diào)函數(shù)、QoS原則)    
def listener_callback(self, msg):                      # 創(chuàng)建回調(diào)函數(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()                               # 關(guān)閉ROS2 Python接口

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

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

    關(guān)注

    211

    文章

    28557

    瀏覽量

    207659
  • 通信
    +關(guān)注

    關(guān)注

    18

    文章

    6046

    瀏覽量

    136206
  • DDS
    DDS
    +關(guān)注

    關(guān)注

    21

    文章

    636

    瀏覽量

    152780
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4807

    瀏覽量

    68802
收藏 人收藏

    評論

    相關(guān)推薦

    何在MCUxpresso IDE的外設(shè)配置USB?

    我必須在 MCUxpresso IDE 中使用 LPC54113 實現(xiàn) USB 協(xié)議代碼。請?zhí)峁┮韵略敿毿畔ⅲ?. 如何在 MCUxpresso IDE 的外設(shè)配置 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)學(xué)圖像處理綜合示例_《OpenCV3編程入門》書本配套源代碼

    《OpenCV3編程入門》書本配套源代碼:形態(tài)學(xué)圖像處理綜合示例
    發(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(應(yīng)用程序編程示例代碼

    Megawin 8051 MCU的IAP(應(yīng)用程序編程示例代碼分享
    發(fā)表于 07-01 10:36 ?3次下載
    Megawin 8051 MCU的IAP(應(yīng)用程序<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 ?6983次閱讀

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

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

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

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

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

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

    何在命令行配置DDS

    DDS這么好,那該如何配置和使用呢?我們先帶大家入個門。 案例一:在命令行配置DDS 我們先來試一試在命令行
    的頭像 發(fā)表于 11-24 18:03 ?1023次閱讀
    如<b class='flag-5'>何在</b>命令行<b class='flag-5'>中</b><b class='flag-5'>配置</b><b class='flag-5'>DDS</b>
    主站蜘蛛池模板: 91大神在线观看视频| 天天综合色天天综合网| 性免费网站| аⅴ资源天堂8在线| 天天色天天色天天色| www.a级片| 国内精品久久久久影院薰衣草 | 99精品国产高清自在线看超| 美女18黄| 五月婷婷在线视频观看| 99久久久久国产精品免费| 澳门色视频| 欧美黑人性xxx猛交| 国产亚洲欧美成人久久片| 手机在线看片你懂的| 夜色爽爽| 亚洲午夜综合网| 日韩天天操| 天天爽夜夜| 国产午夜精品久久久久免费视小说| 88av影院| 欧美激情啪啪| 亚洲乱码一区二区三区在线观看| 4444kk在线看片| 欧美黄免在线播放| 国产精品三级a三级三级午夜| 美女视频一区二区| 欧美一区亚洲| 乱妇伦小说| 精品福利视频网| 国产黄色a三级三级三级| 五月婷花| 色视频在线看| 日本三级视频在线播放| 日本在线视频www色| 久久国产综合| 国产高清色播视频免费看| 国产福利你懂的| 四虎1515hh永久久免费| 欧美性操| 五月婷婷六月天|