The rosinstall_generator generates rosinstall files containing information about repositories with ROS packages/stacks.
Bug / feature tracker: https://github.com/ros-infrastructure/rosinstall_generator/issues
It always returns information about released packages - either to the gbp repositories for wet packages or to the tarball of dry stacks from the SVN release repository.
If you want to access the source repository of a package/stack you should use roslocate instead.
The rosinstall_generator can be installed via a Debian package from the ROS repositories:
sudo apt-get update sudo apt-get install python-rosinstall-generator
For other platforms (where the Debian package is not available) it can be installed from PyPI using pip. It is strongly suggested that you use a virtual environment to contain these dependencies. For more info, see: https://docs.python.org/3.6/tutorial/venv.html
python3 -m venv /path/to/my_venv source /path/to/my_venv/bin/activate pip install rosinstall-generator
The command line program is invoked by:
rosinstall_generator PKGNAME [PKGNAME ...]
You can pass package names, dry stack names as well as variants (below just called packages). Variants are being resolved into a set of packages and/or stacks.
By default it outputs the repository information formatted for rosinstall to the console. Commonly you want to pipe the result into a .rosinstall file.
Via command line options you can customize for which packages the rosinstall information is provided:
- Include all repositories for the recursive dependencies.
--deps-up-to PKGNAME [PKGNAME ...]
Include repositories between the passed package and the up-to packages (see below for an example).
- Exclude the packages passed in on the command line returning only the dependencies.
Furthermore you can restrict the result set:
--exclude PKGNAME [PKGNAME ...]
Exclude specific packages (also excluding their dependencies when using --deps* options).
- Only include wet packages.
- Only include dry stacks.
Anywhere where it is possible to specify package names you can also use the following keywords which will expand to a specific set of packages:
- Expands to the set of all released packages.
- Expands to the set of packages found in then current environment (by searching the ROS_PACKAGE_PATH).
If you don't have a ROS environment sourced (ROS_DISTRO not being set) you also have to specify the ROS distribution with the option --rosdistro DISTRO_NAME.
All packages to build a variant from released sources
To generate a rosinstall file with all packages and stacks contained in the desktop-full variant for Hydro invoke:
$ rosinstall_generator desktop_full --rosdistro hydro --deps > hydro-desktop-full.rosinstall
Since for Groovy not all packages of desktop_full have been catkinized you might want to generate two separate rosinstall files for wet and dry. Thereby you can checkout these two sets of packages into different locations:
$ rosinstall_generator desktop_full --rosdistro groovy --deps --wet-only > groovy-desktop-full-wet.rosinstall $ rosinstall_generator desktop_full --rosdistro groovy --deps --dry-only > groovy-desktop-full-dry.rosinstall
All packages currently in the environment from released sources
To generate a rosinstall file with all packages and stacks available via the ROS_PACKAGE_PATH invoke:
$ rosinstall_generator RPP
A set of packages missing from the current environment
To generate a rosinstall file with a set of packages including their dependencies which are not available in the current environment invoke:
$ rosinstall_generator rviz --deps --exclude RPP
All packages of a ROS distribution from released sources
To generate a rosinstall file with all packages and stacks available in a specific ROS distribution invoke:
$ rosinstall_generator ALL --rosdistro hydro
Note: it is very likely that some of these packages will not build successfully.
Combining with vcstool / wstool / rosws
To add a package/stack with all its dependencies to an existing workspace invoke:
# assuming the workspace is in the relative folder "src" $ rosinstall_generator ros_tutorials --rosdistro noetic --deps | vcs import src
# assuming the wet workspace is in the relative folder "src" $ rosinstall_generator ros_tutorials --rosdistro hydro --deps | wstool merge -t src - $ wstool update -t src -j8
# assuming the dry workspace is in the current folder $ rosinstall_generator navigation --rosdistro groovy --deps | rosws merge - $ rosws update -j8