I don't understand the Player Controller nodes

I will try to explain it, being not too technical, but enough for you to understand the concept, since most game engines have the concept of player controllers.

Player Controller is a class very small used to drive user input to the player pawn. That input can come anywhere: mouse, keyboard, gamepad, virtual input (like actions controlled by AI, in this case AIController would be used instead), etc

Player Controller exists to simplify the work one would have to do in order to process user input and also have implications when dealing with networking.

At the game client there can be only one player controller, while at the server side, there are as many player controllers as players concurrently playing the level, and since the player controller class is very small, there is not much overhead at the server side dealing with so many of them (theoretically).

At the game client you can have a lot of pawns, but you can only control one at a time, meaning that you can assign to a pawn the “one” player controller created at the playing level.

With the explanations above, the return type of a player controller is the instance of a certain player controller currently active for you client side, and since there can be only one player controller at client side, whenever you want the current pawn being controlled, you need to supply the controller using “get player controller” to accurately retrieve the correct pawn when you need it.

Let me know if you understood the above and what else I could say to complement what you need to know.