位置: IT常识 - 正文

【ROS2&AI】电脑摄像头、intel-D435,利用ros2发布订阅图像(Python)(ros 2)

编辑:rootadmin
【ROS2&AI】电脑摄像头、intel-D435,利用ros2发布订阅图像(Python) 本文欲分享两个代码来实现图像的传输,利用ros2,ROS2~

推荐整理分享【ROS2&AI】电脑摄像头、intel-D435,利用ros2发布订阅图像(Python)(ros 2),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:ros1,ros api,ros1,ros1 alk,ros1,rodian,ros 2,rodian,内容如对您有帮助,希望把文章链接给更多的朋友!

配置: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 python3import rclpyfrom rclpy.node import Nodeimport cv2from cv_bridge import CvBridge, CvBridgeErrorimport numpy as npimport timefrom sensor_msgs.msg import Imageclass 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 = CvBridge() # 转换为ros2的消息类型(imgmsg)的工具 while True: # 以下三行为图像的消息转换,frame --> np.array --> imgmsg(可直接ros2发布) ret, frame = capture.read() frame = np.array(cv2.flip(frame,1)) # 镜像操作,且转为numpy.array # 转换为ros2消息类型,且解码方式为b(blue)、g(green)、r(red) data = bridge.cv2_to_imgmsg(frame,encoding="bgr8") image_pub.publish(data) # 发布 转换好的 图像类型消息1.2 接收端 如下#!/usr/bin/env python3import rclpyfrom rclpy.node import Nodeimport cv2from cv_bridge import CvBridge, CvBridgeErrorfrom sensor_msgs.msg import Imagebridge = CvBridge() # 转换为ros2的消息类型(imgmsg)的工具class NodeSubscribe(Node): def __init__(self,name): super().__init__(name) self.get_logger().info("大家好,我是%s!" % name) def callback(self,data): global bridge # ros2消息类型(imgmsg)转换为np.array cv_img = bridge.imgmsg_to_cv2(data, "bgr8") cv2.imshow("frame" , cv_img) # 显示接受到的图像数据 cv2.waitKey(1)def main(args=None): rclpy.init() node = NodeSubscribe("image_node") # 实例化创建一个节点--image_node # 创建一个话题(image_data)得与发送端一致,定义其中的消息类型为Image。利用callback函数持续接收 node.create_subscription(Image,'image_data', node.callback, 10) rclpy.spin(node) rclpy.shutdown()1.3 运行演示

(ROS2 需要建立工作空间,把代码放在相应的工作区并配置好配置文件):

【ROS2&AI】电脑摄像头、intel-D435,利用ros2发布订阅图像(Python)(ros 2)

 2. 利用D435 传输图像,直接上代码

首先需要通过realsense库获取D435相机的视频流frame,接下来就是和上述传输视频流一样了。详细的解释已在代码中注释,直接看代码即可。

2.1 发送端 如下

#!/usr/bin/env python3import rclpyfrom rclpy.node import Nodeimport cv2from cv_bridge import CvBridge, CvBridgeErrorimport numpy as npfrom sensor_msgs.msg import Imageimport pyrealsense2 as rs# ========== 以下为d435相机的配置 ========pipe = rs.pipeline()cfg = rs.config()cfg.enable_stream(rs.stream.depth, 640, 480, rs.format.z16, 30)cfg.enable_stream(rs.stream.color, 640, 480, rs.format.bgr8, 30)profile = pipe.start(cfg)align_to = rs.stream.coloralign = rs.align(align_to) # combine depth map and color image# =====================================class NodePublisher(Node): def __init__(self,name): super().__init__(name) self.get_logger().info("大家好,我是%s!" % name)def main(args=None): rclpy.init(args=None) node = NodePublisher("pub_image_node") image_pub = node.create_publisher(Image,"image_data",10) image_pub2 = node.create_publisher(Image,"image_data2",10) bridge = CvBridge() while True: frame = pipe.wait_for_frames() # ==== 得到d435的 彩色图像流 === color_frame = align.process(frame).get_color_frame() color_frame = np.asanyarray(color_frame.get_data()) # ==== 得到d435的 深度图像流 === colorizer = rs.colorizer() depth_frame = align.process(frame).get_depth_frame() colored_depth_frame = np.asanyarray(colorizer.colorize(depth_frame).get_data()) # ==== 发布 彩色图像流 消息 ==== img_msg = bridge.cv2_to_imgmsg(color_frame, encoding = "bgr8") image_pub.publish(img_msg) # ==== 发布 深度图像流 消息 ==== # img_msg2 = bridge.cv2_to_imgmsg(depth_frame, encoding = "16UC1") img_msg2 = bridge.cv2_to_imgmsg(colored_depth_frame, encoding = "bgr8") image_pub2.publish(img_msg2) if __name__ =="__main__": main()

