Creating a new package

Naming

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

Adding the dependencies to the package.xml

It is extremely important to maintain your package.xml up to date with its dependencies. Not doing so results in the need of specialized tools or manual inspection of launch files and source code to discover your package dependencies.

Last updated