ROS图像主题帧率极低

我正在尝试通过ROS API使用opencv处理VREP视觉传感器输出。我确实设法设置了场景并使脚本运行,但是问题是即使没有实际处理,我的速度也达到了4-5 fps(目前我只是将图像直接推送到输出)。


这个问题似乎并不取决于图像分辨率,因为1024 * 512和128 * 128捕获都可以得到完全相同的fps。


这也不是阻塞呼叫的问题,尽管我发布的是单头代码,但我确实有相当复杂的多线程处理管道,该管道在实际摄像机(〜50 fps)下表现良好。


VREP方面的Lua脚本似乎也不是问题,因为我尝试使用vrep提供的视频重新翻译示例,并且它们似乎达到了令人满意的fps。


因此,图像流似乎是一个瓶颈。


这是我的示例脚本:


# coding=utf-8


import rclpy

import rclpy.node as node

import cv2

import numpy as np

import sensor_msgs.msg as msg


import third_party.ros.ros as ros


class TestDisplayNode(node.Node):

    def __init__(self):

        super().__init__('IProc_TestDisplayNode')

        self.__window_name = "img"

        self.sub = self.create_subscription(msg.Image, 'Vision_sensor', self.msg_callback)


    def msg_callback(self, m : msg.Image):

        np_img = np.reshape(m.data, (m.height, m.width, 3)).astype(np.uint8)

        self.display(np_img)


    def display(self, img : np.ndarray):

        cv2.imshow(self.__window_name, cv2.cvtColor(img, cv2.COLOR_RGB2BGR))

        cv2.waitKey(1)


def main():

    ros_core = Ros2CoreWrapper()


    node = TestDisplayNode()


    rclpy.spin(node)


    node.destroy_node()

    rclpy.shutdown()


if __name__ == "__main__":

    main()

我还必须提到我是用ros bridge运行的,因为我需要使用python3完成处理,而python3仅受ROS2支持,而VREP似乎仅与ROS1兼容(尽管我刚刚开始使用这些系统,所以在那种情况下,我没有信心)。


弑天下
浏览 340回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python