-
Notifications
You must be signed in to change notification settings - Fork 334
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
ROS2 Port #225
Comments
Not really, as no one has declared they have time/inclination to make it happen. The way I see it, the two missing pieces required for a nominally useful ROS2 PCL pipeline are:
I imagine it's the middleware's job to handle object lifetime, and intraprocess comms in ROS2 works by more-or-less passing a dummy message with a memory address. So there's probably an internal mechanism that keeps the messages around until all const smart_pointers have expired. EDIT, well not no-one, but no-one currently. https://discourse.ros.org/t/ros2-pcl-perceptions/3596/23 |
I'll jot down some of my other thoughts as I remember them here until there is a designated place to keep track of design notes. I'd like to consider adding time delta information to ordered point clouds so the temporal dewarping code doesn't need to be reimplemented for each lidar. My recollection is that the rotation speed of a spinning lidar was slightly susceptible to power supply fluctuations but the PLL did a fairly good job besides that. This may be more or less of an issue in the future with solid state lidars. I think there are some potential algorithmic benefits to to considering the projective origin of a pointcloud. Along this line of thinking, it may be worth evaluating non-cartesian error modeling as many of the current lidar designs have anisotropic error. As I understand it, a Velodyne HDL-32 for example has a maximum measurement error along the beam path, fixed angular offset error between the set of diodes epoxied to the PCB, minimal gyro wobble and minimal encoder error around the axis of rotation. Projective origin information can also allow diagnostics to detect hardware failures, an encoder failure in a rotating lidar might be detected by a change in the bin counts of an angular histogram from the projective origin.. Some of my conversations with lidar manufacturers seem to indicate that solid state lidar are capable of beam steering so it may be worth considering what might be needed to support a variable angular resolution. Depending on how things like temporal dewarping are handled it may be worth generating accurate test data before working on implementation. Has anyone already generated a dataset with a Velodyne mounted on an industrial robot arm and having it move the lidar through a calibration trajectory with large planes (walls) in the background? Having "ground truth" data from the arm encoders may be helpful for validation. |
It may be a little speculative but in terms of serialization, it may be worth looking at how multiple operations can be offloaded to a GPU/FPGA. I'm thinking something like OpenGL shaders or OpenVX to avoid serializing and deserializing between each hardware accelerated operation. Can this be done by type masqing a cloud in GPU/FPGA/ASIC? |
Just to avoid scaring anyone considering taking this on, I can't help but think that while those projects are worthwhile to consider taking on in PCL proper, they're probably out of scope for a ROS2 migration of pcl_ros. |
I agree that some of this is outside of a minimum viable port for ROS2, however some of these items will require changes from hardware drivers generating PointClouds across to PCL itself, but I figured this was about the midpoint. |
I started this (lets hope I didn't bite off more than I can chew) as it is a dependency in the velodyne device driver library, and I'm trying to get that to ROS2. Could you create a Regardless of the end results, it might at least serve as inspiration for future efforts. |
done |
Any update on this? |
A lot in the package requires type masquerading which is yet to be supported in ROS2, and it will probably take some time before it's ready. I put my PR for ROS2 on hold. I'll see if I take it up again. Feel free to check out my fork and continue if you feel like it, all additions are welcome. |
any news? |
perception_pcl has been ported to ROS2, https://github.com/ros-perception/perception_pcl/tree/foxy-devel |
@paulbovbel I don't think that's true https://github.com/ros-perception/perception_pcl/tree/foxy-devel/pcl_ros |
oh wow, i'm just completely misinformed, thanks! |
ROS1 ticket that should be added to ROS2 once ported |
Are there any updates about the foxy porting? |
No users have shown interest in porting parts of it yet. If you’d like to, I’d be more than happy to review PRs |
Does |
Yes, it should |
do you know of any examples, or anybody who has used it? |
Is there any new information about pcl_ros port? |
@SteveMacenski and @theseankelly is there any way I can assist in porting this over to ROS 2? |
I think the big thing is someone that needs it to take it on to port it. Another reason this has been waiting around is that type masquerading still isn't implemented in ROS2 so the use of pcl nodelets in a chain to make a processing pipeline is going to be really inefficient right now since each time you'll have to convert from the I think that's a major reason no real work has gone into it yet. |
Ok cool. I'll look into this and see what I can do. |
@cardboardcode
Hope it helps |
Hey @SteveMacenski, I've been attempting a port of |
Just to clarify, is pcl_ros ported now? I don't see any COLCON_IGNOREs anywhere, but also having trouble building it. |
One library |
Is the port for pcl_ros complete? Because, while I am able to build the pcl_ros package, the point_cloud.hpp file still has code from ROS1 which gives me trouble when I attempt to migrate other functionalities built on top of it. |
Not sure if this is the place to put this, but |
I too am trying to |
Is there a central place where we are tracking architectural issues for a ROS2 interface to PCL?
The big one I recall is handling pipelined pcl operations with nodelets. Zero copy is great until an old point cloud gets over written by a new one before you are done with it.
The text was updated successfully, but these errors were encountered: