ROS图像主题帧率极低

时间:2018-07-08 23:33:29

标签: python python-3.x ros ros2

我正在尝试通过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(尽管我只是开始使用ROS1系统,因此我对这种情况没有信心)。

1 个答案:

答案 0 :(得分:1)

我用慢速python遇到了类似的问题。

我使用了标志-OOhttps://docs.python.org/3/using/cmdline.html#cmdoption-o 这减少了执行时间。

还提交了一个新问题:https://github.com/ros2/rosidl_python/issues/9,展示了如何为python改进消息对象的转换。