2.2 接收端 如下

#!/usr/bin/env python3import rclpyfrom rclpy.node import Nodeimport cv2from cv_bridge import CvBridge, CvBridgeErrorfrom sensor_msgs.msg import Imagebridge = CvBridge()class NodeSubscribe(Node): def __init__(self,name): super().__init__(name) self.get_logger().info("大家好,我是%s!" % name) def callback(self,data): cv_img = bridge.imgmsg_to_cv2(data, "bgr8") cv2.imshow("color_frame" , cv_img) cv2.waitKey(1) def callback2(self,data): cv_img = bridge.imgmsg_to_cv2(data, "bgr8") cv2.imshow("color_depth_frame" , cv_img) cv2.waitKey(1)def main(args=None): rclpy.init() # 建立一个节点(sub_image_node)用来接受以下两个话题中的图像数据 node = NodeSubscribe("sub_image_node") # 接收话题image_data中的图像数据,并可视化 node.create_subscription(Image,'image_data', node.callback, 10) # 接收话题image_data2中的图像数据,并可视化 node.create_subscription(Image,'image_data2', node.callback2, 10) rclpy.spin(node) rclpy.shutdown()

2.3 运行演示

(同样需要利用ROS2建立工作空间,把代码放在相应的工作区并配置好配置文件,方可运行):

3.总结

掌握好ros2基本的发布订阅框架之后,把获取的图像frame通过cvridge转化为ros2的消息类型之后,即可发布。同样接收端用把接收到的消息用cvbridge转化后,即可做后续的图像处理操作等。

详细的解释,已经在代码中的注释一一列出。有用点个赞,准备下期出个--完全零基础的基于ros2的发布订阅教程(Python)。

本文链接地址:https://www.jiuchutong.com/zhishi/289692.html 转载请保留说明!

上一篇:「ChatGPT」十分钟学会如何在本地调用API_KEY(最新版 | 附源码)(十分=1)

