I am building the upper body of a humanoid robot for my M.Sc thesis project with 24 DC motors and multiple sensors (something like i-cub or Nao). I have basic knowledge of communication protocols and I have worked with micros before but I have no knowledge and experience on working with ROS. The question I have is whether or not it is worthy and practical for me to learn ROS and use this for my robot or should I stick with what I already know.
ROS is good for when you start writing code to run on a PC. It lets you write independent modules that interface through standard messages and service calls. Furthermore, it has a large user base with lots of off-the-shelf tools, drivers, and higher-level behaviors.
What ROS is not good for is inter-microcontroller communication. (ROS's communication is Ethernet based). The overhead required for a microcontroller to "talk" ROS is not worth it in my opinion.
So what I would recommend (what I have done numerous times in the past), is to write your own inter-microcontroller communication using whatever you are comfortable with. Then the micros will need to interface with a computer. This can be some embedded thing like a Gumstix, RaspberryPi, etc. Or it can be over a serial or bluetooth link to a standard PC. In either case, you define that protocol as well. Now on the PC, you write a ROS node to expose the functionality of your hardware. For a very custom robot, you will probably have to define your own messages for control as well as sensor feedback. But then you can start to interface with all of the ROS ecosystem.
One of the first things i do is to create a URDF file. Then write a node to publish the joint_state message to interface with the robot_state_publisher. Now you have an excellent 3d visualization of your robot in rviz. From there, you can overlay maps, display sensor data, and interact with the robot in power full ways.