Root Motion Controller/Animation Controller

i would like to know and learn more about what a Root Motion Controller/Animation Controller is and what it does and some ways you could set a Root Motion Controller up

what i would like to ask is

1 - what is the definition / meaning of a Root Motion Controller

2 - ways in which a Root Motion Controller could be setup and used for both blueprints areas and c++ code areas

cheers