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

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

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

3天內不再提示

話題通信接口的定義和運行效果

麥辣雞腿堡 ? 來源:古月居 ? 作者:古月 ? 2023-12-01 15:32 ? 次閱讀

話題接口的定義與使用

話題通信接口的定義也是類似的,繼續從之前的機器視覺案例中來衍生,我們想把服務換成話題,周期發布目標識別的位置,不管有沒有人需要。

圖片

運行效果

現在我們會運行三個節點:

第一個節點,將驅動相機并發布圖像話題,此時的話題數據使用的是ROS中標準定義的Image圖像消息;

第二個節點,會運行視覺識別功能,識別目標的位置,這個位置我們希望封裝成話題消息,發布出去,誰需要使用誰就來訂閱;

第三個節點,訂閱位置話題,打印到終端中。

啟動三個終端,分別運行以上節點:

$ ros2 run usb_cam usb_cam_node_exe$ ros2 run learning_topic interface_object_pub$ ros2 run learning_topic interface_object_sub

圖片

接口定義

在這個例程中,我們使用ObjectPosition.msg定義了服務通信的接口:

learning_interface/msg/ObjectPosition.msg

int32 x      # 表示目標的X坐標int32 y      # 表示目標的Y坐標

話題消息的內容是一個位置,我們使用x、y坐標值進行描述。

完成定義后,還需要在功能包的CMakeLists.txt中配置編譯選項,讓編譯器在編譯過程中,根據接口定義,自動生成不同語言的代碼:

...find_package(rosidl_default_generators REQUIRED)rosidl_generate_interfaces(${PROJECT_NAME}  "msg/ObjectPosition.msg")...

程序調用

我們在代碼中再來重點看下接口的使用方法。

發布者接口調用

learning_topic/interface_object_pub.py

#!/usr/bin/env python3# -*- coding: utf-8 -*-"""@作者: 古月居@說明: ROS2接口示例-發布目標位置"""import rclpy                                       # ROS2 Python接口庫from rclpy.node import Node                        # ROS2 節點類from sensor_msgs.msg import Image                  # 圖像消息類型from cv_bridge import CvBridge                     # ROS與OpenCV圖像轉換類import cv2                                         # Opencv圖像處理庫import numpy as np                                 # Python數值計算庫from learning_interface.msg import ObjectPosition  # 自定義的目標位置消息lower_red = np.array([0, 90, 128])                 # 紅色的HSV閾值下限upper_red = np.array([180, 255, 255])              # 紅色的HSV閾值上限"""創建一個訂閱者節點"""class ImageSubscriber(Node):    def __init__(self, name):        super().__init__(name)                                  # ROS2節點父類初始化        self.sub = self.create_subscription(            Image, 'image_raw', self.listener_callback, 10)     # 創建訂閱者對象(消息類型、話題名、訂閱者回調函數、隊列長度)        self.pub = self.create_publisher(            ObjectPosition, "object_position", 10)              # 創建發布者對象(消息類型、話題名、隊列長度)        self.cv_bridge = CvBridge()                             # 創建一個圖像轉換對象,用于OpenCV圖像與ROS的圖像消息的互相轉換        self.objectX = 0        self.objectY = 0       def object_detect(self, image):              hsv_img = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)        # 圖像從BGR顏色模型轉換為HSV模型        mask_red = cv2.inRange(hsv_img, lower_red, upper_red)   # 圖像二值化        contours, hierarchy = cv2.findContours(            mask_red, cv2.RETR_LIST, cv2.CHAIN_APPROX_NONE)     # 圖像中輪廓檢測        for cnt in contours:                                    # 去除一些輪廓面積太小的噪聲            if cnt.shape[0] < 150:                continue            (x, y, w, h) = cv2.boundingRect(cnt)                # 得到蘋果所在輪廓的左上角xy像素坐標及輪廓范圍的寬和高            cv2.drawContours(image, [cnt], -1, (0, 255, 0), 2)  # 將蘋果的輪廓勾勒出來            cv2.circle(image, (int(x+w/2), int(y+h/2)), 5,      # 將蘋果的圖像中心點畫出來                       (0, 255, 0), -1)               self.objectX = int(x+w/2)            self.objectY = int(y+h/2)        cv2.imshow("object", image)                             # 使用OpenCV顯示處理后的圖像效果        cv2.waitKey(50)    def listener_callback(self, data):        self.get_logger().info('Receiving video frame')         # 輸出日志信息,提示已進入回調函數        image = self.cv_bridge.imgmsg_to_cv2(data, 'bgr8')      # 將ROS的圖像消息轉化成OpenCV圖像        position = ObjectPosition()        self.object_detect(image)                               # 蘋果檢測        position.x, position.y = int(self.objectX), int(self.objectY)        self.pub.publish(position)                              # 發布目標位置def main(args=None):                                        # ROS2節點主入口main函數    rclpy.init(args=args)                                   # ROS2 Python接口初始化    node = ImageSubscriber("topic_webcam_sub")              # 創建ROS2節點對象并進行初始化    rclpy.spin(node)                                        # 循環等待ROS2退出    node.destroy_node()                                     # 銷毀節點對象    rclpy.shutdown()                                        # 關閉ROS2 Python接口

