当前位置:网站首页>ROS2之OpenCV基础代码对比foxy~galactic~humble
ROS2之OpenCV基础代码对比foxy~galactic~humble
2022-06-12 00:34:00 【zhangrelay】
参考:
automaticaddison.com/getting-started-with-opencv-in-ros-2-galactic-python/
automaticaddison.com/getting-started-with-opencv-in-ros-2-foxy-fitzroy-python/推荐使用:YOLOX + ROS2 object detection package
也可以参考:github.com/jeffreyttc/opencv_ros2
vision_opencv
ros2 vision_opencv 包含将 ROS 2 与 OpenCV 接口的包,OpenCV 是一个专为计算效率和实时计算机视觉应用程序而设计的库。 该存储库包含:
- cv_bridge:ROS 2 图像消息和 OpenCV 图像表示之间的桥梁
- image_geometry:处理图像和像素几何的方法集合
- opencv_tests:集成测试以使用带有 opencv 的包的功能
- vision_opencv:安装 cv_bridge 和 image_geometry 的元包
为了将 ROS 2 与 OpenCV 一起使用,请参阅 cv_bridge 包中的详细信息。
程序适用于foxy/galactic/humble,windows/linux系统通用

在本教程中,将学习如何将 ROS 2 与流行的计算机视觉库 OpenCV 接口的基础知识。 这些基础知识将提供在机器人应用程序中添加视觉的基础。
我们将创建一个图像发布者节点以将网络摄像头数据(即视频帧)发布到一个主题,我们将创建一个订阅该主题的图像订阅者节点。
pub发布:
| foxy | galactic |
|
|
sub订阅:
| foxy | galactic |
|
|
humble:
pub
# Basic ROS 2 program to publish real-time streaming
# video from your built-in webcam
# Author:
# - Addison Sears-Collins
# Import the necessary libraries
import rclpy # Python Client Library for ROS 2
from rclpy.node import Node # Handles the creation of nodes
from sensor_msgs.msg import Image # Image is the message type
from cv_bridge import CvBridge # Package to convert between ROS and OpenCV Images
import cv2 # OpenCV library
class ImagePublisher(Node):
"""
Create an ImagePublisher class, which is a subclass of the Node class.
"""
def __init__(self):
"""
Class constructor to set up the node
"""
# Initiate the Node class's constructor and give it a name
super().__init__('image_publisher')
# Create the publisher. This publisher will publish an Image
# to the video_frames topic. The queue size is 10 messages.
self.publisher_ = self.create_publisher(Image, 'video_frames', 10)
# We will publish a message every 0.1 seconds
timer_period = 0.1 # seconds
# Create the timer
self.timer = self.create_timer(timer_period, self.timer_callback)
# Create a VideoCapture object
# The argument '0' gets the default webcam.
self.cap = cv2.VideoCapture(0)
# Used to convert between ROS and OpenCV images
self.br = CvBridge()
def timer_callback(self):
"""
Callback function.
This function gets called every 0.1 seconds.
"""
# Capture frame-by-frame
# This method returns True/False as well
# as the video frame.
ret, frame = self.cap.read()
if ret == True:
# Publish the image.
# The 'cv2_to_imgmsg' method converts an OpenCV
# image to a ROS 2 image message
self.publisher_.publish(self.br.cv2_to_imgmsg(frame))
# Display the message on the console
self.get_logger().info('Publishing video frame')
def main(args=None):
# Initialize the rclpy library
rclpy.init(args=args)
# Create the node
image_publisher = ImagePublisher()
# Spin the node so the callback function is called.
rclpy.spin(image_publisher)
# Destroy the node explicitly
# (optional - otherwise it will be done automatically
# when the garbage collector destroys the node object)
image_publisher.destroy_node()
# Shutdown the ROS client library for Python
rclpy.shutdown()
if __name__ == '__main__':
main()sub
# Basic ROS 2 program to subscribe to real-time streaming
# video from your built-in webcam
# Author:
# - Addison Sears-Collins
# Import the necessary libraries
import rclpy # Python library for ROS 2
from rclpy.node import Node # Handles the creation of nodes
from sensor_msgs.msg import Image # Image is the message type
from cv_bridge import CvBridge # Package to convert between ROS and OpenCV Images
import cv2 # OpenCV library
class ImageSubscriber(Node):
"""
Create an ImageSubscriber class, which is a subclass of the Node class.
"""
def __init__(self):
"""
Class constructor to set up the node
"""
# Initiate the Node class's constructor and give it a name
super().__init__('image_subscriber')
# Create the subscriber. This subscriber will receive an Image
# from the video_frames topic. The queue size is 10 messages.
self.subscription = self.create_subscription(
Image,
'video_frames',
self.listener_callback,
10)
self.subscription # prevent unused variable warning
# Used to convert between ROS and OpenCV images
self.br = CvBridge()
def listener_callback(self, data):
"""
Callback function.
"""
# Display the message on the console
self.get_logger().info('Receiving video frame')
# Convert ROS Image message to OpenCV image
current_frame = self.br.imgmsg_to_cv2(data)
# Display image
cv2.imshow("camera", current_frame)
cv2.waitKey(1)
def main(args=None):
# Initialize the rclpy library
rclpy.init(args=args)
# Create the node
image_subscriber = ImageSubscriber()
# Spin the node so the callback function is called.
rclpy.spin(image_subscriber)
# Destroy the node explicitly
# (optional - otherwise it will be done automatically
# when the garbage collector destroys the node object)
image_subscriber.destroy_node()
# Shutdown the ROS client library for Python
rclpy.shutdown()
if __name__ == '__main__':
main()边栏推荐
- What are the software development processes of the visitor push mall?
- [node] common methods of path module
- 组态王如何利用无线Host-Link通信模块远程采集PLC数据?
- MySQL basic tutorial -- MySQL transaction and storage engine
- ironSource  New functions are released, and developers can adjust advertising strategies in real time in the same session
- Microservice automation
- WPS标题段前间距设置无效解决方案
- 環境搭建2
- 2022 618 notebook shopping guide
- Characteristics of JS logical operators
猜你喜欢

