Achieving precise landing through the recognition of AprilTags using OPENMV

I would like to ask if anyone has successfully implemented the precise landing function by using OPENMV to recognize AprilTags. I tried using the official example code provided by OPENMV. When the OPENMV detects the AprilTags, it sends data, and my drone can receive it as well. Moreover, the ground station can display the data. However, the actual effect was quite poor. When I made the drone hover directly above the AprilTags, and then switched to the landing mode, the drone did not land on the AprilTags. Instead, it immediately deviated and lost its target.

OpenMV is built around a microcontroller and thus AprilTag detection is very slow due to lack of CPU and RAM. Using an SBC, like the Raspberry Pi, allows for much higher image resolution and faster detection.

For context, I built the Landmark Precision Landing System. I found that the LANDING_TARGET messages need to be sent at a minimum of 10 Hz for precision landing to work correctly.

Could you please tell me how far a distance can be measured and what the frame rate is using a Raspberry Pi? I have also been conducting tests in this direction recently. However, the actual test distance is not very satisfactory.

Our camera is based on the IMX219 sensor. We’re getting ~85 FPS. However, the camera frame rate is distinct from the detection rate, i.e., the rate at which LANDING_TARGET messages are sent.

The Landmark PLS sends LANDING_TARGET messages between 10 Hz and 30 Hz depending on the proximity to the landing target.

Detection range depends on the size of the landing target. For example, the Landmark PLS can detect a 21 cm x 21 cm target from up to 10 meters away.