我在Gazebo的环境中有一架无人机,上面有一个RealSense d435摄像头。我的计划是使用YOLO找到感兴趣对象的中心,然后从深度图像中找到该点的深度。我听说深度摄像机输出一个图像,其中深度值被编码在RGB值中。当我在网上进一步查找这个问题时,我发现有一个pyrealsense2库可以满足我所需的所有功能。
我在网上看到的实现需要您创建一个pyrealsense.pipeline()并从中获取框架。问题是,这似乎只有当您有一个RealSense相机连接到您的计算机。由于矿山存在于Gazebo环境中,我需要一种获取和使用ROS回调中的深度框架的方法。我该怎么做?任何指示都将不胜感激。
发布于 2020-07-17 17:52:41
是的,您可以在ROS订阅服务器的帮助下这样做,如下所示(大部分代码取自这里):
import rospy
from sensor_msgs.msg import Image as msg_Image
from cv_bridge import CvBridge, CvBridgeError
import sys
import os
class ImageListener:
def __init__(self, topic):
self.topic = topic
self.bridge = CvBridge()
self.sub = rospy.Subscriber(topic, msg_Image, self.imageDepthCallback)
def imageDepthCallback(self, data):
try:
cv_image = self.bridge.imgmsg_to_cv2(data, data.encoding)
pix = (data.width/2, data.height/2)
sys.stdout.write('%s: Depth at center(%d, %d): %f(mm)\r' % (self.topic, pix[0], pix[1], cv_image[pix[1], pix[0]]))
sys.stdout.flush()
except CvBridgeError as e:
print(e)
return
if __name__ == '__main__':
rospy.init_node("depth_image_processor")
topic = '/camera/depth/image_rect_raw' # check the depth image topic in your Gazebo environmemt and replace this with your
listener = ImageListener(topic)
rospy.spin()注意事项:要安装CvBridge,您可以遵循以下说明:
sudo apt-get install ros-(ROS version name)-cv-bridge
sudo apt-get install ros-(ROS version name)-vision-opencv更多信息:桥
发布于 2021-06-05 14:05:09
要补充上述答案,请注意深度/图像_rect_raw主题。很有可能您实际上想要原始图像,您可以从/camera/aligned_depth_to_color/ image _raw中获得该图像。
默认情况下,此主题可能不是活动的,例如,在d435i上,您应该切换align_depth:=true选项:
roslaunch realsense2_camera rs_camera.launch align_depth:=true有关更多信息,请参见https://github.com/IntelRealSense/realsense-ros#usage-instructions。
https://stackoverflow.com/questions/62938146
复制相似问题