訂閱者接口調用

learning_topic/interface_object_sub.py

#!/usr/bin/env python3# -*- coding: utf-8 -*-"""@作者: 古月居@說明: ROS2接口示例-訂閱目標位置"""import rclpy                                       # ROS2 Python接口庫from rclpy.node   import Node                      # ROS2 節點類from std_msgs.msg import String                    # 字符串消息類型from learning_interface.msg import ObjectPosition  # 自定義的目標位置消息"""創建一個訂閱者節點"""class SubscriberNode(Node):    def __init__(self, name):        super().__init__(name)                                                # ROS2節點父類初始化        self.sub = self.create_subscription(            ObjectPosition, "/object_position", self.listener_callback, 10)   # 創建訂閱者對象(消息類型、話題名、訂閱者回調函數、隊列長度    def listener_callback(self, msg):                                         # 創建回調函數,執行收到話題消息后對數據的處理        self.get_logger().info('Target Position: "(%d, %d)"' % (msg.x, msg.y))# 輸出日志信息,提示訂閱收到的話題消息def main(args=None):                                 # ROS2節點主入口main函數    rclpy.init(args=args)                            # ROS2 Python接口初始化    node = SubscriberNode("interface_position_sub")  # 創建ROS2節點對象并進行初始化    rclpy.spin(node)                                 # 循環等待ROS2退出    node.destroy_node()                              # 銷毀節點對象    rclpy.shutdown()                                 # 關閉ROS2 Python接口

接口命令行操作

接口命令的常用操作如下:

$ ros2 interface list                    # 查看系統接口列表$ ros2 interface sh
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 接口
    +關注

    關注

    33

    文章

    8696

    瀏覽量

    151934
  • 相機
    +關注

    關注

    4

    文章

    1369

    瀏覽量

    53922
  • 通信接口
    +關注

    關注

    3

    文章

    240

    瀏覽量

    31066
  • ROS
    ROS
    +關注

    關注

    1

    文章

    280

    瀏覽量

    17102
