Python ROS图像主题帧率极低
我试图通过ROS api用opencv处理VREP视觉传感器输出。我确实成功地设置了场景并运行了脚本,但问题是,即使没有实际处理,我也会获得4-5 fps的速度(目前我只是将图像直接推送到输出) 这个问题似乎并不取决于图像分辨率,因为1024*512和128*128捕获的结果完全相同 这也不是阻塞调用的问题,尽管我发布了单线程代码,但我确实有相当复杂的多线程处理管道,它在实际摄像机(约50 fps)上运行得相当好 VREP方面的Lua脚本似乎也不是问题,因为我尝试过使用VREP提供的视频重译示例,它们似乎实现了相当令人满意的fps 因此,图像流似乎是一个瓶颈 以下是我的示例脚本: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提供的视频重译示例
# 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消息传递速度较高。