当前位置: 首页 > article >正文

ros2 humble 华硕rgbd xtion驱动

记录一下:

1、sudo apt-get  install ros-humble-openni2-camera

2、ros2 launch openni2_camera camera_with_cloud.launch.py

再启动rviz2

可以看到rgb和深度图,但没有点云数据。

/camera/depth_registered/image_raw   正常

/camera/depth_registered/points           无数据

/camera/rgb/image_raw                         正常

根据rgb像素index获取对应的深度值

import rclpy
from rclpy.node import Node
from sensor_msgs.msg import Image
from cv_bridge import CvBridge
import numpy as np
import message_filters

class DepthFromRGB(Node):
    def __init__(self):
        super().__init__('depth_from_rgb')
        self.bridge = CvBridge()
        
        # 订阅RGB图像和深度图像的话题
        self.rgb_sub = message_filters.Subscriber(self, Image, '/camera/rgb/image_raw')
        self.depth_sub = message_filters.Subscriber(self, Image, '/camera/depth_registered/image_raw')
        
        # 使用消息过滤器同步RGB图像和深度图像
        self.ts = message_filters.ApproximateTimeSynchronizer([self.rgb_sub, self.depth_sub], queue_size=10, slop=0.1)
        self.ts.registerCallback(self.image_callback)
        
        # 像素索引
        self.pixel_x = 320  # 示例:图像中心的x坐标
        self.pixel_y = 240  # 示例:图像中心的y坐标

    def image_callback(self, rgb_msg, depth_msg):
        try:
            # 将ROS图像消息转换为OpenCV图像
            rgb_image = self.bridge.imgmsg_to_cv2(rgb_msg, desired_encoding='bgr8')
            depth_image = self.bridge.imgmsg_to_cv2(depth_msg, desired_encoding='passthrough')
            
            # 获取深度值
            depth_value = depth_image[self.pixel_y, self.pixel_x]
            
            # 打印深度值
            self.get_logger().info(f'Depth value at ({self.pixel_x}, {self.pixel_y}): {depth_value} meters')
        except Exception as e:
            self.get_logger().error(f'Error processing images: {e}')

def main(args=None):
    rclpy.init(args=args)
    node = DepthFromRGB()
    rclpy.spin(node)
    node.destroy_node()
    rclpy.shutdown()

if __name__ == '__main__':
    main()


http://www.kler.cn/a/374303.html

相关文章:

  • Spark的集群环境部署
  • 计算机毕业设计——ssm基于WEB的养老院数据信息管理系统设计与实现演示录像2021
  • PyTorch提供的多GPU数据并行nn.DataParallel
  • mysql5.7.44 arm 源码编译安装
  • 一:Linux学习笔记(第一阶段)-- 安装软件 vmware workstation 虚拟机软件 centos系统
  • 「Mac畅玩鸿蒙与硬件14」鸿蒙UI组件篇4 - Toggle 和 Checkbox 组件
  • git入门教程10:git性能优化
  • 图文深入介绍Oracle DB link(一)
  • JVM性能优化实战手册:从监控到调优策略
  • Linux下docker中elasticsearch与kibana的安装
  • Jenkins面试整理-如何配置 Jenkins Pipeline?
  • 整合 RedisTemplate
  • 点云处理中的多项式重构、平滑与法线估计
  • Android 托管 Github Action 发布 Github Packages ,实现 Mvn 免费自动化托管
  • 解决 ClickHouse 高可用集群中 VRID 冲突问题:基于 chproxy 和 keepalived 的实践分析
  • leetcode - 684. 冗余连接
  • 硅谷甄选(11)角色管理
  • Axure文本框读取和赋值高级交互
  • 计算机毕业设计PySpark+大模型 bilibili弹幕情感分析 B站视频数据可视化 B站爬虫 机器学习 深度学习 NLP自然语言处理 大数据毕业设计
  • 技术分享 | 大语言模型增强灰盒模糊测试技术探索
  • SMO算法 公式推导
  • 由 GPT 引发的这波「大模型热」将会如何洗牌?
  • 直接内存、死锁、方法句柄
  • 51单片机ALE引脚的作用 - 锁存地址和输出时钟信号并不冲突
  • 大数据-202 数据挖掘 机器学习理论 - 决策树 sklearn 绘制决策树 防止过拟合
  • 在Mac下安装时间序列软件Hector