Controlled Flight Into Terrain (CFIT)
15 views (last 30 days)
I want to build a collision avoidance system
How can I check for whether an aircraft with a given heading will crash into terrain?
How can I check whether terrain is on the right hand side of the aircraft?
The terrain data is given in a Matrix.
William Rose on 17 Aug 2022
Suppose you have an array whose values are the terrain elevations. For example:
Elev=1000*membrane(1,300); %sample terrain matrix (height in m)
Elev=Elev-min(min(Elev)); %adjust terrain height so all points are >=0
Suppose you have vectors for the X coordinates (columns) and Y coordinates (rows) corresponding to each grid point.
% Assume grid is square with 0.5 nautical mile long sides.
% 1 degree of latitude = 60 n.m.; 1 degree of longitude = 60*cos(Lat) n.m.
Lat0=40; Long0=-75; %coordinates of array element(1,1)
Lat=Lat0+(0:ny-1)/120; %latitude in degrees of the terrain array
Long=Long0+(0:nx-1)/(120*cosd(Lat0)); %longitude in degrees
Supose you have the aircraft current position, heading, and ground speed. Assume level flight.
p0=[-75.0,45.0,500]; %initial position (Long, Lat) & altitude (m above MSL)
gs=300; %ground speed (knots=n.m./hour)
hdg=135; %compass heading (true)
Compute the predicted path.
theta=90-hdg; %heading (degrees) measured the usual mathematical way
v=[gs*cosd(theta), gs*sind(theta), 0]; %velocity vector (knots)
t=[0:1/60:1.5]'; %time vector (hours), 1 minute spacing
vd=v.*[1/(60*cosd(Lat0)),1/60,1]; %convert velocity from nm/hr to [degrees Long/hr,degreesLat/hr,]
ppred=p0+t*vd; %predicted position at 1 minute intervals
Plot the terrain and the predicted path.
%% Plot terrain and current and predicted position
xlabel('Longitude'); ylabel('Latitude'); zlabel('Elevation (m)');
grid on; hold on
plot3(p0(1),p0(2),p0(3),'r*'); %current position
plot3(ppred(:,1),ppred(:,2),ppred(:,3),'-r'); %predicted position
That does not look good.
Since this is probably a homework project, the rest will be just ideas, and you can write the code. Now that you have all the information organized in a nice way, you can think of a method to determine if the predicted path intersects the terrain, and when and where that occurs.
Write some code. If it has an error or gives an unexpected results, post it on this site, with a description of the method you are tyring to use, and what the error message or unexpected result is, and what steps you have tried to fix the error.
You can calculate the slope of the terrain perpendicular to the flight direction, at the impact point (numerical estimate of the directional derivative). If the sign of the slope is one way or the other, then you know the terrain is higher on the right, or higher on the left, at the impact point. Alternatively, if there is a collision predicted, you could try a heading that is 1 degree to the left of the original heading, and try a heading 1 degree to the right of the original heading. Determine the time to impact for these alternate headings. Depending on whether the impact occurs sooner, later, or not at all with the alternate headings, you can conclude that the terrain is on the right, or on the left, or straight ahead.