What is a point cloud?

classic Classic list List threaded Threaded
5 messages Options
Reply | Threaded
Open this post in threaded view
|

What is a point cloud?

Nico Blodow-2
Dear point cloud lovers,

seeing that even for very organizational issues, we can get an
insightful discussion started, I would like to start a new discussion
(with a slightly provocative subject ;) on how to deal with the notion
of a point cloud.

Let me be a little clearer: Right now, (most?) algorithms can take a
point cloud (e.g. PointCloud2 message) or a part of a point cloud
(PointCloud2 + PointIndices). Now, there are some issues with this
concept:

 - What happens if your segmentation spits out 5 objects, how does the
next node / nodelet know that the 5 objects were from the same scan?
Timestamps feel like a hack for this.

 - Let's say your point cloud is huge, and your 5 index vectors all
should index into it, without the need to republish the original cloud.
Is that possible, so that setIndices is called 5 times for the same
point cloud? Who takes care that the right cloud gets set before the
next set of index vectors get passed?

For some of the algorithms, there are some tricks done with a dummy
index vector, so that you only specify what to do with every point, and
usually that will work for indexed and full point clouds.

So, my questions would be:
  1) Does it make sense to have the possibility to have multiple point
index vectors in one message?
  2) Does it make sense for a surface reconstruction (think triangular
or polygonal meshes) to have a special version of a index vector, or can
we find a way to kind of deal with all these cases uniformly?
  3) How can we have this as transparently as possible?

After all, anything working on _points_ should be usable for any
representation of a full or partial cloud, right?

I hope i am not asking obviously stoopid questions here :)

Cheers,
 -- Nico




_______________________________________________
[hidden email] / http://pcl.ros.org
https://code.ros.org/mailman/listinfo/pcl-users
Reply | Threaded
Open this post in threaded view
|

Re: What is a point cloud?

garratt
Good question.

We discussed this from a slightly different approach earlier:
https://code.ros.org/lurker/thread/20101013.014829.2c33ae88.en.html
But I think the solution would address both problems.

The idea is that index vectors would be rolled into part of the
PointCloud2 message, so multiple different clusterings (if you wished)
would be available in one PointCloud2 message.  Since you have to use a
decoding function to interpret a pointcloud2 anyway,  it would be
possible to directly split up a point cloud (even if clusters overlap)
in a call like: fromROSMsg(PointCloud2, vector<pcl::PointCloud> )


>So, my questions would be:
>   1) Does it make sense to have the possibility to have multiple point
> index vectors in one message?
Yes. very much so.

>   2) Does it make sense for a surface reconstruction (think triangular
> or polygonal meshes) to have a special version of a index vector, or
> can we find a way to kind of deal with all these cases uniformly?
what do you have in mind as a 'special' index vector?  I've been playing
with meshes recently, and I've been mulling over how to represent meshes
in PCL (since they are so similar to point clouds in their
representation, and I have seen a PolygonMesh msg...)

>   3) How can we have this as transparently as possible?
I think operations on PointCloud2, and possibly some Metacloud type PCL
object (which would store the cloud, as well as various index vectors)
is the way to go.  

So what is the status of this?  I was working on it a few weeks back,
but got sidetracked by kinect fun (and sadly the time I can devote to
ROS development is currently limited) but I would be willing to dive in
again (maybe with a few pointers from Radu, et al), since I think this
is an important feature that needs to be addressed.

cheers
Garratt


On Wed, 2010-12-01 at 16:32 +0100, Nico Blodow wrote:

