Rom*_*man 5 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()
Run Code Online (Sandbox Code Playgroud)
我还要提到我使用ros bridge运行它,因为我需要使用python3完成处理,仅由ROS2支持,而VREP似乎只适用于ROS1(尽管我刚刚开始使用这些系统,所以我对那种情况没有信心).
我也遇到了类似的问题,蟒蛇速度很慢。
我使用了标志-OO: https: //docs.python.org/3/using/cmdline.html#cmdoption-o
这减少了执行时间。
此外,还提交了一个新问题:https://github.com/ros2/rosidl_python/issues/9,展示了如何改进 python 消息对象的转换。