位置: 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生成二次元角色全身)

  • 米哈游绑定手机解绑(米哈游绑定手机是别人的)

    米哈游绑定手机解绑(米哈游绑定手机是别人的)

  • vivo x27出厂设置如何恢复(vivo手机x27出厂设置在哪里)

    vivo x27出厂设置如何恢复(vivo手机x27出厂设置在哪里)

  • 荣耀9x是不是华为9x(华为荣耀9x是华为生产的吗)

    荣耀9x是不是华为9x(华为荣耀9x是华为生产的吗)

  • 笔记本除法符号在哪里(笔记本除法符号怎么打)

    笔记本除法符号在哪里(笔记本除法符号怎么打)

  • freebuds3第一次充电要多久(freebuds3i充电多久)

    freebuds3第一次充电要多久(freebuds3i充电多久)

  • 微信收款有额度限制吗(微信收款有额度吗?)

    微信收款有额度限制吗(微信收款有额度吗?)

  • 淘宝拍卖捡漏技巧(有没有人在淘宝拍卖捡漏的)

    淘宝拍卖捡漏技巧(有没有人在淘宝拍卖捡漏的)

  • qq随心贴怎么写给朋友(qq随心贴怎么写才好听给闺蜜)

    qq随心贴怎么写给朋友(qq随心贴怎么写才好听给闺蜜)

  • qq显示timi中是什么意思

    qq显示timi中是什么意思

  • 无线路由器几年换一次(无线路由器几年需要更换)

    无线路由器几年换一次(无线路由器几年需要更换)

  • 抖音图片怎么保存到手机(抖音图片怎么保存到相册)

    抖音图片怎么保存到手机(抖音图片怎么保存到相册)

  • 支付宝安全验证没有成功怎么办(支付宝安全验证在哪里)

    支付宝安全验证没有成功怎么办(支付宝安全验证在哪里)

  • 剪映有美颜功能吗(剪映美颜功能没有了)

    剪映有美颜功能吗(剪映美颜功能没有了)

  • 苹果8日版和国行有什么区别(苹果8日版和国行哪个好)

    苹果8日版和国行有什么区别(苹果8日版和国行哪个好)

  • 手机处理器重不重要(手机处理器不行)

    手机处理器重不重要(手机处理器不行)

  • 苹果11激活一直显示正在更新(苹果11激活一直显示各国您好)

    苹果11激活一直显示正在更新(苹果11激活一直显示各国您好)

  • nova6 5g和4g的区别(nova6 5g和4g的区别手机壳)

    nova6 5g和4g的区别(nova6 5g和4g的区别手机壳)

  • oppoa11x怎么设置解锁密码(OPPOA11X怎么设置锁屏壁纸)

    oppoa11x怎么设置解锁密码(OPPOA11X怎么设置锁屏壁纸)

  • vivos5怎么查看流量(vivo手机如何查看手机流量)

    vivos5怎么查看流量(vivo手机如何查看手机流量)

  • 微信清理聊天记录可以恢复吗(微信清理聊天记录后找不到群聊了)

    微信清理聊天记录可以恢复吗(微信清理聊天记录后找不到群聊了)

  • 拼多多拍错了怎么取消(拼多多拍错了怎么办)

    拼多多拍错了怎么取消(拼多多拍错了怎么办)

  • 快手怎么还原旧版本(快手怎么还原以前的版本)

    快手怎么还原旧版本(快手怎么还原以前的版本)

  • 索尼xperia1有红外遥控吗

    索尼xperia1有红外遥控吗

  • 苹果商店更新不了app(苹果商店更新不动)

    苹果商店更新不了app(苹果商店更新不动)

  • 解决云服务器远程登录SSH显示-bash-4.2问题和解决方法(云服务器远程端口)

    解决云服务器远程登录SSH显示-bash-4.2问题和解决方法(云服务器远程端口)

  • 收到促销费方怎么做账
  • 发票抬头公司名称有空格
  • 对公走账是什么意思
  • 建筑工程查帐征收税
  • 已认证抵扣的进项发票,次月开具红字发票信息表,凭证
  • 缴纳增值税金税率是多少
  • 免税企业取得增值税专用发票怎么处理
  • 广告喷绘增值税怎么算
  • 土地增值税计算表
  • 销售佣金税点
  • 采购合同安装服务费审价规定
  • 公益捐款
  • 帮对方公司垫付违法吗
  • 离职补偿金怎么计算
  • 汽修厂的财务怎样做账
  • 发放工资的会计科目
  • 销项增值税普通发票
  • 招投标交易服务平台有哪些
  • 境外取得收入
  • 简易计税的方式
  • 改变资金用途的说明
  • 软件维护费清单
  • 股权出售是利空还是利好
  • 经济作物国家有什么补助吗
  • 开房租发票交的税,因优惠政策退税,怎么账务处理
  • 出售货物货款预缴增值税
  • 如何制作win7系统u盘安装盘
  • 报税时漏报进项怎么办
  • 产品销售核算会计分录
  • php preg_quote
  • el-input_inner
  • 直接材料成本计算公式
  • 星空下的灯塔作文
  • php读取文件的一部分
  • yolov5标签格式
  • php屏蔽错误
  • web前端面试题最新
  • 残保金怎么核算
  • 如何利用数据有效性制作单元格菜单
  • php中常量
  • 员工预支款计入什么科目
  • prompt命令用法
  • 加计抵减四项服务是什么?
  • 出口商品没有发票可以入收入吗
  • sql查询表中指定数据
  • php配置文件在哪
  • 纳税申报怎么做
  • 债务重组与资产重组
  • 研发支出 期末
  • 税控维护费跨年怎么算
  • 餐饮业燃气费计入什么科目
  • 外资企业取得合法地位
  • 电子缴税付款凭证是什么结算方式
  • 什么是定额发票图片
  • 商标无形资产摊销计入什么科目
  • 企业会计准则中职工薪酬
  • 期后事项的分类及处理原则
  • 工业企业接受捐赠收入计入
  • sqlserver数据库备份
  • ubuntu tc
  • windows xp删除所有数据
  • 怎么判断电脑windows几
  • win10 自带
  • win8系统安装教程图解
  • 向量上面有个倒着的v
  • alt用不了
  • 零磁道的重要性
  • js中的三种弹出式消息提醒的命令是什么
  • shell的实现
  • shell错误日志输出
  • Python安装包
  • ug输入代码
  • jquery修改表格数据
  • jquery获取动态生成的元素的值
  • android自定义view的三大流程
  • jquery mvvm框架
  • python模拟ajax
  • 3.5车船税2400还是3000
  • 普通发票管理系统官网
  • 两会热点有哪些呀?
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设