> Dear point cloud lovers,
>
> seeing that even for very organizational issues, we can get an
> insightful discussion started, I would like to start a new discussion
> (with a slightly provocative subject ;) on how to deal with the notion
> of a point cloud.
>
> Let me be a little clearer: Right now, (most?) algorithms can take a
> point cloud (e.g. PointCloud2 message) or a part of a point cloud
> (PointCloud2 + PointIndices). Now, there are some issues with this
> concept:
>
>  - What happens if your segmentation spits out 5 objects, how does the
> next node / nodelet know that the 5 objects were from the same scan?
> Timestamps feel like a hack for this.
>
>  - Let's say your point cloud is huge, and your 5 index vectors all
> should index into it, without the need to republish the original cloud.
> Is that possible, so that setIndices is called 5 times for the same
> point cloud? Who takes care that the right cloud gets set before the
> next set of index vectors get passed?
>
> For some of the algorithms, there are some tricks done with a dummy
> index vector, so that you only specify what to do with every point, and
> usually that will work for indexed and full point clouds.
>
> So, my questions would be:
>   1) Does it make sense to have the possibility to have multiple point
> index vectors in one message?
>   2) Does it make sense for a surface reconstruction (think triangular
> or polygonal meshes) to have a special version of a index vector, or can
> we find a way to kind of deal with all these cases uniformly?
>   3) How can we have this as transparently as possible?
>
> After all, anything working on _points_ should be usable for any
> representation of a full or partial cloud, right?
>
> I hope i am not asking obviously stoopid questions here :)
>
> Cheers,
>  -- Nico
>
>
>
>
> _______________________________________________
> [hidden email] / http://pcl.ros.org
> https://code.ros.org/mailman/listinfo/pcl-users


_______________________________________________
[hidden email] / http://pcl.ros.org
https://code.ros.org/mailman/listinfo/pcl-users
Reply | Threaded
Open this post in threaded view
|

Re: What is a point cloud?

Radu B. Rusu
Administrator
I wonder if we can solve most of these issues by avoiding PointCloud2 and publishing pcl::PointCloud natively. Is this an issue only with nodelets?

I am just not happy at all with the timestamp hack in Euclidean clustering, but there is really no efficient way to accommodate this in ROS with PointCloud2 at the moment. Time for PointCloud3? LOL

Cheers,
Radu.

On Dec 1, 2010, at 8:16 AM, garratt <[hidden email]> wrote:

> Good question.
>
> We discussed this from a slightly different approach earlier:
> https://code.ros.org/lurker/thread/20101013.014829.2c33ae88.en.html
> But I think the solution would address both problems.
>
> The idea is that index vectors would be rolled into part of the
> PointCloud2 message, so multiple different clusterings (if you wished)
> would be available in one PointCloud2 message.  Since you have to use a
> decoding function to interpret a pointcloud2 anyway,  it would be
> possible to directly split up a point cloud (even if clusters overlap)
> in a call like: fromROSMsg(PointCloud2, vector<pcl::PointCloud> )
>
>
>> So, my questions would be:
>>  1) Does it make sense to have the possibility to have multiple point
>> index vectors in one message?
> Yes. very much so.
>
>>  2) Does it make sense for a surface reconstruction (think triangular
>> or polygonal meshes) to have a special version of a index vector, or
>> can we find a way to kind of deal with all these cases uniformly?
> what do you have in mind as a 'special' index vector?  I've been playing
> with meshes recently, and I've been mulling over how to represent meshes
> in PCL (since they are so similar to point clouds in their
> representation, and I have seen a PolygonMesh msg...)
>
>>  3) How can we have this as transparently as possible?
> I think operations on PointCloud2, and possibly some Metacloud type PCL
> object (which would store the cloud, as well as various index vectors)
> is the way to go.  
>
> So what is the status of this?  I was working on it a few weeks back,
> but got sidetracked by kinect fun (and sadly the time I can devote to
> ROS development is currently limited) but I would be willing to dive in
> again (maybe with a few pointers from Radu, et al), since I think this
> is an important feature that needs to be addressed.
>
> cheers
> Garratt
>
>
> On Wed, 2010-12-01 at 16:32 +0100, Nico Blodow wrote:
>> Dear point cloud lovers,
>>
>> seeing that even for very organizational issues, we can get an
>> insightful discussion started, I would like to start a new discussion
>> (with a slightly provocative subject ;) on how to deal with the notion
>> of a point cloud.
>>
>> Let me be a little clearer: Right now, (most?) algorithms can take a
>> point cloud (e.g. PointCloud2 message) or a part of a point cloud
>> (PointCloud2 + PointIndices). Now, there are some issues with this
>> concept:
>>
>> - What happens if your segmentation spits out 5 objects, how does the
>> next node / nodelet know that the 5 objects were from the same scan?
>> Timestamps feel like a hack for this.
>>
>> - Let's say your point cloud is huge, and your 5 index vectors all
>> should index into it, without the need to republish the original cloud.
>> Is that possible, so that setIndices is called 5 times for the same
>> point cloud? Who takes care that the right cloud gets set before the
>> next set of index vectors get passed?
>>
>> For some of the algorithms, there are some tricks done with a dummy
>> index vector, so that you only specify what to do with every point, and
>> usually that will work for indexed and full point clouds.
>>
>> So, my questions would be:
>>  1) Does it make sense to have the possibility to have multiple point
>> index vectors in one message?
>>  2) Does it make sense for a surface reconstruction (think triangular
>> or polygonal meshes) to have a special version of a index vector, or can
>> we find a way to kind of deal with all these cases uniformly?
>>  3) How can we have this as transparently as possible?
>>
>> After all, anything working on _points_ should be usable for any
>> representation of a full or partial cloud, right?
>>
>> I hope i am not asking obviously stoopid questions here :)
>>
>> Cheers,
>> -- Nico
>>
>>
>>
>>
>> _______________________________________________
>> [hidden email] / http://pcl.ros.org
>> https://code.ros.org/mailman/listinfo/pcl-users
>
>
> _______________________________________________
> [hidden email] / http://pcl.ros.org
> https://code.ros.org/mailman/listinfo/pcl-users
_______________________________________________
[hidden email] / http://pointclouds.org
https://code.ros.org/mailman/listinfo/pcl-users
Reply | Threaded
Open this post in threaded view
|