收藏 人收藏

    評論

    相關推薦

    iphone接口定義

    本文提供詳細的iphone接口定義,有iphone接口定義英文版和iphone接口定義中文介紹說
    發表于 03-28 15:15 ?1.5w次閱讀

    USB接口定義

    USB接口定義 USB接口定義  更多盡在:USB產品網
    發表于 04-21 11:58 ?3.4w次閱讀

    MIDI接口定義和游戲桿接口定義

    MIDI 接口定義和游戲桿接口定義圖 MIDI 接口和 PC 游戲桿接口是共用的,外觀為 15
    發表于 11-27 20:13 ?4149次閱讀
    MIDI<b class='flag-5'>接口</b><b class='flag-5'>定義</b>和游戲桿<b class='flag-5'>接口</b><b class='flag-5'>定義</b>圖

    rs422接口定義 rs232接口定義 rs485接口定義

    rs422接口定義 rs232接口定義 rs485接口定義 Pin 信
    發表于 04-27 17:33 ?1.6w次閱讀

    手機usb接口定義

    手機8針的usb接口定義 手機12針的usb接口定義 K750c手機US
    發表于 06-10 11:19 ?1.5w次閱讀
    手機usb<b class='flag-5'>接口</b><b class='flag-5'>定義</b>

    MIDI接口定義,MIDI接口游戲桿接口引腳功能定義

    MIDI接口信號定義與游戲桿接口功能定義 MIDI接口和PC游戲桿接口是共用的,外觀見下圖:
    發表于 05-03 23:27 ?6861次閱讀
    MIDI<b class='flag-5'>接口</b><b class='flag-5'>定義</b>,MIDI<b class='flag-5'>接口</b>游戲桿<b class='flag-5'>接口</b>引腳功能<b class='flag-5'>定義</b>圖

    SCART接口功能定義

    SCART接口功能定義 附錄:SCART 接口功能定義A、傳輸復合視頻信號(Composite Video Only):
    發表于 08-21 22:40 ?7527次閱讀
    SCART<b class='flag-5'>接口</b>功能<b class='flag-5'>定義</b>

    USB接口與miniUSB接口定義

    USB接口與miniUSB接口定義 USB接口定義:
    發表于 12-21 10:54 ?2.6w次閱讀

    常用接口定義

    常用接口定義,常用接口定義,常用接口定義.
    發表于 04-29 17:57 ?20次下載

    SATA的接口定義及硬盤電源接口定義

    SATA接口的pin定義包括:信號電源和數據線接口定義
    發表于 06-16 18:21 ?23次下載

    接口定義 通信接口的作用

    通信接口 在ROS系統中,無論話題還是服務,或者我們后續將要學習的動作,都會用到一個重要的概念——通信接口
    的頭像 發表于 12-01 14:59 ?964次閱讀

    ROS通信接口機制介紹

    ROS通信接口 接口可以讓程序之間的依賴降低,便于我們使用別人的代碼,也方便別人使用我們的代碼,這就是ROS的核心目標,減少重復造輪子。 ROS有三種常用的通信機制,分別是
    的頭像 發表于 12-01 15:03 ?907次閱讀
    ROS<b class='flag-5'>通信</b><b class='flag-5'>接口</b>機制介紹

    服務通信接口定義與使用

    了解了通信接口的概念,接下來我們再從代碼實現的角度,研究下如何定義以及使用一個接口。 在之前服務概念講解的課程中,我們編寫了這樣一個例程,我們再來回顧下。 有三個節點: 第一個驅動相機
    的頭像 發表于 12-01 15:28 ?520次閱讀
    服務<b class='flag-5'>通信</b><b class='flag-5'>接口</b>的<b class='flag-5'>定義</b>與使用

    SIM卡座的接口定義

    SIM卡座連接器的接口定義是移動通信設備中不可或缺的一部分,確保了SIM卡與設備之間的穩定通信和數據傳輸。在本文中,連欣科技將詳細探討一下SIM卡座的
    的頭像 發表于 06-17 17:47 ?4987次閱讀
    SIM卡座的<b class='flag-5'>接口</b><b class='flag-5'>定義</b>

    DDR4接口引腳定義及功能

    DDR4(Double Data Rate 4)接口引腳的具體定義和功能是一個復雜且詳細的話題,涉及到電源、地、控制信號、時鐘信號、地址信號以及數據信號等多個方面。
    的頭像 發表于 09-04 12:39 ?9001次閱讀
    主站蜘蛛池模板: 2018天天操天天干 | 中文天堂最新版资源新版天堂资源 | 免费福利在线播放 | 婷婷色九月综合激情丁香 | 欧美特黄视频在线观看 | 久久性生活 | 色婷婷激婷婷深爱五月小说 | 日本三级11k影院在线 | www.九色.com | 乱色伦图片区 | 免费香蕉视频国产在线看 | 医生好大好硬好爽好紧 | 色综合亚洲天天综合网站 | 在线网站你懂得 | 欧美亚洲韩国国产综合五月天 | 久久婷婷国产一区二区三区 | 国产午夜精品理论片久久影视 | 亚洲一区二区综合 | 高清毛片aaaaaaaaa片 | 中文一级黄色片 | 色综合天天综合网看在线影院 | 免费看欧美一级片 | 国产激情视频一区二区三区 | 在线你懂的视频 | 国内精品伊人久久大香线焦 | 51精品视频免费国产专区 | 色婷婷激情五月综合 | 最好看的2019中文字幕免费高清 | 色综合天天综久久久噜噜噜久久〔 | 国产精品麻豆va在线播放 | 日韩一级欧美一级在线观看 | 最近的中文字幕免费动漫视频 | 免费大秀视频在线播放 | 伊人久久大线蕉香港三级 | 亚洲香蕉久久一区二区三区四区 | 日本aaaaa毛片在线视频 | 日韩a一级欧美一级 | 欧美视频在线观在线看 | 国产精品久久久亚洲 | 婷婷久久久五月综合色 | 天天操夜夜爱 |