Open vividf opened 2 months ago
Possible solution diagram
@vividf according to possible solutions without specifying the main_pointcloud, what happens if there are multiple pointcloud drops and when does the timer start, is it after getting the third pointcloud into the buffer?
@palas21 Thanks for your question. The solution won't be the one described above. I will provide the decided solution later :)
Checklist
Description
In the concatenate node description, it describes that if one sensor (pointcloud) fails, the node will still concatenate the remaining pointcloud. (see the last 5 pointcloud in the diagram shown below)![image](https://github.com/autowarefoundation/autoware.universe/assets/146902905/51c029f6-bb04-447c-8033-1a1b5b2d5fe1)
However, the algorithm implementation doesn't work as in the diagram. In the scenario when one of the
Pointcloud C
doesn't come, and thePointcloud D
, which already exists in the buffer, arrives at the node, the timer will reset (start) with the periodtimeout_sec
. In this case, the timeout won't happen int3
as the timer just starts again. Finally, Pointcloud F arrives and the current algorithm will concatenatePointcloud D, E, F
, and discardPointcloud A, B
.In some scenarios (imagine we have top, left, and right lidars) we can control the publish time of each Lidar. We will set the most important pointcould (top) as the last-coming pointcloud. In this case, the current algorithm works fine because if the left and the right pointcloud
(Pointcloud A, B)
come and the top pointcloud(Pointcloud C)
doesn't come. It is better to discard the left and the right pointcloud(Pointcloud A, B)
as the concatenate pointcloud (without top pointcloud) might cause problems to the perception module. However, in this case, we probably need to add a parameter/algorithm that indicates which lidar is the main lidar, and when the main lidar doesn't arrive, we won't concatenate the pointcloud.reference: https://github.com/autowarefoundation/autoware.universe/blob/main/sensing/pointcloud_preprocessor/docs/concatenate-data.md
Purpose
Provide a more robust algorithm for concatenating pointlcloud.
Possible approaches
This is the current algorithm of the concatenate node.
Possible approach:
main_pointcloud_topic
, which we don't concatenate the pointcloud if the pointcloud buffer lacks themain_pointcloud
.timeout_sec
when receivingPointcloud D
, we do the concatenate if the main_pointcloud is in the bufferExample
Pointcloud C
is main_pointcloud, then do the same thing as the current algorithm does.Pointcloud C
is not the main_pointcloud, we wait until the timeout then we publish. Or we receivePointcloud D
before the timeout, we also concatenate the pointcloud.Definition of done
The concatenate node can handle scenarios that are required.