Re: What is a point cloud?

garratt
Continuing to top post:

I thought we decided that PointCloud2 could handle multiple clusters, by
smart labeling conventions.
https://code.ros.org/lurker/thread/20101013.014829.2c33ae88.en.html
 Also, can pcl::PointCloud contain multiple clusters/sets of indices?  I
was actually thinking that this was a good reason to _keep_ pointcloud2
rather than switching entirely to pcl::PointCloud.

Is there a new feature of pcl::pointcloud that I am not aware of to
maintain multiple index vectors? /excited

Garratt



On Tue, 2010-12-07 at 10:18 -0800, Radu Bogdan Rusu wrote:

> I wonder if we can solve most of these issues by avoiding PointCloud2 and publishing pcl::PointCloud natively. Is this an issue only with nodelets?
>
> I am just not happy at all with the timestamp hack in Euclidean clustering, but there is really no efficient way to accommodate this in ROS with PointCloud2 at the moment. Time for PointCloud3? LOL
>
> Cheers,
> Radu.
>
> On Dec 1, 2010, at 8:16 AM, garratt <[hidden email]> wrote:
>
> > Good question.
> >
> > We discussed this from a slightly different approach earlier:
> > https://code.ros.org/lurker/thread/20101013.014829.2c33ae88.en.html
> > But I think the solution would address both problems.
> >
> > The idea is that index vectors would be rolled into part of the
> > PointCloud2 message, so multiple different clusterings (if you wished)
> > would be available in one PointCloud2 message.  Since you have to use a
> > decoding function to interpret a pointcloud2 anyway,  it would be
> > possible to directly split up a point cloud (even if clusters overlap)
> > in a call like: fromROSMsg(PointCloud2, vector<pcl::PointCloud> )
> >
> >
> >> So, my questions would be:
> >>  1) Does it make sense to have the possibility to have multiple point
> >> index vectors in one message?
> > Yes. very much so.
> >
> >>  2) Does it make sense for a surface reconstruction (think triangular
> >> or polygonal meshes) to have a special version of a index vector, or
> >> can we find a way to kind of deal with all these cases uniformly?
> > what do you have in mind as a 'special' index vector?  I've been playing
> > with meshes recently, and I've been mulling over how to represent meshes
> > in PCL (since they are so similar to point clouds in their
> > representation, and I have seen a PolygonMesh msg...)
> >
> >>  3) How can we have this as transparently as possible?
> > I think operations on PointCloud2, and possibly some Metacloud type PCL
> > object (which would store the cloud, as well as various index vectors)
> > is the way to go.  
> >
> > So what is the status of this?  I was working on it a few weeks back,
> > but got sidetracked by kinect fun (and sadly the time I can devote to
> > ROS development is currently limited) but I would be willing to dive in
> > again (maybe with a few pointers from Radu, et al), since I think this
> > is an important feature that needs to be addressed.
> >
> > cheers
> > Garratt
> >
> >
> > On Wed, 2010-12-01 at 16:32 +0100, Nico Blodow wrote:
> >> Dear point cloud lovers,
> >>
> >> seeing that even for very organizational issues, we can get an
> >> insightful discussion started, I would like to start a new discussion
> >> (with a slightly provocative subject ;) on how to deal with the notion
> >> of a point cloud.
> >>
> >> Let me be a little clearer: Right now, (most?) algorithms can take a
> >> point cloud (e.g. PointCloud2 message) or a part of a point cloud
> >> (PointCloud2 + PointIndices). Now, there are some issues with this
> >> concept:
> >>
> >> - What happens if your segmentation spits out 5 objects, how does the
> >> next node / nodelet know that the 5 objects were from the same scan?
> >> Timestamps feel like a hack for this.
> >>
> >> - Let's say your point cloud is huge, and your 5 index vectors all
> >> should index into it, without the need to republish the original cloud.
> >> Is that possible, so that setIndices is called 5 times for the same
> >> point cloud? Who takes care that the right cloud gets set before the
> >> next set of index vectors get passed?
> >>
> >> For some of the algorithms, there are some tricks done with a dummy
> >> index vector, so that you only specify what to do with every point, and
> >> usually that will work for indexed and full point clouds.
> >>
> >> So, my questions would be:
> >>  1) Does it make sense to have the possibility to have multiple point
> >> index vectors in one message?
> >>  2) Does it make sense for a surface reconstruction (think triangular
> >> or polygonal meshes) to have a special version of a index vector, or can
> >> we find a way to kind of deal with all these cases uniformly?
> >>  3) How can we have this as transparently as possible?
> >>
> >> After all, anything working on _points_ should be usable for any
> >> representation of a full or partial cloud, right?
> >>
> >> I hope i am not asking obviously stoopid questions here :)
> >>
> >> Cheers,
> >> -- Nico
> >>
> >>
> >>
> >>
> >> _______________________________________________
> >> [hidden email] / http://pcl.ros.org
> >> https://code.ros.org/mailman/listinfo/pcl-users
> >
> >
> > _______________________________________________
> > [hidden email] / http://pcl.ros.org
> > https://code.ros.org/mailman/listinfo/pcl-users
> _______________________________________________
> [hidden email] / http://pointclouds.org
> https://code.ros.org/mailman/listinfo/pcl-users


