OP has probably solved this by now, but answering for others having this problem. In your listener script you passed a connection string "udp:localhost:14552". Your mavink router instance indicates that the UDP endpoints are clients. This means both your listener and your mavlink router udp endpoints are both listening for mavlink packets. Mavlink router will not send mavlink packets to those client endpoints until they receive mavlink heartbeats from the expected ip and port.
You should change your listeners pymavlink connection string to "udpout:localhost:14552 and have your script sending mavlink heartbeats either in a thread or just sending them every second in an infinite loop.
TL;DR Set your connection string to udpout so it is a "udp server" and send mavlink heartbeats. Mavlink router should start responding with messages as soon as those heartbeats come in.
Alternatively, you could set your mavlink router endpoints to be "udp server" endpoints by changing your mavlink-router conf file. Type "mavlink-routerd --help" to see how you can set up endpoints to "listen" or send mavlink messages without first receiving a heartbeat.
Hope that helps