When you talk of disturbance rejection, it simply means that it is desired for the output variable of the process to remain at its desired point (most often, at a steady-state value) in the presence of any disturbance. In this case, if a controller is well tuned, it should be able to reject any disturbance occurring in that particular process. Therefore, I would advise that you check and, probably, manipulate the parameters (for example, prediction horizon, control horizon, etc) you are using with the model predictive controller.
I totally agree with Abdulwahab. Apart from that, if you haven't already tried, some simple methods from linear MPC should also be applicable.
A first approach would be to calculate the error of your actual output estimation from the measured output and assume that it will be constant over the prediction horizon, i.e. just subtract the offset from your model output.
If you know more about the nature of the disturbance, you could try to model it linear over the prediction horizon, which works well for sinusodial disturbance for example.
These and more methods are described in Maciejowski's "Predictive Control with Constraints'.
I agree with your suggestions , but the problem is the disturbance in my model is the wind and sea currents affecting my controlled ship. This disturbance is assumed to constant in the magnitude and direction(fixed in earth fixed frame), but due to the ship motion, the magnitude will be affected by the ship orientation .
I would try to solve this problem in a few steps. Frist check the MPC performance without wind and other disturbance using simulation. This is to make sure the MPC has been appropriately designed and tuned. Secondly add the wind and other disturbance and compare the estimate yielded by the nonlinear disturbance observer with the real disturbance profile. Remember this time you don't inject the disturbance estimate from NDO back to the system. You don't expect they are quite consistent but, to a large extent, it shall follow the disturbance profile. If not, the disturbance observer must be redesigned by exploring the disturbance characteristic. Finally if the NDO gives you a reasonable estimate, you compensate the disturbance effect by switching on the loop based on NDO into the feedback system. A major challenge in disturbance rejection in the MPC framework is not only the current disturbance information but also the future disturbance profile in the prediction horizon are required. For future disturbance profile, you have to either assume it is constant so the same as the current disturbance (the best possible guess if you know nothing about it) or using a disturbance model to predict based on the current disturbance estimate.
NMPC has the ability to reject disturbances that occur in a specified period, thus there will be a tracking error as long as there is an external disturbance i.e NMPC can't reject step disturbances. There are two solutions to solve this :
1. design a disturbance observer that updates the model as per the disturbance.
2. add a state that integrates the error over the horizon, thus the error vanishes as time tends to infinity.