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

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

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

3天內不再提示

如何在ROS2中開發一種計算機視覺模塊呢?

新機器視覺 ? 來源:新機器視覺 ? 2023-09-21 09:44 ? 次閱讀

一、視覺模塊架構設計

考慮的幾個方面:

傳感器主要使用話題(topic)通信機制持續向外部發布圖像信息;

圖像接受與處理、以及發送處理結果節點有兩種形式,一種是使用服務(service)通信機制,一種是使用話題機制,兩者均可。本人在網上搜集了一些信息,并且參考了chatgpt的意見,得到了一個不錯的結果:話題速度更快,并且實現更簡單,開發中一般默認使用話題,如果隨著開發的進行,話題不再滿足我們的需求,可以轉至service機制。由于工業機械臂中的傳感器(camera)和AI模型(一般一個機械臂只會用到一個)并不復雜,所以我選擇topic通信機制開發圖像數據的接受處理、結果發送模塊。

使用訂閱者來接受CV model的處理結果。

[sensor publisher (camera_pub.py)] --> [subscriber and publisher node (cam_sub_and_detection_pub.py)] --> [subscriber (detection_results_sub.py)]

二、代碼編寫

一、新建工作空間

1. 創建src文件夾以存放源碼;

2. 在src目錄下新建cv_devel_pkg與interfaces_pkg,分別存放視覺開發模塊的源碼與topic數據接口(interface)文件;

818fbfd2-57ba-11ee-939d-92fbcf53809c.png

2.1 interfaces_pkg編寫

需要注意的是,在新建interface pkg時,build type暫時只能選擇c++(信息來源:ros官方文檔),并且我們需要修改cmakelists.txt與package.xml:

cmakelists.txt:

新增:

# find_package( REQUIRED)


find_package(geometry_msgs REQUIRED)
find_package(rosidl_default_generators REQUIRED)


rosidl_generate_interfaces(${PROJECT_NAME}
"msg/DetectionResults.msg"
s  DEPENDENCIES geometry_msgs
)

package.xml:

新增:

 
geometry_msgs
rosidl_default_generators
rosidl_default_runtime
rosidl_interface_packages
 

其中,DetectionResults.msg中存放的信息是結果中心坐標的msg:

int32 position_x

int32 position_y

至此,interface pkg代碼編寫結束。

2.2 cv_devel_pkg編寫

819e9b88-57ba-11ee-939d-92fbcf53809c.png

(1) camera_pub.py

import rclpy
from rclpy.node import Node
from cv_bridge import CvBridge
from sensor_msgs.msg import Image


import cv2




class CameraPubNode(Node):
def __init__(self, name):
super().__init__(name)
self.pub = self.create_publisher(Image, 'image_raw', 10)
self.timer = self.create_timer(0.5, self.timer_callback)
self.cap = cv2.VideoCapture(0)
self.cv_bridge = CvBridge()




def timer_callback(self):
        ret = self.cap.grab()
if ret:
            flag, frame = self.cap.retrieve()
if flag:
self.pub.publish(self.cv_bridge.cv2_to_imgmsg(frame, 'bgr8'))
self.get_logger().info('Publish image successfully!')
else:
self.get_logger().info('Did not get image info!')




def main(args=None):
    rclpy.init(args=args)
    node = CameraPubNode('CameraPubNode')
    rclpy.spin(node)
    node.destroy_node()
    rclpy.shutdown()

編寫完成后,在pkg目錄下的setup.py中注冊節點,并分別執行colcon build、source install/local_setup.sh、ros2 run cv_devel_pkg camera_pub。

如圖,正常運行:

81a7a3e0-57ba-11ee-939d-92fbcf53809c.png

(2) cam_sub_and_detection_pub.py

import rclpy
from rclpy.node import Node
from sensor_msgs.msg import Image
from interfaces_pkg.msg import DetectionResults
from cv_bridge import CvBridge


import cv2
import numpy as np




class CamSubAndDetectionPubNode(Node):
def __init__(self, name):
        super().__init__(name)
        self.sub = self.create_subscription(Image, 'image_raw', self.listen_callback, 10)
        self.pub = self.create_publisher(DetectionResults, 'detection_results', 10)
        self.cv_bridge = CvBridge()
        self.position_x = 0
        self.position_y = 0


