本文欲分享两个代码来实现图像的传输,利用ros2,ROS2~
配置:Ubuntu20.04 ; Python ;ROS2 foxy ; opencv ;电脑相机 or Intel-D435相机
与传统的传输列表、字符串msg不同(定义消息类型直接发送即可),利用ros2传输图像需要把图像frame转为image类型的msg。
流程如下:
opencv或者realsense获取得到的图像(frame)--> np.array --> msg消息类型(利用CvBridge)
1. 利用电脑摄像头 传输图像,直接上代码
1.1 发送端 如下
#!/usr/bin/env python3
import rclpy
from rclpy.node import Node
import cv2
from cv_bridge import CvBridge, CvBridgeError
import numpy as np
import time
from sensor_msgs.msg import Image
class NodePublisher(Node):
def __init__(self,name):
super().__init__(name)
self.get_logger().info("大家好,我是%s!" % name)
def main(args=None):
height = 480
width = 640
capture = cv2.VideoCapture(0)
#这里opencv的图像大小与ros发布的图像大小一致
capture.set(cv2.CAP_PROP_FRAME_WIDTH, width)
capture.set(cv2.CAP_PROP_FRAME_HEIGHT, height)
capture.set(cv2.CAP_PROP_FOURCC, cv2.VideoWriter_fourcc('M', 'J', 'P', 'G'))
rclpy.init()
node = NodePublisher("Camera_image") # 实例化创建一个节点
# 创建一个话题--image_data,定义其中的消息类型为Image
image_pub = node.create_publisher(Image,"image_data",10)
bridge = CvBridg