In order to navigate safely, especially during takeoff and landing, you need a reasonable idea of your absolute velocity relative to the ground. You can't get that from an IMU (except over very short timescales) because of integration errors. A barometer would work for the vertical axis, but getting the horizontal component is a lot trickier. GPS solves this nicely, especially since velocity can be derived from relative measurements, which are much more accurate than absolute ones.
It looks like Ingenuity uses visual odometry from a downward-facing camera, which is likely to require a lot more processing than something like an STM32 could provide.
I believe that for Ingenuity they are actually doing this in software; but at this point, you can just buy off-the-shelf an optical flow odometry ASIC with a built-in camera and lens system that draws <5mA, fits in a 4x5mm footprint and gives you delta-X and delta-Y.
e.g. https://www.pixart.com/products-detail/108/PAA3905E1-Q
Kinda mind-blowing.
the CPU on a fairly advanced quad, hex or octocopter on earth can be a STM32F7 or STM32H7 family microcontroller, which is not very powerful in terms of raw computing power. That's more than fast enough (in an earth environment) to pull in sensor input at a high Hz refresh rate from dual IMUs, barometer, GPS, and control up to eight motor ESCs, along with running the UARTs for communication to a remote control link, and additional spi, i2c or UARTs to do things like run camera gimbals.
https://docs.px4.io/master/en/flight_controller/cubepilot_cu...