> For the complete documentation index, see [llms.txt](https://b-it-bots.gitbook.io/wiki/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://b-it-bots.gitbook.io/wiki/gitbook-1/_conventions/ros/package-name-and-structure.md).

# package-name-and-structure

In order to create a new ROS package for one of the repositories some rules need to be considered:

1. The package name has always the following format:

   ```
    prefix_my_package_name
   ```
2. Use the right prefix for every repository:\
   a. `mas_domestic_robotics`: `mdr_`\
   b. `mas_industrial_robotics`: `mir_`\
   c. `mas_common_robotics`: `mcr_`
3. Use lowercase.
4. Separate words in the package name by underscores ( \_ ).

Examples for creating packages according to the above described rules are as follows:

```
catkin create_pkg mdr_grasp_planning
catkin create_pkg mir_whole_body_control
catkin create_pkg mcr_object_detection
```

## Folder structure

Every ROS package within our repositories has to strictly match the following structure:

```
.
├── common
│   ├── config
│   ├── include
│   │   └── <package_name>
│   ├── src
│   │   └── <package_name>
│   ├── test
│   └── tools
├── ros
│   ├── config
│   ├── include
│   │   └── <package_name>
│   ├── launch
│   │   |— <package_name>.launch
│   ├── rviz
│   │   |— <package_name>.rviz
│   ├── scripts
│   │   └── <package_name>
│   ├── src
│   │   └── <package_name>_node
│   ├── test
│   └── tools
├── CMakeLists.txt
├── package.xml
├── setup.py
└── README.md
```

In short:

* ROS-independent code goes into the `common` folder
* the `ros` folder contains a ROS-wrapper for the functionality you are adding

### Meta-packages

If the package you are creating is meant to contain other packages inside of it, it needs to have instead the following structure:

```
./<meta_package_name>
└── <meta_package_name>
    ├── CMakeLists.txt
    ├── package.xml
    └── README.md
```
