Detecting Distance and Orientation of part under car

I’m trying to make a speeder that when its driving can float over some reason terrain as of right now I don’t have a clear idea or direction on how to do that as can be seen with how it goes up hills in the video
My idea was to ray cast under the model and get the orientation and height of the object below then adjust the BodyPosition accordingly but I’m not sure that’s possible can someone recommend a Dev tutorial a youtube video or just walk me through how I could achieve this

script.Parent.MaxSpeed = 120
maxspeed  =script.Parent.MaxSpeed
script.Parent.BodyPosition.position = script.Parent.Positionv -- this is how i set the height at the start
script.Parent.BodyGyro.cframe = script.Parent.CFrame
value1 = 0
while true do
	wait()
	if script.Parent.Throttle == 1 then
		if script.Parent.Direction.Value == false then
			script.Parent.Direction.Value = false			
			if value1 < maxspeed then value1 = value1+1 end			
			script.Parent.BodyVelocity.velocity = script.Parent.CFrame.lookVector*value1			
			--Making the slow down if reverse direction with speed
		else
			if value1 > 0 then
				value1 -= 1
				script.Parent.BodyVelocity.velocity = script.Parent.CFrame.lookVector*-value1
			elseif value1 == 0 then
				script.Parent.Direction.Value = false	
			end	
		end	
		
	end
	if script.Parent.Throttle == 0 then
		if script.Parent.Direction.Value == false then
			if value1 > 0 then
				value1 -= 1
				script.Parent.BodyVelocity.velocity = script.Parent.CFrame.lookVector*value1
			end	
		else 
			if value1 > 0 then
				value1 -= 1
				script.Parent.BodyVelocity.velocity = script.Parent.CFrame.lookVector*-value1
			end	
		end	
	end
	if script.Parent.Throttle == -1 then
		if script.Parent.Direction.Value == true then
			script.Parent.Direction.Value = true			
			if value1<31 then value1 = value1+1 end			
			script.Parent.BodyVelocity.velocity = script.Parent.CFrame.lookVector*-value1			
		else
			if value1 > 0 then
				value1 -= 1
				script.Parent.BodyVelocity.velocity = script.Parent.CFrame.lookVector*value1
			elseif value1 == 0 then
				script.Parent.Direction.Value = true	
			end	
		end		
	end
	
	if script.Parent.Steer == 1 then
		script.Parent.BodyGyro.cframe = script.Parent.BodyGyro.cframe * CFrame.fromEulerAnglesXYZ(0,-.072,0)
	end
	if script.Parent.Steer == -1 then
		
		script.Parent.BodyGyro.cframe = script.Parent.BodyGyro.cframe * CFrame.fromEulerAnglesXYZ(0,.072,0)
	end
end

Use a raycast.
A raycast will give you the normal vector of the part, this is the orientation you are looking for as well as the distance below the car.

Read more about it in this article:

Else if that does not work I suggest watching a youtube tutorial.