It is helpful in robotics to first learn about "Linux kernel development" or "device driver development in Linux" before I start learning ROS? I know C and JAVA! In brief, I want to know any prerequisites which are essential to understand ROS better.
It sounds like you're excited to learn ROS. The best way to learn ROS well is to dive in and learn any necessary bits along the way. Once you finish going through EVERYTHING in the ROS tutorials you can tinker with a project like turtlebot.
Last but not least there is http://answers.ros.org/ for any ROS related questions you may have.
I took the route I suggested and it took me a while to learn some VERY helpful things so I want to point those out as well.
- Electric, Fuerte, Groovy, Hydro, Indigo, Jade, Kinetic are all different versions of ROS from oldest (Electric) to newest (Kinetic). I personally use Hydro/Indigo because they have the most/best support in communities.
catkinis a type of ROS friendly workspace. You can build ROS in a workspace (required by some devices/distros) or you can simply do a desktop or full install of ROS.
- You can learn to build
URDFmodels from the tutorials. You can use URDF models as robots in
Gazebo(mentioned by @NBCKLY). Use this to debug your robot as you can see where it thinks it is and what it thinks it is doing. You can also try throwing parts on, like a laser scanner, to see if that will help your invention.
To learn and use ROS, you do not need to know anything about Linux kernel development, and at first, you shouldn't need to worry about writing drivers. All you need to know is how to use a command line environment.
Like Jacksonkr said, the Turtlebot tutorials are pretty good. In addition, using Gazebo, you can simulate the robot without needing to have one physically, which is fantastic. Once you learn the basics, you can simulate and implement solutions to a huge number of robotics problems like SLAM.
You do not require "Linux kernel development" or "device driver development in Linux" before starting ROS. As ROS allows you to write programs in either C++ or python, familiarity with these two languages would be helpful. As you are familiar with C, learning C++ may not be that difficult. In addition to that, familiarity using linux terminal would be beneficial. However, even if you are not comfortable with linux terminal, you can start learning ROS. In that case, first start following the ROS tutorials step-by-step and if you are not familiar with commands mentioned in the tutorials you can always search what actions those commands perform. I would suggest you to start the ROS tutorials and always learn the dependencies on the go.