Yes, the producer/subscriber messaging mechanism of ROS is possibly the most important architectural pillar of ROS. It “de-couples” everything.
One of the most memorable concepts of my limited software coursework were discussions of coupling and cohesion - cohesion being good and coupling being bad.
Designing “complete” robots, without the ROS foundation, requires architectural choices that can be very significant with nuanced impact not understood until late in the travel down the chosen path.
Early in my software career, I was enamored by writing direct to the hardware with no operating system of code I had not written. If something was wrong, it was wrong in my code.
Very quickly I learned I could not “write it all”, and accepted compiler generated code and compiler runtime libraries, but still avoided operating systems. (My first job was to write those compiler runtime libraries actually.)
After 40 years of directly coding robot behaviors, the Raspberry Pi with its Debian Linux based OS and built-in SPI and I2C bus availability has rocketed me beyond my “write it all” comfort zone. The massive community support for advanced computing principles in Python opens up robot architecture decisions which I am totally unprepared to make.
Rather than trying to roll my own robot software architecture in increments, I probably should accept a move to ROS, BUT I want you “ROS-on-GoPiGo3” folk to find out if the GoPiGo3 hardware and DI/ModRobotics sensor/effector code can make a robot that is both aware and responsive with small reaction times.
Obstacle detection with only the camera and distance sensor, wheel stall detection, and body deflection from the horizontal plane (such as hitting a floor/rug transition) may need autonomic protection responses at the GoPiGo3 platform level (below the ROS layer).
In that case, a ROS-on-GoPiGo3 programmer may end up exactly where I am at right now - trying to couple sensors to effectors closely in a few important cases but loosely for the majority needs. But then again, perhaps the ROS community having gone down the path of adding platforms will have templates for the platform specific interface routines to every imaginable need.