The most likely reason is be because you are using software timed servo pulses. Any variation in timing accuracy leads to jitter (servo trembling).
I suggest you use hardware timed pulses to drive servos.
Look at pigpio or servoblaster.
After several days of unsuccessful attempts, I still found a great solution to my problem. This solution is the repository: https://github.com/sarfata/pi-blaster. I just installed this on my raspberry pi and wrote a simple program to run my servo motors. At the very beginning of my program, the code is called that launches the pi-blaster via command line:
Just a couple of suggestions:
I use Lipo power bank to power 3+ sg90/mg995/mg996 servos, and dc motors.
I use SIM7600's using USB UART ports not sharing with Rpi GPIOs handling servos.
I use Rpi3B+, Rpi4B as development machine, and RpiZ/W on the drone, this way saves much prototyping time.
Using 16 Channel PWM/servo module is an overkill.