Landing in Strong Winds

I am trying to land my drone on a Aruco Marker through image processing.

I am calculating the distances (x,y) and accordingly providing velocity to my drone.

While working in simulation, it works fine but the problem arises when it is in real world.

From a certain height, I am setting the vehicle mode as LAND. Now because of the wind effect, the drone does not land exactly on the aruco marker. It lands with an accuracy of ± 50-60 centimeters.

Also, when there is less wind, accuracy increases and lands within ± 10-30 centimeters.

I need to improve the accuracy in stronger winds.

Can anyone help with some suggestions on how to tackle the wind effect while the Drone is landing?

I have not tried it, but I worry that sending velocity commands based on pixel position alone won’t be sufficient to reject wind disturbances. You may need some lower-level control with faster and more precise response to get the performance you want.

Instead of just sending velocity, have you tried sending a desired position instead, and letting ArduCopter’s navigation controller take care of it? This is essentially how Copter’s precision landing works.

Speaking of which, have you tried Copter’s Precision Landing feature? It can handle arbitrary input from a companion computer.

Do you mean latitude and longitude when you say Desired position?

I have tried calculating latitude and longitude using aruco position and gave goto commands but again due to GPS error, the accuracy was poor. Hence, I thought of removing dependency of GPS while landing.

No, I have not tried Copter’s Precision Landing feature. It seems to me that we need to have IR lock sensor and a lidar to use it. I just want to restrict myself with image processing due to budget constraints.

This is my how my code flow is:

  1. Based on Aruco position, the drone will get X and Y distances from Aruco and accordingly it will give velocity commands and simultaneously it will come down slowly.
  2. When it reaches 1 meter or so and has aligned itself to Aruco marker, then I am giving LAND command.
    Here is the main problem. After receiving the LAND command, drone lands without bothering about anything. So, during this time, if strong winds are there, it lands somewhat far away from the Aruco marker.

With the Ardupilot Precland library, you can use any sensor. Connect it to an onboard computer and send LANDING_TARGET mavlink message with the relative position data.

Ah, so the problem is that your velocity requests don’t work in Land mode? Have you tried landing in Guided? As long as there is a a negative climb rate requested when the drone lands, ArduCopter should detect that the drone has landed and disarm normally. You don’t have to be in Land mode.

Thanks for the suggestion.

One more thing, I want to ask is that how about using LOITER mode when the drone has aligned itself just above 1 m and use RC override so that the drone can land.

Why I am asking about the LOITER mode is that beacuse Loiter Mode automatically attempts to maintain the current location, heading and altitude (as per the documentation).

This should behave the same as Land mode. Land mode also attempts to hold xy position if you have GPS connected.

By the way, have you seen Maverick? It has a vision-based precision landing feature that might be of interest to you.