Autoware Hackathon - London

In an effort to get the Autoware.Auto implementation of NDT as high quality as possible, @yunus.caliskan and I have been hard at work coming up with an initial design and supporting documents for NDT. You can find them listed below:

  1. Literature review
  2. High level design
  3. Failure analysis
  4. APIs and architecture
  5. Psuedocode/Review of Autoware.AI implementation
  6. Metrics

Of these, I would 100% recommend anyone planning on working on NDT take a look at our currently proposed API and architecture (point 4, work in progress). The psuedocode (5), and high level localization architecture/design (2) might also be useful to skim through for a higher-level overview.

Further, if anyone has suggestions for improvements in any of these documents, those are super welcome too.

Finally, based on the proposed API (which is prospective; feel free to diverge or make or suggest changes), I would like to suggest the following work packages or parts of the proposed architecture that any one person can grab:

  1. Map publisher (pcd -> publish map)
  2. Map (format) validation
  3. PointCloud2 -> NdtRepresentation
  4. Adapt voxel grid to make a plain NdtRepresentation
  5. Some kind of simple Point representation for scan
  6. Newton’s method
  7. Simple line search
  8. Gradient and hessian computation in P2D optimization problem
  9. LocalizerBase
  10. initial guess stuff
  11. LocalizerBaseNode

  1. NdtLocalizer
  2. NdtLocalizerNode

Where I would guess the first 11 or so items can be done independently, and the last two should be done jointly in the final integration.

For the map-related items (1-3), I would like to suggest the following format in PointCloud2 (there’s no other good place to document this):

// PointCloud2
fields = {
  // centroid
  PointField{"x", 8, FLOAT64, 1},
  PointField{"y", 8, FLOAT64, 1},
  PointField{"z", 8, FLOAT64, 1},
  // covariance, row major
  PointField{"cov_xx", 8, FLOAT64, 1},
  PointField{"cov_xy", 8, FLOAT64, 1},
  PointField{"cov_xz", 8, FLOAT64, 1},
  PointField{"cov_yy", 8, FLOAT64, 1},
  PointField{"cov_yz", 8, FLOAT64, 1},
  PointField{"cov_zz", 8, FLOAT64, 1},
}

@Brian_Holt @Antonis_Skardasis @esteve If you could forward this information to anyone else who you know is attending the hackathon, that would be great!