下一篇:AI 生成二次元女孩,免费云端部署(仅需5分钟)(ai生成二次元角色全身)

  • 教你百度知道怎样引来大量流量(百度不知道怎么用)

    教你百度知道怎样引来大量流量(百度不知道怎么用)

  • 格力wifi空调怎么连接手机(格力wifi空调怎么连接)

    格力wifi空调怎么连接手机(格力wifi空调怎么连接)

  • servicing文件夹可以删除吗(win10 servicing文件夹)

    servicing文件夹可以删除吗(win10 servicing文件夹)

  • 为什么苹果蓝牙耳机左耳不能单独使用呢(为什么苹果蓝牙耳机总是断开连接)

    为什么苹果蓝牙耳机左耳不能单独使用呢(为什么苹果蓝牙耳机总是断开连接)

  • 淘宝什么情况下会被禁言(淘宝什么情况下不能代付)

    淘宝什么情况下会被禁言(淘宝什么情况下不能代付)

  • 华为recyclebinhw能删吗(华为recyclebinhw里面的文件能删吗)

    华为recyclebinhw能删吗(华为recyclebinhw里面的文件能删吗)

  • 冰凉贴能给手机散热吗(冰凉贴能给手机用吗)

    冰凉贴能给手机散热吗(冰凉贴能给手机用吗)

  • 三星手机reboot system now是什么意思(三星手机怎么截屏)

    三星手机reboot system now是什么意思(三星手机怎么截屏)

  • 高通和骁龙的区别(高通与骁龙的区别)

    高通和骁龙的区别(高通与骁龙的区别)

  • 华为平板ags2al00叫什么(华为平板ags2al00是畅享几)

    华为平板ags2al00叫什么(华为平板ags2al00是畅享几)

  • gps定位器可以换卡吗(gps定位器换卡怎么弄)

    gps定位器可以换卡吗(gps定位器换卡怎么弄)

  • 苹果11显示充电口有液体(苹果11显示充电但是充不进去怎么回事)

    苹果11显示充电口有液体(苹果11显示充电但是充不进去怎么回事)

  • iphonex快充损害电池吗(苹果x快充会不会损坏电池)

    iphonex快充损害电池吗(苹果x快充会不会损坏电池)

  • 爱奇艺vip可以同时登录几个(爱奇艺vip可以一起用吗)

    爱奇艺vip可以同时登录几个(爱奇艺vip可以一起用吗)

  • 金立怎么停用故事锁屏(金立怎么关闭)

    金立怎么停用故事锁屏(金立怎么关闭)

  • 探探必须开会员才能聊天吗(探探会员有必要开吗)

    探探必须开会员才能聊天吗(探探会员有必要开吗)

  • 怎么制作系统u盘win7(怎么制作系统镜像)

    怎么制作系统u盘win7(怎么制作系统镜像)

  • 抖音变老特效在哪里找(抖音里变老的特效在哪里找)

    抖音变老特效在哪里找(抖音里变老的特效在哪里找)

  • 微信添加好友未通过怎么找记录(微信添加好友未通过)

    微信添加好友未通过怎么找记录(微信添加好友未通过)

  • 搜狗浏览器如何设置拦截(搜狗浏览器如何把网页保存到桌面)

    搜狗浏览器如何设置拦截(搜狗浏览器如何把网页保存到桌面)

  • win10护眼模式在哪里? win10护眼模式的使用方法(win10护眼模式在哪)

    win10护眼模式在哪里? win10护眼模式的使用方法(win10护眼模式在哪)

  • 华为p50e最新曝光详情(华为p50新款)

    华为p50e最新曝光详情(华为p50新款)

  • ReID行人重识别(训练+检测,附代码),可做图像检索,陌生人检索等项目(行人重识别map)

    ReID行人重识别(训练+检测,附代码),可做图像检索,陌生人检索等项目(行人重识别map)

  • 【数据挖掘实战】——家用电器用户行为分析及事件识别(BP神经网络)(数据挖掘技术介绍)

    【数据挖掘实战】——家用电器用户行为分析及事件识别(BP神经网络)(数据挖掘技术介绍)

  • 加班费要计入个人账户吗
  • 退税现金流量表做哪里
  • 增值税结转会计科目
  • 山东省注册税务师协会官网
  • 会计运费怎么算的
  • 利润分配会计处理例题及解析
  • 冲减暂估成本的会计分录
  • 其他应收款有哪些情况
  • 一般纳税人拿到小规模的专票
  • 实收资本的印花税怎么交
  • 预付的房租计入什么费用
  • 出口企业退税分录
  • 自然人转让股权给自己的公司
  • 公益性生物资产属于什么科目
  • 普通发票扣税
  • 垫付被骗客服承诺退款
  • 少记财务费用如何记账
  • 扣员工餐费需要缴纳个税吗
  • 收购个人独资企业的税收
  • 个人独资企业个税税率表2023
  • 建筑总包会计分录
  • 增值税确认平台一直显示该网站出现问题
  • 收到境外公司服务费
  • 资产总额是资产负债表中的哪个数
  • 年终奖个人所得税缴纳标准
  • 增值税纳税申报表在哪里打印
  • 预收账款税收政策
  • 上市公司资产重组办法
  • 实收资本怎样入账
  • 手动滑屏怎么操作
  • 收到加盟费怎么入账
  • 企业奠基费用如何入账
  • 报考中级会计的工作证明
  • 电脑开机弹出很多广告窗口怎么办win10
  • 系统之家的系统免费吗
  • 市面最高版本
  • 404 not found意思详细介绍
  • 农产品个体销售税率多少
  • vue3中props
  • php 随机数
  • laravel phpstudy
  • 卖废品收入计入需要交税吗
  • 微信支付开发需要什么条件
  • reset fields
  • 计算机视觉项目文档
  • php短信验证
  • 车票抵扣增值税在哪里申报
  • 代收代付业务需要开发票吗
  • 增值税普通发票有什么用
  • 帝国cms视频教程
  • 为什么出台农产品质量安全法
  • 加速折旧法是指在固定资产使用的早期少提折旧
  • mysql 分片优缺点
  • 每月随工资扣的房费缴纳个税吗怎么算
  • 库存商品余额在借方是什么意思
  • 公司送礼计入什么会计科目
  • 非居民企业所得税税率
  • 公司做的形象墙效果图
  • 公司的在建工程入账会计分录没有付款
  • 大数据量高并发症有哪些
  • win8怎么添加我的电脑到桌面
  • 智能abc不能输入汉字
  • 系统磁盘碎片整理
  • win8开始在哪里
  • win8资源管理器在哪
  • putty连接ubuntu
  • win系统文件在哪里
  • 安装windows 8.1
  • win8的显示设置
  • win8.1系统补丁
  • js上滑翻页
  • shell脚本中获取日期
  • android 动态化方案
  • javascript面向对象 第三方类库
  • jQuery AJAX timeout 超时问题详解
  • js实现无限循环
  • 电子税务局网页版登录入口官网
  • 福建省电子税务局官网登录入口
  • 关于房地产企业所得税涉税处理表述正确的有
  • 河南省国家税务总局网站
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设