When you start all 20 modules at the same time, they might send all at the same time, causing the issue that packets are overlapping when sent out.
What RUI3 version are you using?
Are you using the RAK3172 as stand-alone devices with a custom firmware or are they controlled from a host MCU over AT commands?
A method to avoid package collision is CAD (channel activity detection). But it requires at least RUI3 V4.1.0.
When using AT commands, you can activate CAD with the AT command AT+CAD=1.
The device will then start CAD before it sends a packet. If channel activity is detected, you will get an asynchronous event “+EVT:CAD” and you should retry to send the packet.
When using custom firmware with API calls, you can setup a callback for CAD and enable CAD when sending a packet.
I am using CAD in my example code RUI3-LowPower-Example