python - 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 完成处理,这仅受 ROS2 支持,而 VREP 似乎仅适用于 ROS1(尽管我刚刚开始使用这些系统,所以我对那种情况没有信心)。
解决方案
推荐阅读
- r - 带有 select() 的 case_when() 函数
- r - R在没有Java的情况下连接到数据库?
- r - 如何保存 ppp(平面点模式数据帧)或从 spatsat 中的不同 ppp 对象创建的超帧
- bash - 您如何在 wget 请求中显示缺少前导 0?
- php - 如何在 JWT API - Laravel 5.8 上验证用户群?
- verilog - 在“Verilog”中创建具有单输入/输出数据端口的“RAM”芯片
- android - 服务和唤醒锁
- nginx - 如何在 nginx 中将两个域名指向一个网站
- amazon-web-services - 我如何备份 s3 或者是否可以备份 s3?
- xamarin - 保存在数据库中的图像未显示在 Xamarin Forms 应用程序的 Home.xaml 页面中