Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python ROS图像主题帧率极低_Python_Python 3.x_Ros_Ros2 - Fatal编程技术网

Python ROS图像主题帧率极低

Python ROS图像主题帧率极低,python,python-3.x,ros,ros2,Python,Python 3.x,Ros,Ros2,我试图通过ROS api用opencv处理VREP视觉传感器输出。我确实成功地设置了场景并运行了脚本,但问题是,即使没有实际处理,我也会获得4-5 fps的速度(目前我只是将图像直接推送到输出) 这个问题似乎并不取决于图像分辨率,因为1024*512和128*128捕获的结果完全相同 这也不是阻塞调用的问题,尽管我发布了单线程代码,但我确实有相当复杂的多线程处理管道,它在实际摄像机(约50 fps)上运行得相当好 VREP方面的Lua脚本似乎也不是问题,因为我尝试过使用VREP提供的视频重译示例

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

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

这也不是阻塞调用的问题,尽管我发布了单线程代码,但我确实有相当复杂的多线程处理管道,它在实际摄像机(约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一起工作(尽管我刚刚开始使用这些系统,所以我对这种情况没有信心)

我遇到了一个类似的问题,那就是python速度太慢

我使用了标志
-OO
: 这减少了执行时间


此外,还提出了一个新问题:显示如何改进python的消息对象转换。

我知道ROS1消息传递速度较低,但在ROS2消息传递速度较高。