ROS Use Patterns and Best Practices
ROS is sufficiently complex to merit the creation, documentation, and use of standardized design patterns. The goal of this portion of the wiki is to catalog and organize various ROS patterns, enabling developers to make more consistent software with ROS, and making it easier for new users to make the right design decisions when building systems with ROS. These abstract design patterns and best practices are different from the concrete examples which can be found in the ROS Tutorials. The tutorials are meant to be self-contained and succinct. They can sometimes mislead developers to design systems which don't scale well or that have other problems later on.
The design patterns described in this section of the wiki are not necessarily set in stone. Some are formalized in ROS Enhancement Proposals (REPs) but many are simply the observations of what has worked well in various contexts, and some patterns are even just personal preferences of various developers. The important part is to catalog the different approaches so that other users can see commonly used patterns explicitly described with their benefits and drawbacks instead of having to determine the same information from reading source code.
If you have found a useful pattern or practice which is not mentioned here, you can add it directly to the wiki! This is all community-generated content.
In some cases, a page will have a category for the preferences of various users. In this case, you can contribute by adding a category page to your local wiki namespace (YourUserName/PageName) and adding the following to the bottom of the page:
Determining Best Practices
Formalizing Patterns as Standards
The best way to formalize a best practice as a standard is via a ROS Enhancement Proposal (REP). An informational REP can give guidelines and prescribe preferred techniques. In the long term, we expect established patterns and best practices to be described in REPs.