_______________________________________________
[hidden email] / http://pointclouds.org
https://code.ros.org/mailman/listinfo/pcl-users
Reply | Threaded
Open this post in threaded view
|

Re: What is a point cloud?

Radu B. Rusu
Administrator


On 12/07/2010 10:43 AM, garratt wrote:
> Continuing to top post:

Sorry about the top post :) It's still the easiest way to e-mail with a tiny phone screen on the road.

> I thought we decided that PointCloud2 could handle multiple clusters, by
> smart labeling conventions.
> https://code.ros.org/lurker/thread/20101013.014829.2c33ae88.en.html

Whoops, you're right - I forgot about this. I stand corrected.

Can we summarize the changes again here, since they haven't been committed yet? And also, can we commit them afterwards
and take a shot at modifying pcl_ros::EuclideanClusterExtraction as we cannot use it at all right now due to this issue
(search for TODO: HACK - you'll see what I mean :) ).


>   Also, can pcl::PointCloud contain multiple clusters/sets of indices?  I
> was actually thinking that this was a good reason to _keep_ pointcloud2
> rather than switching entirely to pcl::PointCloud.

There's some other advantages to using pcl::PointCloud over the wire for publish/subscribe. Some of them include getting
rid of the conversion between PointCloud2 and pcl::PointCloud.

> Is there a new feature of pcl::pointcloud that I am not aware of to
> maintain multiple index vectors? /excited

No, but we can add one without requiring sensor_msgs and md5 sum modifications. Though we do have to be careful, and
choose a design for this until 1.0/Diamondback.

Cheers,
Radu.
_______________________________________________
[hidden email] / http://pointclouds.org
https://code.ros.org/mailman/listinfo/pcl-users