Java – Google arcore domain model example
I am trying to read and understand the domain model of Google arcore, especially the Android SDK package At present, this SDK is in "Preview" mode, so there are no tutorials, blogs, articles, etc. on how to use this API Even Google itself recommends reading only source code, source code comments and JavaDocs to learn how to use the API The problem is: if you are not a computer vision expert, the domain name model will feel a little strange I'm not familiar with you
Specifically, I am interested in understanding the fundamental differences and correct usage between the following classes:
> Frame > Anchor > Pose > PointCloud
According to anchor's Javadoc:
So the host has a posture Sounds like "putting an anchor" on something visible in the camera, and then arcore tracks anchor and constantly updates its pose to reflect the nature of its screen coordinates?
Javadoc from pose:
So it sounds like pose is only unique to the "current frame" of the camera, and every time the frame is updated, all poses of all anchors may be recalculated? If not, what is the relationship between the anchor, its pose, the current frame and the world coordinate system? What is pose really, anyway? Is pose just a way to store matrix / point data so that you can convert the anchor from the current frame to the world frame? Or something else?
Finally, I see that there is a strong correlation between frames, points and anchors, but then pointcloud I'm on COM google. The only class you can see in ar.core that uses it is frame Pointclouds seems to be (x, y, z) – coordinated with the fourth attribute, indicating the "confidence" of arcore, that is, the X / Y / z component is actually correct Therefore, if an anchor has a point, I would imagine that a point will also have a pointcloud representing the coordinates of the anchor & confidence in those coordinates But point doesn't have pointcloud, so I have to completely misunderstand the concept of modeling these two classes
This problem
I have raised several different questions above, but they all come down to a concise answer:
What are the different concepts behind frame, anchor, point and pointcloud, when do you use them (and for what purpose)?
Solution
Posture is a structural transformation It is a fixed numerical conversion from one coordinate system (usually the local object) to another coordinate system (usually the world)
Anchor stands for the physically fixed position in the world As the understanding of the world changes, its getpose () will be updated For example, suppose you have a building with a corridor outside If you walk in that corridor all the time, the sensor drift will make you unable to clean up at the same coordinate as you started However, arcore can detect (using visual features) it in the same space where it starts When this happens, it distorts the world, aligning your current position with your original position As part of this distortion, the position of the anchors will also be adjusted so that they remain in the same physical position
Because of this distortion, a pose relative to the world should be considered valid only for the duration of the frame it returns Once you next call Update (), the world may have reshaped that pose, which may be useless If you need to keep the position longer than the frame, create an anchor Just make sure to delete anchor () anchors that are no longer in use, because each real-time anchor has an ongoing cost
Frame captures the current state immediately and changes it between update () calls
Pointclouds are three groups of visual feature points detected in the world They are located in their own local coordinate system and can be accessed from frame Getpointcloudpoint() access Developers who hope to provide better spatial understanding than plane detection can try to use point clouds to learn more about the structure of the 3D world
Does this help?