RobotWebTools / rclnodejs

Node.js version of ROS 2.0 client
https://docs.ros.org/en/humble/Concepts/Basic/About-Client-Libraries.html?highlight=rclnodejs#community-maintained
Apache License 2.0
311 stars 70 forks source link

image,Uint8array,Subscribe,slow #960

Open Tombliboo96 opened 1 month ago

Tombliboo96 commented 1 month ago

Description Hello, may I ask if there are any optimization methods for receiving high-pixel image data streams in SensorMsg? I am currently using rclnodejs to receive C++ parse a 12000000 pixel Uint8array. The speed is slow, about 6-9FPS. I found that the deserialization operation in Wrapper is slow. this._wrapperFields.data.copyRefObject(refObject.data);

At the same time, when I want to send image data through ROS memory sharing, the deserialization code for Uint8array in ImageWrapper generated from MSG files takes a long time. Is there any operation that can quickly receive a large amount of image data?

    this._refObject.data = refObject.data;
    this._wrapperFields.data.fill(refObject.data.toArray());

Steps To Reproduce

Expected Behavior

Actual Behavior

minggangw commented 1 month ago

What's in my mind is you can set enableTypedArray to true when creating a subscription (the default is true), it will avoid allocating memory when passing the data across the language boundary from C++ to JavaScript, please check the doc https://robotwebtools.github.io/rclnodejs/docs/0.26.0/Node.html image

rclnodejs doesn't support memory sharing, please also check out some discussion here.