def listen_callback(self, data):
        self.get_logger().info('Get image! I will process it!')
        image = self.cv_bridge.imgmsg_to_cv2(data, 'bgr8')
        self.detect(image)
        position = DetectionResults()
        position.position_x = self.position_x
        position.position_y = self.position_y
        self.get_logger().info('Position is: ({}, {})'.format(self.position_x, self.position_y))
        self.pub.publish(position)


def detect(self, image):
pass#這里可以嵌入自己的機器視覺或者AI視覺代碼


def main(args=None):
    rclpy.init(args=args)
    node = CamSubAndDetectionPubNode('CamSubAndDetectionPubNode')
    rclpy.spin(node)
    node.destroy_node()
    rclpy.shutdown()

(3)detection_results_sub.py

import rclpy
from rclpy.node import Node
from interfaces_pkg.msg import DetectionResults




class DetectionResultsSubNode(Node):
def __init__(self, name):
super().__init__(name)
self.sub = self.create_subscription(DetectionResults, 'detection_results', self.listen_callback, 10)


def listen_callback(self, data):
self.get_logger().info('I get the position: ({},{})'.format(data.position_x, data.position_y))




def main(args=None):
    rclpy.init(args=args)
    node = DetectionResultsSubNode('detection_results_sub_node')
    rclpy.spin(node)
    node.destroy_node()
    rclpy.shutdown()

三、完工

cv_devel_pkg中的節點代碼全部編寫完成后,在setup.py中注冊,然后build & run。

檢測結果展示:

81b74674-57ba-11ee-939d-92fbcf53809c.png

三個節點可正常運行:

81e25724-57ba-11ee-939d-92fbcf53809c.png







審核編輯:劉清

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

    關注

    2552

    文章

    51325

    瀏覽量

    755372
  • 計算機視覺
    +關注

    關注

    8

    文章

    1699

    瀏覽量

    46056
  • C++語言
    +關注

    關注

    0

    文章

    147

    瀏覽量

    7011
  • SRC
    SRC
    +關注

    關注

    0

    文章

    61

    瀏覽量

    18020
  • ROS
    ROS
    +關注

    關注

    1

    文章

    279

    瀏覽量

    17042

原文標題:在ROS2中開發計算機視覺模塊

