Altitude mode GPS off, lateral velocity does not diverge

I am testing UAV behaviour in Altitude mode with GPS completely disabled and am trying to study a case with no horizontal velocity regulation.

From a control perspective, I understand that Altitude mode should only close attitude and vertical control loops, with no horizontal velocity or position controller running. However, in the Gazebo simulation, I observed that horizontal velocity remains bounded once we set EKF2_AID_MASK (use GPS to 0) the UAV goes from Offboard mode to Altitude mode. But instead of continued or rapid divergence, lateral velocity appears constrained.

I expected that, without GPS and without any horizontal velocity feedback, lateral velocity should integrate freely and diverge more aggressively.

Could someone clarify whether PX4 includes any implicit low level mechanisms that influence horizontal velocity in Altitude mode, such as attitude setpoint handling, thrust or tilt compensation, estimator coupling, or other internal damping effects?

Any guidance or pointers to the relevant parts of the PX4 codebase would be greatly appreciated.

Its a interesting case to study.
My observation is that the bounded horizontal velocity occurs because EKF2 continues estimating horizontal states using IMU integration even without GPS. While these estimates drift over time, they are also damped by the attitude control which provides inherent horizontal damping (if no stick inputs given).

Yeah I wanted to figure out where exactly are these attitude constraints in the PX4 codebase

My guess is that we don’t have roll/pitch imbalance or wind simulated in SITL, and so it happens to not diverge.

I was wondering if this script FlightTaskManualAltitude.cpp is somehow related to my need? Specifically around line 358 which talks about Max tilt angle? is that somehow related to the acceleration behaviour I’m seeing, which inturn might affect my velocity?

I wish to remove any XY velocity constraints if possible and simulate a full divergence.

Can you elaborate more on what you meant by “not having roll/pitch imbalance”?

In reality, there is always some wind and the copter is never quite perfectly level, so there will always be some drift. In simulation, it would stay at the spot without external disturbance.

Actually in our simulation when we disable GPS ie we go from Offboard Mode to Altitude Mode (we only have Barometer then), the UAV does drift quickly, its just that the velocity doesn’t diverge exponentially as we expected. The position does in fact drift off (although not exponentially)