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

  • 网易邮箱怎么改实名认证(网易邮箱怎么改密码)

    网易邮箱怎么改实名认证(网易邮箱怎么改密码)

  • 微信超额限制怎么解除(微信超额限制怎么开通微众)

    微信超额限制怎么解除(微信超额限制怎么开通微众)

  • qq被暂时封一天怎么办(qq被暂时封一天复审严重吗)

    qq被暂时封一天怎么办(qq被暂时封一天复审严重吗)

  • error是什么异常(error是什么问题)

    error是什么异常(error是什么问题)

  • ipad app内购买是什么意思(ipadapp内购买项目要钱吗)

    ipad app内购买是什么意思(ipadapp内购买项目要钱吗)

  • 钉钉直播小窗口算时长吗(钉钉直播小窗口播放打游戏时会暂停)

    钉钉直播小窗口算时长吗(钉钉直播小窗口播放打游戏时会暂停)

  • 拉黑后短信能收到吗(拉黑后短信收到会有提示音吗)

    拉黑后短信能收到吗(拉黑后短信收到会有提示音吗)

  • 电话一接通就报验证码(打电话接通了就有嘀嘀然后正常通话)

    电话一接通就报验证码(打电话接通了就有嘀嘀然后正常通话)

  • 华为nova7万能遥控器在哪里(华为nova7pro万能遥控器)

    华为nova7万能遥控器在哪里(华为nova7pro万能遥控器)

  • 电脑关机后主机灯还亮 怎么办(电脑关机后主机上还能充电吗)

    电脑关机后主机灯还亮 怎么办(电脑关机后主机上还能充电吗)

  • 抖音已读功能怎么关闭(抖音已读功能怎么设置未读)

    抖音已读功能怎么关闭(抖音已读功能怎么设置未读)

  • 三星手机怎么看已连wifi密码(三星手机怎么看电池健康度)

    三星手机怎么看已连wifi密码(三星手机怎么看电池健康度)

  • 快手打pk怎么回事(快手打pk怎么打)

    快手打pk怎么回事(快手打pk怎么打)

  • 互联网诞生在哪一年(互联网的产生是哪一年)

    互联网诞生在哪一年(互联网的产生是哪一年)

  • 天能锂电池是什么电芯(天能锂电池是什么类型的锂电池)

    天能锂电池是什么电芯(天能锂电池是什么类型的锂电池)

  • 电力猫和子母路由区别(电力猫跟路由器怎么接)

    电力猫和子母路由区别(电力猫跟路由器怎么接)

  • 手机莫名关机怎么回事(手机莫名关机怎么回事有电)

    手机莫名关机怎么回事(手机莫名关机怎么回事有电)

  • ppt是什么软件(ppt属于什么软件)

    ppt是什么软件(ppt属于什么软件)

  • word文档中如何把线加粗(word文档中如何在横版中加入竖版)

    word文档中如何把线加粗(word文档中如何在横版中加入竖版)

  • 苹果8plus分辨率多少(苹果14pro分辨率)

    苹果8plus分辨率多少(苹果14pro分辨率)

  • oppoa5充电不亮灯吗(oppoa5充电时指示灯不亮)

    oppoa5充电不亮灯吗(oppoa5充电时指示灯不亮)

  • nova5怎么录屏(nova5如何录屏)

    nova5怎么录屏(nova5如何录屏)

  • ie网址是什么(1920*1080的图片)

    ie网址是什么(1920*1080的图片)

  • 华为数字耳机怎么设置(华为数字耳机怎么更新)

    华为数字耳机怎么设置(华为数字耳机怎么更新)

  • 微信允许自动启动什么意思(微信设置自启)

    微信允许自动启动什么意思(微信设置自启)

  • 手机内存16g有多大(手机内存16g有多少)

    手机内存16g有多大(手机内存16g有多少)

  • 努比亚红魔3S机身尺寸是多少(努比亚红魔3参数配置)

    努比亚红魔3S机身尺寸是多少(努比亚红魔3参数配置)

  • 广角镜头是什么意思(广角镜头是什么样子的)

    广角镜头是什么意思(广角镜头是什么样子的)

  • 淘宝电脑端描述怎么写(淘宝电脑端描述使用文本编辑怎么弄)

    淘宝电脑端描述怎么写(淘宝电脑端描述使用文本编辑怎么弄)

  • 网易云耳机适配在哪里(网易云耳机适配推荐)

    网易云耳机适配在哪里(网易云耳机适配推荐)

  • oppo reno听筒声音小(opporeno听筒音量小)

    oppo reno听筒声音小(opporeno听筒音量小)

  • 微信扫一扫在哪里找(微信扫一扫在哪里找到)

    微信扫一扫在哪里找(微信扫一扫在哪里找到)

  • 微信解封是什么(微信解封是什么时间点都可以操作吗)

    微信解封是什么(微信解封是什么时间点都可以操作吗)

  • vr眼镜原理

    vr眼镜原理

  • 小规模纳税人的企业所得税税率
  • 税收实体法和程序法分类
  • 个人所得税如何办理退税
  • 税务会计账务处理
  • 年末增值税需要计提吗
  • 受托代销商品款是什么科目
  • 公转私操作步骤
  • 建行分期通
  • 收回已转销的坏账在借方还是贷方
  • 集团子公司之间调拨固定资产
  • 供应商转让合同
  • 所有的企业都能采用免费策略
  • 无法收回的款项怎么记账
  • 给政府开发票如何处理?
  • 过了认证期的发票怎么办
  • 医疗机构交企业所得税吗
  • 电子商务平台支付的区别
  • 耕地占用税和契税什么时候交
  • 特许权使用费如何缴纳增值税
  • 个人房产税征收标准
  • 新政出台
  • "明股实债“的税务风险,你真的清楚吗?
  • 发票第一联盖章吗
  • 企业进口葡萄酒税率多少
  • 微软发布Windows 10正式版 新浪
  • 苹果手机怎么刷机
  • 屏幕颜色怎么变
  • win11自带照片查看器
  • 财政补助收入的支付制度包括
  • PHP:imagecolortransparent()的用法_GD库图像处理函数
  • 母公司收取子公司利润交增值税吗
  • 支付宝小程序跳回app
  • 泰姬陵 (© Michele Falzone/plainpicture)
  • 如何取消库存商品订单
  • 科罗拉多河上的月光简谱
  • 目标检测yolov5
  • window12最新系统
  • 个人取得的劳务报酬所得,如何缴纳个税
  • 快递明细单
  • 非独立核算的分公司如何报税
  • 装饰公司的开票范围
  • 企业用车年检需要什么资料
  • 销售不动产统一发票怎么没有税率
  • 暂估入账的固定资产
  • 公司注册资本减资流程
  • 内账收入按含税还是不含税入
  • 仓库用托盘怎么入账
  • 专用发票下载怎么操作
  • 基本生产成本和生产成本
  • 施工单位月末都需要结转什么
  • 公司购买垃圾袋可以抵扣吗
  • 索引的基本原则
  • MySQL数据库开发技术电子版
  • sql 查询优化
  • mac自动操作怎么停止
  • win8.1安装过程
  • ubuntu创建新用户并增加管理员权限
  • linux nohup命令详解
  • ubuntu系统怎么开机
  • macos10.8下载
  • centos基本环境
  • macbook怎么剪视频软件
  • linux CentOS/redhat 6.5 LVM分区使用详解
  • win7升级win10收费吗
  • win10插上耳机后电脑还是外放如何解决
  • ExtJS 2.0实用简明教程 之ExtJS版的Hello
  • 3d引擎开发
  • unity learn premium
  • qt绘制3d
  • 使用jquery的步骤
  • python汉字字符
  • shell脚本数组的用法
  • node+express+ejs使用模版引擎做的一个示例demo
  • linux py
  • python连接mq
  • 宁波国税局领导名单
  • 小规模纳税人可以开13%的发票吗
  • 国税系统打印不了发票怎么办
  • 财务负责人变更了之后还有影响吗
  • 杭州注册公司需要钱吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设