文章出處:【微信號:vision263com,微信公眾號:新機器視覺】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    系統鏡像Ubuntu_ROS2ROS2是什么意思,帶有ROS2開發環境嗎?

    請問下,百度文庫資料里面,下圖所示的系統鏡像Ubuntu_ROS2ROS2是什么意思,帶有ROS2
    發表于 03-01 23:06

    機器視覺計算機視覺的關系簡述

    應用提高產品質量、生產效率以及操作安全性。計算機視覺主要有兩工作模式,一種是參照仿生學的方法,以人類視覺系統的結構為主要工作原理,建立相應
    發表于 05-13 14:57

    ROS2的安裝與使用 精選資料推薦

    ros2的烏龜仿真turtlesim,介紹topic,service,action等元素及其使用,介紹ros的基本操作
    發表于 08-30 08:24

    一種計算機用包裝搬運裝置

    本實用新型屬于搬運裝置技術領域,具體涉及一種計算機用包裝搬運裝置。背景技術:計算機俗稱電腦,是一種用于高速計算的電子
    發表于 09-02 06:02

    何在ROS2運行小烏龜

    ros-dashing-turtlesim】注意:上條指令紅色標識的dashing是我安裝的ROS2的dashing版本,個人需要根據自己安裝的版本去修改。輸入【
    發表于 11-05 06:08

    深度學習與傳統計算機視覺簡介

    單板計算機(指所有的邏輯線路、定時線路、內部存儲器和外部界面都包含在塊單獨的印制板上的一種算機)上提供嵌入式視覺的各種選項。近年來,隨著
    發表于 12-23 06:17

    何在RK3288上去安裝Opencv開源計算機視覺

    Opencv是什么?如何在RK3288上去安裝Opencv開源計算機視覺
    發表于 02-16 07:06

    【昉·星光 2 高性能RISC-V單板計算機體驗】四:在 VisionFive2 上安裝 ROS2 humble

    在 VisionFive2 上安裝 ROS2 humble ROS(Robot Operating System)是一種用于編寫機器人軟件的靈活框架。它是
    發表于 09-04 03:33

    【昉·星光 2 高性能RISC-V單板計算機體驗】五:在 VisionFive2 上體驗 ROS2 humble

    在 VisionFive2 上體驗 ROS2 humble 、系統準備 參考 在 VisionFive2 上安裝 ROS2 humble
    發表于 09-04 04:59

    Linux嵌入式開發筆記(六)在ROS2運行小烏龜實例

    ros-dashing-turtlesim】注意:上條指令紅色標識的dashing是我安裝的ROS2的dashing版本,個人需要根據自己安裝的版本去修改。輸入【
    發表于 11-02 15:21 ?10次下載
    Linux嵌入式<b class='flag-5'>開發</b>筆記(六)在<b class='flag-5'>ROS2</b><b class='flag-5'>中</b>運行小烏龜實例

    計算機視覺識別是如何工作的?

    計算機視覺識別是一種人工智能技術,旨在使計算機系統從數字圖像、視頻等視覺信息識別和提取有意義信
    的頭像 發表于 02-09 13:41 ?3919次閱讀

    機器視覺計算機視覺的區別

    機器視覺計算機視覺的區別 機器視覺計算機視覺是兩個相關但不同的概念。雖然許多人使用這兩個術語
    的頭像 發表于 08-09 16:51 ?2064次閱讀

    DDS在ROS2的應用

    DDS在ROS2的應用 DDS在ROS2系統的位置至關重要,所有上層建設都建立在DDS之上。在這個ROS2的架構圖中,藍色和紅色部分就是
    的頭像 發表于 11-24 17:54 ?971次閱讀
    DDS在<b class='flag-5'>ROS2</b><b class='flag-5'>中</b>的應用

    ROS2自帶例程測試

    如果你是ROS2開發者,可能對剛才我們使用的ROS2命令比較熟悉,這時你可能也會產生個問題:我們之前也安裝了
    的頭像 發表于 11-28 16:29 ?1008次閱讀
    <b class='flag-5'>ROS2</b><b class='flag-5'>中</b>自帶例程測試

    在TogetherROS如何安裝ROS2功能包

    安裝ROS2功能包 接下來,還有個很重要的配置,那就是安裝ROS2功能包,我們說TogetherROS是基于ROS2深度優化的,很多模塊
    的頭像 發表于 12-01 16:02 ?1037次閱讀
    在TogetherROS<b class='flag-5'>中</b>如何安裝<b class='flag-5'>ROS2</b>功能包
    主站蜘蛛池模板: 国产欧美日韩视频怡春院| 亚洲专区中文字幕视频专区| 人与人特黄一级| 小黄文污到你湿| 2021精品高清卡1卡2卡3麻豆| 高傲教师麻麻被同学调教123| 午夜理论电影在线观看亚洲| 免费在线a| 午夜勾魂曲| 99视频这里只有精品| 黄色大片aa| 少妇高潮惨叫久久久久久欧美| 战狼4在线观看完免费完整版| 午夜视频在线网站| AV无码国产精品午夜A片麻豆| 九九在线免费视频| 婷婷久久综合九色综合伊人色| 99久久国产综合色| 岛国片免费看| 免费无码又爽又黄又刺激网站 | 亚洲AV 中文字幕 国产 欧美| 日本无翼恶漫画大全优优漫画| 美女脱光app| 国产偷啪自怕网| 肉色欧美久久久久久久蜜桃| java农村野外妇女hd| 美国特级成人毛片| 欧美亚洲日韩一道免费观看| 在线播放一区| 久久超碰国产精品最新| 亚洲精品国偷拍自产在线观看蜜臀| 国产精品96久久久久久AV网址| 女人 我狠狠疼你| 91av成年影院在线播放| 97色伦亚洲自偷| 久久亚洲午夜牛牛影视| 在线免费国产| 麻美ゆま夫の目の前で犯 | 麻豆精品传媒卡一卡二传媒短视频| 亚洲免费无l码中文在线视频| 国产免费网站看v片在线|