A solution I’ve tried to prevent my character controller from being stuck on the edges of objects is two have two simple Raycasts, one (Raycast1) that shoots forward from the players feet and the other (Raycast2) which shoots downwards directly under the player.
How this is supposed to work is if Raycast1 detects an object, but Raycast2 does not detect ground below the player, I get “pushed” back by using controller.Move(-transform.forward * Time.deltaTime * 2f);. This code works great on cube and similar type objects and the “push” is not noticeable at all which is very good, but on round objects it is very inconsistent, sometimes it works and sometimes it doesn’t. Adjusting cast distance did not help and neither did adjusting Skin Width.