-
Notifications
You must be signed in to change notification settings - Fork 526
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
data_length should be made into an uint32_t or higher #130
Comments
The protocol itself has length-of-message as a 16-bit value— I believe you're referring to the generated header for an Array. I'd happily review a PR for indigo which changes this to a uint16. As for going to uint32, that would be a breaking change for the protocol. We'd either need to wait for J-turtle, or make the implementation in rosserial_server and rosserial_python able to detect and support both versions (similar to how rosserial_server supports both Groovy and Hydro clients). |
So the most reasonable steps in the meantime are:
Unless you can see a more reasonable method to get point cloud data through rosserial? |
A couple of notes: @mikepurvis -- the "length-of-message" you note in the protocol is for the overall message. I concur that changing that would be a fairly big break (and so the sync flag value should again be updated, to 0xfc this time). In theory, both types of messages could be supported side by side (although it increases maintainence overhead). As for the uint8_t in the array length, it's clearly a hack and not fully implemented. This length should be a uint32_t (a uint32_t is already used in the ROS message protocol, so that four bytes of data is there, just isn't handled by our code). See also lines 234-237 and line 250 and 253 for where the length is serialized/deserialized. This fix would allow significantly larger arrays. @ibaranov-cp could you tell us a bit more about your use case? How big are the point clouds -- and why use have you chosen to use rosserial? (PointClouds were not envisioned as a use case really, since most embedded controllers lack significant RAM). |
We are trying to get Kinect 2.0 data (Windows 8 only :( ) into ROS. Edit: On 10 Aug 2014 00:11, "Michael Ferguson" notifications@github.com wrote:
|
@ibaranov-cp Splitting the message sounds like a huge pain in the butt. I think this effort would be best invested in revving the protocol. I'd propose:
This scheme means your system can still deploy rosserial_server from debs, and you can generate your rosserial_windows-based client library for Kinect 2 using a source checkout. Does this seem reasonable? Alternatively, given this limitation, it might make a lot more sense to go native and just use roscpp/winros. I tried the pre-assembled SDK a few months ago with Hydro and found it very usable. |
I like this solution. The end goal for me has always been a package that is easy for people to simply download on windows, open up in VS, and execute. |
Also interested in this, since I can't send sensor_msgs/Image from windows. Is this planned to be fixed in J? |
This should definitely be targeted in J, along with a bump in the protocol header byte (as we've been doing when breaking the wire protocol). |
Going to defer this to K— can't afford to wait longer on a Jade release. |
Should be fixed by PR #222 |
data_length is currently usually set as a uint8_t. This breaks very quick once you want to send more than 255 entries.
Can we increase the size of data_length for things like pointcloud2 (the one I am currently working with). I just don't see the case when you would ever find 256 bytes of point cloud data useful for anything...
Or perhaps I am using it wrong?
My own attempts to hack up PointCloud2.h in the windows rosserial library cause lots of memory access faults.
The text was updated successfully, but these errors were encountered: