Object Avoidance : Flying Over
In order to safely avoid an obstacle, we have to determine a safety radius, in which the vehicle can safely brake and stop within the boundary without colliding with any obstacles. This can be calculated through kinematics.
The maximum deceleration must be pre-determined through substantial field tests, and the safety distance is calculated with formulas. The worst-case scenario will be used as the value, with some tolerance to eliminate any chance of the vehicle colliding with obstacles.
As for the programming logic of the obstacle avoidance, a basic algorithm is implemented as a proof of concept before moving on further.
Through simulations, the algorithm can be further improved with some analysis. The same code for avoiding obstacles is repeated with different speeds and distances. Since it is not recommended to obtain readings in seconds in small scales, we in hence calculate the acceleration by determining the initial and final distance when the vehicle detects an obstacle. With that, we can calculate the acceleration ( negative) and the time taken to decelerate.
This determines the safety radius that will be published back into the /obstacleStatus node. This node will generate a set of instruction about the surroundings to the /mainCode, while /mainCode will publish safetyRadius values to it based on the current velocity of the vehicle. This will ensure that we do not overkill the safety radius, and also avoid unnecessary waste of space.
Taking the first values from above as an example:
Therefore, we can conclude that for an operating groundspeed of 2m/s, as long as the distance is greater than 1.979m, the drone can safety avoid the obstacle.
We will then map the minimum and maximum values of the distances, and to ensure the safety of all people, a margin of 20% will be given on top of the minimum and maximum values determined, and map it accordingly from a speed of 1m/s to 3m/s.