代码之家  ›  专栏  ›  技术社区  ›  Roman

ROS图像主题帧率极低

  •  5
  • Roman  · 技术社区  · 6 年前

    我正在尝试通过ros api用opencv处理vrep视觉传感器输出。我确实成功地设置了场景并运行了脚本,但问题是,即使没有实际的处理,我也会获得4-5 fps的效果(目前我只是直接将图像推送到输出)。

    此问题似乎不取决于图像分辨率,因为1024*512和128*128捕获的结果完全相同。

    这也不是一个阻塞调用的问题,虽然我发布的是单线程代码,但我确实有相当复杂的多线程处理管道,它在实际相机中的性能相当好(~50fps)。

    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一起工作(尽管我刚刚开始使用这些系统,所以我对这种情况不太有信心)。

    1 回复  |  直到 6 年前
        1
  •  1
  •   Stoogy    6 年前

    我对慢蟒蛇也有类似的问题。

    我用了旗子 -OO 以下内容: https://docs.python.org/3/using/cmdline.html#cmdoption-o 减少了执行时间。

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