I always want to try the USB communication but USB is a notorious protocol. I read a lot about USB from online resources like waitingforfriday, engscope, wikipedia. I was confused.
And finally the author from engscope says that you dont need to understand USB software stacks to implement USB, so I decided to give it a try. The simplest way is to run existing projects offered by Microchip.
http://electronictoofree.blogspot.my/2015/03/pic18f-usb-hid.html