IP编址概述

Redis的主从复制、哨兵模式和集群

At the digital data nextionbi online conference, traditional enterprises showed their in-depth understanding of data analysis

C language exercise: esp32 ble Low Power Bluetooth server data packaging and client data analysis

Jeecgboot 3.1.0 release, enterprise low code platform based on code generator

Microservice automation

NFS quotas:Cannot register service: RPC: Authentication error

汛期化工和危险品企业如何加强防控重大安全风险

Cube technology interpretation | detailed explanation of cube applet Technology
![[flume] notes](/img/33/50f14b0267c5e502970cee0278aa71.jpg)
[flume] notes
随机推荐
苹果手机wps文件如何发送到qq邮箱
Adult education online training website open source
Flutter uses local pictures
gin集成图形验证码
Concevoir une table MySQL pour la mise en file d'attente des messages pour stocker les données des messages
手机wps如何压缩文件打包发送
Jiaming's day13 of C learning -- structure and structure pointer
App startup process: from clicking the application icon to the activity startup process
Pycharm file name taboo
Visitors push e-commerce express without tossing about personal payment codes
chisel环境搭建(win10 + vscode)
Creating and running JMeter performance test scenarios
Convert VOC data format to coco data format
Chisel environment setup (win10 + vscode)
DPT-FSNET: DUAL-PATH TRANSFORMER BASED FULL-BAND AND SUB-BAND FUSION NETWORK FOR SPEECH ENHANCEMENT
Custom JSP tag - > concept - > lifecycle
DPT-FSNET: DUAL-PATH TRANSFORMER BASED FULL-BAND AND SUB-BAND FUSION NETWORK FOR SPEECH ENHANCEMENT
How to change the font size of Apple phone WPS
Started with trust and loyal to profession | datapipeline received a thank you letter from Shandong city commercial bank Alliance
Collation of common array functions