色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

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

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

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

話題接口的定義與使用

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

圖片

運行效果

現(xiàn)在我們會運行三個節(jié)點:

第一個節(jié)點,將驅(qū)動相機并發(fā)布圖像話題,此時的話題數(shù)據(jù)使用的是ROS中標準定義的Image圖像消息;

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

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

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

$ 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坐標

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

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

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

程序調(diào)用

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

發(fā)布者接口調(diào)用

learning_topic/interface_object_pub.py

#!/usr/bin/env python3# -*- coding: utf-8 -*-"""@作者: 古月居@說明: ROS2接口示例-發(fā)布目標位置"""import rclpy                                       # ROS2 Python接口庫from rclpy.node import Node                        # ROS2 節(jié)點類from sensor_msgs.msg import Image                  # 圖像消息類型from cv_bridge import CvBridge                     # ROS與OpenCV圖像轉(zhuǎn)換類import cv2                                         # Opencv圖像處理庫import numpy as np                                 # Python數(shù)值計算庫from learning_interface.msg import ObjectPosition  # 自定義的目標位置消息lower_red = np.array([0, 90, 128])                 # 紅色的HSV閾值下限upper_red = np.array([180, 255, 255])              # 紅色的HSV閾值上限"""創(chuàng)建一個訂閱者節(jié)點"""class ImageSubscriber(Node):    def __init__(self, name):        super().__init__(name)                                  # ROS2節(jié)點父類初始化        self.sub = self.create_subscription(            Image, 'image_raw', self.listener_callback, 10)     # 創(chuàng)建訂閱者對象(消息類型、話題名、訂閱者回調(diào)函數(shù)、隊列長度)        self.pub = self.create_publisher(            ObjectPosition, "object_position", 10)              # 創(chuàng)建發(fā)布者對象(消息類型、話題名、隊列長度)        self.cv_bridge = CvBridge()                             # 創(chuàng)建一個圖像轉(zhuǎn)換對象,用于OpenCV圖像與ROS的圖像消息的互相轉(zhuǎn)換        self.objectX = 0        self.objectY = 0       def object_detect(self, image):              hsv_img = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)        # 圖像從BGR顏色模型轉(zhuǎn)換為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')         # 輸出日志信息,提示已進入回調(diào)函數(shù)        image = self.cv_bridge.imgmsg_to_cv2(data, 'bgr8')      # 將ROS的圖像消息轉(zhuǎn)化成OpenCV圖像        position = ObjectPosition()        self.object_detect(image)                               # 蘋果檢測        position.x, position.y = int(self.objectX), int(self.objectY)        self.pub.publish(position)                              # 發(fā)布目標位置def main(args=None):                                        # ROS2節(jié)點主入口main函數(shù)    rclpy.init(args=args)                                   # ROS2 Python接口初始化    node = ImageSubscriber("topic_webcam_sub")              # 創(chuàng)建ROS2節(jié)點對象并進行初始化    rclpy.spin(node)                                        # 循環(huán)等待ROS2退出    node.destroy_node()                                     # 銷毀節(jié)點對象    rclpy.shutdown()                                        # 關閉ROS2 Python接口

訂閱者接口調(diào)用

learning_topic/interface_object_sub.py

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

接口命令行操作

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

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

    關注

    33

    文章

    8612

    瀏覽量

    151290
  • 相機
    +關注

    關注

    4

    文章

    1354

    瀏覽量

    53656
  • 通信接口
    +關注

    關注

    3

    文章

    239

    瀏覽量

    30999
  • ROS
    ROS
    +關注

    關注

    1

    文章

    278

    瀏覽量

    17022
收藏 人收藏

    評論

    相關推薦

    iphone接口定義

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

    USB接口定義

    USB接口定義 USB接口定義  更多盡在:USB產(chǎn)品網(wǎng)
    發(fā)表于 04-21 11:58 ?3.4w次閱讀

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

    MIDI 接口定義和游戲桿接口定義圖 MIDI 接口和 PC 游戲桿接口是共用的,外觀為 15
    發(fā)表于 11-27 20:13 ?4116次閱讀
    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 信
    發(fā)表于 04-27 17:33 ?1.6w次閱讀

    手機usb接口定義

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

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

    MIDI接口信號定義與游戲桿接口功能定義 MIDI接口和PC游戲桿接口是共用的,外觀見下圖:
    發(fā)表于 05-03 23:27 ?6806次閱讀
    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):
    發(fā)表于 08-21 22:40 ?7507次閱讀
    SCART<b class='flag-5'>接口</b>功能<b class='flag-5'>定義</b>

    USB接口與miniUSB接口定義

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

    常用接口定義

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

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

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

    接口定義 通信接口的作用

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

    ROS通信接口機制介紹

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

    服務通信接口定義與使用

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

    SIM卡座的接口定義

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

    DDR4接口引腳定義及功能

    DDR4(Double Data Rate 4)接口引腳的具體定義和功能是一個復雜且詳細的話題,涉及到電源、地、控制信號、時鐘信號、地址信號以及數(shù)據(jù)信號等多個方面。
    的頭像 發(fā)表于 09-04 12:39 ?7152次閱讀
    主站蜘蛛池模板: av狼新人开放注册区| 黑人性xxx| 福利视频一二三在线观看| 我半夜摸妺妺的奶C了她软件| 偷窥wc美女毛茸茸视频| 亚洲一品AV片观看五月色婷婷 | 久久精品美女久久| 欧洲内射VIDEOXXX3D| 香蕉久久av一区二区三区| 最近的中文字幕2019国语| 疯狂小护士| 久久久影院亚洲精品| 三级网站午夜三级| 影音先锋av男人资源| 儿子操妈妈视频| 久久不射网| 色人阁综合| 最近韩国日本免费观看mv免费版| 丰满少妇发泄14p| 久久免费高清| 双性人皇上被c到哭| 最近中文字幕MV免费高清视频8| 丰满的女朋友韩国版在线观看| 精品国产乱码久久久久久免费流畅| 女侠含泪巨臀迎合79| 亚洲免费三级电影| 波多野结衣 无码片| 久久re视频这里精品09首页| 日日干夜夜艹| 92看看福利午夜影院| 和尚轮流澡到高潮H| 日韩免费一区二区三区在线| 在线亚洲免费| 国产亚洲精品精品精品| 人妻天天爽夜夜爽三区麻豆A片 | 特级淫片大乳女子高清视频| 970女主播电台歌曲| 好男人好资源视频高清| 色欲AV蜜臀AV在线观看麻豆| 91蜜桃视频| 久久精品视频在线直播6|