pax_global_header00006660000000000000000000000064140654414750014524gustar00rootroot0000000000000052 comment=211c5c63661d80cdc99307520f1e539a3915a84c rosdep-0.21.0/000077500000000000000000000000001406544147500131005ustar00rootroot00000000000000rosdep-0.21.0/.github/000077500000000000000000000000001406544147500144405ustar00rootroot00000000000000rosdep-0.21.0/.github/workflows/000077500000000000000000000000001406544147500164755ustar00rootroot00000000000000rosdep-0.21.0/.github/workflows/ci.yaml000066400000000000000000000025561406544147500177640ustar00rootroot00000000000000name: rosdep-ci on: push: branches: [master] pull_request: branches: ['*'] jobs: build: strategy: matrix: os: [ubuntu-16.04, ubuntu-18.04, macos-latest] python: [2.7, 3.5, 3.6, 3.7, 3.8, 3.9] exclude: - os: ubuntu-16.04 python: 3.6 - os: ubuntu-16.04 python: 3.7 - os: ubuntu-16.04 python: 3.8 - os: ubuntu-16.04 python: 3.9 - os: ubuntu-18.04 python: 3.5 - os: macos-latest python: 3.5 - os: macos-latest python: 3.6 name: rosdep tests runs-on: ${{matrix.os}} steps: - uses: actions/checkout@v2 - name: Set up Python ${{matrix.python}} uses: actions/setup-python@v1 with: python-version: ${{matrix.python}} - name: Install dependencies run: | python -m pip install --upgrade pip setuptools python -m pip install PyYAML argparse rospkg vcstools catkin_pkg python-dateutil rosdistro python -m pip install -e . python -m pip install nose coverage flake8 mock codecov - name: Run tests run: | python -m nose --with-coverage --cover-package=rosdep2 --with-xunit test - name: Check coverage run: | python -m codecov rosdep-0.21.0/.gitignore000066400000000000000000000001731406544147500150710ustar00rootroot00000000000000*.orig *.swp *.pyc *.DS_Store *~ *.log .coverage nosetests.xml target build deb_dist dist src/rosdep.egg-info nose* _build rosdep-0.21.0/.travis.yml000066400000000000000000000014771406544147500152220ustar00rootroot00000000000000language: python matrix: include: - os: linux python: 3.4 # When support for 3.4 is removed unpin the PyYAML version below. # command to install dependencies install: - source .travis/install.sh - python --version - if [ $TRAVIS_PYTHON_VERSION == "3.4" ]; then python -m pip install PyYAML==5.2; fi # Forcing PyYAML 5.2 while we retain Python 3.4 support PyYAML 5.3 and higher does not support Python 3.4 - python -m pip install $PIP_USER_FLAG PyYAML argparse rospkg vcstools catkin_pkg python-dateutil rosdistro - python -m pip install $PIP_USER_FLAG -e . - python -m pip install $PIP_USER_FLAG nose coverage flake8 mock codecov # command to run tests script: - python -m nose --with-coverage --cover-package=rosdep2 --with-xunit test after_script: - python -m codecov notifications: email: false rosdep-0.21.0/.travis/000077500000000000000000000000001406544147500144665ustar00rootroot00000000000000rosdep-0.21.0/.travis/install.sh000077500000000000000000000007121406544147500164730ustar00rootroot00000000000000#!/bin/bash do_install() { set -e if [[ $TRAVIS_OS_NAME == 'osx' && $PYTHON_INSTALLER == 'pyenv' ]]; then brew update brew install pyenv-virtualenv pyenv versions eval "$(pyenv init -)" pyenv install $TRAVIS_PYTHON_VERSION PYTHON_ENV_NAME=virtual-env-$TRAVIS_PYTHON_VERSION pyenv virtualenv $TRAVIS_PYTHON_VERSION $PYTHON_ENV_NAME pyenv activate $PYTHON_ENV_NAME fi } do_install rosdep-0.21.0/CHANGELOG.rst000066400000000000000000000305461406544147500151310ustar00rootroot000000000000000.21.0 (2021-06-25) ------------------- - Add command line option to select which dependency types to install. - https://github.com/ros-infrastructure/rosdep/pull/789 - https://github.com/ros-infrastructure/rosdep/pull/727 - Fix output formatting for npm installer when running ``rosdep --all-versions``. - https://github.com/ros-infrastructure/rosdep/pull/814 - Fix exception running ``rosdep --all-versions`` when some installers are missing. - https://github.com/ros-infrastructure/rosdep/pull/815 - Display advice for fixing permissions when rosdep cache is not readable. - https://github.com/ros-infrastructure/rosdep/pull/787 0.20.1 (2021-04-16) ------------------- - Fix a typo in the ament_packages README - https://github.com/ros-infrastructure/rosdep/pull/796 - Add support for a few RHEL clones - https://github.com/ros-infrastructure/rosdep/pull/802 0.20.0 (2020-11-12) ------------------- - Install packages in buildtool_export_depends. - https://github.com/ros-infrastructure/rosdep/pull/753 - Remove shebang from a non-executable file. - https://github.com/ros-infrastructure/rosdep/pull/755 - Add alias for Pop! OS - https://github.com/ros-infrastructure/rosdep/pull/757 - Use tool-specific user-agent to retrieve custom rules from websites. - https://github.com/ros-infrastructure/rosdep/pull/775 - https://github.com/ros-infrastructure/rosdep/issues/774 - Update catkin-sphinx link in documentation. - https://github.com/ros-infrastructure/rosdep/pull/783 - Add ZorinOS detection support. - https://github.com/ros-infrastructure/rosdep/pull/712 - Fix handling of installer version strings in Python 3. - https://github.com/ros-infrastructure/rosdep/pull/776 - Use GitHub Actions for CI. - https://github.com/ros-infrastructure/rosdep/pull/751 - https://github.com/ros-infrastructure/rosdep/pull/785 - Add npm installer support. - https://github.com/ros-infrastructure/rosdep/pull/692 - Set Python2-Depends-Name option to allow releasing from Ubuntu Focal. - https://github.com/ros-infrastructure/rosdep/pull/766 0.19.0 (2020-04-03) ------------------- - Only release for Python3 into focal - https://github.com/ros-infrastructure/rosdep/pull/734 - Added --rosdistro argument to rosdep-update to scope update to one rosdistro - https://github.com/ros-infrastructure/rosdep/pull/738 - Fixes https://github.com/ros-infrastructure/rosdep/pull/723 - Fix CI for Python 3.4 and run slower CI jobs first - https://github.com/ros-infrastructure/rosdep/pull/739 - Strip Alpine's patch version from OS codename - https://github.com/ros-infrastructure/rosdep/pull/716 - Fixes https://github.com/ros-infrastructure/rosdep/issues/715 - Raise a clear and specific error message for null entries - https://github.com/ros-infrastructure/rosdep/pull/726 - Use DNF as the default installer on RHEL 8 and newer - https://github.com/ros-infrastructure/rosdep/pull/713 - Updates to YUM and DNF handling - https://github.com/ros-infrastructure/rosdep/pull/640 - Fix tests so they don't assume euid != 0 - https://github.com/ros-infrastructure/rosdep/pull/703 - Update openSUSE package query function and enable pip installer - https://github.com/ros-infrastructure/rosdep/pull/729 - Fix conditional dependencies when one package uses manifest.xml - https://github.com/ros-infrastructure/rosdep/pull/737 - Handle StopIteration when querying in debian platform - https://github.com/ros-infrastructure/rosdep/pull/701 - Use entry points rather than console scripts to enable usage on Windows - https://github.com/ros-infrastructure/rosdep/pull/656 - Depend on modules packages only to allow modules packages to be co-installable. - https://github.com/ros-infrastructure/rosdep/pull/750 0.18.0 (2019-11-20) ------------------- - split -modules into separate Debian package - https://github.com/ros-infrastructure/rosdep/pull/731 - fix macOS CI - https://github.com/ros-infrastructure/rosdep/pull/730 0.17.0 (2019-10-18) ------------------- - Fix TypeError on ROS Kinetic. - https://github.com/ros-infrastructure/rosdep/issues/721 - Pip installer uses ROS_PYTHON_VERSION - https://github.com/ros-infrastructure/rosdep/issues/709 0.16.2 (2019-10-18) ------------------- - Bump rospkg dependency to guarantee all platforms are available.. - https://github.com/ros-infrastructure/rosdep/issues/717 - Set ROS_PYTHON_VERSION if unset. - https://github.com/ros-infrastructure/rosdep/issues/708 0.16.1 (2019-09-19) ------------------- - Fix problem with release uploaded to PyPI. - https://github.com/ros-infrastructure/rosdep/issues/705 0.16.0 (2019-09-19) ------------------- - Add support for Nix/NixOS. - https://github.com/ros-infrastructure/rosdep/pull/697 - Update supported platforms. - Dropped platforms older than Xenial. - Added Ubuntu Cosmic, Disco, and Eoan. - https://github.com/ros-infrastructure/rosdep/pull/700 - Add sudo dependency in debian packages. - https://github.com/ros-infrastructure/rosdep/pull/680 - Improve support for AMENT_PREFIX_PATH used in ROS 2. - https://github.com/ros-infrastructure/rosdep/pull/699 - Add support for the --ignore-src argument for the keys verb. - https://github.com/ros-infrastructure/rosdep/pull/686 0.15.2 (2019-05-17) ------------------- - Migrate to yaml.safe_load to avoid yaml.load vulnerabilities. - https://github.com/ros-infrastructure/rosdep/pull/675 - Improve text feeback and prompts - https://github.com/ros-infrastructure/rosdep/pull/675 - https://github.com/ros-infrastructure/rosdep/pull/670 - https://github.com/ros-infrastructure/rosdep/pull/665 - Add support for MX Linux - https://github.com/ros-infrastructure/rosdep/pull/674 - Add support for OpenEmbedded - https://github.com/ros-infrastructure/rosdep/pull/673 - Add support for Alpine - https://github.com/ros-infrastructure/rosdep/pull/673 - Add support for CentOS and improve RHEL - https://github.com/ros-infrastructure/rosdep/pull/668 - https://github.com/ros-infrastructure/rosdep/pull/667 0.15.1 (2019-02-19) ------------------- - Change GitHub url's which no longer work. - https://github.com/ros-infrastructure/rosdep/pull/663 - Fixed a flake8 warning. - https://github.com/ros-infrastructure/rosdep/pull/659 - Reduced number of supported platforms, e.g. trusty and newer only now. - https://github.com/ros-infrastructure/rosdep/pull/657 0.15.0 (2019-01-24) ------------------- - Use yaml.safe_load for untrusted yaml input. - https://github.com/ros-infrastructure/rosdep/pull/651 - Evaluate conditions before collecting dependencies. - https://github.com/ros-infrastructure/rosdep/pull/655 - Fixes https://github.com/ros-infrastructure/rosdep/pull/653 - Filter ROS 2 distros out of ROS 1 test results. - https://github.com/ros-infrastructure/rosdep/pull/652 0.14.0 (2019-01-14) ------------------- - Skip EOL distros by default, add option to include them - https://github.com/ros-infrastructure/rosdep/pull/647 0.13.0 (2018-11-06) ------------------- - Improve error message when a package.xml is malformed - https://github.com/ros-infrastructure/rosdep/pull/608 - Enable rosdep db cache from python3 to be used from python2. - https://github.com/ros-infrastructure/rosdep/pull/633 - Reported in https://github.com/ros-infrastructure/rosdep/issues/3791 - Fix DNF installer behavior to match yum and apt. - https://github.com/ros-infrastructure/rosdep/pull/638 - Clean up executable permissions and #! lines. - https://github.com/ros-infrastructure/rosdep/pull/630 - Fix quiet mode for Debian installer. - https://github.com/ros-infrastructure/rosdep/pull/612 - Fix typos in documentation. - https://github.com/ros-infrastructure/rosdep/pull/606 - https://github.com/ros-infrastructure/rosdep/pull/634 - Improve documentation output on Fedora. - https://github.com/ros-infrastructure/rosdep/pull/628 - Update CI infrastructure. - https://github.com/ros-infrastructure/rosdep/pull/602 - https://github.com/ros-infrastructure/rosdep/pull/609 - https://github.com/ros-infrastructure/rosdep/pull/629 - https://github.com/ros-infrastructure/rosdep/pull/636 - Fix RPM comand tests. - https://github.com/ros-infrastructure/rosdep/pull/627 - Update package metadata. - https://github.com/ros-infrastructure/rosdep/pull/605 0.12.2 (2018-03-21) ------------------- - Fix bug introduced in https://github.com/ros-infrastructure/rosdep/pull/521, reported in https://github.com/ros-infrastructure/rosdep/issues/589 - https://github.com/ros-infrastructure/rosdep/pull/585 0.12.1 (2018-02-08) ------------------- - Revert "Use ROS_ETC_DIR environment variable" to fix regression introduced in 0.12.0 - https://github.com/ros-infrastructure/rosdep/pull/584 0.12.0 (2018-02-07) ------------------- - Support for wildcard OS versions as specified in the updated REP 111 - https://github.com/ros-infrastructure/rosdep/pull/573 - Add conflict with Debian package python-rosdep2 - https://github.com/ros-infrastructure/rosdep/pull/579 - Remove redundant dependency checks - https://github.com/ros-infrastructure/rosdep/pull/556 - Update the FreeBSD installer - https://github.com/ros-infrastructure/rosdep/pull/574 - Fix detection of installed rpms and warn if slow method is being used - https://github.com/ros-infrastructure/rosdep/pull/568 - Support for installing virtual packages (Debian) - https://github.com/ros-infrastructure/rosdep/pull/521 - Remove non-interactive mode in slackware - https://github.com/ros-infrastructure/rosdep/pull/553 - Use ROS_ETC_DIR environment variable - https://github.com/ros-infrastructure/rosdep/pull/551 - Add __repr__ for SourceInstall - https://github.com/ros-infrastructure/rosdep/pull/543 - Keep dependencies order - https://github.com/ros-infrastructure/rosdep/pull/545 - Fix db command on OS X - https://github.com/ros-infrastructure/rosdep/pull/541 0.11.8 (2017-08-03) ------------------- - Fix handling of metapackages - https://github.com/ros-infrastructure/rosdep/pull/535 - regression of https://github.com/ros-infrastructure/rosdep/pull/531 0.11.7 (2017-08-01) ------------------- - Changed the way virtual packages are checked in apt to use ``apt-cache`` - https://github.com/ros-infrastructure/rosdep/pull/533 - Fixed a bug where the dependencies of metapackages were not being installed - https://github.com/ros-infrastructure/rosdep/pull/531 - Improved error handling of failed downloads or invalid source files - https://github.com/ros-infrastructure/rosdep/pull/523 0.11.6 (2017-07-27) ------------------- - Added resinstall option for ``pip`` installer - https://github.com/ros-infrastructure/rosdep/pull/450 - Fixed detection and handling of virtual packages in ``apt`` (more changes to follow) - https://github.com/ros-infrastructure/rosdep/pull/468 - https://github.com/ros-infrastructure/rosdep/pull/515 - Added support for Slackware - https://github.com/ros-infrastructure/rosdep/pull/469 - Fixed flags being passed to pacman on Arch Linux - https://github.com/ros-infrastructure/rosdep/pull/472 - https://github.com/ros-infrastructure/rosdep/pull/476 - No longer uses ``sudo`` when already root - https://github.com/ros-infrastructure/rosdep/pull/474 - Added more information to ``rosdep --version`` - https://github.com/ros-infrastructure/rosdep/pull/481 - https://github.com/ros-infrastructure/rosdep/pull/499 - Fixed bug when using ``--verbose`` with ``rosdep install`` on macOS with Homebrew - https://github.com/ros-infrastructure/rosdep/pull/525 - Fixed bug with the ``depends:`` part of a stanze not being used to ordered installations correctly - https://github.com/ros-infrastructure/rosdep/pull/529 - Fixed Python3 bug on macOS - https://github.com/ros-infrastructure/rosdep/pull/441 0.11.5 (2016-05-23) ------------------- - add ca-certificates as a dependency to support https urls - add quiet option for ``pip`` - Documentation updates - Elementary support improvements 0.11.4 (2015-09-25) ------------------- - Fix bug in `pip` package detection code. 0.11.3 (2015-09-24) ------------------- - Added an option to print out only apt and pip installable packages as commands. - Added warning when neither the ``ROS_DISTRO`` environment variable is set nor the ``--rosdistro`` option is used. - Fixed a bug related to group id resolution. - Switched to using DNF instead of YUM for Fedora 22+. - Fixed a bug where pip packages were not detected for older versions of ``pip``. - Fixed a bug where dependencies of packages were gotten from the wrong ``package.xml`` when that package was being overlaid with local packages. rosdep-0.21.0/LICENSE000066400000000000000000000030551406544147500141100ustar00rootroot00000000000000# Copyright (c) 2013, Willow Garage, Inc. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # # * Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # * Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # * Neither the name of the Willow Garage, Inc. nor the names of its # contributors may be used to endorse or promote products derived from # this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. rosdep-0.21.0/Makefile000066400000000000000000000010041406544147500145330ustar00rootroot00000000000000.PHONY: all setup clean_dist distro clean install testsetup test NAME='rosdep' VERSION=`python setup.py -V` all: echo "noop for debbuild" setup: echo "building version ${VERSION}" clean_dist: -rm -f MANIFEST -rm -rf dist -rm -rf deb_dist distro: setup clean_dist python setup.py sdist clean: clean_dist echo "clean" install: distro sudo checkinstall python setup.py install testsetup: echo "running rosdep tests" test: testsetup nosetests --with-coverage --cover-package=rosdep2 --with-xunit test rosdep-0.21.0/README.md000066400000000000000000000014241406544147500143600ustar00rootroot00000000000000rosdep ------ [![Build status](https://travis-ci.org/ros-infrastructure/rosdep.svg?branch=master)](https://travis-ci.org/ros-infrastructure/rosdep) [![codecov](https://codecov.io/gh/ros-infrastructure/rosdep/branch/master/graph/badge.svg)](https://codecov.io/gh/ros-infrastructure/rosdep) rosdep is a command-line tool for installing system dependencies. For *end-users*, rosdep helps you install system dependencies for software that you are building from source. For *developers*, rosdep simplifies the problem of installing system dependencies on different platforms. Instead of having to figure out which debian package on Ubuntu Oneiric contains Boost, you can just specify a dependency on 'boost'. [rosdep Users/Developers Guide](http://docs.ros.org/independent/api/rosdep/html/) rosdep-0.21.0/doc/000077500000000000000000000000001406544147500136455ustar00rootroot00000000000000rosdep-0.21.0/doc/Makefile000066400000000000000000000113171406544147500153100ustar00rootroot00000000000000# Makefile for Sphinx documentation # # You can set these variables from the command line. SPHINXOPTS = SPHINXBUILD = sphinx-build PAPER = BUILDDIR = _build # Internal variables. PAPEROPT_a4 = -D latex_paper_size=a4 PAPEROPT_letter = -D latex_paper_size=letter ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . .PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest help: @echo "Please use \`make ' where is one of" @echo " html to make standalone HTML files" @echo " dirhtml to make HTML files named index.html in directories" @echo " singlehtml to make a single large HTML file" @echo " pickle to make pickle files" @echo " json to make JSON files" @echo " htmlhelp to make HTML files and a HTML help project" @echo " qthelp to make HTML files and a qthelp project" @echo " devhelp to make HTML files and a Devhelp project" @echo " epub to make an epub" @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" @echo " latexpdf to make LaTeX files and run them through pdflatex" @echo " text to make text files" @echo " man to make manual pages" @echo " changes to make an overview of all changed/added/deprecated items" @echo " linkcheck to check all external links for integrity" @echo " doctest to run all doctests embedded in the documentation (if enabled)" clean: -rm -rf $(BUILDDIR)/* html: $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html @echo @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." dirhtml: $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml @echo @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." singlehtml: $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml @echo @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml." pickle: $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle @echo @echo "Build finished; now you can process the pickle files." json: $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json @echo @echo "Build finished; now you can process the JSON files." htmlhelp: $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp @echo @echo "Build finished; now you can run HTML Help Workshop with the" \ ".hhp project file in $(BUILDDIR)/htmlhelp." qthelp: $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp @echo @echo "Build finished; now you can run "qcollectiongenerator" with the" \ ".qhcp project file in $(BUILDDIR)/qthelp, like this:" @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/rosdep.qhcp" @echo "To view the help file:" @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/rosdep.qhc" devhelp: $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp @echo @echo "Build finished." @echo "To view the help file:" @echo "# mkdir -p $$HOME/.local/share/devhelp/rosdep" @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/rosdep" @echo "# devhelp" epub: $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub @echo @echo "Build finished. The epub file is in $(BUILDDIR)/epub." latex: $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex @echo @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." @echo "Run \`make' in that directory to run these through (pdf)latex" \ "(use \`make latexpdf' here to do that automatically)." latexpdf: $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex @echo "Running LaTeX files through pdflatex..." make -C $(BUILDDIR)/latex all-pdf @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." text: $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text @echo @echo "Build finished. The text files are in $(BUILDDIR)/text." man: $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man @echo @echo "Build finished. The manual pages are in $(BUILDDIR)/man." changes: $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes @echo @echo "The overview file is in $(BUILDDIR)/changes." linkcheck: $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck @echo @echo "Link check complete; look for any errors in the above output " \ "or in $(BUILDDIR)/linkcheck/output.txt." doctest: $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest @echo "Testing of doctests in the sources finished, look at the " \ "results in $(BUILDDIR)/doctest/output.txt." upload: html # set write permission for group so that everybody can overwrite existing files on the webserver chmod -R g+w _build/html/ scp -pr _build/html/ rosbot@ros.osuosl.org:/home/rosbot/docs/independent/api/rosdep rosdep-0.21.0/doc/_templates/000077500000000000000000000000001406544147500160025ustar00rootroot00000000000000rosdep-0.21.0/doc/_templates/index.html000066400000000000000000000044141406544147500200020ustar00rootroot00000000000000{% extends "layout.html" %} {% set title = 'ROS packages' %} {% block body %}

Welcome

rosdep is a command-line tool for installing system dependencies. For *end-users*, rosdep helps you install system dependencies for software that you are building from source. For *developers*, rosdep simplifies the problem of installing system dependencies on different platforms. Instead of having to figure out which debian package on Ubuntu Oneiric contains Boost, you can just specify a dependency on 'boost'. rosdep is supported on a variety of platforms/package managers:

Documentation

{% endblock %} rosdep-0.21.0/doc/commands.rst000066400000000000000000000013011406544147500161730ustar00rootroot00000000000000rosdep command reference ======================== .. _rosdep_usage: Synopsis -------- **rosdep** <*command*> [*options*] [*args*] Description ----------- The **rosdep** command helps you install external dependencies in an OS-independent manner. For example, what Debian packages do you need in order to get the OpenGL headers on Ubuntu? How about OS X? Fedora? rosdep can answer this question for your platform and install the necessary package(s). Run ``rosdep -h`` or ``rosdep -h`` to access the built-in tool documentation. Commands -------- .. rosdep_cli_help:: commands Options ------- .. rosdep_cli_help:: options Install Options --------------- .. rosdep_cli_help:: install rosdep-0.21.0/doc/conf.py000066400000000000000000000165731406544147500151600ustar00rootroot00000000000000# -*- coding: utf-8 -*- # # rosdep documentation build configuration file, created by # sphinx-quickstart on Mon Sep 12 17:13:25 2011. # # This file is execfile()d with the current directory set to its containing dir. # # Note that not all possible configuration values are present in this # autogenerated file. # # All configuration values have a default; values that are commented out # serve to show the default. import os import sys sys.path.insert(0, './') sys.path.insert(0, '../src') import catkin_sphinx # noqa from rosdep2 import __version__ # noqa # If extensions (or modules to document with autodoc) are in another directory, # add these directories to sys.path here. If the directory is relative to the # documentation root, use os.path.abspath to make it absolute, like shown here. #sys.path.insert(0, os.path.abspath('.')) # -- General configuration ----------------------------------------------------- # If your documentation needs a minimal Sphinx version, state it here. #needs_sphinx = '1.0' # Add any Sphinx extension module names here, as strings. They can be extensions # coming with Sphinx (named 'sphinx.ext.*') or your custom ones. extensions = [ 'sphinx.ext.autodoc', 'sphinx.ext.intersphinx', 'sphinx.ext.coverage', 'sphinx.ext.viewcode', 'rosdep_doc_utils', ] # Add any paths that contain templates here, relative to this directory. templates_path = ['_templates'] # The suffix of source filenames. source_suffix = '.rst' # The encoding of source files. #source_encoding = 'utf-8-sig' # The master toctree document. master_doc = 'contents' # General information about the project. project = u'rosdep' copyright = u'2011, Willow Garage' # The version info for the project you're documenting, acts as replacement for # |version| and |release|, also used in various other places throughout the # built documents. # # The short X.Y version. version = __version__ # The full version, including alpha/beta/rc tags. release = __version__ # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. #language = None # There are two options for replacing |today|: either, you set today to some # non-false value, then it is used: #today = '' # Else, today_fmt is used as the format for a strftime call. #today_fmt = '%B %d, %Y' # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. exclude_patterns = ['_build'] # The reST default role (used for this markup: `text`) to use for all documents. #default_role = None # If true, '()' will be appended to :func: etc. cross-reference text. #add_function_parentheses = True # If true, the current module name will be prepended to all description # unit titles (such as .. function::). #add_module_names = True # If true, sectionauthor and moduleauthor directives will be shown in the # output. They are ignored by default. #show_authors = False # The name of the Pygments (syntax highlighting) style to use. pygments_style = 'sphinx' # A list of ignored prefixes for module index sorting. #modindex_common_prefix = [] # -- Options for HTML output --------------------------------------------------- # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. html_theme_path = [os.path.join(os.path.dirname(catkin_sphinx.__file__), 'theme')] html_theme = 'ros-theme' html_logo = 'ros.png' # Theme options are theme-specific and customize the look and feel of a theme # further. For a list of options available for each theme, see the # documentation. #html_theme_options = {} # Add any paths that contain custom themes here, relative to this directory. #html_theme_path = [] # The name for this set of Sphinx documents. If None, it defaults to # " v documentation". #html_title = None # A shorter title for the navigation bar. Default is the same as html_title. #html_short_title = None # The name of an image file (relative to this directory) to place at the top # of the sidebar. #html_logo = None # The name of an image file (within the static path) to use as favicon of the # docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 # pixels large. #html_favicon = None # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". html_static_path = ['_static'] # If not '', a 'Last updated on:' timestamp is inserted at every page bottom, # using the given strftime format. #html_last_updated_fmt = '%b %d, %Y' # If true, SmartyPants will be used to convert quotes and dashes to # typographically correct entities. #html_use_smartypants = True # Custom sidebar templates, maps document names to template names. #html_sidebars = {} # Additional templates that should be rendered to pages, maps page names to # template names. #html_additional_pages = {} html_additional_pages = {'index': 'index.html'} # If false, no module index is generated. #html_domain_indices = True # If false, no index is generated. #html_use_index = True # If true, the index is split into individual pages for each letter. #html_split_index = False # If true, links to the reST sources are added to the pages. #html_show_sourcelink = True # If true, "Created using Sphinx" is shown in the HTML footer. Default is True. #html_show_sphinx = True # If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. #html_show_copyright = True # If true, an OpenSearch description file will be output, and all pages will # contain a tag referring to it. The value of this option must be the # base URL from which the finished HTML is served. #html_use_opensearch = '' # This is the file name suffix for HTML files (e.g. ".xhtml"). #html_file_suffix = None # Output file base name for HTML help builder. htmlhelp_basename = 'rosdepdoc' # -- Options for LaTeX output -------------------------------------------------- # The paper size ('letter' or 'a4'). #latex_paper_size = 'letter' # The font size ('10pt', '11pt' or '12pt'). #latex_font_size = '10pt' # Grouping the document tree into LaTeX files. List of tuples # (source start file, target name, title, author, documentclass [howto/manual]). latex_documents = [ ('rosdep.tex', u'rosdep Documentation', u'Tully Foote, Ken Conley', 'manual'), ] # The name of an image file (relative to this directory) to place at the top of # the title page. #latex_logo = None # For "manual" documents, if this is true, then toplevel headings are parts, # not chapters. #latex_use_parts = False # If true, show page references after internal links. #latex_show_pagerefs = False # If true, show URL addresses after external links. #latex_show_urls = False # Additional stuff for the LaTeX preamble. #latex_preamble = '' # Documents to append as an appendix to all manuals. #latex_appendices = [] # If false, no module index is generated. #latex_domain_indices = True # -- Options for manual page output -------------------------------------------- # One entry per manual page. List of tuples # (source start file, name, description, authors, manual section). man_pages = [ ('man/rosdep', 'rosdep', u'rosdep command', [u'Tully Foote, Ken Conley'], 1) ] # Example configuration for intersphinx: refer to the Python standard library. intersphinx_mapping = {'http://docs.python.org/': None} rosdep-0.21.0/doc/contents.rst000066400000000000000000000002501406544147500162310ustar00rootroot00000000000000Contents ======== .. toctree:: :maxdepth: 2 overview commands contributing_rules rosdep_yaml_format sources_list developers_guide rosdep2_api rosdep-0.21.0/doc/contributing_rules.rst000066400000000000000000000061021406544147500203170ustar00rootroot00000000000000Contributing rosdep rules ========================= In order to contribute rosdep rules, you should first make sure that you are familiar with the :ref:`rosdep.yaml format `. Summary ''''''' There are several steps to contributing rosdep rules. You will create a copy of the database on GitHub, point your own rosdep to use it, make some changes, and then ask that they be included back in the main database. In short: 1. Fork https://github.com/ros/rosdistro 2. Update your ``/etc/ros/rosdep/sources.list.d`` to use this fork 3. Modify your fork to have new rules 4. Test your changes 5. Send a pull request to have your changes included in the main database Fork the rosdistro GitHub repository ------------------------------------ The main rosdep database is stored in files in the "rosdistro" repository in the "ros" project on GitHub: `https://github.com/ros/rosdistro `_ Start by forking this repository so you have your own copy of the database to work with. Next, you'll point your local rosdep to use this database instead. Point your sources.list.d at your forked repository --------------------------------------------------- The default sources list for rosdep uses the following files:: yaml https://github.com/ros/rosdistro/raw/master/rosdep/base.yaml yaml https://github.com/ros/rosdistro/raw/master/rosdep/python.yaml yaml https://github.com/ros/rosdistro/raw/master/rosdep/osx-homebrew.yaml osx Create a new file in ``/etc/ros/rosdep/sources.list.d/`` that points at your forked repository instead. The filename should use a lower number so it is processed first. Now that your rosdep is using the new database, you're ready to make and test your changes. Make your changes to your forked repository ------------------------------------------- The repository contains the following files: - ``rosdep/osx-homebrew.yaml``: Rules for OS X Homebrew - ``rosdep/python.yaml``: Python-specific dependencies - ``rosdep/base.yaml``: Everything else Edit the appropriate file(s) for your change, i.e., if you are contributing a Homebrew rule, only edit ``osx-homebrew.yaml``, if you are contributing a rule for a Python library, only edit ``python.yaml``, and, otherwise, put your rule in ``base.yaml``. To edit, change the ``https://`` url to a local path using the format ``file:///abs/path``. Make sure that your rules work ------------------------------ Update your local index:: rosdep update Test your new rules:: rosdep resolve Test with different OS rules:: rosdep resolve --os=OS_NAME:OS_VERSION Submit a pull request with your updated rules --------------------------------------------- Use GitHub's pull request mechanism to request that your updates get included in the main databases. There are guidelines for submitting pull requests at: https://github.com/ros/rosdistro/blob/master/CONTRIBUTING.md And include instructions how to prevalidate your changes using the unit tests. After your request has been accepted, you can undo your changes to ``/etc/ros/rosdep/sources.list.d``. rosdep-0.21.0/doc/developers_guide.rst000066400000000000000000000123261406544147500177300ustar00rootroot00000000000000.. _dev_guide: Developer's Guide ================= Python API reference -------------------- In progress, please see :ref:`Python API `. REP 114: rospkg standalone library ---------------------------------- The rosdep library is being developed using the ROS REP process. It is necessary to be familiar with these REPs in order to make sure that rosdep continues to follow the relevant specifications. - `REP 111: Multiple Package Manager Support for Rosdep `_. - `REP 112: Source Package Manager for Rosdep `_. - `REP 125: rosdep 2 `_. Bug reports and feature requests -------------------------------- - `Submit a bug report `_ - `Submit a feature request `_ Getting the code ---------------- The rosdep codebase is hosted on GitHub. To get started contributing patches, please create a fork: https://github.com/ros-infrastructure/rosdep Supporting a new OS/package manager ----------------------------------- Adding new platforms to rosdep can be separated into two steps: adding support for a new package manager, and adding support for a new OS. NOTE: There are numerous examples in :mod:`rosdep2.platforms` that you can follow. Declaring a new OS '''''''''''''''''' Adding support for a new OS is fairly straightforward: you just have to provide rosdep2 the keys that are associated with your OS and the keys of the installers that your OS supports. Implementations must provide a ``register_platforms(context)`` call which sets up the keys used for the OS and package managers. The registration only sets up associated keys -- it does not specify the implementation. OS keys should be pulled from ``rospkg.os_detect`` if they are available. This example registers the ``gentoo`` OS and adds support for the ``equery`` and ``source`` package managers. It then sets the default package manager to ``equery``:: from rospkg.os_detect import OS_GENTOO def register_platforms(context): context.add_os_installer_key(OS_GENTOO, EQUERY_INSTALLER) context.add_os_installer_key(OS_GENTOO, SOURCE_INSTALLER) context.set_default_os_installer_key(OS_GENTOO, EQUERY_INSTALLER) Declaring a new installer ''''''''''''''''''''''''' A new installer is registered with the system using a ``register_installers(context)`` call. This call aqssociates the installer key with an implementation. This example declares that ``pip`` is implemented using the ``PipInstaller()`` class. We also declare the ``PIP_INSTALLER`` variable so that other code can use it symbolically.:: PIP_INSTALLER = 'pip' def register_installers(context): context.set_installer(PIP_INSTALLER, PipInstaller()) Most installers are implemented using the the :class:`PackageManagerInstaller` API. The following is the implementation of the ``PipInstaller``:: class PipInstaller(PackageManagerInstaller): def __init__(self): super(PipInstaller, self).__init__(pip_detect, supports_depends=True) def get_install_command(self, resolved, interactive=True, reinstall=False): if not is_pip_installed(): raise InstallFailed((PIP_INSTALLER, "pip is not installed")) # convenience function that calls outs to our detect function packages = self.get_packages_to_install(resolved, reinstall=reinstall) if not packages: return [] else: return [['sudo', 'pip', 'install', '-U', p] for p in packages] The pattern is fairly simple to implement for other package managers. You must provide a ``detect_function(package_names)`` (e.g. ``pip_detect()``) that returns a list of package names that are already installed. You must also implement ``get_install_command()`` which must return a *list* of commands to execute in order to install the relevant packages. Testing ------- If you contribute a support for a new OS/package manager, you *must* provide complete unit test coverage. For example, if your detector relies on parsing the output of a package manager, you must submit example output along with tests that parse them correctly. Test files for os detection should be placed in ``test/os_name``. Setup :: pip install nose pip install mock rosdep2 uses `Python nose `_ for testing, which is a fairly simple and straightfoward test framework. You just have to write a function start with the name ``test`` and use normal ``assert`` statements for your tests. rosdep2 also uses `mock `_ to create mocks for testing. You can run the tests, including coverage, as follows: :: cd rosdep2/test nosetests Documentation ------------- Sphinx is used to provide API documentation for rospkg. The documents are stored in the ``doc`` subdirectory. In order to build the docs, you need the 'ros-theme', which should be stored in `~/sphinx/ros-theme`. You can get a copy of ros-theme from: https://github.com/ros-infrastructure/catkin-sphinx/tree/master/src/catkin_sphinx/theme rosdep-0.21.0/doc/make.bat000066400000000000000000000106371406544147500152610ustar00rootroot00000000000000@ECHO OFF REM Command file for Sphinx documentation if "%SPHINXBUILD%" == "" ( set SPHINXBUILD=sphinx-build ) set BUILDDIR=_build set ALLSPHINXOPTS=-d %BUILDDIR%/doctrees %SPHINXOPTS% . if NOT "%PAPER%" == "" ( set ALLSPHINXOPTS=-D latex_paper_size=%PAPER% %ALLSPHINXOPTS% ) if "%1" == "" goto help if "%1" == "help" ( :help echo.Please use `make ^` where ^ is one of echo. html to make standalone HTML files echo. dirhtml to make HTML files named index.html in directories echo. singlehtml to make a single large HTML file echo. pickle to make pickle files echo. json to make JSON files echo. htmlhelp to make HTML files and a HTML help project echo. qthelp to make HTML files and a qthelp project echo. devhelp to make HTML files and a Devhelp project echo. epub to make an epub echo. latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter echo. text to make text files echo. man to make manual pages echo. changes to make an overview over all changed/added/deprecated items echo. linkcheck to check all external links for integrity echo. doctest to run all doctests embedded in the documentation if enabled goto end ) if "%1" == "clean" ( for /d %%i in (%BUILDDIR%\*) do rmdir /q /s %%i del /q /s %BUILDDIR%\* goto end ) if "%1" == "html" ( %SPHINXBUILD% -b html %ALLSPHINXOPTS% %BUILDDIR%/html if errorlevel 1 exit /b 1 echo. echo.Build finished. The HTML pages are in %BUILDDIR%/html. goto end ) if "%1" == "dirhtml" ( %SPHINXBUILD% -b dirhtml %ALLSPHINXOPTS% %BUILDDIR%/dirhtml if errorlevel 1 exit /b 1 echo. echo.Build finished. The HTML pages are in %BUILDDIR%/dirhtml. goto end ) if "%1" == "singlehtml" ( %SPHINXBUILD% -b singlehtml %ALLSPHINXOPTS% %BUILDDIR%/singlehtml if errorlevel 1 exit /b 1 echo. echo.Build finished. The HTML pages are in %BUILDDIR%/singlehtml. goto end ) if "%1" == "pickle" ( %SPHINXBUILD% -b pickle %ALLSPHINXOPTS% %BUILDDIR%/pickle if errorlevel 1 exit /b 1 echo. echo.Build finished; now you can process the pickle files. goto end ) if "%1" == "json" ( %SPHINXBUILD% -b json %ALLSPHINXOPTS% %BUILDDIR%/json if errorlevel 1 exit /b 1 echo. echo.Build finished; now you can process the JSON files. goto end ) if "%1" == "htmlhelp" ( %SPHINXBUILD% -b htmlhelp %ALLSPHINXOPTS% %BUILDDIR%/htmlhelp if errorlevel 1 exit /b 1 echo. echo.Build finished; now you can run HTML Help Workshop with the ^ .hhp project file in %BUILDDIR%/htmlhelp. goto end ) if "%1" == "qthelp" ( %SPHINXBUILD% -b qthelp %ALLSPHINXOPTS% %BUILDDIR%/qthelp if errorlevel 1 exit /b 1 echo. echo.Build finished; now you can run "qcollectiongenerator" with the ^ .qhcp project file in %BUILDDIR%/qthelp, like this: echo.^> qcollectiongenerator %BUILDDIR%\qthelp\rosdep.qhcp echo.To view the help file: echo.^> assistant -collectionFile %BUILDDIR%\qthelp\rosdep.ghc goto end ) if "%1" == "devhelp" ( %SPHINXBUILD% -b devhelp %ALLSPHINXOPTS% %BUILDDIR%/devhelp if errorlevel 1 exit /b 1 echo. echo.Build finished. goto end ) if "%1" == "epub" ( %SPHINXBUILD% -b epub %ALLSPHINXOPTS% %BUILDDIR%/epub if errorlevel 1 exit /b 1 echo. echo.Build finished. The epub file is in %BUILDDIR%/epub. goto end ) if "%1" == "latex" ( %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex if errorlevel 1 exit /b 1 echo. echo.Build finished; the LaTeX files are in %BUILDDIR%/latex. goto end ) if "%1" == "text" ( %SPHINXBUILD% -b text %ALLSPHINXOPTS% %BUILDDIR%/text if errorlevel 1 exit /b 1 echo. echo.Build finished. The text files are in %BUILDDIR%/text. goto end ) if "%1" == "man" ( %SPHINXBUILD% -b man %ALLSPHINXOPTS% %BUILDDIR%/man if errorlevel 1 exit /b 1 echo. echo.Build finished. The manual pages are in %BUILDDIR%/man. goto end ) if "%1" == "changes" ( %SPHINXBUILD% -b changes %ALLSPHINXOPTS% %BUILDDIR%/changes if errorlevel 1 exit /b 1 echo. echo.The overview file is in %BUILDDIR%/changes. goto end ) if "%1" == "linkcheck" ( %SPHINXBUILD% -b linkcheck %ALLSPHINXOPTS% %BUILDDIR%/linkcheck if errorlevel 1 exit /b 1 echo. echo.Link check complete; look for any errors in the above output ^ or in %BUILDDIR%/linkcheck/output.txt. goto end ) if "%1" == "doctest" ( %SPHINXBUILD% -b doctest %ALLSPHINXOPTS% %BUILDDIR%/doctest if errorlevel 1 exit /b 1 echo. echo.Testing of doctests in the sources finished, look at the ^ results in %BUILDDIR%/doctest/output.txt. goto end ) :end rosdep-0.21.0/doc/man/000077500000000000000000000000001406544147500144205ustar00rootroot00000000000000rosdep-0.21.0/doc/man/rosdep.1000066400000000000000000000064201406544147500160000ustar00rootroot00000000000000.TH "ROSDEP" "1" "January 12, 2012" "0.1" "rosdep" .SH NAME rosdep \- rosdep command . .nr rst2man-indent-level 0 . .de1 rstReportMargin \\$1 \\n[an-margin] level \\n[rst2man-indent-level] level margin: \\n[rst2man-indent\\n[rst2man-indent-level]] - \\n[rst2man-indent0] \\n[rst2man-indent1] \\n[rst2man-indent2] .. .de1 INDENT .\" .rstReportMargin pre: . RS \\$1 . nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin] . nr rst2man-indent-level +1 .\" .rstReportMargin post: .. .de UNINDENT . RE .\" indent \\n[an-margin] .\" old: \\n[rst2man-indent\\n[rst2man-indent-level]] .nr rst2man-indent-level -1 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] .in \\n[rst2man-indent\\n[rst2man-indent-level]]u .. .\" Man page generated from reStructeredText. . .SH SYNOPSIS .sp \fBrosdep\fP <\fIcommand\fP> [\fIoptions\fP] [\fIargs\fP] .SH DESCRIPTION .sp The \fBrosdep\fP command helps you install external dependencies in an OS\-independent manner. For example, what Debian packages do you need in order to get the OpenGL headers on Ubuntu? How about OS X? Fedora? rosdep can answer this question for your platform and install the necessary package(s). .sp For more information on rosdep, see \fI\%http://ros.org/wiki/rosdep\fP. .sp Run "rosdep \-h" or "rosdep \-h" to access the built\-in tool documentation. .SH COMMANDS .sp \fBcheck ...\fP .INDENT 0.0 .INDENT 3.5 Check if the dependencies of ROS package(s) have been met. .UNINDENT .UNINDENT .sp \fBinstall ...\fP .INDENT 0.0 .INDENT 3.5 Install dependencies for specified ROS packages. .UNINDENT .UNINDENT .sp \fBdb ...\fP .INDENT 0.0 .INDENT 3.5 Display the dependency database for package(s). .UNINDENT .UNINDENT .sp \fBkeys ...\fP .INDENT 0.0 .INDENT 3.5 List the rosdep keys that the ROS packages depend on. .UNINDENT .UNINDENT .sp \fBwhat\-needs ...\fP .INDENT 0.0 .INDENT 3.5 Print a list of packages that declare a rosdep on (at least one of) .UNINDENT .UNINDENT .sp \fBwhere\-defined ...\fP .INDENT 0.0 .INDENT 3.5 Print a list of YAML files that declare a rosdep on (at least one of) .UNINDENT .UNINDENT .SH OPTIONS .sp \fB\-\-os=OS_NAME:OS_VERSION\fP .INDENT 0.0 .INDENT 3.5 Override OS name and version (colon\-separated), e.g. ubuntu:lucid .UNINDENT .UNINDENT .sp \fB\-i, \-\-include_duplicates\fP .INDENT 0.0 .INDENT 3.5 Do not deduplicate .UNINDENT .UNINDENT .sp \fB\-a, \-\-all\fP .INDENT 0.0 .INDENT 3.5 Select all ROS packages. Only valid for commands that take as arguments. .UNINDENT .UNINDENT .sp \fB\-h, \-\-help\fP .INDENT 0.0 .INDENT 3.5 Show usage information .UNINDENT .UNINDENT .sp \fB\-v, \-\-verbose\fP .INDENT 0.0 .INDENT 3.5 Enable verbose output .UNINDENT .UNINDENT .SH INSTALL OPTIONS .sp \fB\-\-reinstall\fP .INDENT 0.0 .INDENT 3.5 (re)install all dependencies, even if already installed .UNINDENT .UNINDENT .sp \fB\-y, \-\-default\-yes\fP .INDENT 0.0 .INDENT 3.5 Tell the package manager to default to y or fail when installing .UNINDENT .UNINDENT .sp \fB\-s, \-\-simulate\fP .INDENT 0.0 .INDENT 3.5 Simulate install .UNINDENT .UNINDENT .sp \fB\-r\fP .INDENT 0.0 .INDENT 3.5 Continue installing despite errors. .UNINDENT .UNINDENT .SH AUTHOR Tully Foote, Ken Conley .SH COPYRIGHT 2011, Willow Garage .\" Generated by docutils manpage writer. .\" . rosdep-0.21.0/doc/man/rosdep.rst000066400000000000000000000012541406544147500164500ustar00rootroot00000000000000:orphan: rosdep manual page ================== Synopsis -------- **rosdep** <*command*> [*options*] [*args*] Description ----------- The **rosdep** command helps you install external dependencies in an OS-independent manner. For example, what Debian packages do you need in order to get the OpenGL headers on Ubuntu? How about OS X? Fedora? rosdep can answer this question for your platform and install the necessary package(s). Run ``rosdep -h`` or ``rosdep -h`` to access the built-in tool documentation. Commands -------- .. rosdep_cli_help:: commands Options ------- .. rosdep_cli_help:: options Install Options --------------- .. rosdep_cli_help:: install rosdep-0.21.0/doc/overview.rst000066400000000000000000000040711406544147500162470ustar00rootroot00000000000000Overview ======== Installing rosdep ----------------- rosdep2 is available using pip or easy_install:: sudo pip install -U rosdep or:: sudo easy_install -U rosdep rospkg Setting up rosdep ----------------- rosdep needs to be initialized and updated to use:: sudo rosdep init rosdep update ``sudo rosdep init`` will create a `sources list `_ directory in ``/etc/ros/rosdep/sources.list.d`` that controls where rosdep gets its data from. ``rosdep update`` reads through this sources list to initialize your local database. Updating rosdep --------------- You can update your rosdep database by running:: rosdep update Installating rosdeps -------------------- rosdep takes in the name of a ROS stack or package that you wish to install the system dependencies for. Common installation workflow:: $ rosdep check ros_comm All system dependencies have been satisfied $ rosdep install geometry If you're worried about ``rosdep install`` bringing in system dependencies you don't want, you can run ``rosdep install -s `` instead to "simulate" the installation. You will be able to see the commands that rosdep would have run. Example:: $ rosdep install -s ros_comm #[apt] Installation commands: sudo apt-get install libapr1-dev sudo apt-get install libaprutil1-dev sudo apt-get install libbz2-dev sudo apt-get install liblog4cxx10-dev sudo apt-get install pkg-config sudo apt-get install python-imaging sudo apt-get install python-numpy sudo apt-get install python-paramiko sudo apt-get install python-yaml You can also query rosdep to find out more information about specific dependencies:: $ rosdep keys roscpp pkg-config $ rosdep resolve pkg-config pkg-config $ rosdep keys geometry eigen apr glut python-sip python-numpy graphviz paramiko cppunit libxext log4cxx pkg-config $ rosdep resolve eigen libeigen3-dev For more information, please see the :ref:`command reference `. rosdep-0.21.0/doc/ros.png000066400000000000000000000147701406544147500151670ustar00rootroot00000000000000‰PNG  IHDR“)¾ÖŒQsRGB®Îé pHYs  šœtIMEÛ (MŠIDATxÚí|wtT×µþ9·NŸQC $¡F’a:lÀ`ŠM1›¸a;ϸÄ-¶ã_\bÇ1Ž8!`'€qè¦Ø€èB€ $„Pïm4õ¶sÞwæ2šÒH~¿µœ·²×]Z3ZçÞSöÙ{ûÛçăÿÈ¿¡Pž_j뛤V±ÝßÖØÜf±ÚC‚ zM÷-[ZÍmfkP !À¨ïÕÈ̶òª:’ èþÛ¥`$I˜ô&£®Çñû)·ïÔ\+,»]^ÓÔÒÞf¶˜ôaýbû; ²ßÏ|¾ÝÁ]/¼}³´²¼ª¡µ­Ãbµk5ª“>4$01®ÿ°ÁÃCƒzÐ\iYÍ_¶ì½ZPÊqBDXÐÒ…Óz`b—745·±yOöÅ6»#(Àðàì «—Î&IÒ·e‡Õþåß÷ž:w¥Ãj0égMI{rÕ<–¡ýœUî•¢_¿ñ¹N«ö! „ CõšÑé)C¦MÝÍÌ»ž~8‘»ïÈÙÂ[f³BH@ cŒ1Â@“>9)~ᜉS&¤ô¡‹†ÆÖïœtì¼ÅfW@,E‘/¼ûÇ­ƒ¢î‹6o;ääx­F-+Ç‹FÝê¥÷ϘœÖ/PÙUv‡³¶®9û⽇Ï—TÊ»P’$Q’Þ{}MzÊ»q.z@ØéŸò›šÛ)ŠÀ¼È  O.ÎHKòê;f@xÞµ’;•µòvÑæà–/œ±hîd¯Õ?ôfieÑ­J’$Æ¢(YmŽ933Ö¬˜ã¹©»Cä嵇ç04å22žZ9/"ÜŸ‰¤º{Ëï}·,áù¥d¿„ØþݨÍS‰qºQÛݽdJŒÐµa€–/ †½~@Fúpš¦ä0)+©Ù Ì<óý›w\>c'ÇÇÇö_ûÄ?» 6½òÜR9÷’q Ë0gÏ_­®mêÜ!„hšT»ÃpÒ¥§!~ÉÔv_}¥ý‚X†Vra›Ùê›ï‹¢¡ p ‚ðè’™½"n¦Þ—2>-ÉÉñ lië8›sÕ;ôÂ$I´›­Å%?gq~ÑšƒØuŒ!îµòò¾ƒé̽9œ\~A‰1DQŠ ž1iLoǹpî$¯l=7¯È«M`€Þ±ñëý-mæÿ£šs_aÐûšF]C‹ÓÉ+ä Æ80@ï…÷ªj)wæÇ󘑃{ïØÇŽ,Š’’!Ü,­âxÞ³Mb܆¦‘›ßbºøVÅã/|pöüÕÿÍñ‚h³;ýÜÎV›ÃŸ–NŽoln±ÎR‘¾ÍítöAä!„Ô*&"4Ø«Àq¼Œ'åd`̨Á}èȨ×MŒáyÞÅÝDsk{um³g›„Øþƒâ£8'¯“,˔ܮzæ•Oáf·¶uô¥ÊÓn¶nÞv0çR!/Q‘¡=2{ôÈA÷Ê‹wìÉ:’•Óa±Ι4's|—-AÜúí‘#Y:,Ö@“aÞ¬Œå‹2}Ó©ÿO’wíÖÁ£çU¬+S–$hô¢Ë«êyAdYF^JËÄFGô­»!ƒ¢då(<ŸÕæ¨oh‰‹‰ðÌÒV><óÅ·6xò“,Ë`Œ³s ²s "ƒÓR†L?*%9±_gøžšk3[Ö¾ú§œK C“Qx³üì…k|çÙé½=¾(Ië?Ú²mÏ1š¢(‚¸YZùÓ…ë•Õ Ï>¾À‡ÎÞþ`ó·û²X†¦(²º¶éòµ›•5M¯ÿz¹ŸÊÃn£SÚ«üc§Î]yûÃ͇“ahy;œÜ¸Ôa&½WíP¡zB:­º_H@ß4ªäj²ãmm÷¶¡9™ãsó ÿñÝQƒ^£øp9K–Kž{¾?½ïÐÙà`Sò°¸©÷ž8.9$ÈÔæ¶î8’}ñºñišr:¹O¾Ü™6jˆAß)o=y6oÇþ,­V-W“L‰¢ôÕ7&Ž™4x`§µûéÊô:Ü’"Iš¢¶íúqê})cGí­Ó”‘ß¹ ×ÂCƒÂ×¼ñ‚PV^{!¯(çÒ !–¡±ÛO¨T̲‡¼‹Vmf‹\eH³,mêM=¨Sîh”¹xe8í>8ðÖK«H’ܶ롬°»š IJCÚÍ–c§.=‘29cä¢yS†‰íZsÅwªõÌ2LeUýµÂÛÒGtŽùaBe€EZmŽì ×½4wîÂ5„0;AaÎÎ;™Ûk͹k+oÿáoØU€€cá]Øâþ,J •Š!I {ÔxŸ\9oøÐ8_î¹A(’Tõµ˜®R1þø†¦÷ÊêôÑC7nÝ£¸ B¨bY/:"IJMš[Úÿù¯£ûŸÍœ’öÌêù^žœRJ“Š¥»Âµ„Ϋc‡“#0®ò‹¬‡88Η TXi@ŽïM6‡XVÆ”œ/C@ˆî¤8b„ ²>öÚa±Ížš¾îé%]˜)„²Eº§ÿ3RÏÎkØ}þ9kjú”Œ”£'s÷:_PÚaµÑES¤Rq”ŸCQ¤ŽR#„ö<}6çê«Ï/÷<¨@L&ˆ$ä$ ë´êxŸRá°AEIÄH¦5 \ Žöj™œï… e–a|jRŸ°%–“¹€ Ü«,Ÿ1@ì[ÐhTi)CÊÊkë[œÇÐÌŒIcÞ{cÉç\Ë2ãR‡54µÕ5´¢¨V±ÌÿΫ÷xVÌ#Ùª=tü¼|¤ºhƒ^§Ñ©Õ:­Z§Ukµj½V­×ky^U¥di)C?{ÿ×O®œç»ù<åÚÒœË7ä‚r¼99-",¸šËν~âlžÌÑ Œ?8-z@˜¿»‚ @ãˆañófMÈœ’ÜÜj®kh–ñâÛ9Ž/¯jXpÿ}$I¸€Éô‰£ÓS†•ÙÎØ˜Èn&œ;`ë_Þ¼^XÖÜÒ<¬30éÄ_GôûËGëJʪ[ZÍýBz›*aŸƒ†løàÅèþ¡ ã.ÇY’ vìÉúpÃ?uî#3„MÍm£Ã{ì"",˜$9¨@íÇíòš{%²ÝKYyì0Æ!½ZÖ/°oŽ7f@ØšGç®X2óÀ‘s_lÞ]ߨªf¦©XæúÒKùÅãR“îr(zf\jÒ´‰cºß§2ø5iLxhR aºèVù—ßë¿ÿeGs«YA€'7>5é^qýÄÙ¼¿ýóû^­Íæhhj'(J.ya ŒzíÝZÅjß²ýpöÅë'ùØÒû“‡ÅÝ+ï9xúè©\«Õº|a¦/«t—-ûéÊîƒg›ÛBó˜8mâè>«°ÇªA¯Y±hÆ;m¡) B dzûîcKæOíæe” ÓœÌñ›¾ÞoÐke´ªV³›¾ÞŸÛÞ¬ =Žë«oøáœÒd—»lqf—³Î\~ùw_4·v46µ¿òÜR¥¢Û½ü”[P×ÐÌ2 †b I(&*ܕϙ;¬Ï¾úÉöÝÇššÛ›ZÚoÝ9|tü|\LDüÀ.fÿõ›¿yocqIECckqiå¡£ç„é~“–¥wjÍfh Bˆ0,_8ÃÔí A±Ñ‘GO]lk·È@’DSs{ É0fäànfäÁ³í§B>!ŒO»¢Óª““âïu— J_üu÷Ÿ7íbÙ»‡Ø­6ÇŒ)©Ï<¾ú¼utøØùßúœãŠÉ¹Tx9ÿfô€°sÇêÚÆ×ÞÛÔn¶’ žY=@d(زýðÉsW z-Ë2,Ãèt«ÍþÁçÛ:¬6¯í=tfçÞ,­F­V«X–Öé4V»ãýÏþÑÔÒæÕòzáíÏ6í" ¨Q³,Kk5*’„_þ}Ï…¼ÂÞ$tî¬XE£A»b‘í\‡ˆY†Þ¾«‡h¼ö‰…N§àbf¤)J’Ð;o}ê¥Ï_,ðŠ v‡óä¹¼ÇÖ¾ÿÙ¦Q!¡lë@“aÝ3øªmï¡3ëÞþB’CÓ:­:çr᪵¿þÏNe_±Xí¾£jm·ìúþÔÊgß/+¯U14D˜ã…ؘˆQÃ]Þ2¿ ”¡éÎÌ7[^Qwí†w­àÇ“H’ð¬¨X¶²¦ñÂå"¯úꉳy6›]§S+˜¢H»ƒÛsðtzÊÐÞ: ôL-š7eÛ®£U54Mʹ]yUÝÎ}'ž~ìÁnîztIæå«ÅûŸS(’$Ô}ìäÅÓÙù ±ãúG„cªjnÝ®*-«–ÒjXÜH‰zë¥U‰q]¼ÔÓÒÚáppµ’'`š‘>ðãOG²röœÕ?”¦@‡Å^UÓp³´²ª¶‰¦HšQzáx~ÅâLµš½ç`çÌ `,J’ïy›Ý¡¼,$³‡`„ÙÇ:ÛÚ-By+% ØÜb–ë3þSÎnêÒ/¸bÐk–/Î\ÿáš&³Û±çØÃ º‹vA¼ÿæ“u -9— å²§œü«Õ,Ƹ¸¤¢ ¨ # Ù"Iš¦×ì\±ßfw¾üÜÒ‡æLêòùkC’ÄÿûÓ7‚T,­”P´Ƹ¢ª¡ôN5Æ»‰.†¦ÔjŒ–Iv³Å6mÒ˜%ó§Ý­ô±s’+!¤Óª}£WÌ€pA=Š™bÌ2t|t¤/‘Š0ò £†'ô­˜âÿM‹æNŽ‹‰P\MSw*êwîÍêþ.½N³ñ“WfLN5wØDQÂruɽˆ5«Õª5j•FÍz½åprB¿}iÕ ¿ZÔÍóW/»ÿ‹×…™:,v%­–5HÓ”F­ÒjÔJ¾Ôj–¤H…=Bµ[lcFþà·O3n\CV,ÎÔ¨Uç&o$‹Å>ö}ñ½õ±|Q¦É s8]l–¹Ý:yl²ï‘ÞÌ©iC£;,6%•¶Xí±Ñ‹œÚ‹ò{\~çv+–dòœ»@ˆ1ËPÛvk3÷Û6þñ¥uÏ>LS¤ÕjE )…#€ôû½¡‹-~`äWŸ¾ú«•ózØÌ©ißm~gáÜI#«Õ¡¤"wKE` A "du8y^xdþ´-^÷äBÉõë×G†‡ Œ /(*k3[œ¼ V±ËMí¿õ…­¡!±1ù%Í­íò©©“SßãIƒÏ!µŠ=bPÑ­òÚúf‡“C' ‰ýxýÚ8ŸÝpoJ©rûžãr‘–ãAW=2;Ðäבºø‘‡Ÿ¯ªm”$ÉÉ‹’ªjuZµ\éFH’—š4q\²“ãkê›ÚÌVIt½Í&a„$$¿7åäŒq\LäÓ«ç¿÷ú¯ÅGù9)£A7kjzúèaBMímž$QB#„ !„D q¼ÀñÏ Z­zÒ¸äß½úø¯ëUb¼„ZÛ-W Jlv§|¾¬›î›[̹y…ÛÀèð´”aÝx?ŽãÏ_ºQWßÚ/pì˜a!ºg©kh¾WD»ŽY`À¤ŒQ:¿§¯Þ¾SQKQ¤ü®(¡@£þ¾ÞPUõ9y…óŠ*«ê͛䎚ÁA¦¡‰ÑãÆ$¥Ž,ƒ…¾I]Csî•âüë%¥eU­m^1*–1u±Qá#“âG&%ÄÅDÞ£lùŸ_Õð‡È°;Ɔ¡ýÿ‘ÿÅéäQ’ÑËÐŒ]üGsÿ®ò?„[üKþuIEND®B`‚rosdep-0.21.0/doc/rosdep2_api.rst000066400000000000000000000026721406544147500166150ustar00rootroot00000000000000.. _python_api: rosdep2 Python API ================== .. module:: rosdep2 **Experimental**: the rosdep2 Python library is still unstable. The :mod:`rosdep` Python module supports both the `rosdep` command-line tool as well as libraries that wish to use rosdep data files to resolve dependencies. As a developer, you may wish to extend :mod:`rosdep` to add new OS platforms or package managers. Platforms are specified by registering information on the :class:`InstallerContext`. Package managers generally extend the :class:`PackageManagerInstaller` implementation. The :mod:`rospkg` library is used for OS detection. Please consult the :ref:`Developers Guide ` for more information on developing with the Python API. .. contents:: Table of Contents :depth: 2 Exceptions ---------- .. autoclass:: InvalidData Database Model -------------- .. autoclass:: RosdepDatabase :members: .. autoclass:: RosdepDatabaseEntry :members: View Model ---------- .. autoclass:: RosdepDefinition :members: .. autoclass:: RosdepView :members: .. autoclass:: RosdepLookup :members: Loaders ------- .. autoclass:: RosdepLoader :members: .. autoclass:: RosPkgLoader :members: Installers ---------- .. autoclass:: InstallerContext :members: .. autoclass:: Installer :members: .. autoclass:: PackageManagerInstaller :members: Indices and tables ------------------ * :ref:`genindex` * :ref:`modindex` * :ref:`search` rosdep-0.21.0/doc/rosdep_doc_utils.py000066400000000000000000000034101406544147500175560ustar00rootroot00000000000000# Copyright 2016 Open Source Robotics Foundation, Inc. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. from docutils import nodes from docutils.parsers.rst import Directive import re import subprocess import sys from rosdep2.main import _usage class RosdepCLIDirective(Directive): required_arguments = 1 def run(self): if 'commands' in self.arguments: return [nodes.literal_block(text=_usage)] capitalized_usage = _usage[0].upper() + _usage[1:] + '\n' escaped_capitalized_usage = re.escape(capitalized_usage) py = sys.executable if 'options' in self.arguments: out = subprocess.check_output( [py, '-c', "from rosdep2.main import rosdep_main;rosdep_main(['-h'])"] ) return [ nodes.literal_block(text=re.sub(escaped_capitalized_usage, '', out.decode())) ] if 'install' in self.arguments: out = subprocess.check_output( [py, '-c', "from rosdep2.main import rosdep_main;rosdep_main(['install', '-h'])"] ) return [ nodes.literal_block(text=re.sub(escaped_capitalized_usage, '', out.decode())) ] def setup(app): app.add_directive('rosdep_cli_help', RosdepCLIDirective) rosdep-0.21.0/doc/rosdep_yaml_format.rst000066400000000000000000000073411406544147500202720ustar00rootroot00000000000000.. _rosdep_yaml: rosdep YAML format '''''''''''''''''' The current rosdep YAML format specification was introduced in `REP 111 `_. Specification ============= rosdep supports both a *simple* and *versioned* syntax. * Simple :: ROSDEP_NAME: OS_NAME1: PACKAGE_MANAGER1: PACKAGE_ARGUMENTS_A OS_NAME2: PACKAGE_MANAGER2: PACKAGE_ARGUMENTS_A * Versioned :: ROSDEP_NAME: OS_NAME1: OS_VERSION1: PACKAGE_MANAGER1: PACKAGE_ARGUMENTS_A OS_VERSION2: PACKAGE_MANAGER2: PACKAGE_ARGUMENTS_A2 The names above resolve as follows: * ``ROSDEP_NAME`` is the name referred to by manifest files. Examples: ``log4cxx`` or ``gtest``. * ``OS_NAME`` is the name of an OS. Examples: ``ubuntu``, ``osx``, ``fedora``, ``debian``, ``openembedded``, or ``windows``. * ``OS_VERSION`` (*optional*) is the name of specific versions in the OS. Examples: ``lucid`` or ``squeeze``. If no ``OS_VERSION`` is specified, the rule is assumed to apply to all versions. * ``PACKAGE_MANAGER`` (*optional in ROS Electric, required in ROS Fuerte*) is a key to select which package manager to use for this rosdep. Examples: ``apt``, ``pip``, ``macports``. * ``PACKAGE_ARGUMENT`` is free-form YAML that is be passed to the handler for the specified ``PACKAGE_MANAGER``. Example ------- For Ubuntu the default package manager is apt. An example for the simple syntax is: :: rosdep_name: ubuntu: apt: packages: [ debian-package-name, other-debian-package-name] or versioned as follows: :: rosdep_name: ubuntu: lucid: apt: packages: [debian-package-name, other-debian-package-name] OS name identifiers and supported package managers -------------------------------------------------- * ``arch``: Arch Linux * ``pacman`` (default) * ``source`` * ``cygwin``: Cygwin * ``apt-cyg`` * ``source`` * ``debian``: Debian GNU/Linux * ``apt`` (default) * ``source`` * ``fedora``: Fedora Project * ``dnf`` (default) * ``yum`` * ``source`` * ``freebsd``: FreeBSD * ``pkg_add`` (default) * ``source`` * ``gentoo``: Gentoo Linux * ``portage`` (default) * ``source`` * ``openembedded`` : OpenEmbedded * TODO: define a remote installation method for cross compiled packages * ``osx`` : Apple OS X * TODO: special notes on macports vs. homebrew * ``opensuse``: OpenSUSE * ``zypper`` (default) * ``source`` * ``rhel`` : Red Hat Enterprise Linux * ``yum`` (default) * ``source`` * ``ubuntu``: Ubuntu * ``apt`` (default) * ``pip`` * ``source`` For backwards compatibility, ``macports`` is supported as an alias of ``osx``. OS version identifiers ---------------------- OS version identifiers use one-word codenames that refer to particular releases. Examples: * debian: ``squeeze`` * ubuntu: ``lucid``, ``maverick``, ``natty``, ``oneiric``, ``precise`` * osx: ``snow``, ``lion`` Disambiguation of OS_VERSION and PACKAGE_MANAGER ------------------------------------------------ For backwards compatibility, the ``PACKAGE_MANAGER`` is allowed to be optional in the ROS Electric case. As both ``PACKAGE_MANAGER`` and ``OS_VERSION`` are optional, this creates an ambiguious case where either ``OS_VERSION`` or ``PACKAGE_MANAGER`` is specified, but not both. In this ambiguous case, rosdep first interprets the key as a ``PACKAGE_MANAGER``. If this test fails, it will be interpreted as an ``OS_VERSION``. Developers should exercise caution in keeping ``OS_VERSION`` and ``PACKAGE_MANAGER`` keys globally distinct. rosdep-0.21.0/doc/sources_list.rst000066400000000000000000000054251406544147500171230ustar00rootroot00000000000000rosdep sources list =================== The :command:`rosdep` command-line tool is similar to other tools like :command:`apt` that use a *sources list* to update a local index. rosdep 2 loads *valid data sources* specified in the sources list in order. This follows the behavior of apt, which designates the "most preferred source listed first." Each rosdep entry from the data sources is combined into a single rosdep database. Entries from data sources listed higher in the sources have higher precedence. The first entry for a rosdep key "wins". Subsequent entries for the same key, even if they are non-conflicting, are not merged. A data source is considered *valid* if all of its tags match the local tags. A data source with no tags is always loaded. Updating the local index ------------------------ A new local index can be generated by running ``rosdep update``. Sources list file format ------------------------ *Sources list* files are loaded from ``/etc/ros/rosdep/sources.list.d``. ``sudo rosdep init`` will create a default configuration for you. rosdep processes the files in this directory, sorted by filename in ascending order. Precedence is assigned to the files in the order they are processed, with the first file having the highest precendence. A ``.list`` file lists *data sources*, with the most preferred data source first. The general format is:: source-type url [tags...] ``source-type`` can be: ``yaml`` ``rosdep.yaml`` file ``gbpdistro`` ``gbpdistro`` file. ``type`` Type must be ``yaml`` or ``gbpdistro``. In the future, more types may be supported. ``url`` URL should point to the HTTP location of a rosdep YAML file. URL must contain an scheme (e.g. ``http://``), hostname, and path. ``tags`` Tags are optional. Currently, the OS name (e.g. ``ubuntu``), OS codename (e.g. ``lucid``), and ROS distribution codename (e.g. ``fuerte``) are supported. These tags are all lower-case. Lines that start with a ``#`` are considered to be comments. Example file:: yaml https://github.com/ros/rosdistro/raw/master/rosdep/base.yaml yaml https://github.com/ros/rosdistro/raw/master/rosdep/python.yaml gbpdistro https://github.com/ros/rosdistro/raw/master/releases/fuerte.yaml fuerte Tags ---- The tags constrain the configurations that the source will be loaded on. *All* tags must match the current configuration for the source to be considered valid. In the example above, the source will only be valid for the ROS Fuerte distribution on an Ubuntu Lucid platform. gbpdistro files --------------- ``gbpdistro`` refers to a ``git-buildpackage``-based toolchain currently in use for building catkin-based ROS stacks. End users are not expected to write their own ``gbpdistro`` files and the specification is unstable. rosdep-0.21.0/rosdoc.yaml000066400000000000000000000000531406544147500152530ustar00rootroot00000000000000 - builder: sphinx sphinx_root_dir: doc rosdep-0.21.0/setup.py000066400000000000000000000025251406544147500146160ustar00rootroot00000000000000import os from setuptools import setup kwargs = { 'name': 'rosdep', # same version as in: # - src/rosdep2/__init__.py # - stdeb.cfg 'version': '0.21.0', 'packages': ['rosdep2', 'rosdep2.ament_packages', 'rosdep2.platforms'], 'package_dir': {'': 'src'}, 'install_requires': ['catkin_pkg >= 0.4.0', 'rospkg >= 1.3.0', 'rosdistro >= 0.7.5', 'PyYAML >= 3.1'], 'test_suite': 'nose.collector', 'test_requires': ['mock', 'nose >= 1.0'], 'author': 'Tully Foote, Ken Conley', 'author_email': 'tfoote@osrfoundation.org', 'url': 'http://wiki.ros.org/rosdep', 'keywords': ['ROS'], 'entry_points': { 'console_scripts': [ 'rosdep = rosdep2.main:rosdep_main', 'rosdep-source = rosdep2.install:install_main' ] }, 'classifiers': [ 'Programming Language :: Python', 'License :: OSI Approved :: BSD License'], 'description': 'rosdep package manager abstraction tool for ROS', 'long_description': 'Command-line tool for installing system ' 'dependencies on a variety of platforms.', 'license': 'BSD', } if 'SKIP_PYTHON_MODULES' in os.environ: kwargs['packages'] = [] kwargs['package_dir'] = {} if 'SKIP_PYTHON_SCRIPTS' in os.environ: kwargs['name'] += '_modules' kwargs['entry_points'] = {} setup(**kwargs) rosdep-0.21.0/setup.sh000066400000000000000000000004501406544147500145730ustar00rootroot00000000000000SCRIPT_PATH="${BASH_SOURCE[0]}"; if([ -h "${SCRIPT_PATH}" ]) then while([ -h "${SCRIPT_PATH}" ]) do SCRIPT_PATH=`readlink "${SCRIPT_PATH}"`; done fi pushd . > /dev/null cd `dirname ${SCRIPT_PATH}` > /dev/null SCRIPT_PATH=`pwd`; popd > /dev/null export PYTHONPATH=$SCRIPT_PATH/src:$PYTHONPATH rosdep-0.21.0/src/000077500000000000000000000000001406544147500136675ustar00rootroot00000000000000rosdep-0.21.0/src/rosdep2/000077500000000000000000000000001406544147500152455ustar00rootroot00000000000000rosdep-0.21.0/src/rosdep2/__init__.py000066400000000000000000000121661406544147500173640ustar00rootroot00000000000000# Copyright (c) 2009, Willow Garage, Inc. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # # * Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # * Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # * Neither the name of the Willow Garage, Inc. nor the names of its # contributors may be used to endorse or promote products derived from # this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. # Author Tully Foote/tfoote@willowgarage.com, Ken Conley/kwc@willowgarage.com """ rosdep library and command-line tool """ from __future__ import print_function from ._version import __version__ import sys from .installers import InstallerContext, Installer, \ PackageManagerInstaller from .core import RosdepInternalError, InstallFailed, UnsupportedOs, \ InvalidData, DownloadFailure from .model import RosdepDatabase, RosdepDatabaseEntry from .lookup import RosdepDefinition, RosdepView, RosdepLookup, \ ResolutionError from .loader import RosdepLoader # don't let import error take down code as when attempting to compute version number try: from .rospkg_loader import RosPkgLoader except ImportError: print('Cannot import rospkg, rosdep will not function properly', file=sys.stderr) def create_default_installer_context(verbose=False): from .platforms import alpine from .platforms import arch from .platforms import cygwin from .platforms import debian from .platforms import gentoo from .platforms import nix from .platforms import openembedded from .platforms import opensuse from .platforms import osx from .platforms import pip from .platforms import npm from .platforms import gem from .platforms import redhat from .platforms import freebsd from .platforms import slackware from .platforms import source platform_mods = [alpine, arch, cygwin, debian, gentoo, nix, openembedded, opensuse, osx, redhat, slackware, freebsd] installer_mods = [source, pip, gem, npm] + platform_mods context = InstallerContext() context.set_verbose(verbose) # setup installers for m in installer_mods: if verbose: print('registering installers for %s' % (m.__name__)) m.register_installers(context) # setup platforms for m in platform_mods: if verbose: print('registering platforms for %s' % (m.__name__)) m.register_platforms(context) return context from . import gbpdistro_support # noqa gbpdistro_support.create_default_installer_context = create_default_installer_context # TODO: this was partially abstracted from main() for another library, # but it turned out to be unnecessary. Not sure it's worth maintaining # separately, especially in the top-level module. def get_default_installer(installer_context=None, verbose=False): """ Based on the active OS and installer context configuration, get the installer to use and the necessary configuration state (installer keys, OS name/version). :returns: installer, installer_keys, default_key, os_name, os_version. """ if installer_context is None: installer_context = create_default_installer_context(verbose=verbose) os_name, os_version = installer_context.get_os_name_and_version() try: installer_keys = installer_context.get_os_installer_keys(os_name) default_key = installer_context.get_default_os_installer_key(os_name) except KeyError: raise UnsupportedOs(os_name, installer_context.get_os_keys()) installer = installer_context.get_installer(default_key) return installer, installer_keys, default_key, os_name, os_version __all__ = [ 'InstallerContext', 'Installer', 'PackageManagerInstaller', 'RosdepInternalError', 'InstallFailed', 'UnsupportedOs', 'InvalidData', 'DownloadFailure', 'RosdepDatabase', 'RosdepDatabaseEntry', 'RosdepDefinition', 'RosdepView', 'RosdepLookup', 'ResolutionError', 'RosdepLoader', 'RosPkgLoader', 'get_default_installer', 'create_default_installer_context', ] rosdep-0.21.0/src/rosdep2/_version.py000066400000000000000000000001101406544147500174330ustar00rootroot00000000000000# same version as in: # - setup.py # - stdeb.cfg __version__ = '0.21.0' rosdep-0.21.0/src/rosdep2/ament_packages/000077500000000000000000000000001406544147500202075ustar00rootroot00000000000000rosdep-0.21.0/src/rosdep2/ament_packages/README.md000066400000000000000000000005231406544147500214660ustar00rootroot00000000000000Code within is folder is essentially copied directly from the `ament_package` repo, or more specifically the `ament_index_python` package. See original source here: https://github.com/ament/ament_index/tree/86f5a6712690830fe3e19752f70cfcdb00a3d223/ament_index_python/ament_index_python TODO: reconcile duplicate code via shared codebase rosdep-0.21.0/src/rosdep2/ament_packages/__init__.py000066400000000000000000000017331406544147500223240ustar00rootroot00000000000000# Copyright 2015 Open Source Robotics Foundation, Inc. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. from .constants import AMENT_PREFIX_PATH_ENV_VAR from .constants import RESOURCE_INDEX_SUBFOLDER from .packages import get_packages_with_prefixes from .resources import get_resources from .search_paths import get_search_paths __all__ = [ 'get_packages_with_prefixes', 'get_resources', 'get_search_paths', 'AMENT_PREFIX_PATH_ENV_VAR', 'RESOURCE_INDEX_SUBFOLDER', ] rosdep-0.21.0/src/rosdep2/ament_packages/constants.py000066400000000000000000000013111406544147500225710ustar00rootroot00000000000000# Copyright 2015 Open Source Robotics Foundation, Inc. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. RESOURCE_INDEX_SUBFOLDER = 'share/ament_index/resource_index' AMENT_PREFIX_PATH_ENV_VAR = 'AMENT_PREFIX_PATH' rosdep-0.21.0/src/rosdep2/ament_packages/packages.py000066400000000000000000000015671406544147500223500ustar00rootroot00000000000000# Copyright 2017 Open Source Robotics Foundation, Inc. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. import os from .resources import get_resources def get_packages_with_prefixes(): """ Return a dict of package names to the prefixes in which they are found. :returns: dict of package names to their prefixes :rtype: dict """ return get_resources('packages') rosdep-0.21.0/src/rosdep2/ament_packages/resources.py000066400000000000000000000031651406544147500226000ustar00rootroot00000000000000# Copyright 2015 Open Source Robotics Foundation, Inc. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. import os from .constants import RESOURCE_INDEX_SUBFOLDER from .search_paths import get_search_paths def get_resources(resource_type): """ Get the resource names of all resources of the specified type. :param resource_type: the type of the resource :type resource_type: str :returns: dict of resource names to the prefix path they are in :raises: :exc:`EnvironmentError` """ assert resource_type, 'The resource type must not be empty' resources = {} for path in get_search_paths(): resource_path = os.path.join(path, RESOURCE_INDEX_SUBFOLDER, resource_type) if os.path.isdir(resource_path): for resource in os.listdir(resource_path): # Ignore subdirectories, and anything starting with a dot if os.path.isdir(os.path.join(resource_path, resource)) \ or resource.startswith('.'): continue if resource not in resources: resources[resource] = path return resources rosdep-0.21.0/src/rosdep2/ament_packages/search_paths.py000066400000000000000000000023261406544147500232300ustar00rootroot00000000000000# Copyright 2015 Open Source Robotics Foundation, Inc. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. import os from .constants import AMENT_PREFIX_PATH_ENV_VAR def get_search_paths(): """ Get the paths from the environment variable '{AMENT_PREFIX_PATH_ENV_VAR}'. :returns: list of paths :raises: :exc:`EnvironmentError` """.format(AMENT_PREFIX_PATH_ENV_VAR=AMENT_PREFIX_PATH_ENV_VAR) ament_prefix_path = os.environ.get(AMENT_PREFIX_PATH_ENV_VAR) if not ament_prefix_path: raise EnvironmentError( "Environment variable '{}' is not set or empty".format(AMENT_PREFIX_PATH_ENV_VAR)) paths = ament_prefix_path.split(os.pathsep) return [p for p in paths if p and os.path.exists(p)] rosdep-0.21.0/src/rosdep2/cache_tools.py000066400000000000000000000071611406544147500201070ustar00rootroot00000000000000# Copyright (c) 2012, Willow Garage, Inc. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # # * Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # * Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # * Neither the name of the Willow Garage, Inc. nor the names of its # contributors may be used to endorse or promote products derived from # this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. import hashlib import os import tempfile from .core import CachePermissionError try: import cPickle as pickle except ImportError: import pickle PICKLE_CACHE_EXT = '.pickle' def compute_filename_hash(key_filenames): sha_hash = hashlib.sha1() if isinstance(key_filenames, list): for key in key_filenames: sha_hash.update(key.encode()) else: sha_hash.update(key_filenames.encode()) return sha_hash.hexdigest() def write_cache_file(source_cache_d, key_filenames, rosdep_data): """ :param source_cache_d: directory to write cache file to :param key_filenames: filename (or list of filenames) to be used in hashing :param rosdep_data: dictionary of data to serialize as YAML :returns: name of file where cache is stored :raises: :exc:`OSError` if cannot write to cache file/directory :raises: :exc:`IOError` if cannot write to cache file/directory """ if not os.path.exists(source_cache_d): os.makedirs(source_cache_d) key_hash = compute_filename_hash(key_filenames) filepath = os.path.join(source_cache_d, key_hash) try: write_atomic(filepath + PICKLE_CACHE_EXT, pickle.dumps(rosdep_data, 2), True) except OSError as e: raise CachePermissionError('Failed to write cache file: ' + str(e)) try: os.unlink(filepath) except OSError: pass return filepath def write_atomic(filepath, data, binary=False): # write data to new file fd, filepath_tmp = tempfile.mkstemp(prefix=os.path.basename(filepath) + '.tmp.', dir=os.path.dirname(filepath)) if (binary): fmode = 'wb' else: fmode = 'w' with os.fdopen(fd, fmode) as f: f.write(data) f.close() try: # switch file atomically (if supported) os.rename(filepath_tmp, filepath) except OSError: # fall back to non-atomic operation try: os.unlink(filepath) except OSError: pass try: os.rename(filepath_tmp, filepath) except OSError: os.unlink(filepath_tmp) rosdep-0.21.0/src/rosdep2/catkin_packages.py000066400000000000000000000033751406544147500207360ustar00rootroot00000000000000from __future__ import print_function import os import sys try: from catkin_pkg.packages import find_packages except ImportError: print('catkin_pkg was not detected, please install it.', file=sys.stderr) sys.exit(1) _catkin_workspace_packages = [] _catkin_packages_cache = {} VALID_DEPENDENCY_TYPES = {'build', 'buildtool', 'build_export', 'buildtool_export', 'exec', 'test', 'doc'} def find_catkin_packages_in(path, verbose=False): """ :returns: a list of packages in a given directory :raises: OSError if the path doesn't exist """ global _catkin_packages_cache if not os.path.exists(path): raise OSError("given path '{0}' does not exist".format(path)) if verbose: print("Looking for packages in '{0}'... ".format(path), end='', file=sys.stderr) path = os.path.abspath(path) if path in _catkin_packages_cache: if verbose: print('found in cache.', file=sys.stderr) return _catkin_packages_cache[path] packages = find_packages(path) if type(packages) == dict and packages != {}: package_names = [package.name for package in packages.values()] if verbose: print('found ' + str(len(packages)) + ' packages.') for package in package_names: print(' {0}'.format(package)) _catkin_packages_cache[path] = package_names return package_names else: if verbose: print('failed to find packages.', file=sys.stderr) return [] def set_workspace_packages(packages): global _catkin_workspace_packages _catkin_workspace_packages = list(packages or []) def get_workspace_packages(): global _catkin_workspace_packages return _catkin_workspace_packages rosdep-0.21.0/src/rosdep2/catkin_support.py000066400000000000000000000077451406544147500207010ustar00rootroot00000000000000""" Helper routines for catkin. These are distributed inside of rosdep2 to protect catkin against future rosdep2 API updatese. These helper routines are assumed to run in an interactive mode with an end-user and thus return end-user oriented error messages. Errors are returned as arguments to raised :exc:`ValidationFailed` exceptions. Workflow:: installer = get_installer(APT_INSTALLER) view = get_catkin_view(rosdistro_name, 'ubuntu', 'lucid') resolve_for_os(rosdep_key, view, installer, 'ubuntu', 'lucid') """ from __future__ import print_function import os from subprocess import Popen, PIPE, CalledProcessError from . import create_default_installer_context from .lookup import RosdepLookup from .platforms.debian import APT_INSTALLER from .platforms.osx import BREW_INSTALLER from .platforms.pip import PIP_INSTALLER from .platforms.redhat import YUM_INSTALLER from .platforms.freebsd import PKG_INSTALLER from .rep3 import download_targets_data from .rosdistrohelper import get_targets from .rospkg_loader import DEFAULT_VIEW_KEY from .sources_list import get_sources_list_dir, DataSourceMatcher, SourcesListLoader class ValidationFailed(Exception): pass def call(command, pipe=None): """ Copy of call() function from catkin-generate-debian to mimic output """ working_dir = '.' # print('+ cd %s && ' % working_dir + ' '.join(command)) process = Popen(command, stdout=pipe, stderr=pipe, cwd=working_dir) output, unused_err = process.communicate() retcode = process.poll() if retcode: raise CalledProcessError(retcode, command) if pipe: return output def get_ubuntu_targets(rosdistro): """ Get a list of Ubuntu distro codenames for the specified ROS distribution. This method blocks on an HTTP download. :raises: :exc:`ValidationFailed` """ targets_data = get_targets() legacy_targets = download_targets_data() if 'fuerte' in legacy_targets: targets_data['fuerte'] = {'ubuntu': legacy_targets['fuerte']} if 'electric' in legacy_targets: targets_data['electric'] = {'ubuntu': legacy_targets['electric']} return targets_data[rosdistro]['ubuntu'] def get_installer(installer_name): """ Expected installers APT_INSTALLER, YUM_INSTALLER, ...""" installer_context = create_default_installer_context() return installer_context.get_installer(installer_name) def resolve_for_os(rosdep_key, view, installer, os_name, os_version): """ Resolve rosdep key to dependencies. :param os_name: OS name, e.g. 'ubuntu' :raises: :exc:`rosdep2.ResolutionError` """ d = view.lookup(rosdep_key) ctx = create_default_installer_context() os_installers = ctx.get_os_installer_keys(os_name) default_os_installer = ctx.get_default_os_installer_key(os_name) inst_key, rule = d.get_rule_for_platform(os_name, os_version, os_installers, default_os_installer) assert inst_key in os_installers return installer.resolve(rule) def update_rosdep(): call(('rosdep', 'update'), pipe=PIPE) def get_catkin_view(rosdistro_name, os_name, os_version, update=True): """ :raises: :exc:`ValidationFailed` """ sources_list_dir = get_sources_list_dir() if not os.path.exists(sources_list_dir): raise ValidationFailed("""rosdep database is not initialized, please run: \tsudo rosdep init """) if update: update_rosdep() sources_matcher = DataSourceMatcher([rosdistro_name, os_name, os_version]) sources_loader = SourcesListLoader.create_default(matcher=sources_matcher) if not (sources_loader.sources): raise ValidationFailed("""rosdep database does not have any sources. Please make sure you have a valid configuration in: \t%s """ % (sources_list_dir)) # for vestigial reasons, using the roskg loader, but we're only # actually using the backend db as resolution is not resource-name based lookup = RosdepLookup.create_from_rospkg(sources_loader=sources_loader) return lookup.get_rosdep_view(DEFAULT_VIEW_KEY) rosdep-0.21.0/src/rosdep2/core.py000066400000000000000000000065171406544147500165600ustar00rootroot00000000000000# Copyright (c) 2009, Willow Garage, Inc. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # # * Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # * Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # * Neither the name of the Willow Garage, Inc. nor the names of its # contributors may be used to endorse or promote products derived from # this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. from __future__ import print_function import os import sys import traceback def rd_debug(s): if 'ROSDEP_DEBUG' in os.environ: print(s) def print_bold(msg): """ print message printed to screen with bold decoration for greater clarity :param msg: message to print, ``str`` """ if sys.platform in ['win32']: print('%s' % msg) # windows console is terrifically boring else: print('\033[1m%s\033[0m' % msg) class InvalidData(Exception): """ Data is not in valid rosdep format. """ def __init__(self, message, origin=None): super(InvalidData, self).__init__(message) self.origin = origin class UnsupportedOs(Exception): pass class RosdepInternalError(Exception): def __init__(self, e, message=None): self.error = e if message is None: self.message = traceback.format_exc() else: self.message = message def __str__(self): return self.message class CachePermissionError(Exception): """Failure when writing the cache.""" pass class DownloadFailure(Exception): """ Failure downloading sources list data for I/O or other format reasons. """ pass class InstallFailed(Exception): def __init__(self, failure=None, failures=None): """ One of failure/failures must be set. :param failure: single (installer_key, message) tuple. :param failures: list of (installer_key, message) tuples """ if failures is not None: self.failures = failures elif not failure: raise ValueError('failure is None') else: self.failures = [failure] def __str__(self): return '\n'.join(['%s: %s' % (key, message) for (key, message) in self.failures]) rosdep-0.21.0/src/rosdep2/dependency_graph.py000066400000000000000000000142671406544147500211300ustar00rootroot00000000000000# Copyright (c) 2012, Willow Garage, Inc. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # # * Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # * Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # * Neither the name of the Willow Garage, Inc. nor the names of its # contributors may be used to endorse or promote products derived from # this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. # Author William Woodall/wjwwood@gmail.com from collections import defaultdict class Resolution(dict): """A default dictionary for use in the :class:`DependencyGraph`.""" def __init__(self): super(Resolution, self).__init__() self['installer_key'] = None self['install_keys'] = [] self['dependencies'] = [] self['is_root'] = True class DependencyGraph(defaultdict): """ Provides a mechanism for generating a list of resolutions which preserves the dependency order. The :class:`DependencyGraph` inherits from a *defaultdict*, so it can be used as such to load the dependency graph data into it. Example:: # Dependency graph:: A-B-C dg = DependencyGraph() dg['A']['installer_key'] = 'a_installer' dg['A']['install_keys'] = ['a'] dg['A']['dependencies'] = ['B'] dg['B']['installer_key'] = 'b_installer' dg['B']['install_keys'] = ['b'] dg['B']['dependencies'] = ['C'] dg['C']['installer_key'] = 'c_installer' dg['C']['install_keys'] = ['c'] dg['C']['dependencies'] = [] result = dg.get_ordered_uninstalled() """ def __init__(self): defaultdict.__init__(self, Resolution) def detect_cycles(self, rosdep_key, traveled_keys): """ Recursive function to detect cycles in the dependency graph. :param rosdep_key: This is the rosdep key to use as the root in the cycle exploration. :param traveled_keys: A list of rosdep_keys that have been traversed thus far. :raises: :exc:`AssertionError` if the rosdep_key is in the traveled keys, indicating a cycle has occurred. """ assert rosdep_key not in traveled_keys, 'A cycle in the dependency graph occurred with key `%s`.' % rosdep_key traveled_keys.append(rosdep_key) for dependency in self[rosdep_key]['dependencies']: self.detect_cycles(dependency, traveled_keys) def validate(self): """ Performs validations on the dependency graph, like cycle detection and invalid rosdep key detection. :raises: :exc:`AssertionError` if a cycle is detected. :raises: :exc:`KeyError` if an invalid rosdep_key is found in the dependency graph. """ for rosdep_key in self: # Ensure all dependencies have definitions # i.e.: Ensure we aren't pointing to invalid rosdep keys for dependency in self[rosdep_key]['dependencies']: if dependency not in self: raise KeyError( 'Invalid Graph Structure: rosdep key `%s` does not exist in the dictionary of resolutions.' % dependency) self[dependency]['is_root'] = False # Check each entry for cyclical dependencies for rosdep_key in self: self.detect_cycles(rosdep_key, []) def get_ordered_dependency_list(self): """ Generates an ordered list of dependencies using the dependency graph. :returns: *[(installer_key, [install_keys])]*, ``[(str, [str])]``. *installer_key* is the key that denotes which installed the accompanying *install_keys* are for. *installer_key* are something like ``apt`` or ``homebrew``. *install_keys* are something like ``boost`` or ``ros-fuerte-ros_comm``. :raises: :exc:`AssertionError` if a cycle is detected. :raises: :exc:`KeyError` if an invalid rosdep_key is found in the dependency graph. """ # Validate the graph self.validate() # Generate the dependency list dep_list = [] for rosdep_key in self: if self[rosdep_key]['is_root']: dep_list.extend(self.__get_ordered_uninstalled(rosdep_key)) # Make the list unique and remove empty entries result = [] for item in dep_list: if item not in result and item[1] != []: result.append(item) # Squash the results by installer_key squashed_result = [] previous_installer_key = None for installer_key, resolved in result: if previous_installer_key != installer_key: squashed_result.append((installer_key, [])) previous_installer_key = installer_key squashed_result[-1][1].extend(resolved) return squashed_result def __get_ordered_uninstalled(self, key): uninstalled = [] for dependency in self[key]['dependencies']: uninstalled.extend(self.__get_ordered_uninstalled(dependency)) uninstalled.append((self[key]['installer_key'], self[key]['install_keys'])) return uninstalled rosdep-0.21.0/src/rosdep2/gbpdistro_support.py000066400000000000000000000174341406544147500214210ustar00rootroot00000000000000try: from urllib.request import urlopen except ImportError: from urllib2 import urlopen import yaml try: import urlparse except ImportError: import urllib.parse as urlparse # py3k import os from rospkg.os_detect import OS_DEBIAN from rospkg.os_detect import OS_FEDORA from rospkg.os_detect import OS_OSX from rospkg.os_detect import OS_UBUNTU from .core import InvalidData, DownloadFailure from .platforms.debian import APT_INSTALLER from .platforms.osx import BREW_INSTALLER from .platforms.redhat import YUM_INSTALLER from .rosdistrohelper import get_targets, get_release_file, PreRep137Warning from .rep3 import download_targets_data # deprecated, will output warning import warnings create_default_installer_context = None # py3k try: unicode except NameError: basestring = unicode = str # location of an example gbpdistro file for reference and testing FUERTE_GBPDISTRO_URL = 'https://raw.githubusercontent.com/ros/rosdistro/' \ 'master/releases/fuerte.yaml' # seconds to wait before aborting download of gbpdistro data DOWNLOAD_TIMEOUT = 15.0 def get_owner_name(url): """ Given a gbpdistro url, returns the name of the github user in the url. If the url is not a valid github url it returns the default `ros`. This information is used to set the homebrew tap name, see: https://github.com/ros-infrastructure/rosdep/pull/17 :returns: The github account in the given gbpdistro url """ result = 'ros' try: parsed = urlparse.urlparse(url) if parsed.netloc == 'github.com': result = parsed.path.split('/')[1] except (ValueError, IndexError): pass return result # For compatability url defaults to '' def gbprepo_to_rosdep_data(gbpdistro_data, targets_data, url=''): """ DEPRECATED: the rosdistro file format has changed according to REP137 this function will yield a deprecation warning :raises: :exc:`InvalidData` """ warnings.warn('deprecated: see REP137 and rosdistro', PreRep137Warning) # Error reporting for this isn't nearly as good as it could be # (e.g. doesn't separate gbpdistro vs. targets, nor provide # origin), but rushing this implementation a bit. try: if not type(targets_data) == dict: raise InvalidData('targets data must be a dict') if not type(gbpdistro_data) == dict: raise InvalidData('gbpdistro data must be a dictionary') if gbpdistro_data['type'] != 'gbp': raise InvalidData('gbpdistro must be of type "gbp"') # compute the default target data for the release_name release_name = gbpdistro_data['release-name'] if release_name not in targets_data: raise InvalidData('targets file does not contain information ' 'for release [%s]' % (release_name)) else: # take the first match target_data = targets_data[release_name] # compute the rosdep data for each repo rosdep_data = {} gbp_repos = gbpdistro_data['repositories'] # Ensure gbp_repos is a dict if type(gbp_repos) != dict: raise InvalidData('invalid repo spec in gbpdistro data: ' + str(gbp_repos) + '. Invalid repositories entry, must be dict.') for rosdep_key, repo in gbp_repos.items(): if type(repo) != dict: raise InvalidData('invalid repo spec in gbpdistro data: ' + str(repo)) for pkg in repo.get('packages', {rosdep_key: None}): rosdep_data[pkg] = {} # for pkg in repo['packages']: indent the rest of the lines here. # Do generation for ubuntu rosdep_data[pkg][OS_UBUNTU] = {} # Do generation for empty OS X entries homebrew_name = '%s/%s/%s' % (get_owner_name(url), release_name, rosdep_key) rosdep_data[pkg][OS_OSX] = { BREW_INSTALLER: {'packages': [homebrew_name]} } # - debian package name: underscores must be dashes deb_package_name = 'ros-%s-%s' % (release_name, pkg) deb_package_name = deb_package_name.replace('_', '-') repo_targets = repo['target'] if 'target' in repo else 'all' if repo_targets == 'all': repo_targets = target_data for t in repo_targets: if not isinstance(t, basestring): raise InvalidData('invalid target spec: %s' % (t)) # rosdep_data[pkg][OS_UBUNTU][t] = { rosdep_data[pkg][OS_UBUNTU][t] = { APT_INSTALLER: {'packages': [deb_package_name]} } rosdep_data[pkg]['_is_ros'] = True return rosdep_data except KeyError as e: raise InvalidData('Invalid GBP-distro/targets format: missing key: ' + str(e)) # REP137 compliant def get_gbprepo_as_rosdep_data(gbpdistro): """ :raises: :exc:`InvalidData` """ distro_file = get_release_file(gbpdistro) ctx = create_default_installer_context() release_name = gbpdistro rosdep_data = {} default_installers = {} gbp_repos = distro_file.repositories for rosdep_key, repo in gbp_repos.items(): for pkg in repo.package_names: rosdep_data[pkg] = {} # following rosdep pull #17, use env var instead of github organization name tap = os.environ.get('ROSDEP_HOMEBREW_TAP', 'ros') # Do generation for empty OS X entries homebrew_name = '%s/%s/%s' % (tap, release_name, rosdep_key) rosdep_data[pkg][OS_OSX] = { BREW_INSTALLER: {'packages': [homebrew_name]} } # - package name: underscores must be dashes package_name = 'ros-%s-%s' % (release_name, pkg) package_name = package_name.replace('_', '-') for os_name in distro_file.platforms: if os_name not in rosdep_data[pkg]: rosdep_data[pkg][os_name] = {} if os_name not in default_installers: default_installers[os_name] = ctx.get_default_os_installer_key(os_name) for os_code_name in distro_file.platforms[os_name]: rosdep_data[pkg][os_name][os_code_name] = { default_installers[os_name]: {'packages': [package_name]} } rosdep_data[pkg]['_is_ros'] = True return rosdep_data def download_gbpdistro_as_rosdep_data(gbpdistro_url, targets_url=None): """ Download gbpdistro file from web and convert format to rosdep distro data. DEPRECATED: see REP137. This function will output (at least) one deprecation warning :param gbpdistro_url: url of gbpdistro file, ``str`` :param target_url: override URL of platform targets file :raises: :exc:`DownloadFailure` :raises: :exc:`InvalidData` If targets file does not pass cursory validation checks. """ # we can convert a gbpdistro file into rosdep data by following a # couple rules # will output a warning targets_data = download_targets_data(targets_url=targets_url) try: f = urlopen(gbpdistro_url, timeout=DOWNLOAD_TIMEOUT) text = f.read() f.close() gbpdistro_data = yaml.safe_load(text) # will output a warning return gbprepo_to_rosdep_data(gbpdistro_data, targets_data, gbpdistro_url) except Exception as e: raise DownloadFailure('Failed to download target platform data ' 'for gbpdistro:\n\t' + str(e)) rosdep-0.21.0/src/rosdep2/install.py000066400000000000000000000046721406544147500172760ustar00rootroot00000000000000# Copyright (c) 2011, Willow Garage, Inc. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # # * Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # * Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # * Neither the name of the Willow Garage, Inc. nor the names of its # contributors may be used to endorse or promote products derived from # this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. """ Script for installing rdmanifest-described resources """ from __future__ import print_function import os import sys from optparse import OptionParser from rosdep2 import InstallFailed from rosdep2.platforms import source NAME = 'rosdep-source' def install_main(): parser = OptionParser(usage="usage: %prog install ", prog=NAME) options, args = parser.parse_args() if len(args) != 2: parser.error("please specify one and only one rdmanifest url") if args[0] != 'install': parser.error("currently only support the 'install' command") rdmanifest_url = args[1] try: if os.path.isfile(rdmanifest_url): source.install_from_file(rdmanifest_url) else: source.install_from_url(rdmanifest_url) except InstallFailed as e: print("ERROR: installation failed:\n%s" % e, file=sys.stderr) sys.exit(1) rosdep-0.21.0/src/rosdep2/installers.py000066400000000000000000000614661406544147500200140ustar00rootroot00000000000000# Copyright (c) 2009, Willow Garage, Inc. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # # * Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # * Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # * Neither the name of the Willow Garage, Inc. nor the names of its # contributors may be used to endorse or promote products derived from # this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. # Author Tully Foote/tfoote@willowgarage.com, Ken Conley/kwc@willowgarage.com from __future__ import print_function import os import subprocess import traceback from rospkg.os_detect import OsDetect from .core import rd_debug, RosdepInternalError, InstallFailed, print_bold, InvalidData # kwc: InstallerContext is basically just a bunch of dictionaries with # defined lookup methods. It really encompasses two facets of a # rosdep configuration: the pluggable nature of installers and # platforms, as well as the resolution of the operating system for a # specific machine. It is possible to decouple those two notions, # though there are some touch points over how this interfaces with the # rospkg.os_detect library, i.e. how platforms can tweak these # detectors and how the higher-level APIs can override them. class InstallerContext(object): """ :class:`InstallerContext` manages the context of execution for rosdep as it relates to the installers, OS detectors, and other extensible APIs. """ def __init__(self, os_detect=None): """ :param os_detect: (optional) :class:`rospkg.os_detect.OsDetect` instance to use for detecting platforms. If `None`, default instance will be used. """ # platform configuration self.installers = {} self.os_installers = {} self.default_os_installer = {} # stores configuration of which value to use for the OS version key (version number or codename) self.os_version_type = {} # OS detection and override if os_detect is None: os_detect = OsDetect() self.os_detect = os_detect self.os_override = None self.verbose = False def set_verbose(self, verbose): self.verbose = verbose def set_os_override(self, os_name, os_version): """ Override the OS detector with *os_name* and *os_version*. See :meth:`InstallerContext.detect_os`. :param os_name: OS name value to use, ``str`` :param os_version: OS version value to use, ``str`` """ if self.verbose: print('overriding OS to [%s:%s]' % (os_name, os_version)) self.os_override = os_name, os_version def get_os_version_type(self, os_name): return self.os_version_type.get(os_name, OsDetect.get_version) def set_os_version_type(self, os_name, version_type): if not hasattr(version_type, '__call__'): raise ValueError('version type should be a method') self.os_version_type[os_name] = version_type def get_os_name_and_version(self): """ Get the OS name and version key to use for resolution and installation. This will be the detected OS name/version unless :meth:`InstallerContext.set_os_override()` has been called. :returns: (os_name, os_version), ``(str, str)`` """ if self.os_override: return self.os_override else: os_name = self.os_detect.get_name() os_key = self.get_os_version_type(os_name) os_version = os_key(self.os_detect) return os_name, os_version def get_os_detect(self): """ :returns os_detect: :class:`OsDetect` instance used for detecting platforms. """ return self.os_detect def set_installer(self, installer_key, installer): """ Set the installer to use for *installer_key*. This will replace any existing installer associated with the key. *installer_key* should be the same key used for the ``rosdep.yaml`` package manager key. If *installer* is ``None``, this will delete any existing associated installer from this context. :param installer_key: key/name to associate with installer, ``str`` :param installer: :class:`Installer` implementation, ``class``. :raises: :exc:`TypeError` if *installer* is not a subclass of :class:`Installer` """ if installer is None: del self.installers[installer_key] return if not isinstance(installer, Installer): raise TypeError('installer must be a instance of Installer') if self.verbose: print('registering installer [%s]' % (installer_key)) self.installers[installer_key] = installer def get_installer(self, installer_key): """ :returns: :class:`Installer` class associated with *installer_key*. :raises: :exc:`KeyError` If not associated installer :raises: :exc:`InstallFailed` If installer cannot produce an install command (e.g. if installer is not installed) """ return self.installers[installer_key] def get_installer_keys(self): """ :returns: list of registered installer keys """ return self.installers.keys() def get_os_keys(self): """ :returns: list of OS keys that have registered with this context, ``[str]`` """ return self.os_installers.keys() def add_os_installer_key(self, os_key, installer_key): """ Register an installer for the specified OS. This will fail with a :exc:`KeyError` if no :class:`Installer` can be found with the associated *installer_key*. :param os_key: Key for OS :param installer_key: Key for installer to add to OS :raises: :exc:`KeyError`: if installer for *installer_key* is not set. """ # validate, will throw KeyError self.get_installer(installer_key) if self.verbose: print('add installer [%s] to OS [%s]' % (installer_key, os_key)) if os_key in self.os_installers: self.os_installers[os_key].append(installer_key) else: self.os_installers[os_key] = [installer_key] def get_os_installer_keys(self, os_key): """ Get list of installer keys registered for the specified OS. These keys can be resolved by calling :meth:`InstallerContext.get_installer`. :param os_key: Key for OS :raises: :exc:`KeyError`: if no information for OS *os_key* is registered. """ if os_key in self.os_installers: return self.os_installers[os_key][:] else: raise KeyError(os_key) def set_default_os_installer_key(self, os_key, installer_key): """ Set the default OS installer to use for OS. :meth:`InstallerContext.add_os_installer` must have previously been called with the same arguments. :param os_key: Key for OS :param installer_key: Key for installer to add to OS :raises: :exc:`KeyError`: if installer for *installer_key* is not set or if OS for *os_key* has no associated installers. """ if os_key not in self.os_installers: raise KeyError('unknown OS: %s' % (os_key)) if not hasattr(installer_key, '__call__'): raise ValueError('version type should be a method') if not installer_key(self.os_detect) in self.os_installers[os_key]: raise KeyError('installer [%s] is not associated with OS [%s]. call add_os_installer_key() first' % (installer_key(self.os_detect), os_key)) if self.verbose: print('set default installer [%s] for OS [%s]' % (installer_key(self.os_detect), os_key,)) self.default_os_installer[os_key] = installer_key def get_default_os_installer_key(self, os_key): """ Get the default OS installer key to use for OS, or ``None`` if there is no default. :param os_key: Key for OS :returns: :class:`Installer` :raises: :exc:`KeyError`: if no information for OS *os_key* is registered. """ if os_key not in self.os_installers: raise KeyError('unknown OS: %s' % (os_key)) try: installer_key = self.default_os_installer[os_key](self.os_detect) if installer_key not in self.os_installers[os_key]: raise KeyError('installer [%s] is not associated with OS [%s]. call add_os_installer_key() first' % (installer_key, os_key)) # validate, will throw KeyError self.get_installer(installer_key) return installer_key except KeyError: return None class Installer(object): """ The :class:`Installer` API is designed around opaque *resolved* parameters. These parameters can be any type of sequence object, but they must obey set arithmetic. They should also implement ``__str__()`` methods so they can be pretty printed. """ def is_installed(self, resolved_item): """ :param resolved: resolved installation item. NOTE: this is a single item, not a list of items like the other APIs, ``opaque``. :returns: ``True`` if all of the *resolved* items are installed on the local system """ raise NotImplementedError('is_installed', resolved_item) def get_install_command(self, resolved, interactive=True, reinstall=False, quiet=False): """ :param resolved: list of resolved installation items, ``[opaque]`` :param interactive: If `False`, disable interactive prompts, e.g. Pass through ``-y`` or equivalant to package manager. :param reinstall: If `True`, install everything even if already installed """ raise NotImplementedError('get_package_install_command', resolved, interactive, reinstall, quiet) def get_depends(self, rosdep_args): """ :returns: list of dependencies on other rosdep keys. Only necessary if the package manager doesn't handle dependencies. """ return [] # Default return empty list def resolve(self, rosdep_args_dict): """ :param rosdep_args_dict: argument dictionary to the rosdep rule for this package manager :returns: [resolutions]. resolved objects should be printable to a user, but are otherwise opaque. """ raise NotImplementedError('Base class resolve', rosdep_args_dict) def unique(self, *resolved_rules): """ Combine the resolved rules into a unique list. This is meant to combine the results of multiple calls to :meth:`PackageManagerInstaller.resolve`. Example:: resolved1 = installer.resolve(args1) resolved2 = installer.resolve(args2) resolved = installer.unique(resolved1, resolved2) :param resolved_rules: resolved arguments. Resolved arguments must all be from this :class:`Installer` instance. """ raise NotImplementedError('Base class unique', resolved_rules) class PackageManagerInstaller(Installer): """ General form of a package manager :class:`Installer` implementation that assumes: - installer rosdep args spec is a list of package names stored with the key "packages" - a detect function exists that can return a list of packages that are installed Also, if *supports_depends* is set to ``True``: - installer rosdep args spec can also include dependency specification with the key "depends" """ def __init__(self, detect_fn, supports_depends=False): """ :param supports_depends: package manager supports dependency key :param detect_fn: function that for a given list of packages determines the list of installed packages. """ self.detect_fn = detect_fn self.supports_depends = supports_depends self.as_root = True self.sudo_command = 'sudo -H' if os.geteuid() != 0 else '' def elevate_priv(self, cmd): """ Prepend *self.sudo_command* to the command if *self.as_root* is ``True``. :param list cmd: list of strings comprising the command :returns: a list of commands """ return (self.sudo_command.split() if self.as_root else []) + cmd def resolve(self, rosdep_args): """ See :meth:`Installer.resolve()` """ packages = None if type(rosdep_args) == dict: packages = rosdep_args.get('packages', []) if isinstance(packages, str): packages = packages.split() elif isinstance(rosdep_args, str): packages = rosdep_args.split(' ') elif type(rosdep_args) == list: packages = rosdep_args else: raise InvalidData('Invalid rosdep args: %s' % (rosdep_args)) return packages def unique(self, *resolved_rules): """ See :meth:`Installer.unique()` """ s = set() for resolved in resolved_rules: s.update(resolved) return sorted(list(s)) def get_packages_to_install(self, resolved, reinstall=False): """ Return a list of packages (out of *resolved*) that still need to get installed. """ if reinstall: return resolved if not resolved: return [] else: detected = self.detect_fn(resolved) return [x for x in resolved if x not in detected] def is_installed(self, resolved_item): """ Check if a given package was installed. """ return not self.get_packages_to_install([resolved_item]) def get_version_strings(self): """ Return a list of version information strings. Where each string is of the form " ". For example, ["apt-get x.y.z"] or ["pip x.y.z", "setuptools x.y.z"]. """ raise NotImplementedError('subclasses must implement get_version_strings method') def get_install_command(self, resolved, interactive=True, reinstall=False, quiet=False): raise NotImplementedError('subclasses must implement', resolved, interactive, reinstall, quiet) def get_depends(self, rosdep_args): """ :returns: list of dependencies on other rosdep keys. Only necessary if the package manager doesn't handle dependencies. """ if self.supports_depends and type(rosdep_args) == dict: return rosdep_args.get('depends', []) return [] # Default return empty list def normalize_uninstalled_to_list(uninstalled): uninstalled_dependencies = [] for pkg_or_list in [v for k, v in uninstalled]: if isinstance(pkg_or_list, list): for pkg in pkg_or_list: uninstalled_dependencies.append(str(pkg)) else: uninstalled_dependencies.append(str(pkg)) return uninstalled_dependencies class RosdepInstaller(object): def __init__(self, installer_context, lookup): self.installer_context = installer_context self.lookup = lookup def get_uninstalled(self, resources, implicit=False, verbose=False): """ Get list of system dependencies that have not been installed as well as a list of errors from performing the resolution. This is a bulk API in order to provide performance optimizations in checking install state. :param resources: List of resource names (e.g. ROS package names), ``[str]]`` :param implicit: Install implicit (recursive) dependencies of resources. Default ``False``. :returns: (uninstalled, errors), ``({str: [opaque]}, {str: ResolutionError})``. Uninstalled is a dictionary with the installer_key as the key. :raises: :exc:`RosdepInternalError` """ installer_context = self.installer_context # resolutions have been unique()d if verbose: print('resolving for resources [%s]' % (', '.join(resources))) resolutions, errors = self.lookup.resolve_all(resources, installer_context, implicit=implicit) # for each installer, figure out what is left to install uninstalled = [] if resolutions == []: return uninstalled, errors for installer_key, resolved in resolutions: # py3k if verbose: print('resolution: %s [%s]' % (installer_key, ', '.join([str(r) for r in resolved]))) try: installer = installer_context.get_installer(installer_key) except KeyError as e: # lookup has to be buggy to cause this raise RosdepInternalError(e) try: packages_to_install = installer.get_packages_to_install(resolved) except Exception as e: rd_debug(traceback.format_exc()) raise RosdepInternalError(e, message='Bad installer [%s]: %s' % (installer_key, e)) # only create key if there is something to do if packages_to_install: uninstalled.append((installer_key, packages_to_install)) if verbose: print('uninstalled: [%s]' % (', '.join([str(p) for p in packages_to_install]))) return uninstalled, errors def install(self, uninstalled, interactive=True, simulate=False, continue_on_error=False, reinstall=False, verbose=False, quiet=False): """ Install the uninstalled rosdeps. This API is for the bulk workflow of rosdep (see example below). For a more targeted install API, see :meth:`RosdepInstaller.install_resolved`. :param uninstalled: uninstalled value from :meth:`RosdepInstaller.get_uninstalled`. Value is a dictionary mapping installer key to a dictionary with resolution data, ``{str: {str: vals}}`` :param interactive: If ``False``, suppress interactive prompts (e.g. by passing '-y' to ``apt``). :param simulate: If ``False`` simulate installation without actually executing. :param continue_on_error: If ``True``, continue installation even if an install fails. Otherwise, stop after first installation failure. :param reinstall: If ``True``, install dependencies if even already installed (default ``False``). :raises: :exc:`InstallFailed` if any rosdeps fail to install and *continue_on_error* is ``False``. :raises: :exc:`KeyError` If *uninstalled* value has invalid installer keys Example:: uninstalled, errors = installer.get_uninstalled(packages) installer.install(uninstalled) """ if verbose: print( 'install options: reinstall[%s] simulate[%s] interactive[%s]' % (reinstall, simulate, interactive) ) uninstalled_list = normalize_uninstalled_to_list(uninstalled) print('install: uninstalled keys are %s' % ', '.join(uninstalled_list)) # Squash uninstalled again, in case some dependencies were already installed squashed_uninstalled = [] previous_installer_key = None for installer_key, resolved in uninstalled: if previous_installer_key != installer_key: squashed_uninstalled.append((installer_key, [])) previous_installer_key = installer_key squashed_uninstalled[-1][1].extend(resolved) failures = [] for installer_key, resolved in squashed_uninstalled: try: self.install_resolved(installer_key, resolved, simulate=simulate, interactive=interactive, reinstall=reinstall, continue_on_error=continue_on_error, verbose=verbose, quiet=quiet) except InstallFailed as e: if not continue_on_error: raise else: # accumulate errors failures.extend(e.failures) if failures: raise InstallFailed(failures=failures) def install_resolved(self, installer_key, resolved, simulate=False, interactive=True, reinstall=False, continue_on_error=False, verbose=False, quiet=False): """ Lower-level API for installing a rosdep dependency. The rosdep keys have already been resolved to *installer_key* and *resolved* via :exc:`RosdepLookup` or other means. :param installer_key: Key for installer to apply to *resolved*, ``str`` :param resolved: Opaque resolution list from :class:`RosdepLookup`. :param interactive: If ``True``, allow interactive prompts (default ``True``) :param simulate: If ``True``, don't execute installation commands, just print to screen. :param reinstall: If ``True``, install dependencies if even already installed (default ``False``). :param verbose: If ``True``, print verbose output to screen (default ``False``) :param quiet: If ``True``, supress output except for errors (default ``False``) :raises: :exc:`InstallFailed` if any of *resolved* fail to install. """ installer_context = self.installer_context installer = installer_context.get_installer(installer_key) command = installer.get_install_command(resolved, interactive=interactive, reinstall=reinstall, quiet=quiet) if not command: if verbose: print('#No packages to install') return if simulate: print('#[%s] Installation commands:' % (installer_key)) for sub_command in command: if isinstance(sub_command[0], list): sub_cmd_len = len(sub_command) for i, cmd in enumerate(sub_command): print(" '%s' (alternative %d/%d)" % (' '.join(cmd), i + 1, sub_cmd_len)) else: print(' ' + ' '.join(sub_command)) # nothing left to do for simulation if simulate: return def run_command(command, installer_key, failures, verbose): # always echo commands to screen print_bold('executing command [%s]' % ' '.join(command)) result = subprocess.call(command) if verbose: print('command return code [%s]: %s' % (' '.join(command), result)) if result != 0: failures.append((installer_key, 'command [%s] failed' % (' '.join(command)))) return result # run each install command set and collect errors failures = [] for sub_command in command: if isinstance(sub_command[0], list): # list of alternatives alt_failures = [] for alt_command in sub_command: result = run_command(alt_command, installer_key, alt_failures, verbose) if result == 0: # one successsfull command is sufficient alt_failures = [] # clear failuers from other alternatives break failures.extend(alt_failures) else: result = run_command(sub_command, installer_key, failures, verbose) if result != 0: if not continue_on_error: raise InstallFailed(failures=failures) # test installation of each for r in resolved: if not installer.is_installed(r): failures.append((installer_key, 'Failed to detect successful installation of [%s]' % (r))) # finalize result if failures: raise InstallFailed(failures=failures) elif verbose: print('#successfully installed') rosdep-0.21.0/src/rosdep2/loader.py000066400000000000000000000076511406544147500170760ustar00rootroot00000000000000# Copyright (c) 2011, Willow Garage, Inc. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # # * Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # * Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # * Neither the name of the Willow Garage, Inc. nor the names of its # contributors may be used to endorse or promote products derived from # this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. # Author Ken Conley/kwc@willowgarage.com """ Base API for loading rosdep information by package or stack name. This API is decoupled from the ROS packaging system to enable multiple implementations of rosdep, including ones that don't rely on the ROS packaging system. This is necessary, for example, to implement a version of rosdep that works against tarballs of released stacks. """ import yaml from .core import InvalidData ROSDEP_YAML = 'rosdep.yaml' class RosdepLoader: """ Base API for loading rosdep information by package or stack name. """ def load_rosdep_yaml(self, yaml_contents, origin): """ Utility routine for unmarshalling rosdep data encoded as YAML. :param origin: origin of yaml contents (for error messages) :raises: :exc:`yaml.YAMLError` """ try: return yaml.safe_load(yaml_contents) except yaml.YAMLError as e: raise InvalidData('Invalid YAML in [%s]: %s' % (origin, e), origin=origin) def load_view(self, view_name, rosdep_db, verbose=False): """ Load view data into rosdep_db. If the view has already been loaded into rosdep_db, this method does nothing. :param view_name: name of ROS stack to load, ``str`` :param rosdep_db: database to load stack data into, :class:`RosdepDatabase` :raises: :exc:`InvalidData` :raises: :exc:`rospkg.ResourceNotFound` if view cannot be located """ raise NotImplementedError(view_name, rosdep_db, verbose) # pychecker def get_loadable_resources(self): raise NotImplementedError() def get_loadable_views(self): raise NotImplementedError() def get_rosdeps(self, resource_name, implicit=True): """ :raises: :exc:`rospkg.ResourceNotFound` if *resource_name* cannot be found. """ raise NotImplementedError(resource_name, implicit) # pychecker def get_view_key(self, resource_name): """ Map *resource_name* to a view key. In rospkg, this maps a ROS package name to a ROS stack name. If *resource_name* is a ROS stack name, it returns the ROS stack name. :returns: Name of view that *resource_name* is in, ``None`` if no associated view. :raises: :exc:`rospkg.ResourceNotFound` if *resource_name* cannot be found. """ raise NotImplementedError(resource_name) rosdep-0.21.0/src/rosdep2/lookup.py000066400000000000000000000702511406544147500171350ustar00rootroot00000000000000# Copyright (c) 2011, Willow Garage, Inc. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # # * Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # * Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # * Neither the name of the Willow Garage, Inc. nor the names of its # contributors may be used to endorse or promote products derived from # this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. # Author Tully Foote/tfoote@willowgarage.com, Ken Conley/kwc@willowgarage.com from __future__ import print_function import sys import yaml from collections import defaultdict from rospkg import RosPack, RosStack, ResourceNotFound from .core import RosdepInternalError, InvalidData, rd_debug from .model import RosdepDatabase from .rospkg_loader import RosPkgLoader from .dependency_graph import DependencyGraph from .sources_list import SourcesListLoader from . import catkin_packages class RosdepDefinition(object): """ Single rosdep dependency definition. This data is stored as the raw dictionary definition for the dependency. See REP 111, 'Multiple Package Manager Support for Rosdep' for a discussion of this raw format. """ def __init__(self, rosdep_key, data, origin=''): """ :param rosdep_key: key/name of rosdep dependency :param data: raw rosdep data for a single rosdep dependency, ``dict`` :param origin: string that indicates where data originates from (e.g. filename) """ self.rosdep_key = rosdep_key if not isinstance(data, dict): raise InvalidData('rosdep data for [%s] must be a dictionary' % (self.rosdep_key), origin=origin) self.data = data self.origin = origin def reverse_merge(self, new_data, origin='', verbose=False): """ Merge two definitions together, with existing rules taking precendence. Definitions are merged at the os_name level, meaning that if two rules exist with the same os_name, the first one wins. :param data: raw rosdep data for a single rosdep dependency, ``dict`` :param origin: string that indicates where this new data comes from (e.g. filename) """ for os_name, rules in new_data.items(): if os_name not in self.data: if verbose: print('[%s] adding rules for os [%s] to [%s]' % (origin, os_name, self.rosdep_key), file=sys.stderr) self.data[os_name] = rules elif verbose: print('[%s] ignoring [%s] for os [%s], already loaded' % (origin, self.rosdep_key, os_name), file=sys.stderr) def get_rule_for_platform(self, os_name, os_version, installer_keys, default_installer_key): """ Get installer_key and rule for the specified rule. See REP 111 for precedence rules. :param os_name: OS name to get rule for :param os_version: OS version to get rule for :param installer_keys: Keys of installers for platform, ``[str]`` :param default_installer_key: Default installer key for platform, ``[str]`` :returns: (installer_key, rosdep_args_dict), ``(str, dict)`` :raises: :exc:`ResolutionError` If no rule is available :raises: :exc:`InvalidData` If rule data is not valid """ rosdep_key = self.rosdep_key data = self.data if type(data) != dict: raise InvalidData('rosdep value for [%s] must be a dictionary' % (self.rosdep_key), origin=self.origin) if os_name not in data: raise ResolutionError(rosdep_key, data, os_name, os_version, 'No definition of [%s] for OS [%s]' % (rosdep_key, os_name)) data = data[os_name] return_key = default_installer_key # REP 111: rosdep first interprets the key as a # PACKAGE_MANAGER. If this test fails, it will be interpreted # as an OS_VERSION_CODENAME. if type(data) == dict: for installer_key in installer_keys: if installer_key in data: data = data[installer_key] return_key = installer_key break else: # data must be a dictionary, string, or list if type(data) == dict: # check for # hardy: # apt: # stuff # we've already checked for PACKAGE_MANAGER_KEY, so # version key must be present here for data to be valid # dictionary value. # if the os_version is not defined and there is no wildcard if os_version not in data and '*' not in data: raise ResolutionError(rosdep_key, self.data, os_name, os_version, 'No definition of [%s] for OS version [%s]' % (rosdep_key, os_version)) # if the os_version has the value None if os_version in data and data[os_version] is None: raise ResolutionError(rosdep_key, self.data, os_name, os_version, '[%s] defined as "not available" for OS version [%s]' % (rosdep_key, os_version)) # if os version is not defined (and there is a wildcard) fallback to the wildcard if os_version not in data: os_version = '*' data = data[os_version] if type(data) == dict: for installer_key in installer_keys: if installer_key in data: data = data[installer_key] return_key = installer_key break # Check if the rule is null if data is None: raise ResolutionError(rosdep_key, self.data, os_name, os_version, '[%s] defined as "not available" for OS version [%s]' % (rosdep_key, os_version)) if type(data) not in (dict, list, type('str')): raise InvalidData('rosdep OS definition for [%s:%s] must be a dictionary, string, or list: %s' % (self.rosdep_key, os_name, data), origin=self.origin) return return_key, data def __str__(self): return '%s:\n%s' % (self.origin, yaml.dump(self.data, default_flow_style=False)) class ResolutionError(Exception): def __init__(self, rosdep_key, rosdep_data, os_name, os_version, message): self.rosdep_key = rosdep_key self.rosdep_data = rosdep_data self.os_name = os_name self.os_version = os_version super(ResolutionError, self).__init__(message) def __str__(self): if self.rosdep_data: pretty_data = yaml.dump(self.rosdep_data, default_flow_style=False) else: pretty_data = '' return """%s \trosdep key : %s \tOS name : %s \tOS version : %s \tData:\n%s""" % (self.args[0], self.rosdep_key, self.os_name, self.os_version, pretty_data.replace('\n', '\n\t\t')) class RosdepView(object): """ View of :class:`RosdepDatabase`. Unlike :class:`RosdepDatabase`, which stores :class:`RosdepDatabaseEntry` data for all stacks, a view merges entries for a particular stack. This view can then be queried to lookup and resolve individual rosdep dependencies. """ def __init__(self, name): self.name = name self.rosdep_defs = {} # {str: RosdepDefinition} def __str__(self): return '\n'.join(['%s: %s' % val for val in self.rosdep_defs.items()]) def lookup(self, rosdep_name): """ :returns: :class:`RosdepDefinition` :raises: :exc:`KeyError` If *rosdep_name* is not declared """ return self.rosdep_defs[rosdep_name] def keys(self): """ :returns: list of rosdep names in this view """ return self.rosdep_defs.keys() def merge(self, update_entry, override=False, verbose=False): """ Merge rosdep database update into main database. Merge rules are first entry to declare a key wins. There are no conflicts. This rule logic is modelled after the apt sources list. :param override: Ignore first-one-wins rules and instead always use rules from update_entry """ if verbose: print('view[%s]: merging from cache of [%s]' % (self.name, update_entry.origin)) db = self.rosdep_defs for dep_name, dep_data in update_entry.rosdep_data.items(): # convert data into RosdepDefinition model update_definition = RosdepDefinition(dep_name, dep_data, update_entry.origin) # First rule wins or override, no rule-merging. if override or dep_name not in db: db[dep_name] = update_definition elif dep_name in db: db[dep_name].reverse_merge(dep_data, update_entry.origin, verbose=verbose) def prune_catkin_packages(rosdep_keys, verbose=False): workspace_pkgs = catkin_packages.get_workspace_packages() if not workspace_pkgs: return rosdep_keys for i, rosdep_key in reversed(list(enumerate(rosdep_keys))): if rosdep_key in workspace_pkgs: # If workspace packages listed (--catkin-workspace) # and if the rosdep_key is a package in that # workspace, then skip it rather than resolve it if verbose: print("rosdep key '{0}'".format(rosdep_key) + ' is in the catkin workspace, skipping.', file=sys.stderr) del rosdep_keys[i] return rosdep_keys def prune_skipped_packages(rosdep_keys, skipped_keys, verbose=False): if not skipped_keys: return rosdep_keys for i, rosdep_key in reversed(list(enumerate(rosdep_keys))): if rosdep_key in skipped_keys: # If the key is in the list of keys to explicitly skip, skip it if verbose: print("rosdep key '{0}'".format(rosdep_key) + ' was listed in the skipped packages, skipping.', file=sys.stderr) del rosdep_keys[i] return rosdep_keys class RosdepLookup(object): """ Lookup rosdep definitions. Provides API for most non-install-related commands for rosdep. :class:`RosdepLookup` caches data as it is loaded, so changes made on the filesystem will not be reflected if the rosdep information has already been loaded. """ def __init__(self, rosdep_db, loader): """ :param loader: Loader to use for loading rosdep data by stack name, ``RosdepLoader`` :param rosdep_db: Database to load definitions into, :class:`RosdepDatabase` """ self.rosdep_db = rosdep_db self.loader = loader self._view_cache = {} # {str: {RosdepView}} self._resolve_cache = {} # {str : (os_name, os_version, installer_key, resolution, dependencies)} # some APIs that deal with the entire environment save errors # in to self.errors instead of raising them in order to be # robust to single-stack faults. self.errors = [] # flag for turning on printing to console self.verbose = False self.skipped_keys = [] def get_loader(self): return self.loader def get_errors(self): """ Retrieve error state for API calls that do not directly report error state. This is the case for APIs like :meth:`RosdepLookup.where_defined` that are meant to be fault-tolerant to single-stack failures. :returns: List of exceptions, ``[Exception]`` """ return self.errors[:] def get_rosdeps(self, resource_name, implicit=True): """ Get rosdeps that *resource_name* (e.g. package) requires. :param implicit: If ``True``, include implicit rosdep dependencies. Default: ``True``. :returns: list of rosdep names, ``[str]`` """ return self.loader.get_rosdeps(resource_name, implicit=implicit) def get_resources_that_need(self, rosdep_name): """ :param rosdep_name: name of rosdep dependency :returns: list of package names that require rosdep, ``[str]`` """ return [k for k in self.loader.get_loadable_resources() if rosdep_name in self.get_rosdeps(k, implicit=False)] @staticmethod def create_from_rospkg(rospack=None, rosstack=None, sources_loader=None, verbose=False, dependency_types=None): """ Create :class:`RosdepLookup` based on current ROS package environment. :param rospack: (optional) Override :class:`rospkg.RosPack` instance used to crawl ROS packages. :param rosstack: (optional) Override :class:`rospkg.RosStack` instance used to crawl ROS stacks. :param sources_loader: (optional) Override SourcesLoader used for managing sources.list data sources. :param dependency_types: (optional) List of dependency types. Allowed: {'build', 'buildtool', 'build_export', 'buildtool_export', 'exec', 'test', 'doc'} """ # initialize the loader if rospack is None: rospack = RosPack() if rosstack is None: rosstack = RosStack() if sources_loader is None: sources_loader = SourcesListLoader.create_default(verbose=verbose) if dependency_types is None: dependency_types = [] rosdep_db = RosdepDatabase() # Use sources list to initialize rosdep_db. Underlay has no # notion of specific resources, and its view keys are just the # individual sources it can load from. SourcesListLoader # cannot do delayed evaluation of OS setting due to matcher. underlay_key = SourcesListLoader.ALL_VIEW_KEY # Create the rospkg loader on top of the underlay loader = RosPkgLoader(rospack=rospack, rosstack=rosstack, underlay_key=underlay_key, dependency_types=dependency_types) # create our actual instance lookup = RosdepLookup(rosdep_db, loader) # load in the underlay lookup._load_all_views(loader=sources_loader) # use dependencies to implement precedence view_dependencies = sources_loader.get_loadable_views() rosdep_db.set_view_data(underlay_key, {}, view_dependencies, underlay_key) return lookup def resolve_all(self, resources, installer_context, implicit=False): """ Resolve all the rosdep dependencies for *resources* using *installer_context*. :param resources: list of resources (e.g. packages), ``[str]`` :param installer_context: :class:`InstallerContext` :param implicit: Install implicit (recursive) dependencies of resources. Default ``False``. :returns: (resolutions, errors), ``([(str, [str])], {str: ResolutionError})``. resolutions provides an ordered list of resolution tuples. A resolution tuple's first element is the installer key (e.g.: apt or homebrew) and the second element is a list of opaque resolution values for that installer. errors maps package names to an :exc:`ResolutionError` or :exc:`KeyError` exception. :raises: :exc:`RosdepInternalError` if unexpected error in constructing dependency graph :raises: :exc:`InvalidData` if a cycle occurs in constructing dependency graph """ depend_graph = DependencyGraph() errors = {} # TODO: resolutions dictionary should be replaced with resolution model instead of mapping (undefined) keys. for resource_name in resources: try: rosdep_keys = self.get_rosdeps(resource_name, implicit=implicit) if self.verbose: print('resolve_all: resource [%s] requires rosdep keys [%s]' % (resource_name, ', '.join(rosdep_keys)), file=sys.stderr) rosdep_keys = prune_catkin_packages(rosdep_keys, self.verbose) rosdep_keys = prune_skipped_packages(rosdep_keys, self.skipped_keys, self.verbose) for rosdep_key in rosdep_keys: try: installer_key, resolution, dependencies = \ self.resolve(rosdep_key, resource_name, installer_context) depend_graph[rosdep_key]['installer_key'] = installer_key depend_graph[rosdep_key]['install_keys'] = list(resolution) depend_graph[rosdep_key]['dependencies'] = list(dependencies) while dependencies: depend_rosdep_key = dependencies.pop() # prevent infinite loop if depend_rosdep_key in depend_graph: continue installer_key, resolution, more_dependencies = \ self.resolve(depend_rosdep_key, resource_name, installer_context) dependencies.extend(more_dependencies) depend_graph[depend_rosdep_key]['installer_key'] = installer_key depend_graph[depend_rosdep_key]['install_keys'] = list(resolution) depend_graph[depend_rosdep_key]['dependencies'] = list(more_dependencies) except ResolutionError as e: errors[resource_name] = e except ResourceNotFound as e: errors[resource_name] = e try: # TODO: I really don't like AssertionErrors here; this should be modeled as 'CyclicGraphError' # or something more explicit. No need to continue if this API errors. resolutions_flat = depend_graph.get_ordered_dependency_list() except AssertionError as e: raise InvalidData('cycle in dependency graph detected: %s' % (e)) except KeyError as e: raise RosdepInternalError(e) return resolutions_flat, errors def resolve(self, rosdep_key, resource_name, installer_context): """ Resolve a :class:`RosdepDefinition` for a particular os/version spec. :param resource_name: resource (e.g. ROS package) to resolve key within :param rosdep_key: rosdep key to resolve :param os_name: OS name to use for resolution :param os_version: OS name to use for resolution :returns: *(installer_key, resolution, dependencies)*, ``(str, [opaque], [str])``. *resolution* are the system dependencies for the specified installer. The value is an opaque list and meant to be interpreted by the installer. *dependencies* is a list of rosdep keys that the definition depends on. :raises: :exc:`ResolutionError` If *rosdep_key* cannot be resolved for *resource_name* in *installer_context* :raises: :exc:`rospkg.ResourceNotFound` if *resource_name* cannot be located """ os_name, os_version = installer_context.get_os_name_and_version() view = self.get_rosdep_view_for_resource(resource_name) if view is None: raise ResolutionError(rosdep_key, None, os_name, os_version, '[%s] does not have a rosdep view' % (resource_name)) try: # print("KEYS", view.rosdep_defs.keys()) definition = view.lookup(rosdep_key) except KeyError: rd_debug(view) raise ResolutionError(rosdep_key, None, os_name, os_version, 'Cannot locate rosdep definition for [%s]' % (rosdep_key)) # check cache: the main motivation for the cache is that # source rosdeps are expensive to resolve if rosdep_key in self._resolve_cache: cache_value = self._resolve_cache[rosdep_key] cache_os_name = cache_value[0] cache_os_version = cache_value[1] cache_view_name = cache_value[2] if ( cache_os_name == os_name and cache_os_version == os_version and cache_view_name == view.name ): return cache_value[3:] # get the rosdep data for the platform try: installer_keys = installer_context.get_os_installer_keys(os_name) default_key = installer_context.get_default_os_installer_key(os_name) except KeyError: raise ResolutionError(rosdep_key, definition.data, os_name, os_version, 'Unsupported OS [%s]' % (os_name)) installer_key, rosdep_args_dict = definition.get_rule_for_platform(os_name, os_version, installer_keys, default_key) # resolve the rosdep data for the platform try: installer = installer_context.get_installer(installer_key) except KeyError: raise ResolutionError(rosdep_key, definition.data, os_name, os_version, 'Unsupported installer [%s]' % (installer_key)) resolution = installer.resolve(rosdep_args_dict) dependencies = installer.get_depends(rosdep_args_dict) # cache value # the dependencies list is copied to prevent mutation before next cache hit self._resolve_cache[rosdep_key] = os_name, os_version, view.name, installer_key, resolution, list(dependencies) return installer_key, resolution, dependencies def _load_all_views(self, loader): """ Load all available view keys. In general, this is equivalent to loading all stacks on the package path. If :exc:`InvalidData` errors occur while loading a view, they will be saved in the *errors* field. :param loader: override self.loader :raises: :exc:`RosdepInternalError` """ for resource_name in loader.get_loadable_views(): try: self._load_view_dependencies(resource_name, loader) except ResourceNotFound as e: self.errors.append(e) except InvalidData as e: self.errors.append(e) def _load_view_dependencies(self, view_key, loader): """ Initialize internal :exc:`RosdepDatabase` on demand. Not thread-safe. :param view_key: name of view to load dependencies for. :raises: :exc:`rospkg.ResourceNotFound` If view cannot be located :raises: :exc:`InvalidData` if view's data is invaid :raises: :exc:`RosdepInternalError` """ rd_debug('_load_view_dependencies[%s]' % (view_key)) db = self.rosdep_db if db.is_loaded(view_key): return try: loader.load_view(view_key, db, verbose=self.verbose) entry = db.get_view_data(view_key) rd_debug('_load_view_dependencies[%s]: %s' % (view_key, entry.view_dependencies)) for d in entry.view_dependencies: self._load_view_dependencies(d, loader) except InvalidData: # mark view as loaded: as we are caching, the valid # behavior is to not attempt loading this view ever # again. db.mark_loaded(view_key) # re-raise raise except KeyError as e: raise RosdepInternalError(e) def create_rosdep_view(self, view_name, view_keys, verbose=False): """ :param view_name: name of view to create :param view_keys: order list of view names to merge, first one wins :param verbose: print debugging output """ # Create view and initialize with dbs from all of the # dependencies. view = RosdepView(view_name) db = self.rosdep_db for view_key in view_keys: db_entry = db.get_view_data(view_key) view.merge(db_entry, verbose=verbose) if verbose: print('View [%s], merged views:\n' % (view_name) + '\n'.join([' * %s' % view_key for view_key in view_keys]), file=sys.stderr) return view def get_rosdep_view_for_resource(self, resource_name, verbose=False): """ Get a :class:`RosdepView` for a specific ROS resource *resource_name*. Views can be queries to resolve rosdep keys to definitions. :param resource_name: Name of ROS resource (e.g. stack, package) to create view for, ``str``. :returns: :class:`RosdepView` for specific ROS resource *resource_name*, or ``None`` if no view is associated with this resource. :raises: :exc:`RosdepConflict` if view cannot be created due to conflict rosdep definitions. :raises: :exc:`rospkg.ResourceNotFound` if *view_key* cannot be located :raises: :exc:`RosdepInternalError` """ view_key = self.loader.get_view_key(resource_name) if not view_key: # NOTE: this may not be the right behavior and this happens # for packages that are not in a stack. return None return self.get_rosdep_view(view_key, verbose=verbose) def get_rosdep_view(self, view_key, verbose=False): """ Get a :class:`RosdepView` associated with *view_key*. Views can be queries to resolve rosdep keys to definitions. :param view_key: Name of rosdep view (e.g. ROS stack name), ``str`` :raises: :exc:`RosdepConflict` if view cannot be created due to conflict rosdep definitions. :raises: :exc:`rospkg.ResourceNotFound` if *view_key* cannot be located :raises: :exc:`RosdepInternalError` """ if view_key in self._view_cache: return self._view_cache[view_key] # lazy-init self._load_view_dependencies(view_key, self.loader) # use dependencies to create view try: dependencies = self.rosdep_db.get_view_dependencies(view_key) except KeyError as e: # convert to ResourceNotFound. This should be decoupled # in the future raise ResourceNotFound(str(e.args[0])) # load views in order view = self.create_rosdep_view(view_key, dependencies + [view_key], verbose=verbose) self._view_cache[view_key] = view return view def get_views_that_define(self, rosdep_name): """ Locate all views that directly define *rosdep_name*. A side-effect of this method is that all available rosdep files in the configuration will be loaded into memory. Error state from single-stack failures (e.g. :exc:`InvalidData`, :exc:`ResourceNotFound`) are not propagated. Caller must check :meth:`RosdepLookup.get_errors` to check for single-stack error state. Error state does not reset -- it accumulates. :param rosdep_name: name of rosdep to lookup :returns: list of (stack_name, origin) where rosdep is defined. :raises: :exc:`RosdepInternalError` """ # TODOXXX: change this to return errors object so that caller cannot ignore self._load_all_views(self.loader) db = self.rosdep_db retval = [] for view_name in db.get_view_names(): entry = db.get_view_data(view_name) # not much abstraction in the entry object if rosdep_name in entry.rosdep_data: retval.append((view_name, entry.origin)) return retval rosdep-0.21.0/src/rosdep2/main.py000066400000000000000000001156021406544147500165500ustar00rootroot00000000000000# Copyright (c) 2009, Willow Garage, Inc. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # # * Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # * Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # * Neither the name of the Willow Garage, Inc. nor the names of its # contributors may be used to endorse or promote products derived from # this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. # Author Tully Foote/tfoote@willowgarage.com """ Command-line interface to rosdep library """ from __future__ import print_function import errno import os import sys import traceback try: from urllib.error import URLError from urllib.request import build_opener from urllib.request import HTTPBasicAuthHandler from urllib.request import HTTPHandler from urllib.request import install_opener from urllib.request import ProxyHandler except ImportError: from urllib2 import build_opener from urllib2 import HTTPBasicAuthHandler from urllib2 import HTTPHandler from urllib2 import install_opener from urllib2 import ProxyHandler from urllib2 import URLError import warnings from optparse import OptionParser import rospkg from . import create_default_installer_context, get_default_installer from . import __version__ from .core import RosdepInternalError, InstallFailed, UnsupportedOs, InvalidData, CachePermissionError, DownloadFailure from .installers import normalize_uninstalled_to_list from .installers import RosdepInstaller from .lookup import RosdepLookup, ResolutionError, prune_catkin_packages from .meta import MetaDatabase from .rospkg_loader import DEFAULT_VIEW_KEY from .sources_list import update_sources_list, get_sources_cache_dir,\ download_default_sources_list, SourcesListLoader, CACHE_INDEX,\ get_sources_list_dir, get_default_sources_list_file,\ DEFAULT_SOURCES_LIST_URL from .rosdistrohelper import PreRep137Warning from .ament_packages import AMENT_PREFIX_PATH_ENV_VAR from .ament_packages import get_packages_with_prefixes from .catkin_packages import find_catkin_packages_in from .catkin_packages import set_workspace_packages from .catkin_packages import get_workspace_packages from .catkin_packages import VALID_DEPENDENCY_TYPES from catkin_pkg.package import InvalidPackage class UsageError(Exception): pass _usage = """usage: rosdep [options] Commands: rosdep check ... check if the dependencies of package(s) have been met. rosdep install ... download and install the dependencies of a given package or packages. rosdep db generate the dependency database and print it to the console. rosdep init initialize rosdep sources in /etc/ros/rosdep. May require sudo. rosdep keys ... list the rosdep keys that the packages depend on. rosdep resolve resolve to system dependencies rosdep update update the local rosdep database based on the rosdep sources. rosdep what-needs ... print a list of packages that declare a rosdep on (at least one of) rosdep where-defined ... print a list of yaml files that declare a rosdep on (at least one of) rosdep fix-permissions Recursively change the permissions of the user's ros home directory. May require sudo. Can be useful to fix permissions after calling "rosdep update" with sudo accidentally. """ def _get_default_RosdepLookup(options): """ Helper routine for converting command-line options into appropriate RosdepLookup instance. """ os_override = convert_os_override_option(options.os_override) sources_loader = SourcesListLoader.create_default(sources_cache_dir=options.sources_cache_dir, os_override=os_override, verbose=options.verbose) lookup = RosdepLookup.create_from_rospkg(sources_loader=sources_loader, dependency_types=options.dependency_types) lookup.verbose = options.verbose return lookup def rosdep_main(args=None): if args is None: args = sys.argv[1:] try: exit_code = _rosdep_main(args) if exit_code not in [0, None]: sys.exit(exit_code) except rospkg.ResourceNotFound as e: print(""" ERROR: Rosdep cannot find all required resources to answer your query %s """ % (error_to_human_readable(e)), file=sys.stderr) sys.exit(1) except UsageError as e: print(_usage, file=sys.stderr) print('ERROR: %s' % (str(e)), file=sys.stderr) sys.exit(os.EX_USAGE) except RosdepInternalError as e: print(""" ERROR: Rosdep experienced an internal error. Please go to the rosdep page [1] and file a bug report with the message below. [1] : http://www.ros.org/wiki/rosdep rosdep version: %s %s """ % (__version__, e.message), file=sys.stderr) sys.exit(1) except ResolutionError as e: print(""" ERROR: %s %s """ % (e.args[0], e), file=sys.stderr) sys.exit(1) except CachePermissionError as e: print(str(e)) print("Try running 'sudo rosdep fix-permissions'") sys.exit(1) except UnsupportedOs as e: print('Unsupported OS: %s\nSupported OSes are [%s]' % (e.args[0], ', '.join(e.args[1])), file=sys.stderr) sys.exit(1) except InvalidPackage as e: print(str(e)) sys.exit(1) except Exception as e: print(""" ERROR: Rosdep experienced an error: %s Please go to the rosdep page [1] and file a bug report with the stack trace below. [1] : http://www.ros.org/wiki/rosdep rosdep version: %s %s """ % (e, __version__, traceback.format_exc()), file=sys.stderr) sys.exit(1) def check_for_sources_list_init(sources_cache_dir): """ Check to see if sources list and cache are present. *sources_cache_dir* alone is enough to pass as the user has the option of passing in a cache dir. If check fails, tell user how to resolve and sys exit. """ commands = [] filename = os.path.join(sources_cache_dir, CACHE_INDEX) if os.path.exists(filename): return else: commands.append('rosdep update') sources_list_dir = get_sources_list_dir() if not os.path.exists(sources_list_dir): commands.insert(0, 'sudo rosdep init') else: filelist = [f for f in os.listdir(sources_list_dir) if f.endswith('.list')] if not filelist: commands.insert(0, 'sudo rosdep init') if commands: commands = '\n'.join([' %s' % c for c in commands]) print(""" ERROR: your rosdep installation has not been initialized yet. Please run: %s """ % (commands), file=sys.stderr) sys.exit(1) else: return True def key_list_to_dict(key_list): """ Convert a list of strings of the form 'foo:bar' to a dictionary. Splits strings of the form 'foo:bar quux:quax' into separate entries. """ try: key_list = [key for s in key_list for key in s.split(' ')] return dict(map(lambda s: [t.strip() for t in s.split(':')], key_list)) except ValueError as e: raise UsageError("Invalid 'key:value' list: '%s'" % ' '.join(key_list)) def str_to_bool(s): """Maps a string to bool. Supports true/false, and yes/no, and is case-insensitive""" s = s.lower() if s in ['yes', 'true']: return True elif s in ['no', 'false']: return False else: raise UsageError("Cannot parse '%s' as boolean" % s) def setup_proxy_opener(): # check for http[s]?_proxy user for scheme in ['http', 'https']: key = scheme + '_proxy' if key in os.environ: proxy = ProxyHandler({scheme: os.environ[key]}) auth = HTTPBasicAuthHandler() opener = build_opener(proxy, auth, HTTPHandler) install_opener(opener) def setup_environment_variables(ros_distro): """ Set environment variables needed to find ROS packages and evaluate conditional dependencies. :param ros_distro: The requested ROS distro passed on the CLI, or None """ if ros_distro is not None: if 'ROS_DISTRO' in os.environ and os.environ['ROS_DISTRO'] != ros_distro: # user has a different workspace sourced, use --rosdistro print('WARNING: given --rosdistro {} but ROS_DISTRO is "{}". Ignoring environment.'.format( ros_distro, os.environ['ROS_DISTRO'])) # Use python version from --rosdistro if 'ROS_PYTHON_VERSION' in os.environ: del os.environ['ROS_PYTHON_VERSION'] os.environ['ROS_DISTRO'] = ros_distro if 'ROS_PYTHON_VERSION' not in os.environ and 'ROS_DISTRO' in os.environ: # Set python version to version used by ROS distro python_versions = MetaDatabase().get('ROS_PYTHON_VERSION', default=[]) if os.environ['ROS_DISTRO'] in python_versions: os.environ['ROS_PYTHON_VERSION'] = str(python_versions[os.environ['ROS_DISTRO']]) if 'ROS_PYTHON_VERSION' not in os.environ: # Default to same python version used to invoke rosdep print('WARNING: ROS_PYTHON_VERSION is unset. Defaulting to {}'.format(sys.version[0]), file=sys.stderr) os.environ['ROS_PYTHON_VERSION'] = sys.version[0] def _rosdep_main(args): # sources cache dir is our local database. default_sources_cache = get_sources_cache_dir() parser = OptionParser(usage=_usage, prog='rosdep') parser.add_option('--os', dest='os_override', default=None, metavar='OS_NAME:OS_VERSION', help='Override OS name and version (colon-separated), e.g. ubuntu:lucid') parser.add_option('-c', '--sources-cache-dir', dest='sources_cache_dir', default=default_sources_cache, metavar='SOURCES_CACHE_DIR', help='Override %s' % (default_sources_cache)) parser.add_option('--verbose', '-v', dest='verbose', default=False, action='store_true', help='verbose display') parser.add_option('--version', dest='print_version', default=False, action='store_true', help='print just the rosdep version, then exit') parser.add_option('--all-versions', dest='print_all_versions', default=False, action='store_true', help='print rosdep version and version of installers, then exit') parser.add_option('--reinstall', dest='reinstall', default=False, action='store_true', help='(re)install all dependencies, even if already installed') parser.add_option('--default-yes', '-y', dest='default_yes', default=False, action='store_true', help='Tell the package manager to default to y or fail when installing') parser.add_option('--simulate', '-s', dest='simulate', default=False, action='store_true', help='Simulate install') parser.add_option('-r', dest='robust', default=False, action='store_true', help='Continue installing despite errors.') parser.add_option('-q', dest='quiet', default=False, action='store_true', help='Quiet. Suppress output except for errors.') parser.add_option('-a', '--all', dest='rosdep_all', default=False, action='store_true', help='select all packages') parser.add_option('-n', dest='recursive', default=True, action='store_false', help="Do not consider implicit/recursive dependencies. Only valid with 'keys', 'check', and 'install' commands.") parser.add_option('--ignore-packages-from-source', '--ignore-src', '-i', dest='ignore_src', default=False, action='store_true', help="Affects the 'check', 'install', and 'keys' verbs. " 'If specified then rosdep will ignore keys that ' 'are found to be catkin or ament packages anywhere in the ' 'ROS_PACKAGE_PATH, AMENT_PREFIX_PATH or in any of the directories ' 'given by the --from-paths option.') parser.add_option('--skip-keys', dest='skip_keys', action='append', default=[], help="Affects the 'check' and 'install' verbs. The " 'specified rosdep keys will be ignored, i.e. not ' 'resolved and not installed. The option can be supplied multiple ' 'times. A space separated list of rosdep keys can also ' 'be passed as a string. A more permanent solution to ' 'locally ignore a rosdep key is creating a local rosdep rule ' 'with an empty list of packages (include it in ' '/etc/ros/rosdep/sources.list.d/ before the defaults).') parser.add_option('--filter-for-installers', action='append', default=[], help="Affects the 'db' verb. If supplied, the output of the 'db' " 'command is filtered to only list packages whose installer ' 'is in the provided list. The option can be supplied ' 'multiple times. A space separated list of installers can also ' 'be passed as a string. Example: `--filter-for-installers "apt pip"`') parser.add_option('--from-paths', dest='from_paths', default=False, action='store_true', help="Affects the 'check', 'keys', and 'install' verbs. " 'If specified the arguments to those verbs will be ' 'considered paths to be searched, acting on all ' 'catkin packages found there in.') parser.add_option('--rosdistro', dest='ros_distro', default=None, help='Explicitly sets the ROS distro to use, overriding ' 'the normal method of detecting the ROS distro ' 'using the ROS_DISTRO environment variable. ' "When used with the 'update' verb, " 'only the specified distro will be updated.') parser.add_option('--as-root', default=[], action='append', metavar='INSTALLER_KEY:', help='Override ' 'whether sudo is used for a specific installer, ' "e.g. '--as-root pip:false' or '--as-root \"pip:no homebrew:yes\"'. " 'Can be specified multiple times.') parser.add_option('--include-eol-distros', dest='include_eol_distros', default=False, action='store_true', help="Affects the 'update' verb. " 'If specified end-of-life distros are being ' 'fetched too.') parser.add_option('-t', '--dependency-types', dest='dependency_types', type="choice", choices=list(VALID_DEPENDENCY_TYPES), default=[], action='append', help='Dependency types to install, can be given multiple times. ' 'Choose from {}. Default: all except doc.'.format(VALID_DEPENDENCY_TYPES)) options, args = parser.parse_args(args) if options.print_version or options.print_all_versions: # First print the rosdep version. print('{}'.format(__version__)) # If not printing versions of all installers, exit. if not options.print_all_versions: sys.exit(0) # Otherwise, Then collect the versions of the installers and print them. installers = create_default_installer_context().installers installer_keys = get_default_installer()[1] version_strings = [] for key in installer_keys: if key == 'source': # Explicitly skip the source installer. continue installer = installers[key] try: installer_version_strings = installer.get_version_strings() assert isinstance(installer_version_strings, list), installer_version_strings version_strings.extend(installer_version_strings) except NotImplementedError: version_strings.append('{} unknown'.format(key)) continue except EnvironmentError as e: if e.errno != errno.ENOENT: raise version_strings.append('{} not installed'.format(key)) continue if version_strings: print() print('Versions of installers:') print('\n'.join([' ' + x for x in version_strings if x])) else: print() print('No installers with versions available found.') sys.exit(0) # flatten list of skipped keys, filter-for-installers, and dependency types options.skip_keys = [key for s in options.skip_keys for key in s.split(' ')] options.filter_for_installers = [inst for s in options.filter_for_installers for inst in s.split(' ')] options.dependency_types = [dep for s in options.dependency_types for dep in s.split(' ')] if len(args) == 0: parser.error('Please enter a command') command = args[0] if command not in _commands: parser.error('Unsupported command %s.' % command) args = args[1:] # Convert list of keys to dictionary options.as_root = dict((k, str_to_bool(v)) for k, v in key_list_to_dict(options.as_root).items()) if command not in ['init', 'update', 'fix-permissions']: check_for_sources_list_init(options.sources_cache_dir) # _package_args_handler uses `ROS_DISTRO`, so environment variables must be set before setup_environment_variables(options.ros_distro) elif command not in ['fix-permissions']: setup_proxy_opener() if command in _command_rosdep_args: return _rosdep_args_handler(command, parser, options, args) elif command in _command_no_args: return _no_args_handler(command, parser, options, args) else: return _package_args_handler(command, parser, options, args) def _no_args_handler(command, parser, options, args): if args: parser.error('command [%s] takes no arguments' % (command)) else: return command_handlers[command](options) def _rosdep_args_handler(command, parser, options, args): # rosdep keys as args if options.rosdep_all: parser.error('-a, --all is not a valid option for this command') elif len(args) < 1: parser.error("Please enter arguments for '%s'" % command) else: return command_handlers[command](args, options) def _package_args_handler(command, parser, options, args): if options.rosdep_all: if args: parser.error('cannot specify additional arguments with -a') else: # let the loader filter the -a. This will take out some # packages that are catkinized (for now). lookup = _get_default_RosdepLookup(options) loader = lookup.get_loader() args = loader.get_loadable_resources() not_found = [] elif not args: parser.error('no packages or stacks specified') # package or stack names as args. have to convert stack names to packages. # - overrides to enable testing packages = [] not_found = [] if options.from_paths: for path in args: if options.verbose: print("Using argument '{0}' as a path to search.".format(path)) if not os.path.exists(path): print("given path '{0}' does not exist".format(path)) return 1 path = os.path.abspath(path) if 'ROS_PACKAGE_PATH' not in os.environ: os.environ['ROS_PACKAGE_PATH'] = '{0}'.format(path) else: os.environ['ROS_PACKAGE_PATH'] = '{0}{1}{2}'.format( path, os.pathsep, os.environ['ROS_PACKAGE_PATH'] ) pkgs = find_catkin_packages_in(path, options.verbose) packages.extend(pkgs) # Make packages list unique packages = list(set(packages)) else: rospack = rospkg.RosPack() rosstack = rospkg.RosStack() val = rospkg.expand_to_packages(args, rospack, rosstack) packages = val[0] not_found = val[1] if not_found: raise rospkg.ResourceNotFound(not_found[0], rospack.get_ros_paths()) # Handle the --ignore-src option if command in ['install', 'check', 'keys'] and options.ignore_src: if options.verbose: print('Searching ROS_PACKAGE_PATH for ' 'sources: ' + str(os.environ['ROS_PACKAGE_PATH'].split(':'))) ws_pkgs = get_workspace_packages() for path in os.environ['ROS_PACKAGE_PATH'].split(':'): path = os.path.abspath(path.strip()) if os.path.exists(path): pkgs = find_catkin_packages_in(path, options.verbose) ws_pkgs.extend(pkgs) elif options.verbose: print('Skipping non-existent path ' + path) set_workspace_packages(ws_pkgs) # Lookup package names from ament index. if AMENT_PREFIX_PATH_ENV_VAR in os.environ: if options.verbose: print( 'Searching ' + AMENT_PREFIX_PATH_ENV_VAR + ' for ' 'sources: ' + str(os.environ[AMENT_PREFIX_PATH_ENV_VAR].split(':'))) ws_pkgs = get_workspace_packages() pkgs = get_packages_with_prefixes().keys() ws_pkgs.extend(pkgs) # Make packages list unique ws_pkgs = list(set(ws_pkgs)) set_workspace_packages(ws_pkgs) lookup = _get_default_RosdepLookup(options) # Handle the --skip-keys option by pretending that they are packages in the catkin workspace if command in ['install', 'check'] and options.skip_keys: if options.verbose: print('Skipping the specified rosdep keys:\n- ' + '\n- '.join(options.skip_keys)) lookup.skipped_keys = options.skip_keys if 0 and not packages: # disable, let individual handlers specify behavior # possible with empty stacks print('No packages in arguments, aborting') return return command_handlers[command](lookup, packages, options) def convert_os_override_option(options_os_override): """ Convert os_override option flag to ``(os_name, os_version)`` tuple, or ``None`` if not set :returns: ``(os_name, os_version)`` tuple if option is set, ``None`` otherwise :raises: :exc:`UsageError` if option is not set properly """ if not options_os_override: return None val = options_os_override if ':' not in val: raise UsageError('OS override must be colon-separated OS_NAME:OS_VERSION, e.g. ubuntu:maverick') os_name = val[:val.find(':')] os_version = val[val.find(':') + 1:] return os_name, os_version def configure_installer_context(installer_context, options): """ Configure the *installer_context* from *options*. - Override the OS detector in *installer_context* if necessary. - Set *as_root* for installers if specified. :raises: :exc:`UsageError` If user input options incorrectly """ os_override = convert_os_override_option(options.os_override) if os_override is not None: installer_context.set_os_override(*os_override) for k, v in options.as_root.items(): try: installer_context.get_installer(k).as_root = v except KeyError: raise UsageError("Installer '%s' not defined." % k) def command_init(options): try: data = download_default_sources_list() except URLError as e: print('ERROR: cannot download default sources list from:\n%s\nWebsite may be down.' % (DEFAULT_SOURCES_LIST_URL)) return 4 except DownloadFailure as e: print('ERROR: cannot download default sources list from:\n%s\nWebsite may be down.' % (DEFAULT_SOURCES_LIST_URL)) print(e) return 4 # reuse path variable for error message path = get_sources_list_dir() old_umask = os.umask(0o022) try: if not os.path.exists(path): os.makedirs(path) path = get_default_sources_list_file() if os.path.exists(path): print('ERROR: default sources list file already exists:\n\t%s\nPlease delete if you wish to re-initialize' % (path)) return 1 with open(path, 'w') as f: f.write(data) print('Wrote %s' % (path)) print('Recommended: please run\n\n\trosdep update\n') except IOError as e: print('ERROR: cannot create %s:\n\t%s' % (path, e), file=sys.stderr) return 2 except OSError as e: print("ERROR: cannot create %s:\n\t%s\nPerhaps you need to run 'sudo rosdep init' instead" % (path, e), file=sys.stderr) return 3 finally: os.umask(old_umask) def command_update(options): error_occured = [] def update_success_handler(data_source): print('Hit %s' % (data_source.url)) def update_error_handler(data_source, exc): error_string = 'ERROR: unable to process source [%s]:\n\t%s' % (data_source.url, exc) print(error_string, file=sys.stderr) error_occured.append(error_string) sources_list_dir = get_sources_list_dir() # disable deprecation warnings when using the command-line tool warnings.filterwarnings('ignore', category=PreRep137Warning) if not os.path.exists(sources_list_dir): print('ERROR: no sources directory exists on the system meaning rosdep has not yet been initialized.\n\nPlease initialize your rosdep with\n\n\tsudo rosdep init\n') return 1 filelist = [f for f in os.listdir(sources_list_dir) if f.endswith('.list')] if not filelist: print('ERROR: no data sources in %s\n\nPlease initialize your rosdep with\n\n\tsudo rosdep init\n' % sources_list_dir, file=sys.stderr) return 1 try: print('reading in sources list data from %s' % (sources_list_dir)) sources_cache_dir = get_sources_cache_dir() try: if os.geteuid() == 0: print("Warning: running 'rosdep update' as root is not recommended.", file=sys.stderr) print(" You should run 'sudo rosdep fix-permissions' and invoke 'rosdep update' again without sudo.", file=sys.stderr) except AttributeError: # nothing we wanna do under Windows pass update_sources_list(success_handler=update_success_handler, error_handler=update_error_handler, skip_eol_distros=not options.include_eol_distros, ros_distro=options.ros_distro) print('updated cache in %s' % (sources_cache_dir)) except InvalidData as e: print('ERROR: invalid sources list file:\n\t%s' % (e), file=sys.stderr) return 1 except IOError as e: print('ERROR: error loading sources list:\n\t%s' % (e), file=sys.stderr) return 1 except ValueError as e: print('ERROR: invalid argument value provided:\n\t%s' % (e), file=sys.stderr) return 1 if error_occured: print('ERROR: Not all sources were able to be updated.\n[[[') for e in error_occured: print(e) print(']]]') return 1 def command_keys(lookup, packages, options): lookup = _get_default_RosdepLookup(options) rosdep_keys = get_keys(lookup, packages, options.recursive) prune_catkin_packages(rosdep_keys, options.verbose) _print_lookup_errors(lookup) print('\n'.join(rosdep_keys)) def get_keys(lookup, packages, recursive): rosdep_keys = set() # using a set to ensure uniqueness for package_name in packages: deps = lookup.get_rosdeps(package_name, implicit=recursive) rosdep_keys.update(deps) return list(rosdep_keys) def command_check(lookup, packages, options): verbose = options.verbose installer_context = create_default_installer_context(verbose=verbose) configure_installer_context(installer_context, options) installer = RosdepInstaller(installer_context, lookup) uninstalled, errors = installer.get_uninstalled(packages, implicit=options.recursive, verbose=verbose) # pretty print the result if [v for k, v in uninstalled if v]: print('System dependencies have not been satisfied:') for installer_key, resolved in uninstalled: if resolved: for r in resolved: print('%s\t%s' % (installer_key, r)) else: print('All system dependencies have been satisfied') if errors: for package_name, ex in errors.items(): if isinstance(ex, rospkg.ResourceNotFound): print('ERROR[%s]: resource not found [%s]' % (package_name, ex.args[0]), file=sys.stderr) else: print('ERROR[%s]: %s' % (package_name, ex), file=sys.stderr) if uninstalled: return 1 else: return 0 def error_to_human_readable(error): if isinstance(error, rospkg.ResourceNotFound): return 'Missing resource %s' % (error,) elif isinstance(error, ResolutionError): return '%s' % (error.args[0],) else: return '%s' % (error,) def command_install(lookup, packages, options): # map options install_options = dict(interactive=not options.default_yes, verbose=options.verbose, reinstall=options.reinstall, continue_on_error=options.robust, simulate=options.simulate, quiet=options.quiet) # setup installer installer_context = create_default_installer_context(verbose=options.verbose) configure_installer_context(installer_context, options) installer = RosdepInstaller(installer_context, lookup) if options.reinstall: if options.verbose: print('reinstall is true, resolving all dependencies') try: uninstalled, errors = lookup.resolve_all(packages, installer_context, implicit=options.recursive) except InvalidData as e: print('ERROR: unable to process all dependencies:\n\t%s' % (e), file=sys.stderr) return 1 else: uninstalled, errors = installer.get_uninstalled(packages, implicit=options.recursive, verbose=options.verbose) if options.verbose: uninstalled_dependencies = normalize_uninstalled_to_list(uninstalled) print('uninstalled dependencies are: [%s]' % ', '.join(uninstalled_dependencies)) if errors: err_msg = ('ERROR: the following packages/stacks could not have their ' 'rosdep keys resolved\nto system dependencies') if rospkg.distro.current_distro_codename() is None: err_msg += ( ' (ROS distro is not set. ' 'Make sure `ROS_DISTRO` environment variable is set, or use ' '`--rosdistro` option to specify the distro, ' 'e.g. `--rosdistro indigo`)' ) print(err_msg + ':', file=sys.stderr) for rosdep_key, error in errors.items(): print('%s: %s' % (rosdep_key, error_to_human_readable(error)), file=sys.stderr) if options.robust: print('Continuing to install resolvable dependencies...') else: return 1 try: installer.install(uninstalled, **install_options) if not options.simulate: print('#All required rosdeps installed successfully') return 0 except KeyError as e: raise RosdepInternalError(e) except InstallFailed as e: print('ERROR: the following rosdeps failed to install', file=sys.stderr) print('\n'.join([' %s: %s' % (k, m) for k, m in e.failures]), file=sys.stderr) return 1 def command_db(options): # exact same setup logic as command_resolve, should possibly combine lookup = _get_default_RosdepLookup(options) installer_context = create_default_installer_context(verbose=options.verbose) configure_installer_context(installer_context, options) os_name, os_version = installer_context.get_os_name_and_version() try: installer_keys = installer_context.get_os_installer_keys(os_name) default_key = installer_context.get_default_os_installer_key(os_name) except KeyError: raise UnsupportedOs(os_name, installer_context.get_os_keys()) installer = installer_context.get_installer(default_key) print('OS NAME: %s' % os_name) print('OS VERSION: %s' % os_version) errors = [] print('DB [key -> resolution]') # db does not leverage the resource-based API view = lookup.get_rosdep_view(DEFAULT_VIEW_KEY, verbose=options.verbose) for rosdep_name in view.keys(): try: d = view.lookup(rosdep_name) inst_key, rule = d.get_rule_for_platform(os_name, os_version, installer_keys, default_key) if options.filter_for_installers and inst_key not in options.filter_for_installers: continue resolved = installer.resolve(rule) resolved_str = ' '.join([str(r) for r in resolved]) print('%s -> %s' % (rosdep_name, resolved_str)) except ResolutionError as e: errors.append(e) # TODO: add command-line option for users to be able to see this. # This is useful for platform bringup, but useless for most users # as the rosdep db contains numerous, platform-specific keys. if 0: for error in errors: print('WARNING: %s' % (error_to_human_readable(error)), file=sys.stderr) def _print_lookup_errors(lookup): for error in lookup.get_errors(): if isinstance(error, rospkg.ResourceNotFound): print('WARNING: unable to locate resource %s' % (str(error.args[0])), file=sys.stderr) else: print('WARNING: %s' % (str(error)), file=sys.stderr) def command_what_needs(args, options): lookup = _get_default_RosdepLookup(options) packages = [] for rosdep_name in args: packages.extend(lookup.get_resources_that_need(rosdep_name)) _print_lookup_errors(lookup) print('\n'.join(set(packages))) def command_where_defined(args, options): lookup = _get_default_RosdepLookup(options) locations = [] for rosdep_name in args: locations.extend(lookup.get_views_that_define(rosdep_name)) _print_lookup_errors(lookup) if locations: for location in locations: origin = location[1] print(origin) else: print('ERROR: cannot find definition(s) for [%s]' % (', '.join(args)), file=sys.stderr) return 1 def command_resolve(args, options): lookup = _get_default_RosdepLookup(options) installer_context = create_default_installer_context(verbose=options.verbose) configure_installer_context(installer_context, options) installer, installer_keys, default_key, \ os_name, os_version = get_default_installer(installer_context=installer_context, verbose=options.verbose) invalid_key_errors = [] for rosdep_name in args: if len(args) > 1: print('#ROSDEP[%s]' % rosdep_name) view = lookup.get_rosdep_view(DEFAULT_VIEW_KEY, verbose=options.verbose) try: d = view.lookup(rosdep_name) except KeyError as e: invalid_key_errors.append(e) continue rule_installer, rule = d.get_rule_for_platform(os_name, os_version, installer_keys, default_key) installer = installer_context.get_installer(rule_installer) resolved = installer.resolve(rule) print('#%s' % (rule_installer)) print(' '.join([str(r) for r in resolved])) for error in invalid_key_errors: print('ERROR: no rosdep rule for %s' % (error), file=sys.stderr) for error in lookup.get_errors(): print('WARNING: %s' % (error_to_human_readable(error)), file=sys.stderr) if invalid_key_errors: return 1 # error exit code def command_fix_permissions(options): import os import pwd import grp stat_info = os.stat(os.path.expanduser('~')) uid = stat_info.st_uid gid = stat_info.st_gid user_name = pwd.getpwuid(uid).pw_name try: group_name = grp.getgrgid(gid).gr_name except KeyError as e: group_name = gid ros_home = rospkg.get_ros_home() print("Recursively changing ownership of ros home directory '{0}' " "to '{1}:{2}' (current user)...".format(ros_home, user_name, group_name)) failed = [] try: for dirpath, dirnames, filenames in os.walk(ros_home): try: os.lchown(dirpath, uid, gid) except Exception as e: failed.append((dirpath, str(e))) for f in filenames: try: path = os.path.join(dirpath, f) os.lchown(path, uid, gid) except Exception as e: failed.append((path, str(e))) except Exception: import traceback traceback.print_exc() print('Failed to walk directory. Try with sudo?') else: if failed: print('Failed to change ownership for:') for p, e in failed: print('{0} --> {1}'.format(p, e)) print('Try with sudo?') else: print('Done.') command_handlers = { 'db': command_db, 'check': command_check, 'keys': command_keys, 'install': command_install, 'what-needs': command_what_needs, 'where-defined': command_where_defined, 'resolve': command_resolve, 'init': command_init, 'update': command_update, 'fix-permissions': command_fix_permissions, # backwards compat 'what_needs': command_what_needs, 'where_defined': command_where_defined, 'depdb': command_db, } # commands that accept rosdep names as args _command_rosdep_args = ['what-needs', 'what_needs', 'where-defined', 'where_defined', 'resolve'] # commands that take no args _command_no_args = ['update', 'init', 'db', 'fix-permissions'] _commands = command_handlers.keys() rosdep-0.21.0/src/rosdep2/meta.py000066400000000000000000000104051406544147500165450ustar00rootroot00000000000000# Copyright (c) 2019, Open Source Robotics Foundation, Inc. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # # * Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # * Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # * Neither the name of the Willow Garage, Inc. nor the names of its # contributors may be used to endorse or promote products derived from # this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. import copy import os try: import cPickle as pickle except ImportError: import pickle try: FileNotFoundError except NameError: # Python 2 compatibility # https://stackoverflow.com/questions/21367320/ FileNotFoundError = IOError import rospkg from ._version import __version__ from .cache_tools import compute_filename_hash from .cache_tools import write_cache_file from .cache_tools import PICKLE_CACHE_EXT """ Rosdep needs to store data that isn't used to resolve rosdep keys, but needs to be cached during `rosdep update`. """ META_CACHE_DIR = 'meta.cache' def get_meta_cache_dir(): """Return storage location for cached meta data.""" ros_home = rospkg.get_ros_home() return os.path.join(ros_home, 'rosdep', META_CACHE_DIR) class CacheWrapper(object): """Make it possible to introspect cache in case some future bug needs to be worked around.""" def __init__(self, category, data): # The version of rosdep that wrote the category self.rosdep_version = __version__ # The un-hashed name of the category self.category_name = category # The stuff being stored self.data = data @property def data(self): # If cached data type is mutable, don't allow modifications to what's been loaded return copy.deepcopy(self.__data) @data.setter def data(self, value): self.__data = copy.deepcopy(value) class MetaDatabase: """ Store and retrieve metadata from rosdep cache. This data is fetched during `rosdep update`, but is not a source for resolving rosdep keys. """ def __init__(self, cache_dir=None): if cache_dir is None: cache_dir = get_meta_cache_dir() self._cache_dir = cache_dir self._loaded = {} def set(self, category, metadata): """Add or overwrite metadata in the cache.""" wrapper = CacheWrapper(category, metadata) # print(category, metadata) write_cache_file(self._cache_dir, category, wrapper) self._loaded[category] = wrapper def get(self, category, default=None): """Return metadata in the cache, or None if there is no cache entry.""" if category not in self._loaded: self._load_from_cache(category, self._cache_dir) if category in self._loaded: return self._loaded[category].data return default def _load_from_cache(self, category, cache_dir): filename = compute_filename_hash(category) + PICKLE_CACHE_EXT try: with open(os.path.join(self._cache_dir, filename), 'rb') as cache_file: self._loaded[category] = pickle.loads(cache_file.read()) except FileNotFoundError: pass rosdep-0.21.0/src/rosdep2/model.py000066400000000000000000000116731406544147500167270ustar00rootroot00000000000000# Copyright (c) 2011, Willow Garage, Inc. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # # * Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # * Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # * Neither the name of the Willow Garage, Inc. nor the names of its # contributors may be used to endorse or promote products derived from # this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. # Author Ken Conley/kwc@willowgarage.com """ Underlying model of rosdep data. The basic data model of rosdep is to store a dictionary of data indexed by view name (i.e. ROS stack name). This data includes a dictionary mapping rosdep dependency names to rules and the view dependencies. This is a lower-level representation. Higher-level representation can combine these rosdep dependency maps and view dependencies together into a combined view on which queries can be made. """ class RosdepDatabaseEntry(object): """ Stores rosdep data and metadata for a single view. """ def __init__(self, rosdep_data, view_dependencies, origin): """ :param rosdep_data: raw rosdep dictionary map for view :param view_dependencies: list of view dependency names :param origin: name of where data originated, e.g. filename """ assert isinstance(rosdep_data, dict), 'RosdepDatabaseEntry() rosdep_data is not a dict: %s' % rosdep_data self.rosdep_data = rosdep_data self.view_dependencies = view_dependencies self.origin = origin class RosdepDatabase(object): """ Stores loaded rosdep data for multiple views. """ def __init__(self): self._rosdep_db = {} # {view_name: RosdepDatabaseEntry} def is_loaded(self, view_name): """ :param view_name: name of view to check, ``str`` :returns: ``True`` if *view_name* has been loaded into this database. """ return view_name in self._rosdep_db def mark_loaded(self, view_name): """ If view is not already loaded, this will mark it as such. This in effect sets the data for the view to be empty. :param view_name: name of view to mark as loaded """ self.set_view_data(view_name, {}, [], None) def set_view_data(self, view_name, rosdep_data, view_dependencies, origin): """ Set data associated with view. This will create a new :class:`RosdepDatabaseEntry`. :param rosdep_data: rosdep data map to associated with view. This will be copied. :param origin: origin of view data, e.g. filepath of ``rosdep.yaml`` """ self._rosdep_db[view_name] = RosdepDatabaseEntry(rosdep_data.copy(), view_dependencies, origin) def get_view_names(self): """ :returns: list of view names that are loaded into this database. """ return self._rosdep_db.keys() def get_view_data(self, view_name): """ :returns: :class:`RosdepDatabaseEntry` of given view. :raises: :exc:`KeyError` if no entry for *view_name* """ return self._rosdep_db[view_name] def get_view_dependencies(self, view_name): """ :raises: :exc:`KeyError` if *view_name* is not an entry, or if all of view's dependencies have not been properly loaded. """ entry = self.get_view_data(view_name) dependencies = entry.view_dependencies[:] # compute full set of dependencies by iterating over # dependencies in reverse order and prepending. for s in reversed(entry.view_dependencies): dependencies = self.get_view_dependencies(s) + dependencies # make unique preserving order unique_deps = [] for d in dependencies: if d not in unique_deps: unique_deps.append(d) return unique_deps rosdep-0.21.0/src/rosdep2/platforms/000077500000000000000000000000001406544147500172545ustar00rootroot00000000000000rosdep-0.21.0/src/rosdep2/platforms/__init__.py000066400000000000000000000000001406544147500213530ustar00rootroot00000000000000rosdep-0.21.0/src/rosdep2/platforms/alpine.py000066400000000000000000000063001406544147500210750ustar00rootroot00000000000000# Copyright (c) 2018, SEQSENSE, Inc. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # # * Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # * Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # * Neither the name of the Willow Garage, Inc. nor the names of its # contributors may be used to endorse or promote products derived from # this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. # Author Atsushi Watanabe/atsushi.w@ieee.org import os from rospkg.os_detect import OS_ALPINE from .pip import PIP_INSTALLER from .source import SOURCE_INSTALLER from ..installers import PackageManagerInstaller from ..shell_utils import read_stdout APK_INSTALLER = 'apk' def register_installers(context): context.set_installer(APK_INSTALLER, ApkInstaller()) def register_platforms(context): context.add_os_installer_key(OS_ALPINE, APK_INSTALLER) context.add_os_installer_key(OS_ALPINE, PIP_INSTALLER) context.add_os_installer_key(OS_ALPINE, SOURCE_INSTALLER) context.set_default_os_installer_key(OS_ALPINE, lambda self: APK_INSTALLER) context.set_os_version_type(OS_ALPINE, lambda self: ".".join(self.get_version().split('.')[:2])) def apk_detect(pkgs, exec_fn=read_stdout): """ Given a list of packages, return a list of which are already installed. :param exec_fn: function to execute Popen and read stdout (for testing) """ if not pkgs: return [] cmd = ['apk', 'info', '--installed'] cmd.extend(pkgs) std_out = exec_fn(cmd) return std_out.splitlines() class ApkInstaller(PackageManagerInstaller): def __init__(self): super(ApkInstaller, self).__init__(apk_detect) def get_install_command(self, resolved, interactive=True, reinstall=False, quiet=False): pkgs = self.get_packages_to_install(resolved, reinstall=reinstall) if not pkgs: return [] cmd = self.elevate_priv(['apk', 'add']) if interactive: cmd.append('--interactive') if quiet: cmd.append('--quiet') cmd.extend(pkgs) return [cmd] rosdep-0.21.0/src/rosdep2/platforms/arch.py000066400000000000000000000056551406544147500205560ustar00rootroot00000000000000# Copyright (c) 2009, Willow Garage, Inc. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # # * Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # * Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # * Neither the name of the Willow Garage, Inc. nor the names of its # contributors may be used to endorse or promote products derived from # this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. # Author Tully Foote/tfoote@willowgarage.com import subprocess from rospkg.os_detect import OS_ARCH from ..installers import PackageManagerInstaller from .source import SOURCE_INSTALLER PACMAN_INSTALLER = 'pacman' def register_installers(context): context.set_installer(PACMAN_INSTALLER, PacmanInstaller()) def register_platforms(context): context.add_os_installer_key(OS_ARCH, SOURCE_INSTALLER) context.add_os_installer_key(OS_ARCH, PACMAN_INSTALLER) context.set_default_os_installer_key(OS_ARCH, lambda self: PACMAN_INSTALLER) def pacman_detect_single(p): return not subprocess.call(['pacman', '-T', p], stdout=subprocess.PIPE, stderr=subprocess.PIPE) def pacman_detect(packages): return [p for p in packages if pacman_detect_single(p)] class PacmanInstaller(PackageManagerInstaller): def __init__(self): super(PacmanInstaller, self).__init__(pacman_detect) def get_install_command(self, resolved, interactive=True, reinstall=False, quiet=False): packages = self.get_packages_to_install(resolved, reinstall=reinstall) if not packages: return [] command = ['pacman', '-S'] if not interactive: command.append('--noconfirm') if not reinstall: command.append('--needed') if quiet: command.append('-q') return [self.elevate_priv(command + packages)] rosdep-0.21.0/src/rosdep2/platforms/cygwin.py000066400000000000000000000062021406544147500211260ustar00rootroot00000000000000# Copyright (c) 2009, Willow Garage, Inc. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # # * Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # * Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # * Neither the name of the Willow Garage, Inc. nor the names of its # contributors may be used to endorse or promote products derived from # this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. # Tingfan Wu tingfan@gmail.com from __future__ import print_function from rospkg.os_detect import OS_CYGWIN from .source import SOURCE_INSTALLER from ..installers import PackageManagerInstaller from ..shell_utils import read_stdout APT_CYG_INSTALLER = 'apt-cyg' def register_installers(context): context.set_installer(APT_CYG_INSTALLER, AptCygInstaller()) def register_platforms(context): context.add_os_installer_key(OS_CYGWIN, SOURCE_INSTALLER) context.add_os_installer_key(OS_CYGWIN, APT_CYG_INSTALLER) context.set_default_os_installer_key(OS_CYGWIN, lambda self: APT_CYG_INSTALLER) def cygcheck_detect_single(p): std_out = read_stdout(['cygcheck', '-c', p]) return std_out.count('OK') > 0 def cygcheck_detect(packages): return [p for p in packages if cygcheck_detect_single(p)] class AptCygInstaller(PackageManagerInstaller): """ An implementation of the :class:`Installer` for use on cygwin-style systems. """ def __init__(self): super(AptCygInstaller, self).__init__(cygcheck_detect) self.as_root = False self.sudo_command = 'cygstart --action=runas' def get_install_command(self, resolved, interactive=True, reinstall=False, quiet=False): packages = self.get_packages_to_install(resolved, reinstall=reinstall) # TODO: interactive if not packages: return [] else: return [self.elevate_priv(['apt-cyg', '-m', 'ftp://sourceware.org/pub/cygwinports', 'install']) + packages] if __name__ == '__main__': print('test cygcheck_detect(true)', cygcheck_detect('cygwin')) rosdep-0.21.0/src/rosdep2/platforms/debian.py000066400000000000000000000253721406544147500210610ustar00rootroot00000000000000# Copyright (c) 2009, Willow Garage, Inc. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # # * Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # * Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # * Neither the name of the Willow Garage, Inc. nor the names of its # contributors may be used to endorse or promote products derived from # this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. # Author Tully Foote, Ken Conley from __future__ import print_function import subprocess import sys from rospkg.os_detect import ( OS_DEBIAN, OS_LINARO, OS_UBUNTU, OS_ELEMENTARY, OS_MX, OS_POP, OS_ZORIN, OsDetect, read_os_release ) from .pip import PIP_INSTALLER from .gem import GEM_INSTALLER from .npm import NPM_INSTALLER from .source import SOURCE_INSTALLER from ..installers import PackageManagerInstaller from ..shell_utils import read_stdout # apt package manager key APT_INSTALLER = 'apt' def register_installers(context): context.set_installer(APT_INSTALLER, AptInstaller()) def register_platforms(context): register_debian(context) register_ubuntu(context) # Aliases register_elementary(context) register_linaro(context) register_mx(context) register_pop(context) register_zorin(context) def register_debian(context): context.add_os_installer_key(OS_DEBIAN, APT_INSTALLER) context.add_os_installer_key(OS_DEBIAN, PIP_INSTALLER) context.add_os_installer_key(OS_DEBIAN, GEM_INSTALLER) context.add_os_installer_key(OS_DEBIAN, NPM_INSTALLER) context.add_os_installer_key(OS_DEBIAN, SOURCE_INSTALLER) context.set_default_os_installer_key(OS_DEBIAN, lambda self: APT_INSTALLER) context.set_os_version_type(OS_DEBIAN, OsDetect.get_codename) def register_linaro(context): # Linaro is an alias for Ubuntu. If linaro is detected and it's not set as # an override force ubuntu. (os_name, os_version) = context.get_os_name_and_version() if os_name == OS_LINARO and not context.os_override: print('rosdep detected OS: [%s] aliasing it to: [%s]' % (OS_LINARO, OS_UBUNTU), file=sys.stderr) context.set_os_override(OS_UBUNTU, context.os_detect.get_codename()) def register_elementary(context): # Elementary is an alias for Ubuntu. If elementary is detected and it's # not set as an override force ubuntu. (os_name, os_version) = context.get_os_name_and_version() if os_name == OS_ELEMENTARY and not context.os_override: print('rosdep detected OS: [%s] aliasing it to: [%s]' % (OS_ELEMENTARY, OS_UBUNTU), file=sys.stderr) context.set_os_override(OS_UBUNTU, context.os_detect.get_codename()) def register_mx(context): # MX is an alias for Debian. If MX is detected and it's # not set as an override, force Debian. (os_name, os_version) = context.get_os_name_and_version() if os_name == OS_MX and not context.os_override: print('rosdep detected OS: [%s] aliasing it to: [%s]' % (OS_MX, OS_DEBIAN), file=sys.stderr) release_info = read_os_release() version = read_os_release()["VERSION"] context.set_os_override(OS_DEBIAN, version[version.find("(") + 1:version.find(")")]) def register_pop(context): # Pop! OS is an alias for Ubuntu. If Pop! is detected and it's # not set as an override force ubuntu. (os_name, os_version) = context.get_os_name_and_version() if os_name == OS_POP and not context.os_override: print('rosdep detected OS: [%s] aliasing it to: [%s]' % (OS_POP, OS_UBUNTU), file=sys.stderr) context.set_os_override(OS_UBUNTU, context.os_detect.get_codename()) def register_zorin(context): # Zorin is an alias for Ubuntu. If Zorin is detected and it's # not set as an override force ubuntu. (os_name, os_version) = context.get_os_name_and_version() if os_name == OS_ZORIN and not context.os_override: print('rosdep detected OS: [%s] aliasing it to: [%s]' % (OS_ZORIN, OS_UBUNTU), file=sys.stderr) context.set_os_override(OS_UBUNTU, context.os_detect.get_codename()) def register_ubuntu(context): context.add_os_installer_key(OS_UBUNTU, APT_INSTALLER) context.add_os_installer_key(OS_UBUNTU, PIP_INSTALLER) context.add_os_installer_key(OS_UBUNTU, GEM_INSTALLER) context.add_os_installer_key(OS_UBUNTU, NPM_INSTALLER) context.add_os_installer_key(OS_UBUNTU, SOURCE_INSTALLER) context.set_default_os_installer_key(OS_UBUNTU, lambda self: APT_INSTALLER) context.set_os_version_type(OS_UBUNTU, OsDetect.get_codename) def _read_apt_cache_showpkg(packages, exec_fn=None): """ Output whether these packages are virtual package list providing package. If one package was not found, it gets returned as non-virtual. :param exec_fn: see `dpkg_detect`; make sure that exec_fn supports a second, boolean, parameter. """ cmd = ['apt-cache', 'showpkg'] + packages if exec_fn is None: exec_fn = read_stdout std_out = exec_fn(cmd).splitlines() starts = [] notfound = set() for p in packages: last_start = starts[-1] if len(starts) > 0 else 0 try: starts.append(std_out.index('Package: %s' % p, last_start)) except ValueError: notfound.add(p) starts.append(None) for p in packages: if p in notfound: yield p, False, None continue start = starts.pop(0) lines = iter(std_out[start:starts[0]]) header = 'Package: %s' % p # proceed to Package header try: while next(lines) != header: pass except StopIteration: pass # proceed to versions section try: while next(lines) != 'Versions: ': pass except StopIteration: pass # virtual packages don't have versions try: if next(lines) != '': yield p, False, None continue except StopIteration: break # proceed to reserve provides section try: while next(lines) != 'Reverse Provides: ': pass except StopIteration: pass pr = [line.split(' ', 2)[0] for line in lines] if pr: yield p, True, pr else: yield p, False, None def dpkg_detect(pkgs, exec_fn=None): """ Given a list of package, return the list of installed packages. :param pkgs: list of package names, optionally followed by a fixed version (`foo=3.0`) :param exec_fn: function to execute Popen and read stdout (for testing) :return: list elements in *pkgs* that were found installed on the system """ ret_list = [] # this is mainly a hack to support version locking for eigen. # we strip version-locking syntax, e.g. libeigen3-dev=3.0.1-*. # our query does not do the validation on the version itself. # This is a map `package name -> package name optionally with version`. version_lock_map = {} for p in pkgs: if '=' in p: version_lock_map[p.split('=')[0]] = p else: version_lock_map[p] = p cmd = ['dpkg-query', '-W', '-f=\'${Package} ${Status}\n\''] cmd.extend(version_lock_map.keys()) if exec_fn is None: exec_fn = read_stdout std_out, std_err = exec_fn(cmd, True) std_out = std_out.replace('\'', '') pkg_list = std_out.split('\n') for pkg in pkg_list: pkg_row = pkg.split() if len(pkg_row) == 4 and (pkg_row[3] == 'installed'): ret_list.append(pkg_row[0]) installed_packages = [version_lock_map[r] for r in ret_list] # now for the remaining packages check, whether they are installed as # virtual packages remaining = _read_apt_cache_showpkg(list(p for p in pkgs if p not in installed_packages)) virtual = [n for (n, v, pr) in remaining if v and len(dpkg_detect(pr)) > 0] return installed_packages + virtual def _iterate_packages(packages, reinstall): for entry in _read_apt_cache_showpkg(packages): p, is_virtual, providers = entry if is_virtual: installed = [] if reinstall: installed = dpkg_detect(providers) if len(installed) > 0: for i in installed: yield i continue # don't ouput providers yield providers else: yield p class AptInstaller(PackageManagerInstaller): """ An implementation of the Installer for use on debian style systems. """ def __init__(self): super(AptInstaller, self).__init__(dpkg_detect) def get_version_strings(self): output = subprocess.check_output(['apt-get', '--version']) version = output.splitlines()[0].split(b' ')[1].decode() return ['apt-get {}'.format(version)] def _get_install_commands_for_package(self, base_cmd, package_or_list): def pkg_command(p): return self.elevate_priv(base_cmd + [p]) if isinstance(package_or_list, list): return [pkg_command(p) for p in package_or_list] else: return pkg_command(package_or_list) def get_install_command(self, resolved, interactive=True, reinstall=False, quiet=False): packages = self.get_packages_to_install(resolved, reinstall=reinstall) if not packages: return [] base_cmd = ['apt-get', 'install'] if not interactive: base_cmd.append('-y') if quiet: base_cmd.append('-qq') return [self._get_install_commands_for_package(base_cmd, p) for p in _iterate_packages(packages, reinstall)] rosdep-0.21.0/src/rosdep2/platforms/freebsd.py000066400000000000000000000061311406544147500212410ustar00rootroot00000000000000# Copyright (c) 2010, Willow Garage, Inc. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # # * Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # * Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # * Neither the name of the Willow Garage, Inc. nor the names of its # contributors may be used to endorse or promote products derived from # this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. # Original from cygwin.py by Tingfan Wu tingfan@gmail.com # Modified for FreeBSD by Rene Ladan rene@freebsd.org # Updated for FreeBSD with pkg by Trenton Schulz trentonw@ifi.uio.no from rospkg.os_detect import OS_FREEBSD from .pip import PIP_INSTALLER from ..installers import PackageManagerInstaller from ..shell_utils import read_stdout PKG_INSTALLER = 'pkg' def register_installers(context): context.set_installer(PKG_INSTALLER, PkgInstaller()) def register_platforms(context): context.add_os_installer_key(OS_FREEBSD, PKG_INSTALLER) context.add_os_installer_key(OS_FREEBSD, PIP_INSTALLER) context.set_default_os_installer_key(OS_FREEBSD, lambda self: PKG_INSTALLER) def pkg_detect_single(p, exec_fn): if p == "builtin": return True cmd = ['/usr/sbin/pkg', 'query', '%n', p] std_out = exec_fn(cmd) return std_out.split() != [] def pkg_detect(packages, exec_fn=None): if exec_fn is None: exec_fn = read_stdout return [p for p in packages if pkg_detect_single(p, exec_fn)] class PkgInstaller(PackageManagerInstaller): """ An implementation of the Installer for use on FreeBSD-style systems. """ def __init__(self): super(PkgInstaller, self).__init__(pkg_detect) def get_install_command(self, resolved, interactive=True, reinstall=False, quiet=False): packages = self.get_packages_to_install(resolved, reinstall=reinstall) if not packages: return [] else: return [self.elevate_priv(['/usr/sbin/pkg', 'install', '-y']) + packages] rosdep-0.21.0/src/rosdep2/platforms/gem.py000066400000000000000000000065751406544147500204130ustar00rootroot00000000000000# Copyright (c) 2009, Willow Garage, Inc. # Copyright (c) 2012, Intermodalics, BVBA. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # # * Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # * Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # * Neither the name of the Willow Garage, Inc. nor the names of its # contributors may be used to endorse or promote products derived from # this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. # Author Ruben Smits/ruben.smits@intermodalics.eu from __future__ import print_function import subprocess from ..core import InstallFailed from ..installers import PackageManagerInstaller from ..shell_utils import read_stdout # gem package manager key GEM_INSTALLER = 'gem' def register_installers(context): context.set_installer(GEM_INSTALLER, GemInstaller()) def is_gem_installed(): try: subprocess.Popen(['gem'], stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate() return True except OSError: return False def gem_detect(pkgs, exec_fn=None): """ Given a list of package, return the list of installed packages. :param exec_fn: function to execute Popen and read stdout (for testing) """ if exec_fn is None: exec_fn = read_stdout pkg_list = exec_fn(['gem', 'list']).split('\n') ret_list = [] for pkg in pkg_list: pkg_row = pkg.split(' ') if pkg_row[0] in pkgs: ret_list.append(pkg_row[0]) return ret_list class GemInstaller(PackageManagerInstaller): """ :class:`Installer` support for gem. """ def __init__(self): super(GemInstaller, self).__init__(gem_detect, supports_depends=True) def get_version_strings(self): gem_version = subprocess.check_output(['gem', '--version']).strip().decode() return ['gem {}'.format(gem_version)] def get_install_command(self, resolved, interactive=True, reinstall=False, quiet=False): if not is_gem_installed(): raise InstallFailed((GEM_INSTALLER, 'gem is not installed')) packages = self.get_packages_to_install(resolved, reinstall=reinstall) if not packages: return [] else: return [self.elevate_priv(['gem', 'install', p]) for p in packages] rosdep-0.21.0/src/rosdep2/platforms/gentoo.py000066400000000000000000000111661406544147500211260ustar00rootroot00000000000000# Copyright (c) 2009, Willow Garage, Inc. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # # * Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # * Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # * Neither the name of the Willow Garage, Inc. nor the names of its # contributors may be used to endorse or promote products derived from # this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. # # Author Murph Finnicum/murph@murph.cc # A word on atoms # We'll be using 'atoms' instead of 'packages' for the majority of the gentoo installer. # Atoms can specify a package version (either exactly, or min/max version), flags it has # to be built with, and even repositories it has to come from # # Here are some valid atoms and their meanings: # sed // A package named 'sed' # sys-apps/sed // sed from the category 'sys-apps'. There can be collisions otherwise. # sys-apps/sed::gentoo // sed from the category 'sys-apps' and the repository 'gentoo' (the default). # >=sys-apps/sed-4 // sed of at least version 4 # sed[static,-nls] // sed built the static USE flag and withou the nls one import os from rospkg.os_detect import OS_GENTOO from .source import SOURCE_INSTALLER from ..installers import PackageManagerInstaller from ..shell_utils import read_stdout PORTAGE_INSTALLER = 'portage' def register_installers(context): context.set_installer(PORTAGE_INSTALLER, PortageInstaller()) def register_platforms(context): context.add_os_installer_key(OS_GENTOO, PORTAGE_INSTALLER) context.add_os_installer_key(OS_GENTOO, SOURCE_INSTALLER) context.set_default_os_installer_key(OS_GENTOO, lambda self: PORTAGE_INSTALLER) # Determine whether an atom is already satisfied def portage_detect_single(atom, exec_fn=read_stdout): """ Check if a given atom is installed. :param exec_fn: function to execute Popen and read stdout (for testing) """ std_out = exec_fn(['portageq', 'match', '/', atom]) # TODO consdier checking the name of the package returned # Also, todo, figure out if just returning true if two packages are returned is cool.. return len(std_out) >= 1 def portage_detect(atoms, exec_fn=read_stdout): """ Given a list of atoms, return a list of which are already installed. :param exec_fn: function to execute Popen and read stdout (for testing) """ # This is for testing, to make sure they're always checked in the same order # TODO: make testing better to not need this if isinstance(atoms, list): atoms.sort() return [a for a in atoms if portage_detect_single(a, exec_fn)] # Check portage and needed tools for existence and compatibility def portage_available(): if not os.path.exists('/usr/bin/portageq'): return False if not os.path.exists('/usr/bin/emerge'): return False # We only use standard, defined portage features. # They work in all released versions of portage, and should work in # future versionf for a long time to come. # but .. TODO: Check versions return True class PortageInstaller(PackageManagerInstaller): def __init__(self): super(PortageInstaller, self).__init__(portage_detect) def get_install_command(self, resolved, interactive=True, reinstall=False, quiet=False): atoms = self.get_packages_to_install(resolved, reinstall=reinstall) cmd = self.elevate_priv(['emerge']) if not atoms: return [] if interactive: cmd.append('-a') cmd.extend(atoms) return [cmd] rosdep-0.21.0/src/rosdep2/platforms/nix.py000066400000000000000000000050221406544147500204230ustar00rootroot00000000000000# Copyright (c) 2019, Ben Wolsieffer # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # # * Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # * Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # * Neither the name of the Willow Garage, Inc. nor the names of its # contributors may be used to endorse or promote products derived from # this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. # Author Ben Wolsieffer/benwolsieffer@gmail.com import subprocess from rospkg.os_detect import OS_NIXOS from ..installers import PackageManagerInstaller NIX_INSTALLER = 'nix' def register_installers(context): context.set_installer(NIX_INSTALLER, NixInstaller()) def register_platforms(context): context.add_os_installer_key(OS_NIXOS, NIX_INSTALLER) context.set_default_os_installer_key(OS_NIXOS, lambda self: NIX_INSTALLER) def nix_detect(packages): # Say that all packages are installed, because Nix handles installation # automatically return packages class NixInstaller(PackageManagerInstaller): def __init__(self): super(NixInstaller, self).__init__(nix_detect) def get_install_command(self, resolved, interactive=True, reinstall=False, quiet=False): raise NotImplementedError('Nix does not support installing packages through ROS') def get_version_strings(self): return subprocess.check_output(('nix', '--version')).decode() rosdep-0.21.0/src/rosdep2/platforms/npm.py000066400000000000000000000073011406544147500204210ustar00rootroot00000000000000# Copyright (c) 2009, Willow Garage, Inc. # Copyright (c) 2019, Kei Okada # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # # * Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # * Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # * Neither the name of the Willow Garage, Inc. nor the names of its # contributors may be used to endorse or promote products derived from # this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. from __future__ import print_function import os import subprocess from ..core import InstallFailed from ..installers import PackageManagerInstaller from ..shell_utils import read_stdout # npm package manager key NPM_INSTALLER = 'npm' def register_installers(context): context.set_installer(NPM_INSTALLER, NpmInstaller()) def is_npm_installed(): try: subprocess.Popen(['npm'], stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate() return True except OSError: return False class NpmInstaller(PackageManagerInstaller): """ :class:`Installer` support for npm. """ def __init__(self): super(NpmInstaller, self).__init__(self.npm_detect, supports_depends=True) def npm_detect(self, pkgs, exec_fn=None): """ Given a list of package, return the list of installed packages. :param exec_fn: function to execute Popen and read stdout (for testing) """ if exec_fn is None: exec_fn = read_stdout # npm list -parseable returns [dir, dir/node_modules/path, dir/node_modules/path, ...] if self.as_root: cmd = ['npm', 'list', '-g'] else: cmd = ['npm', 'list'] pkg_list = exec_fn(cmd + ['-parseable']).split('\n') ret_list = [] for pkg in pkg_list[1:]: pkg_row = pkg.split('/') if pkg_row[-1] in pkgs: ret_list.append(pkg_row[-1]) return ret_list def get_version_strings(self): npm_version = subprocess.check_output(['npm', '--version']).strip().decode() return ['npm {}'.format(npm_version)] def get_install_command(self, resolved, interactive=True, reinstall=False, quiet=False): if not is_npm_installed(): raise InstallFailed((NPM_INSTALLER, 'npm is not installed')) packages = self.get_packages_to_install(resolved, reinstall=reinstall) if not packages: return [] if self.as_root: cmd = ['npm', 'install', '-g'] else: cmd = ['npm', 'install'] return [self.elevate_priv(cmd + [p]) for p in packages] rosdep-0.21.0/src/rosdep2/platforms/openembedded.py000066400000000000000000000064661406544147500222550ustar00rootroot00000000000000# Copyright (c) 2019, LG Electronics, Inc. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # # * Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # * Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # * Neither the name of the Willow Garage, Inc. nor the names of its # contributors may be used to endorse or promote products derived from # this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. # Author Andre Rosa/andre.rosa@lge.com import subprocess from rospkg.os_detect import OS_OPENEMBEDDED, OsDetect from ..installers import PackageManagerInstaller OPKG_INSTALLER = 'opkg' def register_installers(context): context.set_installer(OPKG_INSTALLER, OpkgInstaller()) def register_platforms(context): register_oe(context) def register_oe(context): context.add_os_installer_key(OS_OPENEMBEDDED, OPKG_INSTALLER) context.set_default_os_installer_key(OS_OPENEMBEDDED, lambda self: OPKG_INSTALLER) context.set_os_version_type(OS_OPENEMBEDDED, OsDetect.get_codename) def opkg_detect(pkgs, exec_fn=None): """ Given a list of package, return the list of installed packages. NOTE: These are stubs currently and will be filled after semantics are fully defined. :param pkgs: list of package names, optionally followed by a fixed version (`foo=3.0`) :param exec_fn: function to execute Popen and read stdout (for testing) :return: list elements in *pkgs* that were found installed on the system """ raise NotImplementedError("opkg_detect is not implemented yet") class OpkgInstaller(PackageManagerInstaller): """ An implementation of the Installer for use on oe systems. NOTE: These are stubs currently and will be filled after semantics are fully defined. """ def __init__(self): super(OpkgInstaller, self).__init__(opkg_detect) def get_version_strings(self): output = subprocess.check_output(['opkg', '--version']) version = output.splitlines()[0].split(b' ')[2].decode() return [('opkg {}').format(version)] def get_install_command(self, resolved, interactive=True, reinstall=False, quiet=False): raise NotImplementedError('get_install_command is not implemented yet') rosdep-0.21.0/src/rosdep2/platforms/opensuse.py000066400000000000000000000060231406544147500214700ustar00rootroot00000000000000# Copyright (c) 2009, Willow Garage, Inc. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # # * Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # * Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # * Neither the name of the Willow Garage, Inc. nor the names of its # contributors may be used to endorse or promote products derived from # this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. # Author Tully Foote/tfoote@willowgarage.com import subprocess from rospkg.os_detect import OS_OPENSUSE from .pip import PIP_INSTALLER from .source import SOURCE_INSTALLER from ..installers import PackageManagerInstaller # zypper package manager key ZYPPER_INSTALLER = 'zypper' def register_installers(context): context.set_installer(ZYPPER_INSTALLER, ZypperInstaller()) def register_platforms(context): context.add_os_installer_key(OS_OPENSUSE, SOURCE_INSTALLER) context.add_os_installer_key(OS_OPENSUSE, PIP_INSTALLER) context.add_os_installer_key(OS_OPENSUSE, ZYPPER_INSTALLER) context.set_default_os_installer_key(OS_OPENSUSE, lambda self: ZYPPER_INSTALLER) def rpm_detect(packages): installed = [] for p in packages: if not subprocess.call(['rpm', '-q', '--whatprovides', p]): installed.append(p) return installed class ZypperInstaller(PackageManagerInstaller): """ This class provides the functions for installing using zypper. """ def __init__(self): super(ZypperInstaller, self).__init__(rpm_detect) def get_install_command(self, resolved, interactive=True, reinstall=False, quiet=False): packages = self.get_packages_to_install(resolved, reinstall=reinstall) if not packages: return [] if not interactive: return [self.elevate_priv(['zypper', 'install', '-yl']) + packages] else: return [self.elevate_priv(['zypper', 'install']) + packages] rosdep-0.21.0/src/rosdep2/platforms/osx.py000066400000000000000000000331531406544147500204440ustar00rootroot00000000000000# Copyright (c) 2009, Willow Garage, Inc. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # # * Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # * Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # * Neither the name of the Willow Garage, Inc. nor the names of its # contributors may be used to endorse or promote products derived from # this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. # Author Tully Foote/tfoote@willowgarage.com, Ken Conley import subprocess import json import sys import traceback from rospkg.os_detect import OS_OSX, OsDetect from ..core import InstallFailed, RosdepInternalError, InvalidData from .pip import PIP_INSTALLER from .source import SOURCE_INSTALLER from ..installers import PackageManagerInstaller from ..shell_utils import read_stdout # add additional os names for brew, macports (TODO) OSXBREW_OS_NAME = 'osxbrew' BREW_INSTALLER = 'homebrew' MACPORTS_INSTALLER = 'macports' # py3k try: _basestring = basestring except NameError: _basestring = str def register_installers(context): context.set_installer(MACPORTS_INSTALLER, MacportsInstaller()) context.set_installer(BREW_INSTALLER, HomebrewInstaller()) def register_platforms(context): context.add_os_installer_key(OS_OSX, BREW_INSTALLER) context.add_os_installer_key(OS_OSX, MACPORTS_INSTALLER) context.add_os_installer_key(OS_OSX, PIP_INSTALLER) context.add_os_installer_key(OS_OSX, SOURCE_INSTALLER) context.set_default_os_installer_key(OS_OSX, lambda self: BREW_INSTALLER) context.set_os_version_type(OS_OSX, OsDetect.get_codename) def is_port_installed(): try: subprocess.Popen(['port'], stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate() return True except OSError: return False def port_detect(pkgs, exec_fn=None): ret_list = [] if not is_port_installed(): return ret_list if exec_fn is None: exec_fn = read_stdout std_out = exec_fn(['port', 'installed'] + pkgs) for pkg in std_out.split('\n'): pkg_row = pkg.split() if len(pkg_row) == 3 and pkg_row[0] in pkgs and pkg_row[2] == '(active)': ret_list.append(pkg_row[0]) return ret_list class MacportsInstaller(PackageManagerInstaller): """ An implementation of the :class:`Installer` API for use on macports systems. """ def __init__(self): super(MacportsInstaller, self).__init__(port_detect) def get_version_strings(self): try: p = subprocess.Popen( ['port', 'version'], stdout=subprocess.PIPE, stderr=subprocess.PIPE) stdout, stderr = p.communicate() version = stdout.replace('Version: ', '') return ['Macports {}'.format(version.strip())] except OSError: return ['Macports not-found'] def get_install_command(self, resolved, interactive=True, reinstall=False): if not is_port_installed(): raise InstallFailed((MACPORTS_INSTALLER, 'MacPorts is not installed')) packages = self.get_packages_to_install(resolved) if not packages: return [] else: # TODO: interactive return [self.elevate_priv(['port', 'install', p]) for p in packages] def is_brew_installed(): try: subprocess.Popen(['brew'], stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate() return True except OSError: return False class HomebrewResolution(object): """Resolution information for a single package of a Homebrew rosdep.""" def __init__(self, package, install_flags, options): """ :param package: Homebrew package name, possibly fully qualified with tap. :param install_flags: List of strings of additional flags for ``brew install`` and ``brew deps`` command which are not options (e.g. ``--HEAD``) :param options: List of strings of options for the homebrew package. """ self.package = package self.install_flags = install_flags self.options = options def __eq__(self, other): return other.package == self.package and \ other.install_flags == self.install_flags and \ other.options == self.options def __hash__(self): return hash(( type(self), self.package, tuple(self.install_flags), tuple(self.options))) def __str__(self): return ' '.join(self.to_list()) def to_list(self): return [self.package] + self.install_flags + self.options def brew_strip_pkg_name(package): """Strip the tap information of a fully qualified package name. :returns: Unqualified package name. E.g. 'foo-pkg' for input 'ros/hydro/foo-pkg' """ if not isinstance(package, str): # package is a bytes object package = package.decode() return package.split('/')[-1] def brew_detect(resolved, exec_fn=None): """Given a list of resolutions, return the list of installed resolutions. :param resolved: List of HomebrewResolution objects :returns: Filtered list of HomebrewResolution objects """ if exec_fn is None: exec_fn = read_stdout std_out = exec_fn(['brew', 'list']) installed_formulae = std_out.split() def is_installed(r): # TODO: Does not check installed version (stable, devel, HEAD) # TODO: Does not check origin (Tap) of formula # TODO: Does not handle excluding options (e.g. specifying # --without-foo for --with-foo option) # fast fail with a quick check first, then slower check if # really linked and for options if not brew_strip_pkg_name(r.package) in installed_formulae: return False std_out = exec_fn(['brew', 'info', r.package, '--json=v1']) try: pkg_info = json.loads(std_out) pkg_info = pkg_info[0] linked_version = pkg_info['linked_keg'] if not linked_version: return False for spec in pkg_info['installed']: if spec['version'] == linked_version: installed_options = spec['used_options'] break except (ValueError, TypeError): e_type, e, tb = sys.exc_info() raise RosdepInternalError( e, """Error while parsing brew info for '{0}' * Output of `brew info {0} --json=v1`: {1} * Error while parsing: {2}""".format(r.package, std_out, ''.join(traceback.format_exception(e_type, e, tb)))) if set(r.options) <= set(installed_options): return True else: return False # preserve order return list(filter(is_installed, resolved)) class HomebrewInstaller(PackageManagerInstaller): """ An implementation of Installer for use on homebrew systems. Some examples for supported rosdep specifications: # Example 1: flat list of options if only one package defined. foo: osx: homebrew: depends: [bar] options: [--with-quux, --with-quax] packages: [foo-pkg] # Example 2: list of list of options for multiple packages bar: osx: homebrew: options: [[], [--with-quux]] packages: [bar-pkg, bar-pkg-dev] # Example 3: list of options can be shorter than list of packages (filling # up with empty options) baz: osx: homebrew: options: [[--with-quax]] packages: [baz-pkg, baz-pkg-dev] # Example 4: No options is fine. buz: osx: homebrew: packages: [buz-pkg] ``install_flags`` are handled analogously to ``options``. """ def __init__(self): super(HomebrewInstaller, self).__init__(brew_detect, supports_depends=True) self.as_root = False def get_version_strings(self): try: p = subprocess.Popen( ['brew', '--version'], stdout=subprocess.PIPE, stderr=subprocess.PIPE) stdout, stderr = p.communicate() return stdout.splitlines() except OSError: return ['Homebrew not-found'] def resolve(self, rosdep_args): """ See :meth:`Installer.resolve()` """ def coerce_to_list(options): if isinstance(options, list): return options elif isinstance(options, _basestring): return options.split() else: raise InvalidData("Expected list or string for options '%s'" % options) def handle_options(options): # if only one package is specified we allow a flat list of options if len(packages) == 1 and options and not isinstance(options[0], list): options = [options] else: options = list(map(coerce_to_list, options)) # make sure options is a list of list of strings try: valid = all([isinstance(x, _basestring) for option in options for x in option]) except Exception as e: raise InvalidData("Invalid list of options '%s', error: %s" % (options, e)) else: if not valid: raise InvalidData("Invalid list of options '%s'" % options) # allow only fewer or equal number of option lists if len(options) > len(packages): raise InvalidData("More options '%s' than packages '%s'" % (options, packages)) else: options.extend([[]] * (len(packages) - len(options))) return options packages = super(HomebrewInstaller, self).resolve(rosdep_args) resolution = [] if packages: options = [] install_flags = [] if type(rosdep_args) == dict: options = coerce_to_list(rosdep_args.get('options', [])) install_flags = coerce_to_list(rosdep_args.get('install_flags', [])) options = handle_options(options) install_flags = handle_options(install_flags) # packages, options and install_flags now have the same length resolution = map(HomebrewResolution, packages, install_flags, options) return resolution def get_install_command(self, resolved, interactive=True, reinstall=False, quiet=False): # TODO: We should somehow inform the user that we uninstall all versions # of packages and do not keep track of which options have been # activated. Then again, maybe not this would be the # responsibility of the user to before or not use --reinstall. if not is_brew_installed(): raise InstallFailed((BREW_INSTALLER, 'Homebrew is not installed')) resolved = self.get_packages_to_install(resolved, reinstall=reinstall) resolved = self.remove_duplicate_dependencies(resolved) # interactive switch doesn't matter if reinstall: commands = [] for r in resolved: # --force uninstalls all versions of that package commands.append(self.elevate_priv(['brew', 'uninstall', '--force', r.package])) commands.append(self.elevate_priv(['brew', 'install'] + r.to_list())) return commands else: return [self.elevate_priv(['brew', 'install'] + r.to_list()) for r in resolved] def remove_duplicate_dependencies(self, resolved): # TODO: we do not look at options here, however the install check later # will inform use if installed options are not appropriate # TODO: we comapre unqualified package names, ignoring the specifed tap if not is_brew_installed(): raise InstallFailed((BREW_INSTALLER, 'Homebrew is not installed')) # we'll remove dependencies from this copy and return it resolved_copy = list(resolved) # find all dependencies for each package for r in resolved: sub_command = ['brew', 'deps'] + r.to_list() output = subprocess.Popen(sub_command, stdout=subprocess.PIPE).communicate()[0] deps = output.split() for d in deps: # remove duplicate dependency from package list for other in resolved_copy: if brew_strip_pkg_name(other.package) == brew_strip_pkg_name(d): resolved_copy.remove(other) return resolved_copy rosdep-0.21.0/src/rosdep2/platforms/pip.py000066400000000000000000000123301406544147500204150ustar00rootroot00000000000000# Copyright (c) 2009, Willow Garage, Inc. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # # * Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # * Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # * Neither the name of the Willow Garage, Inc. nor the names of its # contributors may be used to endorse or promote products derived from # this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. # Author Tully Foote/tfoote@willowgarage.com from __future__ import print_function import os import pkg_resources import subprocess import sys from ..core import InstallFailed from ..installers import PackageManagerInstaller from ..shell_utils import read_stdout # pip package manager key PIP_INSTALLER = 'pip' def register_installers(context): context.set_installer(PIP_INSTALLER, PipInstaller()) def get_pip_command(): # First try pip2 or pip3 cmd = ['pip' + os.environ['ROS_PYTHON_VERSION']] if is_cmd_available(cmd): return cmd # Second, try using the same python executable since we know that exists if os.environ['ROS_PYTHON_VERSION'] == sys.version[0]: try: import pip except ImportError: pass else: return [sys.executable, '-m', 'pip'] # Finally, try python2 or python3 commands cmd = ['python' + os.environ['ROS_PYTHON_VERSION'], '-m', 'pip'] if is_cmd_available(cmd): return cmd return None def is_cmd_available(cmd): try: subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate() return True except OSError: return False def pip_detect(pkgs, exec_fn=None): """ Given a list of package, return the list of installed packages. :param exec_fn: function to execute Popen and read stdout (for testing) """ pip_cmd = get_pip_command() if not pip_cmd: return [] fallback_to_pip_show = False if exec_fn is None: exec_fn = read_stdout fallback_to_pip_show = True pkg_list = exec_fn(pip_cmd + ['freeze']).split('\n') ret_list = [] for pkg in pkg_list: pkg_row = pkg.split('==') if pkg_row[0] in pkgs: ret_list.append(pkg_row[0]) # Try to detect with the return code of `pip show`. # This can show the existance of things like `argparse` which # otherwise do not show up. # See: # https://github.com/pypa/pip/issues/1570#issuecomment-71111030 if fallback_to_pip_show: for pkg in [p for p in pkgs if p not in ret_list]: # does not see retcode but stdout for old pip to check if installed proc = subprocess.Popen( pip_cmd + ['show', pkg], stdout=subprocess.PIPE, stderr=subprocess.STDOUT ) output, _ = proc.communicate() output = output.strip() if proc.returncode == 0 and output: # `pip show` detected it, add it to the list. ret_list.append(pkg) return ret_list class PipInstaller(PackageManagerInstaller): """ :class:`Installer` support for pip. """ def __init__(self): super(PipInstaller, self).__init__(pip_detect, supports_depends=True) def get_version_strings(self): pip_version = pkg_resources.get_distribution('pip').version setuptools_version = pkg_resources.get_distribution('setuptools').version version_strings = [ 'pip {}'.format(pip_version), 'setuptools {}'.format(setuptools_version), ] return version_strings def get_install_command(self, resolved, interactive=True, reinstall=False, quiet=False): pip_cmd = get_pip_command() if not pip_cmd: raise InstallFailed((PIP_INSTALLER, 'pip is not installed')) packages = self.get_packages_to_install(resolved, reinstall=reinstall) if not packages: return [] cmd = pip_cmd + ['install', '-U'] if quiet: cmd.append('-q') if reinstall: cmd.append('-I') return [self.elevate_priv(cmd + [p]) for p in packages] rosdep-0.21.0/src/rosdep2/platforms/redhat.py000066400000000000000000000217551406544147500211070ustar00rootroot00000000000000# Copyright (c) 2009, Willow Garage, Inc. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # # * Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # * Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # * Neither the name of the Willow Garage, Inc. nor the names of its # contributors may be used to endorse or promote products derived from # this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. # Author Tully Foote/tfoote@willowgarage.com from __future__ import print_function import subprocess import sys from rospkg.os_detect import ( OS_ALMALINUX, OS_CENTOS, OS_FEDORA, OS_ORACLE, OS_RHEL, OS_ROCKY ) from .pip import PIP_INSTALLER from .source import SOURCE_INSTALLER from ..core import rd_debug from ..installers import PackageManagerInstaller from ..shell_utils import read_stdout # dnf package manager key DNF_INSTALLER = 'dnf' # yum package manager key YUM_INSTALLER = 'yum' def register_installers(context): context.set_installer(DNF_INSTALLER, DnfInstaller()) context.set_installer(YUM_INSTALLER, YumInstaller()) def register_platforms(context): register_fedora(context) register_rhel(context) # Aliases register_rhel_clone(context, OS_ALMALINUX) register_rhel_clone(context, OS_CENTOS) register_rhel_clone(context, OS_ORACLE) register_rhel_clone(context, OS_ROCKY) def register_fedora(context): context.add_os_installer_key(OS_FEDORA, PIP_INSTALLER) context.add_os_installer_key(OS_FEDORA, DNF_INSTALLER) context.add_os_installer_key(OS_FEDORA, YUM_INSTALLER) context.add_os_installer_key(OS_FEDORA, SOURCE_INSTALLER) context.set_default_os_installer_key(OS_FEDORA, lambda self: DNF_INSTALLER if self.get_version().isdigit() and int(self.get_version()) > 21 else YUM_INSTALLER) context.set_os_version_type(OS_FEDORA, lambda self: self.get_version() if self.get_version().isdigit() and int(self.get_version()) > 20 else self.get_codename()) def register_rhel(context): context.add_os_installer_key(OS_RHEL, PIP_INSTALLER) context.add_os_installer_key(OS_RHEL, DNF_INSTALLER) context.add_os_installer_key(OS_RHEL, YUM_INSTALLER) context.add_os_installer_key(OS_RHEL, SOURCE_INSTALLER) context.set_default_os_installer_key(OS_RHEL, lambda self: DNF_INSTALLER if self.get_version().split('.', 1)[0].isdigit() and int(self.get_version().split('.', 1)[0]) >= 8 else YUM_INSTALLER) context.set_os_version_type(OS_RHEL, lambda self: self.get_version().split('.', 1)[0]) def register_rhel_clone(context, os_rhel_clone_name): # Some distributions are rebuilds of RHEL and can be treated like RHEL # because they are versioned the same and contain the same packages. (os_name, os_version) = context.get_os_name_and_version() if os_name == os_rhel_clone_name and not context.os_override: print('rosdep detected OS: [%s] aliasing it to: [%s]' % (os_rhel_clone_name, OS_RHEL), file=sys.stderr) context.set_os_override(OS_RHEL, os_version.split('.', 1)[0]) def rpm_detect_py(packages): ret_list = [] import rpm ts = rpm.TransactionSet() for raw_req in packages: req = rpm_expand_py(raw_req) rpms = ts.dbMatch(rpm.RPMTAG_PROVIDES, req) if len(rpms) > 0: ret_list += [raw_req] return ret_list def rpm_detect_cmd(raw_packages, exec_fn=None): ret_list = [] if exec_fn is None: exec_fn = read_stdout packages = [rpm_expand_cmd(package, exec_fn) for package in raw_packages] cmd = ['rpm', '-q', '--whatprovides', '--qf', '[%{PROVIDES}\n]'] cmd.extend(packages) std_out = exec_fn(cmd) out_lines = std_out.split('\n') for index, package in enumerate(packages): if package in out_lines: ret_list.append(raw_packages[index]) return ret_list def rpm_detect(packages, exec_fn=None): try: return rpm_detect_py(packages) except ImportError: rd_debug('Failed to import rpm module, falling back to slow method') return rpm_detect_cmd(packages, exec_fn) def rpm_expand_py(macro): import rpm if '%' not in macro: return macro expanded = rpm.expandMacro(macro) rd_debug('Expanded rpm macro in \'%s\' to \'%s\'' % (macro, expanded)) return expanded def rpm_expand_cmd(macro, exec_fn=None): if '%' not in macro: return macro cmd = ['rpm', '-E', macro] if exec_fn is None: exec_fn = read_stdout expanded = exec_fn(cmd).strip() rd_debug('Expanded rpm macro in \'%s\' to \'%s\'' % (macro, expanded)) return expanded def rpm_expand(package, exec_fn=None): try: return rpm_expand_py(package) except ImportError: return rpm_expand_cmd(package, exec_fn) def get_rpm_version_py(): from rpm import __version__ as rpm_version return rpm_version def get_rpm_version_cmd(): output = subprocess.check_output(['rpm', '--version']) version = output.splitlines()[0].split(b' ')[-1].decode() return version def get_rpm_version(): try: return get_rpm_version_py() except ImportError: return get_rpm_version_cmd() class DnfInstaller(PackageManagerInstaller): """ This class provides the functions for installing using dnf it's methods partially implement the Rosdep OS api to complement the roslib.OSDetect API. """ def __init__(self): super(DnfInstaller, self).__init__(rpm_detect) def get_version_strings(self): dnf_output = subprocess.check_output(['dnf', '--version']) dnf_version = dnf_output.splitlines()[0].decode() version_strings = [ 'dnf {}'.format(dnf_version), 'rpm {}'.format(get_rpm_version()), ] return version_strings def get_install_command(self, resolved, interactive=True, reinstall=False, quiet=False): raw_packages = self.get_packages_to_install(resolved, reinstall=reinstall) packages = [rpm_expand(package) for package in raw_packages] if not packages: return [] elif not interactive and quiet: return [self.elevate_priv(['dnf', '--assumeyes', '--quiet', '--setopt=strict=0', 'install']) + packages] elif quiet: return [self.elevate_priv(['dnf', '--quiet', '--setopt=strict=0', 'install']) + packages] elif not interactive: return [self.elevate_priv(['dnf', '--assumeyes', '--setopt=strict=0', 'install']) + packages] else: return [self.elevate_priv(['dnf', '--setopt=strict=0', 'install']) + packages] class YumInstaller(PackageManagerInstaller): """ This class provides the functions for installing using yum it's methods partially implement the Rosdep OS api to complement the roslib.OSDetect API. """ def __init__(self): super(YumInstaller, self).__init__(rpm_detect) def get_version_strings(self): yum_output = subprocess.check_output(['yum', '--version']) yum_version = yum_output.splitlines()[0].decode() version_strings = [ 'yum {}'.format(yum_version), 'rpm {}'.format(get_rpm_version()), ] return version_strings def get_install_command(self, resolved, interactive=True, reinstall=False, quiet=False): raw_packages = self.get_packages_to_install(resolved, reinstall=reinstall) packages = [rpm_expand(package) for package in raw_packages] if not packages: return [] elif not interactive and quiet: return [self.elevate_priv(['yum', '--assumeyes', '--quiet', '--skip-broken', 'install']) + packages] elif quiet: return [self.elevate_priv(['yum', '--quiet', '--skip-broken', 'install']) + packages] elif not interactive: return [self.elevate_priv(['yum', '--assumeyes', '--skip-broken', 'install']) + packages] else: return [self.elevate_priv(['yum', '--skip-broken', 'install']) + packages] rosdep-0.21.0/src/rosdep2/platforms/slackware.py000066400000000000000000000105451406544147500216070ustar00rootroot00000000000000# Copyright (c) 2009, Willow Garage, Inc. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # # * Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # * Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # * Neither the name of the Willow Garage, Inc. nor the names of its # contributors may be used to endorse or promote products derived from # this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. # Author Nikolay Nikolov/niko.b.nikolov@gmail.com import subprocess import os from ..core import InstallFailed from .pip import PIP_INSTALLER from ..installers import PackageManagerInstaller from .source import SOURCE_INSTALLER from ..shell_utils import read_stdout SLACKWARE_OS_NAME = 'slackware' SBOTOOLS_INSTALLER = 'sbotools' SLACKPKG_INSTALLER = 'slackpkg' def register_installers(context): context.set_installer(SBOTOOLS_INSTALLER, SbotoolsInstaller()) context.set_installer(SLACKPKG_INSTALLER, SlackpkgInstaller()) def register_platforms(context): context.add_os_installer_key(SLACKWARE_OS_NAME, SBOTOOLS_INSTALLER) context.add_os_installer_key(SLACKWARE_OS_NAME, PIP_INSTALLER) context.add_os_installer_key(SLACKWARE_OS_NAME, SOURCE_INSTALLER) context.add_os_installer_key(SLACKWARE_OS_NAME, SLACKPKG_INSTALLER) context.set_default_os_installer_key(SLACKWARE_OS_NAME, lambda self: SBOTOOLS_INSTALLER) def sbotools_available(): if not os.path.exists('/usr/sbin/sboinstall'): return False return True def sbotools_detect_single(p): pkg_list = read_stdout(['ls', '/var/log/packages']) p = subprocess.Popen(['grep', '-i', '^' + p], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE) p.communicate(pkg_list) return not p.returncode def sbotools_detect(packages): return [p for p in packages if sbotools_detect_single(p)] class SbotoolsInstaller(PackageManagerInstaller): def __init__(self): super(SbotoolsInstaller, self).__init__(sbotools_detect) def get_install_command(self, resolved, interactive=True, reinstall=False, quiet=False): if not sbotools_available(): raise InstallFailed((SBOTOOLS_INSTALLER, 'sbotools is not installed')) packages = self.get_packages_to_install(resolved, reinstall=reinstall) if not packages: return [] cmd = ['sboinstall'] return [self.elevate_priv(cmd + [p] + ['-j']) for p in packages] def slackpkg_available(): if not os.path.exists('/usr/sbin/slackpkg'): return False return True def slackpkg_detect_single(p): return not subprocess.call(['slackpkg', 'search', p], stdout=subprocess.PIPE, stderr=subprocess.PIPE) def slackpkg_detect(packages): return [p for p in packages if slackpkg_detect_single(p)] class SlackpkgInstaller(PackageManagerInstaller): def __init__(self): super(SlackpkgInstaller, self).__init__(slackpkg_detect) def get_install_command(self, resolved, interactive=True, reinstall=False, quiet=False): # slackpkg does not provide non-interactive mode packages = self.get_packages_to_install(resolved, reinstall=reinstall) if not packages: return [] else: return [self.elevate_priv(['slackpkg', 'install', p]) for p in packages] rosdep-0.21.0/src/rosdep2/platforms/source.py000066400000000000000000000261751406544147500211410ustar00rootroot00000000000000# Copyright (c) 2011, Willow Garage, Inc. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # # * Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # * Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # * Neither the name of the Willow Garage, Inc. nor the names of its # contributors may be used to endorse or promote products derived from # this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. # Author Tully Foote/tfoote@willowgarage.com from __future__ import print_function import os try: from urllib.request import urlopen from urllib.request import urlretrieve from urllib.error import URLError except ImportError: from urllib2 import urlopen from urllib import urlretrieve from urllib2 import URLError import hashlib import yaml from ..core import rd_debug, InvalidData from ..installers import PackageManagerInstaller, InstallFailed from ..shell_utils import create_tempfile_from_string_and_execute SOURCE_INSTALLER = 'source' def register_installers(context): context.set_installer(SOURCE_INSTALLER, SourceInstaller()) class InvalidRdmanifest(Exception): """ rdmanifest format is invalid. """ pass class DownloadFailed(Exception): """ File download failed either due to i/o issues or md5sum validation. """ pass def _sub_fetch_file(url, md5sum=None): """ Sub-routine of _fetch_file :raises: :exc:`DownloadFailed` """ contents = '' try: fh = urlopen(url) contents = fh.read() if md5sum is not None: filehash = hashlib.md5(contents).hexdigest() if md5sum and filehash != md5sum: raise DownloadFailed("md5sum didn't match for %s. Expected %s got %s" % (url, md5sum, filehash)) except URLError as ex: raise DownloadFailed(str(ex)) return contents def get_file_hash(filename): md5 = hashlib.md5() with open(filename, 'rb') as f: for chunk in iter(lambda: f.read(8192), b''): md5.update(chunk) return md5.hexdigest() def fetch_file(url, md5sum=None): """ Download file. Optionally validate with md5sum :param url: URL to download :param md5sum: Expected MD5 sum of contents """ error = contents = '' try: contents = _sub_fetch_file(url, md5sum) if not isinstance(contents, str): contents = contents.decode('utf-8') except DownloadFailed as e: rd_debug('Download of file %s failed' % (url)) error = str(e) return contents, error def load_rdmanifest(contents): """ :raises: :exc:`InvalidRdmanifest` """ try: return yaml.safe_load(contents) except yaml.scanner.ScannerError as ex: raise InvalidRdmanifest('Failed to parse yaml in %s: Error: %s' % (contents, ex)) def download_rdmanifest(url, md5sum, alt_url=None): """ :param url: URL to download rdmanifest from :param md5sum: MD5 sum for validating url download, or None :returns: (contents of rdmanifest, download_url). download_url is either *url* or *alt_url* and indicates which of the locations contents was generated from. :raises: :exc:`DownloadFailed` :raises: :exc:`InvalidRdmanifest` """ # fetch the manifest download_url = url error_prefix = 'Failed to load a rdmanifest from %s: ' % (url) contents, error = fetch_file(download_url, md5sum) # - try the backup url if not contents and alt_url: error_prefix = 'Failed to load a rdmanifest from either %s or %s: ' % (url, alt_url) download_url = alt_url contents, error = fetch_file(download_url, md5sum) if not contents: raise DownloadFailed(error_prefix + error) manifest = load_rdmanifest(contents) return manifest, download_url # TODO: create SourceInstall instance objects class SourceInstall(object): def __init__(self): self.manifest = self.manifest_url = None self.install_command = self.check_presence_command = None self.exec_path = None self.tarball = self.alternate_tarball = None self.tarball_md5sum = None self.dependencies = None @staticmethod def from_manifest(manifest, manifest_url): r = SourceInstall() r.manifest = manifest r.manifest_url = manifest_url rd_debug('Loading manifest:\n{{{%s\n}}}\n' % manifest) r.install_command = manifest.get('install-script', '') r.check_presence_command = manifest.get('check-presence-script', '') r.exec_path = manifest.get('exec-path', '.') try: r.tarball = manifest['uri'] except KeyError: raise InvalidRdmanifest('uri required for source rosdeps') r.alternate_tarball = manifest.get('alternate-uri') r.tarball_md5sum = manifest.get('md5sum') r.dependencies = manifest.get('depends', []) return r def __str__(self): return 'source: %s' % (self.manifest_url) __repr__ = __str__ def is_source_installed(source_item, exec_fn=None): return create_tempfile_from_string_and_execute(source_item.check_presence_command, exec_fn=exec_fn) def source_detect(pkgs, exec_fn=None): return [x for x in pkgs if is_source_installed(x, exec_fn=exec_fn)] class SourceInstaller(PackageManagerInstaller): def __init__(self): super(SourceInstaller, self).__init__(source_detect, supports_depends=True) self._rdmanifest_cache = {} def resolve(self, rosdep_args): """ :raises: :exc:`InvalidData` If format invalid or unable to retrieve rdmanifests. :returns: [SourceInstall] instances. """ try: url = rosdep_args['uri'] except KeyError: raise InvalidData("'uri' key required for source rosdeps") alt_url = rosdep_args.get('alternate-uri', None) md5sum = rosdep_args.get('md5sum', None) # load manifest from cache or from web manifest = None if url in self._rdmanifest_cache: return self._rdmanifest_cache[url] elif alt_url in self._rdmanifest_cache: return self._rdmanifest_cache[alt_url] try: rd_debug('Downloading manifest [%s], mirror [%s]' % (url, alt_url)) manifest, download_url = download_rdmanifest(url, md5sum, alt_url) resolved = SourceInstall.from_manifest(manifest, download_url) self._rdmanifest_cache[download_url] = [resolved] return [resolved] except DownloadFailed as ex: # not sure this should be masked this way raise InvalidData(str(ex)) except InvalidRdmanifest as ex: raise InvalidData(str(ex)) def get_install_command(self, resolved, interactive=True, reinstall=False, quiet=False): # Instead of attempting to describe the source-install steps # inside of the rosdep command chain, we shell out to an # external rosdep-source command. This separation means that # users can manually invoke rosdep-source and also keeps # 'get_install_command()' cleaner. packages = self.get_packages_to_install(resolved, reinstall=reinstall) commands = [] for p in packages: commands.append(['rosdep-source', 'install', p.manifest_url]) return commands def get_depends(self, rosdep_args): deps = rosdep_args.get('depends', []) for r in self.resolve(rosdep_args): deps.extend(r.dependencies) return deps def install_from_file(rdmanifest_file): with open(rdmanifest_file, 'r') as f: contents = f.read() manifest = load_rdmanifest(contents) install_source(SourceInstall.from_manifest(manifest, rdmanifest_file)) def install_from_url(rdmanifest_url): manifest, download_url = download_rdmanifest(rdmanifest_url, None, None) install_source(SourceInstall.from_manifest(manifest, download_url)) def install_source(resolved): import shutil import tarfile import tempfile tempdir = tempfile.mkdtemp() rd_debug('created tmpdir [%s]' % (tempdir)) rd_debug('Fetching tarball %s' % resolved.tarball) # compute desired download path filename = os.path.join(tempdir, os.path.basename(resolved.tarball)) f = urlretrieve(resolved.tarball, filename) assert f[0] == filename if resolved.tarball_md5sum: rd_debug('checking md5sum on tarball') hash1 = get_file_hash(filename) if resolved.tarball_md5sum != hash1: # try backup tarball if it is defined if resolved.alternate_tarball: f = urlretrieve(resolved.alternate_tarball) filename = f[0] hash2 = get_file_hash(filename) if resolved.tarball_md5sum != hash2: failure = (SOURCE_INSTALLER, 'md5sum check on %s and %s failed. Expected %s got %s and %s' % (resolved.tarball, resolved.alternate_tarball, resolved.tarball_md5sum, hash1, hash2)) raise InstallFailed(failure=failure) else: raise InstallFailed((SOURCE_INSTALLER, 'md5sum check on %s failed. Expected %s got %s ' % (resolved.tarball, resolved.tarball_md5sum, hash1))) else: rd_debug('No md5sum defined for tarball, not checking.') try: # This is a bit hacky. Basically, don't unpack dmg files as # we are currently using source rosdeps for Nvidia Cg. if not filename.endswith('.dmg'): rd_debug('Extracting tarball') tarf = tarfile.open(filename) tarf.extractall(tempdir) else: rd_debug('Bypassing tarball extraction as it is a dmg') rd_debug('Running installation script') success = create_tempfile_from_string_and_execute(resolved.install_command, os.path.join(tempdir, resolved.exec_path)) if success: rd_debug('successfully executed script') else: raise InstallFailed((SOURCE_INSTALLER, 'installation script returned with error code')) finally: rd_debug('cleaning up tmpdir [%s]' % (tempdir)) shutil.rmtree(tempdir) rosdep-0.21.0/src/rosdep2/rep3.py000066400000000000000000000063041406544147500164730ustar00rootroot00000000000000# Copyright (c) 2012, Willow Garage, Inc. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # # * Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # * Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # * Neither the name of the Willow Garage, Inc. nor the names of its # contributors may be used to endorse or promote products derived from # this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. try: from urllib.request import urlopen except ImportError: from urllib2 import urlopen import yaml import warnings from .core import DownloadFailure from .rosdistrohelper import PreRep137Warning # location of targets file for processing gbpdistro files REP3_TARGETS_URL = 'https://raw.githubusercontent.com/ros/rosdistro/master/releases/targets.yaml' # seconds to wait before aborting download of gbpdistro data DOWNLOAD_TIMEOUT = 15.0 def download_targets_data(targets_url=None): """ Download REP 3 targets file and unmarshal from YAML. DEPRECATED: this function is deprecated. List of targets should be obtained from the rosdistro module. The body of this function is an example. :param target_url: override URL of platform targets file. Defaults to ``REP3_TARGETS_URL``. :raises: :exc:`DownloadFailure` :raises: :exc:`InvalidData` If targets file does not pass cursory validation checks. """ warnings.warn('deprecated, use rosdistro instead', PreRep137Warning) if targets_url is None: targets_url = REP3_TARGETS_URL try: f = urlopen(targets_url, timeout=DOWNLOAD_TIMEOUT) text = f.read() f.close() targets_data = yaml.safe_load(text) except Exception as e: raise DownloadFailure('Failed to download target platform data for gbpdistro:\n\t%s' % (str(e))) if type(targets_data) == list: # convert to dictionary new_targets_data = {} for t in targets_data: platform = list(t.keys())[0] new_targets_data[platform] = t[platform] targets_data = new_targets_data return targets_data rosdep-0.21.0/src/rosdep2/rosdistrohelper.py000066400000000000000000000056011406544147500210510ustar00rootroot00000000000000# Copyright (c) 2013, Open Source Robotics Foundation # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # # * Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # * Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # * Neither the name of the Willow Garage, Inc. nor the names of its # contributors may be used to endorse or promote products derived from # this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. # Author Paul Mathieu/paul@osrfoundation.org import rosdistro class PreRep137Warning(UserWarning): pass class _RDCache: index_url = None index = None release_files = {} class ReleaseFile(object): def __init__(self, dist_file): self.repositories = {} for repo_name in dist_file.repositories.keys(): repo = dist_file.repositories[repo_name].release_repository if repo: self.repositories[repo_name] = repo self.platforms = dist_file.release_platforms def _check_cache(): if _RDCache.index_url != rosdistro.get_index_url(): _RDCache.index_url = rosdistro.get_index_url() _RDCache.index = None _RDCache.release_files = {} def get_index_url(): _check_cache() return _RDCache.index_url def get_index(): _check_cache() if _RDCache.index is None: _RDCache.index = rosdistro.get_index(_RDCache.index_url) return _RDCache.index def get_release_file(distro): _check_cache() if distro not in _RDCache.release_files: dist_file = rosdistro.get_distribution_file(get_index(), distro) _RDCache.release_files[distro] = ReleaseFile(dist_file) return _RDCache.release_files[distro] def get_targets(): return dict((d, get_release_file(d).platforms) for d in get_index().distributions) rosdep-0.21.0/src/rosdep2/rospack.py000066400000000000000000000056001406544147500172620ustar00rootroot00000000000000# Copyright (c) 2012, Willow Garage, Inc. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # # * Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # * Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # * Neither the name of the Willow Garage, Inc. nor the names of its # contributors may be used to endorse or promote products derived from # this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. # Author Dirk Thomas/dthomas@willowgarage.com """ API provided for rospack to determine if a dependency is a ROSpackage or a system dependency """ from __future__ import print_function import subprocess from .main import _get_default_RosdepLookup from .rospkg_loader import DEFAULT_VIEW_KEY from .sources_list import get_sources_cache_dir def call_pkg_config(option, pkg_name): try: value = subprocess.check_output(['pkg-config', option, pkg_name]) return value.strip() except subprocess.CalledProcessError: return None def init_rospack_interface(): class Options(object): def __init__(self): self.os_override = None self.sources_cache_dir = get_sources_cache_dir() self.verbose = False self.dependency_types = [] lookup = _get_default_RosdepLookup(Options()) return lookup.get_rosdep_view(DEFAULT_VIEW_KEY) def is_view_empty(view): return len(view.rosdep_defs) == 0 def is_ros_package(view, rosdep_name): return _ros_flag(view, rosdep_name, True) def is_system_dependency(view, rosdep_name): return _ros_flag(view, rosdep_name, False) def _ros_flag(view, rosdep_name, value): try: d = view.lookup(rosdep_name) except KeyError: return False ros_flag = '_is_ros' in d.data.keys() return ros_flag == value rosdep-0.21.0/src/rosdep2/rospkg_loader.py000066400000000000000000000170301406544147500204530ustar00rootroot00000000000000# Copyright (c) 2011, Willow Garage, Inc. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # # * Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # * Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # * Neither the name of the Willow Garage, Inc. nor the names of its # contributors may be used to endorse or promote products derived from # this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. # Author Ken Conley/kwc@willowgarage.com """ Library for loading rosdep files from the ROS package/stack filesystem. """ from __future__ import print_function import os import catkin_pkg.package import rospkg from .catkin_packages import VALID_DEPENDENCY_TYPES from .loader import RosdepLoader # Default view key is the view that packages that are not in stacks # see. It is the root of all dependencies. It is superceded by an # explicit underlay_key. DEFAULT_VIEW_KEY = '*default*' # Implementation details: this API was originally conceived under the # rosdep 1 design. It has since been retrofitted for the rosdep 2 # design, which means it is a bit overbuilt. There really is no need # for a notion of views for rospkg -- all rospkgs have the same view. # It we be nice to refactor this API into something much, much # simpler, which would probably involve merging RosPkgLoader and # SourcesListLoader. RosPkgLoader would provide identification of # resources and SourcesListLoader would build a *single* view that was # no longer resource-dependent. class RosPkgLoader(RosdepLoader): def __init__(self, rospack=None, rosstack=None, underlay_key=None, dependency_types=[]): """ :param underlay_key: If set, all views loaded by this loader will depend on this key. """ if rospack is None: rospack = rospkg.RosPack() if rosstack is None: rosstack = rospkg.RosStack() self._rospack = rospack self._rosstack = rosstack self._rosdep_yaml_cache = {} self._underlay_key = underlay_key # cache computed list of loadable resources self._loadable_resource_cache = None self._catkin_packages_cache = None default_dep_types = VALID_DEPENDENCY_TYPES - {'doc'} self.include_dep_types = VALID_DEPENDENCY_TYPES.intersection(set(dependency_types)) if dependency_types else default_dep_types def load_view(self, view_name, rosdep_db, verbose=False): """ Load view data into *rosdep_db*. If the view has already been loaded into *rosdep_db*, this method does nothing. If view has no rosdep data, it will be initialized with an empty data map. :raises: :exc:`InvalidData` if view rosdep.yaml is invalid :raises: :exc:`rospkg.ResourceNotFound` if view cannot be located :returns: ``True`` if view was loaded. ``False`` if view was already loaded. """ if rosdep_db.is_loaded(view_name): return if view_name not in self.get_loadable_views(): raise rospkg.ResourceNotFound(view_name) elif view_name == 'invalid': raise rospkg.ResourceNotFound('FOUND' + view_name + str(self.get_loadable_views())) if verbose: print('loading view [%s] with rospkg loader' % (view_name)) # chain into underlay if set if self._underlay_key: view_dependencies = [self._underlay_key] else: view_dependencies = [] # no rospkg view has actual data rosdep_db.set_view_data(view_name, {}, view_dependencies, '') def get_loadable_views(self): """ 'Views' map to ROS stack names. """ return list(self._rosstack.list()) + [DEFAULT_VIEW_KEY] def get_loadable_resources(self): """ 'Resources' map to ROS packages names. """ if not self._loadable_resource_cache: self._loadable_resource_cache = list(self._rospack.list()) return self._loadable_resource_cache def get_catkin_paths(self): if not self._catkin_packages_cache: def find_catkin_paths(src): return map(lambda x: (x, src.get_path(x)), filter(lambda x: src.get_manifest(x).is_catkin, src.list())) self._catkin_packages_cache = dict(find_catkin_paths(self._rospack)) self._catkin_packages_cache.update(find_catkin_paths(self._rosstack)) return self._catkin_packages_cache def get_rosdeps(self, resource_name, implicit=True): """ If *resource_name* is a stack, returns an empty list. :raises: :exc:`rospkg.ResourceNotFound` if *resource_name* cannot be found. """ if resource_name in self.get_catkin_paths(): pkg = catkin_pkg.package.parse_package(self.get_catkin_paths()[resource_name]) pkg.evaluate_conditions(os.environ) deps = sum((getattr(pkg, '{}_depends'.format(d)) for d in self.include_dep_types), []) return [d.name for d in deps if d.evaluated_condition] elif resource_name in self.get_loadable_resources(): rosdeps = set(self._rospack.get_rosdeps(resource_name, implicit=False)) if implicit: # This resource is a manifest.xml, but it might depend on things with a package.xml # Make sure they get a chance to evaluate conditions for dep in self._rospack.get_depends(resource_name): rosdeps = rosdeps.union(set(self.get_rosdeps(dep, implicit=True))) return list(rosdeps) elif resource_name in self._rosstack.list(): # stacks currently do not have rosdeps of their own, implicit or otherwise return [] else: raise rospkg.ResourceNotFound(resource_name) def is_metapackage(self, resource_name): if resource_name in self._rosstack.list(): m = self._rosstack.get_manifest(resource_name) return m.is_catkin return False def get_view_key(self, resource_name): """ Map *resource_name* to a view key. In rospkg, this maps the DEFAULT_VIEW_KEY if *resource_name* exists. :raises: :exc:`rospkg.ResourceNotFound` """ if ( resource_name in self.get_catkin_paths() or resource_name in self.get_loadable_resources() ): return DEFAULT_VIEW_KEY else: raise rospkg.ResourceNotFound(resource_name) rosdep-0.21.0/src/rosdep2/shell_utils.py000066400000000000000000000077221406544147500201560ustar00rootroot00000000000000# Copyright (c) 2009, Willow Garage, Inc. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # # * Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # * Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # * Neither the name of the Willow Garage, Inc. nor the names of its # contributors may be used to endorse or promote products derived from # this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. # Author Tully Foote/tfoote@willowgarage.com from __future__ import print_function import os import sys import stat import subprocess import tempfile from .core import rd_debug if sys.hexversion > 0x03000000: # Python3 python3 = True else: python3 = False env = dict(os.environ) env['LANG'] = 'C' def read_stdout(cmd, capture_stderr=False): """ Execute given command and return stdout and if requested also stderr. :param cmd: command in a form that Popen understands (list of strings or one string) :param suppress_stderr: If evaluates to True, capture output from stderr as well and return it as well. :return: if `capture_stderr` is evaluates to False, return the stdout of the program as string (Note: stderr will be printed to the running terminal). If it evaluates to True, tuple of strings: stdout output and standard error output each as string. """ if capture_stderr: p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, env=env) std_out, std_err = p.communicate() if python3: return std_out.decode(), std_err.decode() else: return std_out, std_err else: p = subprocess.Popen(cmd, stdout=subprocess.PIPE, env=env) std_out, std_err = p.communicate() # ignore stderr if python3: return std_out.decode() else: return std_out def create_tempfile_from_string_and_execute(string_script, path=None, exec_fn=None): """ :param path: (optional) path to temp directory, or ``None`` to use default temp directory, ``str`` :param exec_fn: override subprocess.call with alternate executor (for testing) """ if path is None: path = tempfile.gettempdir() result = 1 try: fh = tempfile.NamedTemporaryFile('w', delete=False) fh.write(string_script) fh.close() rd_debug('Executing script below with cwd=%s\n{{{\n%s\n}}}\n' % (path, string_script)) try: os.chmod(fh.name, stat.S_IRWXU) if exec_fn is None: result = subprocess.call(fh.name, cwd=path) else: result = exec_fn(fh.name, cwd=path) except OSError as ex: print('Execution failed with OSError: %s' % (ex)) finally: if os.path.exists(fh.name): os.remove(fh.name) rd_debug('Return code was: %s' % (result)) return result == 0 rosdep-0.21.0/src/rosdep2/sources_list.py000066400000000000000000000612241406544147500203420ustar00rootroot00000000000000# Copyright (c) 2012, Willow Garage, Inc. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # # * Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # * Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # * Neither the name of the Willow Garage, Inc. nor the names of its # contributors may be used to endorse or promote products derived from # this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. # Author Ken Conley/kwc@willowgarage.com from __future__ import print_function import os import sys import yaml try: from urllib.request import urlopen from urllib.error import URLError import urllib.request as request except ImportError: from urllib2 import urlopen from urllib2 import URLError import urllib2 as request try: import cPickle as pickle except ImportError: import pickle from .cache_tools import compute_filename_hash, PICKLE_CACHE_EXT, write_atomic, write_cache_file from .core import InvalidData, DownloadFailure, CachePermissionError from .gbpdistro_support import get_gbprepo_as_rosdep_data, download_gbpdistro_as_rosdep_data from .meta import MetaDatabase from ._version import __version__ try: import urlparse except ImportError: import urllib.parse as urlparse # py3k try: import httplib except ImportError: import http.client as httplib # py3k import rospkg import rospkg.distro from .loader import RosdepLoader from .rosdistrohelper import get_index, get_index_url # default file to download with 'init' command in order to bootstrap # rosdep DEFAULT_SOURCES_LIST_URL = 'https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/sources.list.d/20-default.list' # seconds to wait before aborting download of rosdep data DOWNLOAD_TIMEOUT = 15.0 SOURCES_LIST_DIR = 'sources.list.d' SOURCES_CACHE_DIR = 'sources.cache' # name of index file for sources cache CACHE_INDEX = 'index' # extension for binary cache SOURCE_PATH_ENV = 'ROSDEP_SOURCE_PATH' def get_sources_list_dirs(source_list_dir): if SOURCE_PATH_ENV in os.environ: sdirs = os.environ[SOURCE_PATH_ENV].split(os.pathsep) else: sdirs = [source_list_dir] for p in list(sdirs): if not os.path.exists(p): sdirs.remove(p) return sdirs def get_sources_list_dir(): # base of where we read config files from # TODO: windows if 0: # we can't use etc/ros because environment config does not carry over under sudo etc_ros = rospkg.get_etc_ros_dir() else: etc_ros = '/etc/ros' # compute default system wide sources directory sys_sources_list_dir = os.path.join(etc_ros, 'rosdep', SOURCES_LIST_DIR) sources_list_dirs = get_sources_list_dirs(sys_sources_list_dir) if sources_list_dirs: return sources_list_dirs[0] else: return sys_sources_list_dir def get_default_sources_list_file(): return os.path.join(get_sources_list_dir(), '20-default.list') def get_sources_cache_dir(): ros_home = rospkg.get_ros_home() return os.path.join(ros_home, 'rosdep', SOURCES_CACHE_DIR) # Default rosdep.yaml format. For now this is the only valid type and # is specified for future compatibility. TYPE_YAML = 'yaml' # git-buildpackage repo list TYPE_GBPDISTRO = 'gbpdistro' VALID_TYPES = [TYPE_YAML, TYPE_GBPDISTRO] class DataSource(object): def __init__(self, type_, url, tags, origin=None): """ :param type_: data source type, e.g. TYPE_YAML, TYPE_GBPDISTRO :param url: URL of data location. For file resources, must start with the file:// scheme. For remote resources, URL must include a path. :param tags: tags for matching data source to configurations :param origin: filename or other indicator of where data came from for debugging. :raises: :exc:`ValueError` if parameters do not validate """ # validate inputs if type_ not in VALID_TYPES: raise ValueError('type must be one of [%s]' % (','.join(VALID_TYPES))) parsed = urlparse.urlparse(url) if not parsed.scheme or (parsed.scheme != 'file' and not parsed.netloc) or parsed.path in ('', '/'): raise ValueError('url must be a fully-specified URL with scheme, hostname, and path: %s' % (str(url))) if not type(tags) == list: raise ValueError('tags must be a list: %s' % (str(tags))) self.type = type_ self.tags = tags self.url = url self.origin = origin def __eq__(self, other): return isinstance(other, DataSource) and \ self.type == other.type and \ self.tags == other.tags and \ self.url == other.url and \ self.origin == other.origin def __str__(self): if self.origin: return '[%s]:\n%s %s %s' % (self.origin, self.type, self.url, ' '.join(self.tags)) else: return '%s %s %s' % (self.type, self.url, ' '.join(self.tags)) def __repr__(self): return repr((self.type, self.url, self.tags, self.origin)) class RosDistroSource(DataSource): def __init__(self, distro): self.type = TYPE_GBPDISTRO self.tags = [distro] # In this case self.url is a list if REP-143 is being used self.url = get_index().distributions[distro]['distribution'] self.origin = None # create function we can pass in as model to parse_source_data. The # function emulates the CachedDataSource constructor but does the # necessary full filepath calculation and loading of data. def cache_data_source_loader(sources_cache_dir, verbose=False): def create_model(type_, uri, tags, origin=None): # compute the filename has from the URL filename = compute_filename_hash(uri) filepath = os.path.join(sources_cache_dir, filename) pickle_filepath = filepath + PICKLE_CACHE_EXT if os.path.exists(pickle_filepath): if verbose: print('loading cached data source:\n\t%s\n\t%s' % (uri, pickle_filepath), file=sys.stderr) with open(pickle_filepath, 'rb') as f: rosdep_data = pickle.loads(f.read()) elif os.path.exists(filepath): if verbose: print('loading cached data source:\n\t%s\n\t%s' % (uri, filepath), file=sys.stderr) with open(filepath) as f: rosdep_data = yaml.safe_load(f.read()) else: rosdep_data = {} return CachedDataSource(type_, uri, tags, rosdep_data, origin=filepath) return create_model class CachedDataSource(object): def __init__(self, type_, url, tags, rosdep_data, origin=None): """ Stores data source and loaded rosdep data for that source. NOTE: this is not a subclass of DataSource, though it's API is duck-type compatible with the DataSource API. """ self.source = DataSource(type_, url, tags, origin=origin) self.rosdep_data = rosdep_data def __eq__(self, other): try: return self.source == other.source and \ self.rosdep_data == other.rosdep_data except AttributeError: return False def __str__(self): return '%s\n%s' % (self.source, self.rosdep_data) def __repr__(self): return repr((self.type, self.url, self.tags, self.rosdep_data, self.origin)) @property def type(self): """ :returns: data source type """ return self.source.type @property def url(self): """ :returns: data source URL """ return self.source.url @property def tags(self): """ :returns: data source tags """ return self.source.tags @property def origin(self): """ :returns: data source origin, if set, or ``None`` """ return self.source.origin class DataSourceMatcher(object): def __init__(self, tags): self.tags = tags def matches(self, rosdep_data_source): """ Check if the datasource matches this configuration. :param rosdep_data_source: :class:`DataSource` """ # all of the rosdep_data_source tags must be in our matcher tags return not any(set(rosdep_data_source.tags) - set(self.tags)) @staticmethod def create_default(os_override=None): """ Create a :class:`DataSourceMatcher` to match the current configuration. :param os_override: (os_name, os_codename) tuple to override OS detection :returns: :class:`DataSourceMatcher` """ distro_name = rospkg.distro.current_distro_codename() if os_override is None: os_detect = rospkg.os_detect.OsDetect() os_name, os_version, os_codename = os_detect.detect_os() else: os_name, os_codename = os_override tags = [t for t in (distro_name, os_name, os_codename) if t] return DataSourceMatcher(tags) def download_rosdep_data(url): """ :raises: :exc:`DownloadFailure` If data cannot be retrieved (e.g. 404, bad YAML format, server down). """ try: # http/https URLs need custom requests to specify the user-agent, since some repositories reject # requests from the default user-agent. if url.startswith("http://") or url.startswith("https://"): url_request = request.Request(url, headers={'User-Agent': 'rosdep/{version}'.format(version=__version__)}) else: url_request = url f = urlopen(url_request, timeout=DOWNLOAD_TIMEOUT) text = f.read() f.close() data = yaml.safe_load(text) if type(data) != dict: raise DownloadFailure('rosdep data from [%s] is not a YAML dictionary' % (url)) return data except (URLError, httplib.HTTPException) as e: raise DownloadFailure(str(e) + ' (%s)' % url) except yaml.YAMLError as e: raise DownloadFailure(str(e)) def download_default_sources_list(url=DEFAULT_SOURCES_LIST_URL): """ Download (and validate) contents of default sources list. :param url: override URL of default sources list file :return: raw sources list data, ``str`` :raises: :exc:`DownloadFailure` If data cannot be retrieved (e.g. 404, bad YAML format, server down). :raises: :exc:`urllib2.URLError` If data cannot be retrieved (e.g. 404, server down). """ try: f = urlopen(url, timeout=DOWNLOAD_TIMEOUT) except (URLError, httplib.HTTPException) as e: raise URLError(str(e) + ' (%s)' % url) data = f.read().decode() f.close() if not data: raise DownloadFailure('cannot download defaults file from %s : empty contents' % url) # parse just for validation try: parse_sources_data(data) except InvalidData as e: raise DownloadFailure( 'The content downloaded from %s failed to pass validation.' ' It is likely that the source is invalid unless the data was corrupted during the download.' ' The contents were:{{{%s}}} The error raised was: %s' % (url, data, e)) return data def parse_sources_data(data, origin='', model=None): """ Parse sources file format (tags optional):: # comments and empty lines allowed [tags] e.g.:: yaml http://foo/rosdep.yaml fuerte lucid ubuntu If tags are specified, *all* tags must match the current configuration for the sources data to be used. :param data: data in sources file format :param model: model to load data into. Defaults to :class:`DataSource` :returns: List of data sources, [:class:`DataSource`] :raises: :exc:`InvalidData` """ if model is None: model = DataSource sources = [] for line in data.split('\n'): line = line.strip() # ignore empty lines or comments if not line or line.startswith('#'): continue splits = line.split(' ') if len(splits) < 2: raise InvalidData('invalid line:\n%s' % (line), origin=origin) type_ = splits[0] url = splits[1] tags = splits[2:] try: sources.append(model(type_, url, tags, origin=origin)) except ValueError as e: raise InvalidData('line:\n\t%s\n%s' % (line, e), origin=origin) return sources def parse_sources_file(filepath): """ Parse file on disk :returns: List of data sources, [:class:`DataSource`] :raises: :exc:`InvalidData` If any error occurs reading file, so an I/O error, non-existent file, or invalid format. """ try: with open(filepath, 'r') as f: return parse_sources_data(f.read(), origin=filepath) except IOError as e: raise InvalidData('I/O error reading sources file: %s' % (str(e)), origin=filepath) def parse_sources_list(sources_list_dir=None): """ Parse data stored in on-disk sources list directory into a list of :class:`DataSource` for processing. :returns: List of data sources, [:class:`DataSource`]. If there is no sources list dir, this returns an empty list. :raises: :exc:`InvalidData` :raises: :exc:`OSError` if *sources_list_dir* cannot be read. :raises: :exc:`IOError` if *sources_list_dir* cannot be read. """ if sources_list_dir is None: sources_list_dir = get_sources_list_dir() sources_list_dirs = get_sources_list_dirs(sources_list_dir) filelist = [] for sdir in sources_list_dirs: filelist += sorted([os.path.join(sdir, f) for f in os.listdir(sdir) if f.endswith('.list')]) sources_list = [] for f in filelist: sources_list.extend(parse_sources_file(f)) return sources_list def _generate_key_from_urls(urls): # urls may be a list of urls or a single string try: assert isinstance(urls, (list, basestring)) except NameError: assert isinstance(urls, (list, str)) # We join the urls by the '^' character because it is not allowed in urls return '^'.join(urls if isinstance(urls, list) else [urls]) def update_sources_list(sources_list_dir=None, sources_cache_dir=None, success_handler=None, error_handler=None, skip_eol_distros=False, ros_distro=None): """ Re-downloaded data from remote sources and store in cache. Also update the cache index based on current sources. :param sources_list_dir: override source list directory :param sources_cache_dir: override sources cache directory :param success_handler: fn(DataSource) to call if a particular source loads successfully. This hook is mainly for printing errors to console. :param error_handler: fn(DataSource, DownloadFailure) to call if a particular source fails. This hook is mainly for printing errors to console. :param skip_eol_distros: skip downloading sources for EOL distros :returns: list of (`DataSource`, cache_file_path) pairs for cache files that were updated, ``[str]`` :raises: :exc:`InvalidData` If any of the sources list files is invalid :raises: :exc:`OSError` if *sources_list_dir* cannot be read. :raises: :exc:`IOError` If *sources_list_dir* cannot be read or cache data cannot be written """ if sources_cache_dir is None: sources_cache_dir = get_sources_cache_dir() sources = parse_sources_list(sources_list_dir=sources_list_dir) retval = [] for source in list(sources): try: if source.type == TYPE_YAML: rosdep_data = download_rosdep_data(source.url) elif source.type == TYPE_GBPDISTRO: # DEPRECATED, do not use this file. See REP137 if not source.tags[0] in ['electric', 'fuerte']: print('Ignore legacy gbpdistro "%s"' % source.tags[0]) sources.remove(source) continue # do not store this entry in the cache rosdep_data = download_gbpdistro_as_rosdep_data(source.url) retval.append((source, write_cache_file(sources_cache_dir, source.url, rosdep_data))) if success_handler is not None: success_handler(source) except DownloadFailure as e: if error_handler is not None: error_handler(source, e) # Additional sources for ros distros # In compliance with REP137 and REP143 python_versions = {} print('Query rosdistro index %s' % get_index_url()) distribution_names = get_index().distributions.keys() if ros_distro is not None and ros_distro not in distribution_names: raise ValueError( 'Requested distribution "%s" is not in the index.' % ros_distro) for dist_name in sorted(distribution_names): distribution = get_index().distributions[dist_name] if dist_name != ros_distro: if ros_distro is not None: print('Skip distro "%s" different from requested "%s"' % (dist_name, ros_distro)) continue if skip_eol_distros: if distribution.get('distribution_status') == 'end-of-life': print('Skip end-of-life distro "%s"' % dist_name) continue print('Add distro "%s"' % dist_name) rds = RosDistroSource(dist_name) rosdep_data = get_gbprepo_as_rosdep_data(dist_name) # Store Python version from REP153 if distribution.get('python_version'): python_versions[dist_name] = distribution.get('python_version') # dist_files can either be a string (single filename) or a list (list of filenames) dist_files = distribution['distribution'] key = _generate_key_from_urls(dist_files) retval.append((rds, write_cache_file(sources_cache_dir, key, rosdep_data))) sources.append(rds) # cache metadata that isn't a source list MetaDatabase().set('ROS_PYTHON_VERSION', python_versions) # Create a combined index of *all* the sources. We do all the # sources regardless of failures because a cache from a previous # attempt may still exist. We have to do this cache index so that # loads() see consistent data. if not os.path.exists(sources_cache_dir): os.makedirs(sources_cache_dir) cache_index = os.path.join(sources_cache_dir, CACHE_INDEX) data = "#autogenerated by rosdep, do not edit. use 'rosdep update' instead\n" for source in sources: url = _generate_key_from_urls(source.url) data += 'yaml %s %s\n' % (url, ' '.join(source.tags)) write_atomic(cache_index, data) # mainly for debugging and testing return retval def load_cached_sources_list(sources_cache_dir=None, verbose=False): """ Load cached data based on the sources list. :returns: list of :class:`CachedDataSource` instance with raw rosdep data loaded. :raises: :exc:`OSError` if cache cannot be read :raises: :exc:`IOError` if cache cannot be read """ if sources_cache_dir is None: sources_cache_dir = get_sources_cache_dir() cache_index = os.path.join(sources_cache_dir, 'index') if not os.path.exists(cache_index): if verbose: print('no cache index present, not loading cached sources', file=sys.stderr) return [] try: with open(cache_index, 'r') as f: cache_data = f.read() except IOError as e: if e.strerror == 'Permission denied': raise CachePermissionError('Failed to write cache file: ' + str(e)) else: raise # the loader does all the work model = cache_data_source_loader(sources_cache_dir, verbose=verbose) return parse_sources_data(cache_data, origin=cache_index, model=model) class SourcesListLoader(RosdepLoader): """ SourcesList loader implements the general RosdepLoader API. This implementation is fairly simple as there is only one view the source list loader can create. It is also a bit degenerate as it is not capable of mapping resource names to views, thus any resource-name-based API fails or returns nothing interesting. This loader should not be used directly; instead, it is more useful composed with other higher-level implementations, like the :class:`rosdep2.rospkg_loader.RospkgLoader`. The general intent is to compose it with another loader by making all of the other loader's views depends on all the views in this loader. """ ALL_VIEW_KEY = 'sources.list' def __init__(self, sources): """ :param sources: cached sources list entries, [:class:`CachedDataSource`] """ self.sources = sources @staticmethod def create_default(matcher=None, sources_cache_dir=None, os_override=None, verbose=False): """ :param matcher: override DataSourceMatcher. Defaults to DataSourceMatcher.create_default(). :param sources_cache_dir: override location of sources cache """ if matcher is None: matcher = DataSourceMatcher.create_default(os_override=os_override) if verbose: print('using matcher with tags [%s]' % (', '.join(matcher.tags)), file=sys.stderr) sources = load_cached_sources_list(sources_cache_dir=sources_cache_dir, verbose=verbose) if verbose: print('loaded %s sources' % (len(sources)), file=sys.stderr) sources = [x for x in sources if matcher.matches(x)] if verbose: print('%s sources match current tags' % (len(sources)), file=sys.stderr) return SourcesListLoader(sources) def load_view(self, view_name, rosdep_db, verbose=False): """ Load view data into rosdep_db. If the view has already been loaded into rosdep_db, this method does nothing. :param view_name: name of ROS stack to load, ``str`` :param rosdep_db: database to load stack data into, :class:`RosdepDatabase` :raises: :exc:`InvalidData` """ if rosdep_db.is_loaded(view_name): return source = self.get_source(view_name) if verbose: print('loading view [%s] with sources.list loader' % (view_name), file=sys.stderr) view_dependencies = self.get_view_dependencies(view_name) rosdep_db.set_view_data(view_name, source.rosdep_data, view_dependencies, view_name) def get_loadable_resources(self): return [] def get_loadable_views(self): return [x.url for x in self.sources] def get_view_dependencies(self, view_name): # use dependencies to implement precedence if view_name != SourcesListLoader.ALL_VIEW_KEY: # if the view_name matches one of our sources, return # empty list as none of our sources has deps. if any([x for x in self.sources if view_name == x.url]): return [] # not one of our views, so it depends on everything we provide return [x.url for x in self.sources] def get_source(self, view_name): matches = [x for x in self.sources if x.url == view_name] if matches: return matches[0] else: raise rospkg.ResourceNotFound(view_name) def get_rosdeps(self, resource_name, implicit=True): """ Always raises as SourceListLoader defines no concrete resources with rosdeps. :raises: :exc:`rospkg.ResourceNotFound` """ raise rospkg.ResourceNotFound(resource_name) def get_view_key(self, resource_name): """ Always raises as SourceListLoader defines no concrete resources with rosdeps. :returns: Name of view that *resource_name* is in, ``None`` if no associated view. :raises: :exc:`rospkg.ResourceNotFound` if *resource_name* cannot be found. """ raise rospkg.ResourceNotFound(resource_name) rosdep-0.21.0/stdeb.cfg000066400000000000000000000026631406544147500146710ustar00rootroot00000000000000[rosdep] ; rosdep-modules same version as in: ; - setup.py ; - src/rosdep2/_version.py Depends: python-rosdep-modules (>= 0.21.0) ; rosdep-modules same version as in: ; - setup.py ; - src/rosdep2/_version.py Depends3: python3-rosdep-modules (>= 0.21.0) Conflicts: python3-rosdep, python-rosdep2, python3-rosdep2 Conflicts3: python-rosdep, python-rosdep2, python3-rosdep2 Copyright-File: LICENSE Suite: xenial yakkety zesty artful bionic cosmic disco eoan jessie stretch buster Suite3: xenial yakkety zesty artful bionic cosmic disco eoan focal jessie stretch buster Python2-Depends-Name: python X-Python3-Version: >= 3.4 Setup-Env-Vars: SKIP_PYTHON_MODULES=1 [rosdep_modules] Depends: ca-certificates, python-rospkg-modules (>= 1.3.0), python-yaml, python-catkin-pkg-modules (>= 0.4.0), python-rosdistro-modules (>= 0.7.5), sudo Depends3: ca-certificates, python3-rospkg-modules (>= 1.3.0), python3-yaml, python3-catkin-pkg-modules (>= 0.4.0), python3-rosdistro-modules (>= 0.7.5), sudo Conflicts: python-rosdep (<< 0.18.0), python-rosdep2 Conflicts3: python3-rosdep (<< 0.18.0), python3-rosdep2 Replaces: python-rosdep (<< 0.18.0) Replaces3: python3-rosdep (<< 0.18.0) Copyright-File: LICENSE Suite: xenial yakkety zesty artful bionic cosmic disco eoan jessie stretch buster Suite3: xenial yakkety zesty artful bionic cosmic disco eoan focal jessie stretch buster Python2-Depends-Name: python X-Python3-Version: >= 3.4 Setup-Env-Vars: SKIP_PYTHON_SCRIPTS=1 rosdep-0.21.0/test/000077500000000000000000000000001406544147500140575ustar00rootroot00000000000000rosdep-0.21.0/test/__init__.py000066400000000000000000000000001406544147500161560ustar00rootroot00000000000000rosdep-0.21.0/test/debian/000077500000000000000000000000001406544147500153015ustar00rootroot00000000000000rosdep-0.21.0/test/debian/dpkg-python-apt000066400000000000000000000000711406544147500202500ustar00rootroot00000000000000'apt install ok installed ''python install ok installed 'rosdep-0.21.0/test/debian/showpkg-curl-wget-libcurl-dev000066400000000000000000000230621406544147500230260ustar00rootroot00000000000000Package: curl Versions: 7.47.0-1ubuntu2.4 (/var/lib/apt/lists/archive.ubuntu.com_ubuntu_dists_xenial-updates_main_binary-amd64_Packages.lz4) (/var/lib/apt/lists/security.ubuntu.com_ubuntu_dists_xenial-security_main_binary-amd64_Packages.lz4) Description Language: File: /var/lib/apt/lists/archive.ubuntu.com_ubuntu_dists_xenial_main_binary-amd64_Packages.lz4 MD5: f83293d10df083ae6f7bb7d01642913c Description Language: File: /var/lib/apt/lists/archive.ubuntu.com_ubuntu_dists_xenial-updates_main_binary-amd64_Packages.lz4 MD5: f83293d10df083ae6f7bb7d01642913c 7.47.0-1ubuntu2 (/var/lib/apt/lists/archive.ubuntu.com_ubuntu_dists_xenial_main_binary-amd64_Packages.lz4) Description Language: File: /var/lib/apt/lists/archive.ubuntu.com_ubuntu_dists_xenial_main_binary-amd64_Packages.lz4 MD5: f83293d10df083ae6f7bb7d01642913c Description Language: File: /var/lib/apt/lists/archive.ubuntu.com_ubuntu_dists_xenial-updates_main_binary-amd64_Packages.lz4 MD5: f83293d10df083ae6f7bb7d01642913c Reverse Depends: plowshare,curl 7.24 playonlinux,curl google-perftools,curl drupal7,curl ceph-test,curl pollinate,curl pciutils,curl imagemagick-6.q16,curl ttytter,curl playonlinux,curl ec2-ami-tools,curl bgoffice-dict-downloader,curl astrometry-data-2mass-08-19,curl astrometry-data-2mass-07,curl astrometry-data-2mass-06,curl astrometry-data-2mass-05,curl astrometry-data-2mass-04,curl astrometry-data-2mass-03,curl astrometry-data-2mass-02,curl astrometry-data-2mass-01,curl astrometry-data-2mass-00,curl zescrow-client,curl youtube-dl,curl yorick,curl wsl,curl wsl,curl wmget,curl wakeup,curl vagrant,curl umegaya,curl uhd-host,curl twittering-mode,curl twidge,curl tdiary-contrib,curl sylpheed,curl surfraw,curl surf,curl solr-common,curl smokeping,curl scamp,curl s3curl,curl ruby-build,curl rkhunter,curl python-curtin,curl pybit-svn,curl prey,curl pp-popularity-contest,curl podracer,curl gotmail,curl 7.9.0 phablet-tools,curl perlbrew,curl origami,curl openstreetmap-carto-common,curl openstack-resource-agents,curl openssh-known-hosts,curl opennebula-flow,curl opam,curl nomnom,curl myrepos,curl linuxbrew-wrapper,curl libguestfs0,curl libguestfs-tools,curl kino,curl jhbuild,curl jenkins-debian-glue-buildenv,curl ifupdown-extra,curl hydra,curl html2text,curl gwhois,curl groonga-httpd,curl debian-goodies,curl google-perftools,curl git-remote-gcrypt,curl git-ftp,curl git-annex,curl getlive,curl freeipa-client,curl freedombox-setup,curl foomatic-db-engine,curl elastichosts-utils,curl drush,curl drupal7,curl dracut-network,curl dpatch,curl djvulibre-bin,curl diaspora-common,curl di-netboot-assistant,curl dgit,curl debmake,curl debian-cd,curl dbab,curl cpanminus,curl clamav-unofficial-sigs,curl ceph-test,curl cairo-dock-plug-ins,curl bosixnet-webui,curl bosixnet-daemon,curl bibledit-xiphos,curl bibledit-gtk,curl bibledit-bibletime,curl ben,curl awesome-extra,curl atheist,curl astrometry.net,curl arno-iptables-firewall,curl apt-file,curl approx,curl ansiweather,curl anc-api-tools,curl ubuntu-server,curl spamassassin,curl python3-curtin,curl pollinate,curl plainbox-provider-checkbox,curl pciutils,curl imagemagick-6.q16,curl ieee-data,curl gettext,curl devscripts,curl Dependencies: 7.47.0-1ubuntu2.4 - libc6 (2 2.17) libcurl3-gnutls (5 7.47.0-1ubuntu2.4) zlib1g (2 1:1.1.4) 7.47.0-1ubuntu2 - libc6 (2 2.17) libcurl3-gnutls (5 7.47.0-1ubuntu2) zlib1g (2 1:1.1.4) Provides: 7.47.0-1ubuntu2.4 - 7.47.0-1ubuntu2 - Reverse Provides: Package: wget Versions: 1.17.1-1ubuntu1.3 (/var/lib/apt/lists/archive.ubuntu.com_ubuntu_dists_xenial-updates_main_binary-amd64_Packages.lz4) (/var/lib/apt/lists/security.ubuntu.com_ubuntu_dists_xenial-security_main_binary-amd64_Packages.lz4) Description Language: File: /var/lib/apt/lists/archive.ubuntu.com_ubuntu_dists_xenial_main_binary-amd64_Packages.lz4 MD5: 63a4a740bcd9e8e94bf661e4f1806e02 Description Language: File: /var/lib/apt/lists/archive.ubuntu.com_ubuntu_dists_xenial-updates_main_binary-amd64_Packages.lz4 MD5: 63a4a740bcd9e8e94bf661e4f1806e02 1.17.1-1ubuntu1 (/var/lib/apt/lists/archive.ubuntu.com_ubuntu_dists_xenial_main_binary-amd64_Packages.lz4) Description Language: File: /var/lib/apt/lists/archive.ubuntu.com_ubuntu_dists_xenial_main_binary-amd64_Packages.lz4 MD5: 63a4a740bcd9e8e94bf661e4f1806e02 Description Language: File: /var/lib/apt/lists/archive.ubuntu.com_ubuntu_dists_xenial-updates_main_binary-amd64_Packages.lz4 MD5: 63a4a740bcd9e8e94bf661e4f1806e02 Reverse Depends: ttf-root-installer,wget 1.9.1-4 virtualbox-ext-pack,wget playonlinux,wget pepperflashplugin-nonfree,wget mythtv-backend,wget flashplugin-installer,wget xtables-addons-common,wget sbuild,wget python-curtin,wget ubiquity,wget python3-curtin,wget pciutils,wget maas-rack-controller,wget debootstrap,wget virtualbox-ext-pack,wget usbutils,wget 1.8.1-6 susv4,wget susv3,wget susv2,wget snmp-mibs-downloader,wget sdic-gene95,wget rocksndiamonds,wget quake3-data,wget publicfile-installer,wget primesense-nite-nonfree,wget playonlinux,wget pepperflashplugin-nonfree,wget mythtv-backend,wget libdvd-pkg,wget kinect-audio-setup,wget hyperspec,wget googleearth-package,wget google-android-sdk-docs-installer,wget geoip-database-contrib,wget flashplugin-installer,wget firmware-b43legacy-installer,wget firmware-b43-installer,wget cltl,wget zomg,wget youtube-dl,wget xtables-addons-common,wget xdeb,wget wsl,wget 1.13 wotsap,wget wmfrog,wget winetricks,wget util-vserver,wget urlview,wget uck,wget ubuntu-touch,wget testdrive-common,wget svn-buildpackage,wget surfraw,wget spacefm-gtk3,wget spacefm,wget simple-cdd,wget shorewall6-lite,wget shorewall-lite,wget screenbin,wget sbuild,wget rrdweather,wget rkhunter,wget rinse,wget rfcdiff,wget qalc,wget q4wine,wget pyxplot,wget python-curtin,wget prism2-usb-firmware-installer,wget podget,wget plait,wget phablet-tools-citrain,wget phablet-tools,wget petitboot-twin,wget petitboot,wget perlbrew,wget osmctools,wget origami,wget openrocket,wget opennebula,wget opam,wget oinkmaster,wget nrss,wget neurodebian,wget mirmon,wget mh-e,wget madison-lite,wget luarocks,wget ltsp-client,wget live-config,wget live-boot,wget liquidsoap,wget libcupt4-1-downloadmethod-wget,wget ktoblzcheck,wget jigdo-file,wget jhbuild,wget inn2,wget hydra,wget html2text,wget gnuhtml2latex,wget gkrellweather,wget gkrellkam,wget git-annex,wget geographiclib-tools,wget freedombox-setup,wget foomatic-db-engine,wget fiaif,wget fex-utils,wget fex,wget e2wm,wget drush,wget dpkg-dev-el,wget dphys-config,wget dokuwiki,wget disc-cover,wget dillo,wget diaspora-installer,wget di-netboot-assistant,wget debmake,wget debian-el,wget dahdi-dkms,wget cpl-plugin-xshoo-calib,wget cpl-plugin-visir-calib,wget cpl-plugin-vimos-calib,wget cpl-plugin-uves-calib,wget cpl-plugin-sinfo-calib,wget cpl-plugin-naco-calib,wget cpl-plugin-muse-calib,wget cpl-plugin-kmos-calib,wget cpl-plugin-hawki-calib,wget cpl-plugin-giraf-calib,wget cpl-plugin-fors-calib,wget cpl-plugin-amber-calib,wget cpanminus,wget collabtive,wget cloud-utils-euca,wget cdebootstrap-static,wget cairo-dock-plug-ins,wget bmt,wget bladerf-fpga-hostedx40,wget bladerf-fpga-hostedx115,wget bladerf-firmware-fx3,wget avfs,wget auto-apt,wget apt-mirror,wget apf-firewall,wget adzapper,wget abcde,wget cloud-image-utils,wget ubuntu-standard,wget ubiquity,wget ssh-import-id,wget python3-curtin,wget printer-driver-foo2zjs,wget pciutils,wget pbuilder,wget maas-rack-controller,wget maas-enlist,wget jigit,wget ieee-data,wget hplip,wget gettext,wget emacs-goodies-el,wget devscripts,wget debootstrap,wget Dependencies: 1.17.1-1ubuntu1.3 - libc6 (2 2.17) libidn11 (2 1.13) libpcre3 (0 (null)) libssl1.0.0 (2 1.0.1) libuuid1 (2 2.16) zlib1g (2 1:1.1.4) wget-ssl (0 (null)) ca-certificates (0 (null)) 1.17.1-1ubuntu1 - libc6 (2 2.17) libidn11 (2 1.13) libpcre3 (0 (null)) libssl1.0.0 (2 1.0.1) libuuid1 (2 2.16) zlib1g (2 1:1.1.4) wget-ssl (0 (null)) ca-certificates (0 (null)) Provides: 1.17.1-1ubuntu1.3 - 1.17.1-1ubuntu1 - Reverse Provides: Package: libcurl-dev Versions: Reverse Depends: libdap-dev,libcurl-dev libnxml0-dev,libcurl-dev libglyr-dev,libcurl-dev Dependencies: Provides: Reverse Provides: libcurl4-openssl-dev 7.47.0-1ubuntu2.4 (= ) libcurl4-nss-dev 7.47.0-1ubuntu2.4 (= ) libcurl4-gnutls-dev 7.47.0-1ubuntu2.4 (= ) libcurl4-openssl-dev 7.47.0-1ubuntu2 (= ) libcurl4-nss-dev 7.47.0-1ubuntu2 (= ) libcurl4-gnutls-dev 7.47.0-1ubuntu2 (= ) Package: ros-kinetic-rc-genicam-api Versions: Reverse Depends: ros-kinetic-rc-visard-driver,ros-kinetic-rc-genicam-api Dependencies: Provides: Reverse Provides: rosdep-0.21.0/test/fixtures/000077500000000000000000000000001406544147500157305ustar00rootroot00000000000000rosdep-0.21.0/test/fixtures/python2cache.pickle000066400000000000000000010377521406544147500215270ustar00rootroot00000000000000€}q(U rosconsoleq}q(Uosxq}qUhomebrewq}qUpackagesq]q Uros/jade/ros_commq assU_is_rosq ˆUfedoraq }q (U21q}qUyumq}qh]qUros-jade-rosconsoleqassU22q}qh}qh]qhassuUubuntuq}qUtrustyq}qUaptq}qh]qhasssuU romeo_controlq}q (h}q!h}q"h]q#Uros/jade/romeo_virtualq$assh ˆh }q%(h}q&h}q'h]q(Uros-jade-romeo-controlq)assh}q*h}q+h]q,h)assuh}q-h}q.h}q/h]q0h)asssuUhector_gazebo_worldsq1}q2(h}q3h}q4h]q5Uros/jade/hector_gazeboq6assh ˆh }q7(h}q8h}q9h]q:Uros-jade-hector-gazebo-worldsq;assh}qh;assuh}q?h}q@h}qAh]qBh;asssuU p2os_launchqC}qD(h}qEh}qFh]qGU ros/jade/p2osqHassh ˆh }qI(h}qJh}qKh]qLUros-jade-p2os-launchqMassh}qNh}qOh]qPhMassuh}qQh}qRh}qSh]qThMasssuUlibg2oqU}qV(h}qWh}qXh]qYUros/jade/libg2oqZassh ˆh }q[(h}q\h}q]h]q^Uros-jade-libg2oq_assh}q`h}qah]qbh_assuh}qch}qdh}qeh]qfh_asssuU roscpp_coreqg}qh(h}qih}qjh]qkUros/jade/roscpp_coreqlassh ˆh }qm(h}qnh}qoh]qpUros-jade-roscpp-coreqqassh}qrh}qsh]qthqassuh}quh}qvh}qwh]qxhqasssuUasync_web_server_cppqy}qz(h}q{h}q|h]q}Uros/jade/async_web_server_cppq~assh ˆh }q(h}q€h}qh]q‚Uros-jade-async-web-server-cppqƒassh}q„h}q…h]q†hƒassuh}q‡h}qˆh}q‰h]qŠhƒasssuUqt_gui_py_commonq‹}qŒ(h}qh}qŽh]qUros/jade/qt_gui_coreqassh ˆh }q‘(h}q’h}q“h]q”Uros-jade-qt-gui-py-commonq•assh}q–h}q—h]q˜h•assuh}q™h}qšh}q›h]qœh•asssuUorocos_kinematics_dynamicsq}qž(h}qŸh}q h]q¡U#ros/jade/orocos_kinematics_dynamicsq¢assh ˆh }q£(h}q¤h}q¥h]q¦U#ros-jade-orocos-kinematics-dynamicsq§assh}q¨h}q©h]qªh§assuh}q«h}q¬h}q­h]q®h§asssuUtrac_ik_examplesq¯}q°(h}q±h}q²h]q³Uros/jade/trac_ikq´assh ˆh }qµ(h}q¶h}q·h]q¸Uros-jade-trac-ik-examplesq¹assh}qºh}q»h]q¼h¹assuh}q½h}q¾h}q¿h]qÀh¹asssuUswri_yaml_utilqÁ}qÂ(h}qÃh}qÄh]qÅUros/jade/marti_commonqÆassh ˆh }qÇ(h}qÈh}qÉh]qÊUros-jade-swri-yaml-utilqËassh}qÌh}qÍh]qÎhËassuh}qÏh}qÐh}qÑh]qÒhËasssuUpugixmlqÓ}qÔ(h}qÕh}qÖh]q×Uros/jade/pugixmlqØassh ˆh }qÙ(h}qÚh}qÛh]qÜUros-jade-pugixmlqÝassh}qÞh}qßh]qàhÝassuh}qáh}qâh}qãh]qähÝasssuU pyros_utilsqå}qæ(h}qçh}qèh]qéUros/jade/pyros_utilsqêassh ˆh }që(h}qìh}qíh]qîUros-jade-pyros-utilsqïassh}qðh}qñh]qòhïassuh}qóh}qôh}qõh]qöhïasssuUrosq÷}qø(h}qùh}qúh]qûU ros/jade/rosqüassh ˆh }qý(h}qþh}qÿh]rU ros-jade-rosrassh}rh}rh]rjassuh}rh}rh}rh]rjasssuU pose_cov_opsr }r (h}r h}r h]r Uros/jade/pose_cov_opsrassh ˆh }r(h}rh}rh]rUros-jade-pose-cov-opsrassh}rh}rh]rjassuh}rh}rh}rh]rjasssuUrospingr}r(h}rh}rh]rUros/jade/jsk_3rdpartyr assh ˆh }r!(h}r"h}r#h]r$Uros-jade-rospingr%assh}r&h}r'h]r(j%assuh}r)h}r*h}r+h]r,j%asssuUromeo_gazebo_pluginr-}r.(h}r/h}r0h]r1Uros/jade/romeo_virtualr2assh ˆh }r3(h}r4h}r5h]r6Uros-jade-romeo-gazebo-pluginr7assh}r8h}r9h]r:j7assuh}r;h}r<h}r=h]r>j7asssuUrosoutr?}r@(h}rAh}rBh]rCUros/jade/ros_commrDassh ˆh }rE(h}rFh}rGh]rHUros-jade-rosoutrIassh}rJh}rKh]rLjIassuh}rMh}rNh}rOh]rPjIasssuU gazebo_rosrQ}rR(h}rSh}rTh]rUUros/jade/gazebo_ros_pkgsrVassh ˆh }rW(h}rXh}rYh]rZUros-jade-gazebo-rosr[assh}r\h}r]h]r^j[assuh}r_h}r`h}rah]rbj[asssuUgps_umdrc}rd(h}reh}rfh]rgUros/jade/gps_umdrhassh ˆh }ri(h}rjh}rkh]rlUros-jade-gps-umdrmassh}rnh}roh]rpjmassuh}rqh}rrh}rsh]rtjmasssuUcalibration_estimationru}rv(h}rwh}rxh]ryUros/jade/calibrationrzassh ˆh }r{(h}r|h}r}h]r~Uros-jade-calibration-estimationrassh}r€h}rh]r‚jassuh}rƒh}r„h}r…h]r†jasssuUmoveit_sim_controllerr‡}rˆ(h}r‰h}rŠh]r‹Uros/jade/moveit_sim_controllerrŒassh ˆh }r(h}rŽh}rh]rUros-jade-moveit-sim-controllerr‘assh}r’h}r“h]r”j‘assuh}r•h}r–h}r—h]r˜j‘asssuUgraspdbr™}rš(h}r›h}rœh]rUros/jade/rail_pick_and_placeržassh ˆh }rŸ(h}r h}r¡h]r¢Uros-jade-graspdbr£assh}r¤h}r¥h]r¦j£assuh}r§h}r¨h}r©h]rªj£asssuU nmea_commsr«}r¬(h}r­h}r®h]r¯Uros/jade/nmea_commsr°assh ˆh }r±(h}r²h}r³h]r´Uros-jade-nmea-commsrµassh}r¶h}r·h]r¸jµassuh}r¹h}rºh}r»h]r¼jµasssuUlibccdr½}r¾(h}r¿h}rÀh]rÁUros/jade/libccdrÂassh ˆh }rÃ(h}rÄh}rÅh]rÆUros-jade-libccdrÇassh}rÈh}rÉh]rÊjÇassuh}rËh}rÌh}rÍh]rÎjÇasssuUtfrÏ}rÐ(h}rÑh}rÒh]rÓUros/jade/geometryrÔassh ˆh }rÕ(h}rÖh}r×h]rØU ros-jade-tfrÙassh}rÚh}rÛh]rÜjÙassuh}rÝh}rÞh}rßh]ràjÙasssuU rqt_publisherrá}râ(h}rãh}räh]råUros/jade/rqt_publisherræassh ˆh }rç(h}rèh}réh]rêUros-jade-rqt-publisherrëassh}rìh}ríh]rîjëassuh}rïh}rðh}rñh]ròjëasssuUuwsim_osgbulletró}rô(h}rõh}röh]r÷Uros/jade/uwsim_osgbulletrøassh ˆh }rù(h}rúh}rûh]rüUros-jade-uwsim-osgbulletrýassh}rþh}rÿh]rjýassuh}rh}rh}rh]rjýasssuUecl_liter}r(h}rh}rh]r Uros/jade/ecl_liter assh ˆh }r (h}r h}r h]rUros-jade-ecl-literassh}rh}rh]rjassuh}rh}rh}rh]rjasssuU aruco_msgsr}r(h}rh}rh]rUros/jade/aruco_rosrassh ˆh }r(h}rh}rh]r Uros-jade-aruco-msgsr!assh}r"h}r#h]r$j!assuh}r%h}r&h}r'h]r(j!asssuUros_baser)}r*(h}r+h}r,h]r-Uros/jade/metapackagesr.assh ˆh }r/(h}r0h}r1h]r2Uros-jade-ros-baser3assh}r4h}r5h]r6j3assuh}r7h}r8h}r9h]r:j3asssuUspatial_temporal_learningr;}r<(h}r=h}r>h]r?U"ros/jade/spatial_temporal_learningr@assh ˆh }rA(h}rBh}rCh]rDU"ros-jade-spatial-temporal-learningrEassh}rFh}rGh]rHjEassuh}rIh}rJh}rKh]rLjEasssuU hrpsys_toolsrM}rN(h}rOh}rPh]rQUros/jade/rtmros_commonrRassh ˆh }rS(h}rTh}rUh]rVUros-jade-hrpsys-toolsrWassh}rXh}rYh]rZjWassuh}r[h}r\h}r]h]r^jWasssuUdiagnostic_aggregatorr_}r`(h}rah}rbh]rcUros/jade/diagnosticsrdassh ˆh }re(h}rfh}rgh]rhUros-jade-diagnostic-aggregatorriassh}rjh}rkh]rljiassuh}rmh}rnh}roh]rpjiasssuUsmart_battery_msgsrq}rr(h}rsh}rth]ruUros/jade/smart_battery_msgsrvassh ˆh }rw(h}rxh}ryh]rzUros-jade-smart-battery-msgsr{assh}r|h}r}h]r~j{assuh}rh}r€h}rh]r‚j{asssuU moveit_msgsrƒ}r„(h}r…h}r†h]r‡Uros/jade/moveit_msgsrˆassh ˆh }r‰(h}rŠh}r‹h]rŒUros-jade-moveit-msgsrassh}rŽh}rh]rjassuh}r‘h}r’h}r“h]r”jasssuUcamera_calibration_parsersr•}r–(h}r—h}r˜h]r™Uros/jade/image_commonršassh ˆh }r›(h}rœh}rh]ržU#ros-jade-camera-calibration-parsersrŸassh}r h}r¡h]r¢jŸassuh}r£h}r¤h}r¥h]r¦jŸasssuU ecl_streamsr§}r¨(h}r©h}rªh]r«Uros/jade/ecl_corer¬assh ˆh }r­(h}r®h}r¯h]r°Uros-jade-ecl-streamsr±assh}r²h}r³h]r´j±assuh}rµh}r¶h}r·h]r¸j±asssuUrobot_self_filterr¹}rº(h}r»h}r¼h]r½Uros/jade/robot_self_filterr¾assh ˆh }r¿(h}rÀh}rÁh]rÂUros-jade-robot-self-filterrÃassh}rÄh}rÅh]rÆjÃassuh}rÇh}rÈh}rÉh]rÊjÃasssuU rqt_topicrË}rÌ(h}rÍh}rÎh]rÏUros/jade/rqt_topicrÐassh ˆh }rÑ(h}rÒh}rÓh]rÔUros-jade-rqt-topicrÕassh}rÖh}r×h]rØjÕassuh}rÙh}rÚh}rÛh]rÜjÕasssuUlaser_scan_splitterrÝ}rÞ(h}rßh}ràh]ráUros/jade/scan_toolsrâassh ˆh }rã(h}räh}råh]ræUros-jade-laser-scan-splitterrçassh}rèh}réh]rêjçassuh}rëh}rìh}ríh]rîjçasssuU eigen_typekitrï}rð(h}rñh}ròh]róUros/jade/rtt_geometryrôassh ˆh }rõ(h}röh}r÷h]røUros-jade-eigen-typekitrùassh}rúh}rûh]rüjùassuh}rýh}rþh}rÿh]rjùasssuUrotors_evaluationr}r(h}rh}rh]rUros/jade/rotors_simulatorrassh ˆh }r(h}rh}r h]r Uros-jade-rotors-evaluationr assh}r h}r h]rj assuh}rh}rh}rh]rj asssuU jsk_3rdpartyr}r(h}rh}rh]rUros/jade/jsk_3rdpartyrassh ˆh }r(h}rh}rh]rUros-jade-jsk-3rdpartyrassh}rh}rh]r jassuh}r!h}r"h}r#h]r$jasssuUvariant_topic_testr%}r&(h}r'h}r(h]r)Uros/jade/variantr*assh ˆh }r+(h}r,h}r-h]r.Uros-jade-variant-topic-testr/assh}r0h}r1h]r2j/assuh}r3h}r4h}r5h]r6j/asssuUpr2_head_actionr7}r8(h}r9h}r:h]r;Uros/jade/pr2_controllersr<assh ˆh }r=(h}r>h}r?h]r@Uros-jade-pr2-head-actionrAassh}rBh}rCh]rDjAassuh}rEh}rFh}rGh]rHjAasssuUscanning_table_msgsrI}rJ(h}rKh}rLh]rMUros/jade/iai_common_msgsrNassh ˆh }rO(h}rPh}rQh]rRUros-jade-scanning-table-msgsrSassh}rTh}rUh]rVjSassuh}rWh}rXh}rYh]rZjSasssuU naoqi_toolsr[}r\(h}r]h}r^h]r_Uros/jade/naoqi_bridger`assh ˆh }ra(h}rbh}rch]rdUros-jade-naoqi-toolsreassh}rfh}rgh]rhjeassuh}rih}rjh}rkh]rljeasssuUfetch_calibrationrm}rn(h}roh}rph]rqUros/jade/fetch_rosrrassh ˆh }rs(h}rth}ruh]rvUros-jade-fetch-calibrationrwassh}rxh}ryh]rzjwassuh}r{h}r|h}r}h]r~jwasssuUecl_ior}r€(h}rh}r‚h]rƒUros/jade/ecl_liter„assh ˆh }r…(h}r†h}r‡h]rˆUros-jade-ecl-ior‰assh}rŠh}r‹h]rŒj‰assuh}rh}rŽh}rh]rj‰asssuU rosboost_cfgr‘}r’(h}r“h}r”h]r•U ros/jade/rosr–assh ˆh }r—(h}r˜h}r™h]ršUros-jade-rosboost-cfgr›assh}rœh}rh]ržj›assuh}rŸh}r h}r¡h]r¢j›asssuU nao_controlr£}r¤(h}r¥h}r¦h]r§Uros/jade/nao_virtualr¨assh ˆh }r©(h}rªh}r«h]r¬Uros-jade-nao-controlr­assh}r®h}r¯h]r°j­assuh}r±h}r²h}r³h]r´j­asssuUgrizzly_descriptionrµ}r¶(h}r·h}r¸h]r¹Uros/jade/grizzlyrºassh ˆh }r»(h}r¼h}r½h]r¾Uros-jade-grizzly-descriptionr¿assh}rÀh}rÁh]rÂj¿assuh}rÃh}rÄh}rÅh]rÆj¿asssuUrqt_service_callerrÇ}rÈ(h}rÉh}rÊh]rËUros/jade/rqt_service_callerrÌassh ˆh }rÍ(h}rÎh}rÏh]rÐUros-jade-rqt-service-callerrÑassh}rÒh}rÓh]rÔjÑassuh}rÕh}rÖh}r×h]rØjÑasssuUrtt_rosrÙ}rÚ(h}rÛh}rÜh]rÝUros/jade/rtt_ros_integrationrÞassh ˆh }rß(h}ràh}ráh]râUros-jade-rtt-rosrãassh}räh}råh]ræjãassuh}rçh}rèh}réh]rêjãasssuUvisualization_tutorialsrë}rì(h}ríh}rîh]rïU ros/jade/visualization_tutorialsrðassh ˆh }rñ(h}ròh}róh]rôU ros-jade-visualization-tutorialsrõassh}röh}r÷h]røjõassuh}rùh}rúh}rûh]rüjõasssuU rtt_geometryrý}rþ(h}rÿh}rh]rUros/jade/rtt_geometryrassh ˆh }r(h}rh}rh]rUros-jade-rtt-geometryrassh}rh}r h]r jassuh}r h}r h}r h]rjasssuUjsk_rviz_pluginsr}r(h}rh}rh]rUros/jade/jsk_visualizationrassh ˆh }r(h}rh}rh]rUros-jade-jsk-rviz-pluginsrassh}rh}rh]rjassuh}rh}rh}rh]r jasssuUjuliusr!}r"(h}r#h}r$h]r%Uros/jade/jsk_3rdpartyr&assh ˆh }r'(h}r(h}r)h]r*Uros-jade-juliusr+assh}r,h}r-h]r.j+assuh}r/h}r0h}r1h]r2j+asssuUrobot_controllersr3}r4(h}r5h}r6h]r7Uros/jade/robot_controllersr8assh ˆh }r9(h}r:h}r;h]r<Uros-jade-robot-controllersr=assh}r>h}r?h]r@j=assuh}rAh}rBh}rCh]rDj=asssuU fzi_icl_commrE}rF(h}rGh}rHh]rIUros/jade/fzi_icl_commrJassh ˆh }rK(h}rLh}rMh]rNUros-jade-fzi-icl-commrOassh}rPh}rQh]rRjOassuh}rSh}rTh}rUh]rVjOasssuU desktop_fullrW}rX(h}rYh}rZh]r[Uros/jade/metapackagesr\assh ˆh }r](h}r^h}r_h]r`Uros-jade-desktop-fullraassh}rbh}rch]rdjaassuh}reh}rfh}rgh]rhjaasssuU warehouse_rosri}rj(h}rkh}rlh]rmUros/jade/warehouse_rosrnassh ˆh }ro(h}rph}rqh]rrUros-jade-warehouse-rosrsassh}rth}ruh]rvjsassuh}rwh}rxh}ryh]rzjsasssuUdynamixel_msgsr{}r|(h}r}h}r~h]rUros/jade/dynamixel_motorr€assh ˆh }r(h}r‚h}rƒh]r„Uros-jade-dynamixel-msgsr…assh}r†h}r‡h]rˆj…assuh}r‰h}rŠh}r‹h]rŒj…asssuUrosserial_windowsr}rŽ(h}rh}rh]r‘Uros/jade/rosserialr’assh ˆh }r“(h}r”h}r•h]r–Uros-jade-rosserial-windowsr—assh}r˜h}r™h]ršj—assuh}r›h}rœh}rh]ržj—asssuU rqt_pose_viewrŸ}r (h}r¡h}r¢h]r£Uros/jade/rqt_pose_viewr¤assh ˆh }r¥(h}r¦h}r§h]r¨Uros-jade-rqt-pose-viewr©assh}rªh}r«h]r¬j©assuh}r­h}r®h}r¯h]r°j©asssuU simple_voicer±}r²(h}r³h}r´h]rµUros/jade/simple_voicer¶assh ˆh }r·(h}r¸h}r¹h]rºUros-jade-simple-voicer»assh}r¼h}r½h]r¾j»assuh}r¿h}rÀh}rÁh]rÂj»asssuUhector_quadrotor_descriptionrÃ}rÄ(h}rÅh}rÆh]rÇUros/jade/hector_quadrotorrÈassh ˆh }rÉ(h}rÊh}rËh]rÌU%ros-jade-hector-quadrotor-descriptionrÍassh}rÎh}rÏh]rÐjÍassuh}rÑh}rÒh}rÓh]rÔjÍasssuUarbotix_pythonrÕ}rÖ(h}r×h}rØh]rÙUros/jade/arbotix_rosrÚassh ˆh }rÛ(h}rÜh}rÝh]rÞUros-jade-arbotix-pythonrßassh}ràh}ráh]râjßassuh}rãh}räh}råh]ræjßasssuUjsk_visualizationrç}rè(h}réh}rêh]rëUros/jade/jsk_visualizationrìassh ˆh }rí(h}rîh}rïh]rðUros-jade-jsk-visualizationrñassh}ròh}róh]rôjñassuh}rõh}röh}r÷h]røjñasssuUjsk_tilt_laserrù}rú(h}rûh}rüh]rýUros/jade/jsk_commonrþassh ˆh }rÿ(h}rh}rh]rUros-jade-jsk-tilt-laserrassh}rh}rh]rjassuh}rh}rh}r h]r jasssuUhector_imu_attitude_to_tfr }r (h}r h}rh]rUros/jade/hector_slamrassh ˆh }r(h}rh}rh]rU"ros-jade-hector-imu-attitude-to-tfrassh}rh}rh]rjassuh}rh}rh}rh]rjasssuUpcl_conversionsr}r(h}rh}r h]r!Uros/jade/pcl_conversionsr"assh ˆh }r#(h}r$h}r%h]r&Uros-jade-pcl-conversionsr'assh}r(h}r)h]r*j'assuh}r+h}r,h}r-h]r.j'asssuU rtt_std_srvsr/}r0(h}r1h}r2h]r3Uros/jade/rtt_ros_integrationr4assh ˆh }r5(h}r6h}r7h]r8Uros-jade-rtt-std-srvsr9assh}r:h}r;h]r<j9assuh}r=h}r>h}r?h]r@j9asssuUgeometry_tutorialsrA}rB(h}rCh}rDh]rEUros/jade/geometry_tutorialsrFassh ˆh }rG(h}rHh}rIh]rJUros-jade-geometry-tutorialsrKassh}rLh}rMh]rNjKassuh}rOh}rPh}rQh]rRjKasssuUhector_gazebo_pluginsrS}rT(h}rUh}rVh]rWUros/jade/hector_gazeborXassh ˆh }rY(h}rZh}r[h]r\Uros-jade-hector-gazebo-pluginsr]assh}r^h}r_h]r`j]assuh}rah}rbh}rch]rdj]asssuUhumanoid_nav_msgsre}rf(h}rgh}rhh]riUros/jade/humanoid_msgsrjassh ˆh }rk(h}rlh}rmh]rnUros-jade-humanoid-nav-msgsroassh}rph}rqh]rrjoassuh}rsh}rth}ruh]rvjoasssuU mavros_msgsrw}rx(h}ryh}rzh]r{Uros/jade/mavrosr|assh ˆh }r}(h}r~h}rh]r€Uros-jade-mavros-msgsrassh}r‚h}rƒh]r„jassuh}r…h}r†h}r‡h]rˆjasssuUrqt_image_viewr‰}rŠ(h}r‹h}rŒh]rUros/jade/rqt_image_viewrŽassh ˆh }r(h}rh}r‘h]r’Uros-jade-rqt-image-viewr“assh}r”h}r•h]r–j“assuh}r—h}r˜h}r™h]ršj“asssuUmultisense_cal_checkr›}rœ(h}rh}ržh]rŸUros/jade/multisense_rosr assh ˆh }r¡(h}r¢h}r£h]r¤Uros-jade-multisense-cal-checkr¥assh}r¦h}r§h]r¨j¥assuh}r©h}rªh}r«h]r¬j¥asssuU rqt_consoler­}r®(h}r¯h}r°h]r±Uros/jade/rqt_consoler²assh ˆh }r³(h}r´h}rµh]r¶Uros-jade-rqt-consoler·assh}r¸h}r¹h]rºj·assuh}r»h}r¼h}r½h]r¾j·asssuU rplidar_rosr¿}rÀ(h}rÁh}rÂh]rÃUros/jade/rplidar_rosrÄassh ˆh }rÅ(h}rÆh}rÇh]rÈUros-jade-rplidar-rosrÉassh}rÊh}rËh]rÌjÉassuh}rÍh}rÎh}rÏh]rÐjÉasssuUhector_quadrotor_controllerrÑ}rÒ(h}rÓh}rÔh]rÕUros/jade/hector_quadrotorrÖassh ˆh }r×(h}rØh}rÙh]rÚU$ros-jade-hector-quadrotor-controllerrÛassh}rÜh}rÝh]rÞjÛassuh}rßh}ràh}ráh]râjÛasssuU sicktoolboxrã}rä(h}råh}ræh]rçUros/jade/sicktoolboxrèassh ˆh }ré(h}rêh}rëh]rìUros-jade-sicktoolboxríassh}rîh}rïh]rðjíassuh}rñh}ròh}róh]rôjíasssuU ecl_sigslotsrõ}rö(h}r÷h}røh]rùUros/jade/ecl_corerúassh ˆh }rû(h}rüh}rýh]rþUros-jade-ecl-sigslotsrÿassh}rh}rh]rjÿassuh}rh}rh}rh]rjÿasssuUjsk_interactiver}r(h}r h}r h]r Uros/jade/jsk_visualizationr assh ˆh }r (h}rh}rh]rUros-jade-jsk-interactiverassh}rh}rh]rjassuh}rh}rh}rh]rjasssuU geometry2r}r(h}rh}rh]rUros/jade/geometry2rassh ˆh }r(h}r h}r!h]r"Uros-jade-geometry2r#assh}r$h}r%h]r&j#assuh}r'h}r(h}r)h]r*j#asssuUtrivial_garbager+}r,(h}r-h}r.h]r/Uros/jade/cram_3rdpartyr0assh ˆh }r1(h}r2h}r3h]r4Uros-jade-trivial-garbager5assh}r6h}r7h]r8j5assuh}r9h}r:h}r;h]r<j5asssuUclickr=}r>(h}r?h}r@h]rAUros/jade/clickrBassh ˆh }rC(h}rDh}rEh]rFUros-jade-clickrGassh}rHh}rIh]rJjGassuh}rKh}rLh}rMh]rNjGasssuU pyros_commonrO}rP(h}rQh}rRh]rSUros/jade/pyros_commonrTassh ˆh }rU(h}rVh}rWh]rXUros-jade-pyros-commonrYassh}rZh}r[h]r\jYassuh}r]h}r^h}r_h]r`jYasssuUnav2d_tutorialsra}rb(h}rch}rdh]reUros/jade/navigation_2drfassh ˆh }rg(h}rhh}rih]rjUros-jade-nav2d-tutorialsrkassh}rlh}rmh]rnjkassuh}roh}rph}rqh]rrjkasssuUectors}rt(h}ruh}rvh]rwU ros/jade/ectorxassh ˆh }ry(h}rzh}r{h]r|U ros-jade-ector}assh}r~h}rh]r€j}assuh}rh}r‚h}rƒh]r„j}asssuU rosh_desktopr…}r†(h}r‡h}rˆh]r‰Uros/jade/rosh_desktop_pluginsrŠassh ˆh }r‹(h}rŒh}rh]rŽUros-jade-rosh-desktoprassh}rh}r‘h]r’jassuh}r“h}r”h}r•h]r–jasssuU imagezero_rosr—}r˜(h}r™h}ršh]r›Uros/jade/imagezero_transportrœassh ˆh }r(h}ržh}rŸh]r Uros-jade-imagezero-rosr¡assh}r¢h}r£h]r¤j¡assuh}r¥h}r¦h}r§h]r¨j¡asssuUrqt_guir©}rª(h}r«h}r¬h]r­U ros/jade/rqtr®assh ˆh }r¯(h}r°h}r±h]r²Uros-jade-rqt-guir³assh}r´h}rµh]r¶j³assuh}r·h}r¸h}r¹h]rºj³asssuU nmea_msgsr»}r¼(h}r½h}r¾h]r¿Uros/jade/nmea_msgsrÀassh ˆh }rÁ(h}rÂh}rÃh]rÄUros-jade-nmea-msgsrÅassh}rÆh}rÇh]rÈjÅassuh}rÉh}rÊh}rËh]rÌjÅasssuU nao_meshesrÍ}rÎ(h}rÏh}rÐh]rÑUros/jade/nao_meshesrÒassh ˆh }rÓ(h}rÔh}rÕh]rÖUros-jade-nao-meshesr×assh}rØh}rÙh]rÚj×assuh}rÛh}rÜh}rÝh]rÞj×asssuUnovatel_gps_msgsrß}rà(h}ráh}râh]rãUros/jade/novatel_gps_driverräassh ˆh }rå(h}ræh}rçh]rèUros-jade-novatel-gps-msgsréassh}rêh}rëh]rìjéassuh}ríh}rîh}rïh]rðjéasssuUrosserial_embeddedlinuxrñ}rò(h}róh}rôh]rõUros/jade/rosserialröassh ˆh }r÷(h}røh}rùh]rúU ros-jade-rosserial-embeddedlinuxrûassh}rüh}rýh]rþjûassuh}rÿh}rh}rh]rjûasssuUeigen_conversionsr}r(h}rh}rh]rUros/jade/geometryrassh ˆh }r (h}r h}r h]r Uros-jade-eigen-conversionsr assh}rh}rh]rj assuh}rh}rh}rh]rj asssuUindustrial_utilsr}r(h}rh}rh]rUros/jade/industrial_corerassh ˆh }r(h}rh}rh]rUros-jade-industrial-utilsrassh}r h}r!h]r"jassuh}r#h}r$h}r%h]r&jasssuUrostopicr'}r((h}r)h}r*h]r+Uros/jade/ros_commr,assh ˆh }r-(h}r.h}r/h]r0Uros-jade-rostopicr1assh}r2h}r3h]r4j1assuh}r5h}r6h}r7h]r8j1asssuUvisualization_msgsr9}r:(h}r;h}r<h]r=Uros/jade/common_msgsr>assh ˆh }r?(h}r@h}rAh]rBUros-jade-visualization-msgsrCassh}rDh}rEh]rFjCassuh}rGh}rHh}rIh]rJjCasssuUmessage_generationrK}rL(h}rMh}rNh]rOUros/jade/message_generationrPassh ˆh }rQ(h}rRh}rSh]rTUros-jade-message-generationrUassh}rVh}rWh]rXjUassuh}rYh}rZh}r[h]r\jUasssuUcartesian_msgsr]}r^(h}r_h}r`h]raUros/jade/cartesian_msgsrbassh ˆh }rc(h}rdh}reh]rfUros-jade-cartesian-msgsrgassh}rhh}rih]rjjgassuh}rkh}rlh}rmh]rnjgasssuU moveit_rosro}rp(h}rqh}rrh]rsUros/jade/moveitrtassh ˆh }ru(h}rvh}rwh]rxUros-jade-moveit-rosryassh}rzh}r{h]r|jyassuh}r}h}r~h}rh]r€jyasssuUjsk_topic_toolsr}r‚(h}rƒh}r„h]r…Uros/jade/jsk_commonr†assh ˆh }r‡(h}rˆh}r‰h]rŠUros-jade-jsk-topic-toolsr‹assh}rŒh}rh]rŽj‹assuh}rh}rh}r‘h]r’j‹asssuUecto_image_pipeliner“}r”(h}r•h}r–h]r—Uros/jade/ecto_image_pipeliner˜assh ˆh }r™(h}ršh}r›h]rœUros-jade-ecto-image-pipelinerassh}ržh}rŸh]r jassuh}r¡h}r¢h}r£h]r¤jasssuU audio_commonr¥}r¦(h}r§h}r¨h]r©Uros/jade/audio_commonrªassh ˆh }r«(h}r¬h}r­h]r®Uros-jade-audio-commonr¯assh}r°h}r±h]r²j¯assuh}r³h}r´h}rµh]r¶j¯asssuUimage_cb_detectorr·}r¸(h}r¹h}rºh]r»Uros/jade/calibrationr¼assh ˆh }r½(h}r¾h}r¿h]rÀUros-jade-image-cb-detectorrÁassh}rÂh}rÃh]rÄjÁassuh}rÅh}rÆh}rÇh]rÈjÁasssuUjsk_recognitionrÉ}rÊ(h}rËh}rÌh]rÍUros/jade/jsk_recognitionrÎassh ˆh }rÏ(h}rÐh}rÑh]rÒUros-jade-jsk-recognitionrÓassh}rÔh}rÕh]rÖjÓassuh}r×h}rØh}rÙh]rÚjÓasssuUworld_item_searchrÛ}rÜ(h}rÝh}rÞh]rßU"ros/jade/spatial_temporal_learningràassh ˆh }rá(h}râh}rãh]räUros-jade-world-item-searchråassh}ræh}rçh]rèjåassuh}réh}rêh}rëh]rìjåasssuUcostmap_converterrí}rî(h}rïh}rðh]rñUros/jade/costmap_converterròassh ˆh }ró(h}rôh}rõh]röUros-jade-costmap-converterr÷assh}røh}rùh]rúj÷assuh}rûh}rüh}rýh]rþj÷asssuUmrpt_reactivenav2drÿ}r(h}rh}rh]rUros/jade/mrpt_navigationrassh ˆh }r(h}rh}rh]rUros-jade-mrpt-reactivenav2dr assh}r h}r h]r j assuh}r h}rh}rh]rj asssuU ecl_threadsr}r(h}rh}rh]rUros/jade/ecl_corerassh ˆh }r(h}rh}rh]rUros-jade-ecl-threadsrassh}rh}rh]rjassuh}rh}r h}r!h]r"jasssuU hector_slamr#}r$(h}r%h}r&h]r'Uros/jade/hector_slamr(assh ˆh }r)(h}r*h}r+h]r,Uros-jade-hector-slamr-assh}r.h}r/h]r0j-assuh}r1h}r2h}r3h]r4j-asssuU urdf_tutorialr5}r6(h}r7h}r8h]r9Uros/jade/urdf_tutorialr:assh ˆh }r;(h}r<h}r=h]r>Uros-jade-urdf-tutorialr?assh}r@h}rAh]rBj?assuh}rCh}rDh}rEh]rFj?asssuU rqt_nav_viewrG}rH(h}rIh}rJh]rKUros/jade/rqt_nav_viewrLassh ˆh }rM(h}rNh}rOh]rPUros-jade-rqt-nav-viewrQassh}rRh}rSh]rTjQassuh}rUh}rVh}rWh]rXjQasssuUinterval_intersectionrY}rZ(h}r[h}r\h]r]Uros/jade/calibrationr^assh ˆh }r_(h}r`h}rah]rbUros-jade-interval-intersectionrcassh}rdh}reh]rfjcassuh}rgh}rhh}rih]rjjcasssuUecl_corerk}rl(h}rmh}rnh]roUros/jade/ecl_corerpassh ˆh }rq(h}rrh}rsh]rtUros-jade-ecl-coreruassh}rvh}rwh]rxjuassuh}ryh}rzh}r{h]r|juasssuUimu_transformerr}}r~(h}rh}r€h]rUros/jade/imu_pipeliner‚assh ˆh }rƒ(h}r„h}r…h]r†Uros-jade-imu-transformerr‡assh}rˆh}r‰h]rŠj‡assuh}r‹h}rŒh}rh]rŽj‡asssuUauv_msgsr}r(h}r‘h}r’h]r“Uros/jade/auv_msgsr”assh ˆh }r•(h}r–h}r—h]r˜Uros-jade-auv-msgsr™assh}ršh}r›h]rœj™assuh}rh}ržh}rŸh]r j™asssuUhector_marker_drawingr¡}r¢(h}r£h}r¤h]r¥Uros/jade/hector_slamr¦assh ˆh }r§(h}r¨h}r©h]rªUros-jade-hector-marker-drawingr«assh}r¬h}r­h]r®j«assuh}r¯h}r°h}r±h]r²j«asssuUroscpp_tutorialsr³}r´(h}rµh}r¶h]r·Uros/jade/ros_tutorialsr¸assh ˆh }r¹(h}rºh}r»h]r¼Uros-jade-roscpp-tutorialsr½assh}r¾h}r¿h]rÀj½assuh}rÁh}rÂh}rÃh]rÄj½asssuU ecl_buildrÅ}rÆ(h}rÇh}rÈh]rÉUros/jade/ecl_toolsrÊassh ˆh }rË(h}rÌh}rÍh]rÎUros-jade-ecl-buildrÏassh}rÐh}rÑh]rÒjÏassuh}rÓh}rÔh}rÕh]rÖjÏasssuUnav2dr×}rØ(h}rÙh}rÚh]rÛUros/jade/navigation_2drÜassh ˆh }rÝ(h}rÞh}rßh]ràUros-jade-nav2dráassh}râh}rãh]räjáassuh}råh}ræh}rçh]rèjáasssuU driver_commonré}rê(h}rëh}rìh]ríUros/jade/driver_commonrîassh ˆh }rï(h}rðh}rñh]ròUros-jade-driver-commonróassh}rôh}rõh]röjóassuh}r÷h}røh}rùh]rújóasssuUpython_orocos_kdlrû}rü(h}rýh}rþh]rÿU#ros/jade/orocos_kinematics_dynamicsr assh ˆh }r (h}r h}r h]r Uros-jade-python-orocos-kdlr assh}r h}r h]r j assuh}r h}r h}r h]r j asssuUpointgrey_camera_driverr }r (h}r h}r h]r U ros/jade/pointgrey_camera_driverr assh ˆh }r (h}r h}r h]r U ros-jade-pointgrey-camera-driverr assh}r h}r h]r j assuh}r h}r h}r h]r j asssuUoclr }r (h}r! h}r" h]r# U ros/jade/oclr$ assh ˆh }r% (h}r& h}r' h]r( U ros-jade-oclr) assh}r* h}r+ h]r, j) assuh}r- h}r. h}r/ h]r0 j) asssuUpr2_controllersr1 }r2 (h}r3 h}r4 h]r5 Uros/jade/pr2_controllersr6 assh ˆh }r7 (h}r8 h}r9 h]r: Uros-jade-pr2-controllersr; assh}r< h}r= h]r> j; assuh}r? h}r@ h}rA h]rB j; asssuUpointgrey_camera_descriptionrC }rD (h}rE h}rF h]rG U ros/jade/pointgrey_camera_driverrH assh ˆh }rI (h}rJ h}rK h]rL U%ros-jade-pointgrey-camera-descriptionrM assh}rN h}rO h]rP jM assuh}rQ h}rR h}rS h]rT jM asssuUgravity_compensationrU }rV (h}rW h}rX h]rY Uros/jade/force_torque_toolsrZ assh ˆh }r[ (h}r\ h}r] h]r^ Uros-jade-gravity-compensationr_ assh}r` h}ra h]rb j_ assuh}rc h}rd h}re h]rf j_ asssuU robot_modelrg }rh (h}ri h}rj h]rk Uros/jade/robot_modelrl assh ˆh }rm (h}rn h}ro h]rp Uros-jade-robot-modelrq assh}rr h}rs h]rt jq assuh}ru h}rv h}rw h]rx jq asssuUmultimaster_fkiery }rz (h}r{ h}r| h]r} Uros/jade/multimaster_fkier~ assh ˆh }r (h}r€ h}r h]r‚ Uros-jade-multimaster-fkierƒ assh}r„ h}r… h]r† jƒ assuh}r‡ h}rˆ h}r‰ h]rŠ jƒ asssuUjskeusr‹ }rŒ (h}r h}rŽ h]r Uros/jade/jskeusr assh ˆh }r‘ (h}r’ h}r“ h]r” Uros-jade-jskeusr• assh}r– h}r— h]r˜ j• assuh}r™ h}rš h}r› h]rœ j• asssuUvisp_hand2eye_calibrationr }rž (h}rŸ h}r  h]r¡ Uros/jade/vision_vispr¢ assh ˆh }r£ (h}r¤ h}r¥ h]r¦ U"ros-jade-visp-hand2eye-calibrationr§ assh}r¨ h}r© h]rª j§ assuh}r« h}r¬ h}r­ h]r® j§ asssuUpepper_moveit_configr¯ }r° (h}r± h}r² h]r³ Uros/jade/pepper_moveit_configr´ assh ˆh }rµ (h}r¶ h}r· h]r¸ Uros-jade-pepper-moveit-configr¹ assh}rº h}r» h]r¼ j¹ assuh}r½ h}r¾ h}r¿ h]rÀ j¹ asssuU power_msgsrÁ }r (h}rà h}rÄ h]rÅ Uros/jade/power_msgsrÆ assh ˆh }rÇ (h}rÈ h}rÉ h]rÊ Uros-jade-power-msgsrË assh}rÌ h}rÍ h]rÎ jË assuh}rÏ h}rÐ h}rÑ h]rÒ jË asssuUrosparam_shortcutsrÓ }rÔ (h}rÕ h}rÖ h]r× Uros/jade/rosparam_shortcutsrØ assh ˆh }rÙ (h}rÚ h}rÛ h]rÜ Uros-jade-rosparam-shortcutsrÝ assh}rÞ h}rß h]rà jÝ assuh}rá h}râ h}rã h]rä jÝ asssuUmicrostrain_3dmgx2_imurå }ræ (h}rç h}rè h]ré Uros/jade/microstrain_3dmgx2_imurê assh ˆh }rë (h}rì h}rí h]rî Uros-jade-microstrain-3dmgx2-imurï assh}rð h}rñ h]rò jï assuh}ró h}rô h}rõ h]rö jï asssuU hector_modelsr÷ }rø (h}rù h}rú h]rû Uros/jade/hector_modelsrü assh ˆh }rý (h}rþ h}rÿ h]r Uros-jade-hector-modelsr assh}r h}r h]r j assuh}r h}r h}r h]r j asssuUnav2d_operatorr }r (h}r h}r h]r Uros/jade/navigation_2dr assh ˆh }r (h}r h}r h]r Uros-jade-nav2d-operatorr assh}r h}r h]r j assuh}r h}r h}r h]r j asssuU cl_utilitiesr }r (h}r h}r h]r Uros/jade/cram_3rdpartyr assh ˆh }r! (h}r" h}r# h]r$ Uros-jade-cl-utilitiesr% assh}r& h}r' h]r( j% assuh}r) h}r* h}r+ h]r, j% asssuUarucor- }r. (h}r/ h}r0 h]r1 Uros/jade/aruco_rosr2 assh ˆh }r3 (h}r4 h}r5 h]r6 Uros-jade-arucor7 assh}r8 h}r9 h]r: j7 assuh}r; h}r< h}r= h]r> j7 asssuUarbotix_controllersr? }r@ (h}rA h}rB h]rC Uros/jade/arbotix_rosrD assh ˆh }rE (h}rF h}rG h]rH Uros-jade-arbotix-controllersrI assh}rJ h}rK h]rL jI assuh}rM h}rN h}rO h]rP jI asssuU navigationrQ }rR (h}rS h}rT h]rU Uros/jade/navigationrV assh ˆh }rW (h}rX h}rY h]rZ Uros-jade-navigationr[ assh}r\ h}r] h]r^ j[ assuh}r_ h}r` h}ra h]rb j[ asssuUswri_string_utilrc }rd (h}re h}rf h]rg Uros/jade/marti_commonrh assh ˆh }ri (h}rj h}rk h]rl Uros-jade-swri-string-utilrm assh}rn h}ro h]rp jm assuh}rq h}rr h}rs h]rt jm asssuUsparse_bundle_adjustmentru }rv (h}rw h}rx h]ry U!ros/jade/sparse_bundle_adjustmentrz assh ˆh }r{ (h}r| h}r} h]r~ U!ros-jade-sparse-bundle-adjustmentr assh}r€ h}r h]r‚ j assuh}rƒ h}r„ h}r… h]r† j asssuU moveit_pythonr‡ }rˆ (h}r‰ h}rŠ h]r‹ Uros/jade/moveit_pythonrŒ assh ˆh }r (h}rŽ h}r h]r Uros-jade-moveit-pythonr‘ assh}r’ h}r“ h]r” j‘ assuh}r• h}r– h}r— h]r˜ j‘ asssuUgazebo_ros_pkgsr™ }rš (h}r› h}rœ h]r Uros/jade/gazebo_ros_pkgsrž assh ˆh }rŸ (h}r  h}r¡ h]r¢ Uros-jade-gazebo-ros-pkgsr£ assh}r¤ h}r¥ h]r¦ j£ assuh}r§ h}r¨ h}r© h]rª j£ asssuU alexandriar« }r¬ (h}r­ h}r® h]r¯ Uros/jade/cram_3rdpartyr° assh ˆh }r± (h}r² h}r³ h]r´ Uros-jade-alexandriarµ assh}r¶ h}r· h]r¸ jµ assuh}r¹ h}rº h}r» h]r¼ jµ asssuU jsk_planningr½ }r¾ (h}r¿ h}rÀ h]rÁ Uros/jade/jsk_planningr assh ˆh }rà (h}rÄ h}rÅ h]rÆ Uros-jade-jsk-planningrÇ assh}rÈ h}rÉ h]rÊ jÇ assuh}rË h}rÌ h}rÍ h]rÎ jÇ asssuU novatel_msgsrÏ }rÐ (h}rÑ h}rÒ h]rÓ Uros/jade/novatel_span_driverrÔ assh ˆh }rÕ (h}rÖ h}r× h]rØ Uros-jade-novatel-msgsrÙ assh}rÚ h}rÛ h]rÜ jÙ assuh}rÝ h}rÞ h}rß h]rà jÙ asssuUmulti_map_serverrá }râ (h}rã h}rä h]rå Uros/jade/jsk_commonræ assh ˆh }rç (h}rè h}ré h]rê Uros-jade-multi-map-serverrë assh}rì h}rí h]rî jë assuh}rï h}rð h}rñ h]rò jë asssuUros_control_boilerplateró }rô (h}rõ h}rö h]r÷ U ros/jade/ros_control_boilerplaterø assh ˆh }rù (h}rú h}rû h]rü U ros-jade-ros-control-boilerplaterý assh}rþ h}rÿ h]r jý assuh}r h}r h}r h]r jý asssuUmd49_serialportr }r (h}r h}r h]r Uros/jade/md49_base_controllerr assh ˆh }r (h}r h}r h]r Uros-jade-md49-serialportr assh}r h}r h]r j assuh}r h}r h}r h]r j asssuUrtt_tfr }r (h}r h}r h]r Uros/jade/rtt_ros_integrationr assh ˆh }r (h}r h}r h]r Uros-jade-rtt-tfr! assh}r" h}r# h]r$ j! assuh}r% h}r& h}r' h]r( j! asssuUpyros_interfaces_rosr) }r* (h}r+ h}r, h]r- Uros/jade/pyros_interfaces_rosr. assh ˆh }r/ (h}r0 h}r1 h]r2 Uros-jade-pyros-interfaces-rosr3 assh}r4 h}r5 h]r6 j3 assuh}r7 h}r8 h}r9 h]r: j3 asssuUvelodyne_gazebo_pluginsr; }r< (h}r= h}r> h]r? Uros/jade/velodyne_simulatorr@ assh ˆh }rA (h}rB h}rC h]rD U ros-jade-velodyne-gazebo-pluginsrE assh}rF h}rG h]rH jE assuh}rI h}rJ h}rK h]rL jE asssuUjsk_recognition_utilsrM }rN (h}rO h}rP h]rQ Uros/jade/jsk_recognitionrR assh ˆh }rS (h}rT h}rU h]rV Uros-jade-jsk-recognition-utilsrW assh}rX h}rY h]rZ jW assuh}r[ h}r\ h}r] h]r^ jW asssuUrosapir_ }r` (h}ra h}rb h]rc Uros/jade/rosbridge_suiterd assh ˆh }re (h}rf h}rg h]rh Uros-jade-rosapiri assh}rj h}rk h]rl ji assuh}rm h}rn h}ro h]rp ji asssuUindustrial_corerq }rr (h}rs h}rt h]ru Uros/jade/industrial_corerv assh ˆh }rw (h}rx h}ry h]rz Uros-jade-industrial-corer{ assh}r| h}r} h]r~ j{ assuh}r h}r€ h}r h]r‚ j{ asssuU rgbd_launchrƒ }r„ (h}r… h}r† h]r‡ Uros/jade/rgbd_launchrˆ assh ˆh }r‰ (h}rŠ h}r‹ h]rŒ Uros-jade-rgbd-launchr assh}rŽ h}r h]r j assuh}r‘ h}r’ h}r“ h]r” j asssuUmoveit_ros_control_interfacer• }r– (h}r— h}r˜ h]r™ Uros/jade/moveitrš assh ˆh }r› (h}rœ h}r h]rž U%ros-jade-moveit-ros-control-interfacerŸ assh}r  h}r¡ h]r¢ jŸ assuh}r£ h}r¤ h}r¥ h]r¦ jŸ asssuUhector_map_serverr§ }r¨ (h}r© h}rª h]r« Uros/jade/hector_slamr¬ assh ˆh }r­ (h}r® h}r¯ h]r° Uros-jade-hector-map-serverr± assh}r² h}r³ h]r´ j± assuh}rµ h}r¶ h}r· h]r¸ j± asssuUrqt_runtime_monitorr¹ }rº (h}r» h}r¼ h]r½ Uros/jade/rqt_runtime_monitorr¾ assh ˆh }r¿ (h}rÀ h}rÁ h]r Uros-jade-rqt-runtime-monitorrà assh}rÄ h}rÅ h]rÆ jà assuh}rÇ h}rÈ h}rÉ h]rÊ jà asssuUpepper_controlrË }rÌ (h}rÍ h}rÎ h]rÏ Uros/jade/pepper_virtualrÐ assh ˆh }rÑ (h}rÒ h}rÓ h]rÔ Uros-jade-pepper-controlrÕ assh}rÖ h}r× h]rØ jÕ assuh}rÙ h}rÚ h}rÛ h]rÜ jÕ asssuUvelocity_controllersrÝ }rÞ (h}rß h}rà h]rá Uros/jade/ros_controllersrâ assh ˆh }rã (h}rä h}rå h]ræ Uros-jade-velocity-controllersrç assh}rè h}ré h]rê jç assuh}rë h}rì h}rí h]rî jç asssuU ecl_eigenrï }rð (h}rñ h}rò h]ró Uros/jade/ecl_corerô assh ˆh }rõ (h}rö h}r÷ h]rø Uros-jade-ecl-eigenrù assh}rú h}rû h]rü jù assuh}rý h}rþ h}rÿ h]r jù asssuU vision_opencvr }r (h}r h}r h]r Uros/jade/vision_opencvr assh ˆh }r (h}r h}r h]r Uros-jade-vision-opencvr assh}r h}r h]r j assuh}r h}r h}r h]r j asssuU lyap_controlr }r (h}r h}r h]r Uros/jade/lyap_controlr assh ˆh }r (h}r h}r h]r Uros-jade-lyap-controlr assh}r h}r h]r j assuh}r! h}r" h}r# h]r$ j asssuUworldlibr% }r& (h}r' h}r( h]r) U"ros/jade/spatial_temporal_learningr* assh ˆh }r+ (h}r, h}r- h]r. Uros-jade-worldlibr/ assh}r0 h}r1 h]r2 j/ assuh}r3 h}r4 h}r5 h]r6 j/ asssuUtrac_ikr7 }r8 (h}r9 h}r: h]r; Uros/jade/trac_ikr< assh ˆh }r= (h}r> h}r? h]r@ Uros-jade-trac-ikrA assh}rB h}rC h]rD jA assuh}rE h}rF h}rG h]rH jA asssuUhector_trajectory_serverrI }rJ (h}rK h}rL h]rM Uros/jade/hector_slamrN assh ˆh }rO (h}rP h}rQ h]rR U!ros-jade-hector-trajectory-serverrS assh}rT h}rU h]rV jS assuh}rW h}rX h}rY h]rZ jS asssuUkorg_nanokontrolr[ }r\ (h}r] h}r^ h]r_ Uros/jade/korg_nanokontrolr` assh ˆh }ra (h}rb h}rc h]rd Uros-jade-korg-nanokontrolre assh}rf h}rg h]rh je assuh}ri h}rj h}rk h]rl je asssuUnao_interaction_launchersrm }rn (h}ro h}rp h]rq Uros/jade/nao_interactionrr assh ˆh }rs (h}rt h}ru h]rv U"ros-jade-nao-interaction-launchersrw assh}rx h}ry h]rz jw assuh}r{ h}r| h}r} h]r~ jw asssuUrail_user_queue_managerr }r€ (h}r h}r‚ h]rƒ U ros/jade/rail_user_queue_managerr„ assh ˆh }r… (h}r† h}r‡ h]rˆ U ros-jade-rail-user-queue-managerr‰ assh}rŠ h}r‹ h]rŒ j‰ assuh}r h}rŽ h}r h]r j‰ asssuU topic_toolsr‘ }r’ (h}r“ h}r” h]r• Uros/jade/ros_commr– assh ˆh }r— (h}r˜ h}r™ h]rš Uros-jade-topic-toolsr› assh}rœ h}r h]rž j› assuh}rŸ h}r  h}r¡ h]r¢ j› asssuUpython-pathtoolsr£ }r¤ (h}r¥ h}r¦ h]r§ Uros/jade/python-pathtoolsr¨ assh ˆh }r© (h}rª h}r« h]r¬ Uros-jade-python-pathtoolsr­ assh}r® h}r¯ h]r° j­ assuh}r± h}r² h}r³ h]r´ j­ asssuUmultisense_librµ }r¶ (h}r· h}r¸ h]r¹ Uros/jade/multisense_rosrº assh ˆh }r» (h}r¼ h}r½ h]r¾ Uros-jade-multisense-libr¿ assh}rÀ h}rÁ h]r j¿ assuh}rà h}rÄ h}rÅ h]rÆ j¿ asssuUinteractive_marker_tutorialsrÇ }rÈ (h}rÉ h}rÊ h]rË U ros/jade/visualization_tutorialsrÌ assh ˆh }rÍ (h}rÎ h}rÏ h]rÐ U%ros-jade-interactive-marker-tutorialsrÑ assh}rÒ h}rÓ h]rÔ jÑ assuh}rÕ h}rÖ h}r× h]rØ jÑ asssuUmoveit_planners_omplrÙ }rÚ (h}rÛ h}rÜ h]rÝ Uros/jade/moveitrÞ assh ˆh }rß (h}rà h}rá h]râ Uros-jade-moveit-planners-omplrã assh}rä h}rå h]ræ jã assuh}rç h}rè h}ré h]rê jã asssuUteb_local_planner_tutorialsrë }rì (h}rí h}rî h]rï U$ros/jade/teb_local_planner_tutorialsrð assh ˆh }rñ (h}rò h}ró h]rô U$ros-jade-teb-local-planner-tutorialsrõ assh}rö h}r÷ h]rø jõ assuh}rù h}rú h}rû h]rü jõ asssuUrqt_robot_pluginsrý }rþ (h}rÿ h}r h]r Uros/jade/rqt_robot_pluginsr assh ˆh }r (h}r h}r h]r Uros-jade-rqt-robot-pluginsr assh}r h}r h]r j assuh}r h}r h}r h]r j asssuU parameter_par }r (h}r h}r h]r Uros/jade/parameter_par assh ˆh }r (h}r h}r h]r Uros-jade-parameter-par assh}r h}r h]r j assuh}r h}r h}r h]r j asssuUobject_recognition_tabletopr! }r" (h}r# h}r$ h]r% U$ros/jade/object_recognition_tabletopr& assh ˆh }r' (h}r( h}r) h]r* U$ros-jade-object-recognition-tabletopr+ assh}r, h}r- h]r. j+ assuh}r/ h}r0 h}r1 h]r2 j+ asssuUp2os_docr3 }r4 (h}r5 h}r6 h]r7 U ros/jade/p2osr8 assh ˆh }r9 (h}r: h}r; h]r< Uros-jade-p2os-docr= assh}r> h}r? h]r@ j= assuh}rA h}rB h}rC h]rD j= asssuUrqt_robot_steeringrE }rF (h}rG h}rH h]rI Uros/jade/rqt_robot_steeringrJ assh ˆh }rK (h}rL h}rM h]rN Uros-jade-rqt-robot-steeringrO assh}rP h}rQ h]rR jO assuh}rS h}rT h}rU h]rV jO asssuUnaoqi_dcm_driverrW }rX (h}rY h}rZ h]r[ Uros/jade/naoqi_dcm_driverr\ assh ˆh }r] (h}r^ h}r_ h]r` Uros-jade-naoqi-dcm-driverra assh}rb h}rc h]rd ja assuh}re h}rf h}rg h]rh ja asssuUmultimaster_msgs_fkieri }rj (h}rk h}rl h]rm Uros/jade/multimaster_fkiern assh ˆh }ro (h}rp h}rq h]rr Uros-jade-multimaster-msgs-fkiers assh}rt h}ru h]rv js assuh}rw h}rx h}ry h]rz js asssuUswri_system_utilr{ }r| (h}r} h}r~ h]r Uros/jade/marti_commonr€ assh ˆh }r (h}r‚ h}rƒ h]r„ Uros-jade-swri-system-utilr… assh}r† h}r‡ h]rˆ j… assuh}r‰ h}rŠ h}r‹ h]rŒ j… asssuU wts_driverr }rŽ (h}r h}r h]r‘ Uros/jade/wts_driverr’ assh ˆh }r“ (h}r” h}r• h]r– Uros-jade-wts-driverr— assh}r˜ h}r™ h]rš j— assuh}r› h}rœ h}r h]rž j— asssuUar_track_alvar_msgsrŸ }r  (h}r¡ h}r¢ h]r£ Uros/jade/ar_track_alvar_msgsr¤ assh ˆh }r¥ (h}r¦ h}r§ h]r¨ Uros-jade-ar-track-alvar-msgsr© assh}rª h}r« h]r¬ j© assuh}r­ h}r® h}r¯ h]r° j© asssuU jsk_pcl_rosr± }r² (h}r³ h}r´ h]rµ Uros/jade/jsk_recognitionr¶ assh ˆh }r· (h}r¸ h}r¹ h]rº Uros-jade-jsk-pcl-rosr» assh}r¼ h}r½ h]r¾ j» assuh}r¿ h}rÀ h}rÁ h]r j» asssuUarbotixrà }rÄ (h}rÅ h}rÆ h]rÇ Uros/jade/arbotix_rosrÈ assh ˆh }rÉ (h}rÊ h}rË h]rÌ Uros-jade-arbotixrÍ assh}rÎ h}rÏ h]rÐ jÍ assuh}rÑ h}rÒ h}rÓ h]rÔ jÍ asssuU sensor_msgsrÕ }rÖ (h}r× h}rØ h]rÙ Uros/jade/common_msgsrÚ assh ˆh }rÛ (h}rÜ h}rÝ h]rÞ Uros-jade-sensor-msgsrß assh}rà h}rá h]râ jß assuh}rã h}rä h}rå h]ræ jß asssuU roscreaterç }rè (h}ré h}rê h]rë U ros/jade/rosrì assh ˆh }rí (h}rî h}rï h]rð Uros-jade-roscreaterñ assh}rò h}ró h]rô jñ assuh}rõ h}rö h}r÷ h]rø jñ asssuUiai_control_msgsrù }rú (h}rû h}rü h]rý Uros/jade/iai_common_msgsrþ assh ˆh }rÿ (h}rh}rh]rUros-jade-iai-control-msgsrassh}rh}rh]rjassuh}rh}rh}r h]r jasssuU rqt_launchr }r (h}r h}rh]rUros/jade/rqt_launchrassh ˆh }r(h}rh}rh]rUros-jade-rqt-launchrassh}rh}rh]rjassuh}rh}rh}rh]rjasssuU settlerlibr}r(h}rh}r h]r!Uros/jade/calibrationr"assh ˆh }r#(h}r$h}r%h]r&Uros-jade-settlerlibr'assh}r(h}r)h]r*j'assuh}r+h}r,h}r-h]r.j'asssuUum6r/}r0(h}r1h}r2h]r3U ros/jade/um6r4assh ˆh }r5(h}r6h}r7h]r8U ros-jade-um6r9assh}r:h}r;h]r<j9assuh}r=h}r>h}r?h]r@j9asssuUromeo_moveit_configrA}rB(h}rCh}rDh]rEUros/jade/romeo_moveit_configrFassh ˆh }rG(h}rHh}rIh]rJUros-jade-romeo-moveit-configrKassh}rLh}rMh]rNjKassuh}rOh}rPh}rQh]rRjKasssuUjsk_recognition_msgsrS}rT(h}rUh}rVh]rWUros/jade/jsk_recognitionrXassh ˆh }rY(h}rZh}r[h]r\Uros-jade-jsk-recognition-msgsr]assh}r^h}r_h]r`j]assuh}rah}rbh}rch]rdj]asssuU ecl_core_appsre}rf(h}rgh}rhh]riUros/jade/ecl_corerjassh ˆh }rk(h}rlh}rmh]rnUros-jade-ecl-core-appsroassh}rph}rqh]rrjoassuh}rsh}rth}ruh]rvjoasssuU hector_gazeborw}rx(h}ryh}rzh]r{Uros/jade/hector_gazebor|assh ˆh }r}(h}r~h}rh]r€Uros-jade-hector-gazeborassh}r‚h}rƒh]r„jassuh}r…h}r†h}r‡h]rˆjasssuUimu_processorsr‰}rŠ(h}r‹h}rŒh]rUros/jade/imu_pipelinerŽassh ˆh }r(h}rh}r‘h]r’Uros-jade-imu-processorsr“assh}r”h}r•h]r–j“assuh}r—h}r˜h}r™h]ršj“asssuUsrdfdomr›}rœ(h}rh}ržh]rŸUros/jade/srdfdomr assh ˆh }r¡(h}r¢h}r£h]r¤Uros-jade-srdfdomr¥assh}r¦h}r§h]r¨j¥assuh}r©h}rªh}r«h]r¬j¥asssuU teleop_toolsr­}r®(h}r¯h}r°h]r±Uros/jade/teleop_toolsr²assh ˆh }r³(h}r´h}rµh]r¶Uros-jade-teleop-toolsr·assh}r¸h}r¹h]rºj·assuh}r»h}r¼h}r½h]r¾j·asssuUjsk_model_toolsr¿}rÀ(h}rÁh}rÂh]rÃUros/jade/jsk_model_toolsrÄassh ˆh }rÅ(h}rÆh}rÇh]rÈUros-jade-jsk-model-toolsrÉassh}rÊh}rËh]rÌjÉassuh}rÍh}rÎh}rÏh]rÐjÉasssuUswri_opencv_utilrÑ}rÒ(h}rÓh}rÔh]rÕUros/jade/marti_commonrÖassh ˆh }r×(h}rØh}rÙh]rÚUros-jade-swri-opencv-utilrÛassh}rÜh}rÝh]rÞjÛassuh}rßh}ràh}ráh]râjÛasssuU shape_msgsrã}rä(h}råh}ræh]rçUros/jade/common_msgsrèassh ˆh }ré(h}rêh}rëh]rìUros-jade-shape-msgsríassh}rîh}rïh]rðjíassuh}rñh}ròh}róh]rôjíasssuUopencv_candidaterõ}rö(h}r÷h}røh]rùUros/jade/opencv_candidaterúassh ˆh }rû(h}rüh}rýh]rþUros-jade-opencv-candidaterÿassh}rh}rh]rjÿassuh}rh}rh}rh]rjÿasssuUrtctreer}r(h}r h}r h]r Uros/jade/rtctreer assh ˆh }r (h}rh}rh]rUros-jade-rtctreerassh}rh}rh]rjassuh}rh}rh}rh]rjasssuUrospy_message_converterr}r(h}rh}rh]rU ros/jade/rospy_message_converterrassh ˆh }r(h}r h}r!h]r"U ros-jade-rospy-message-converterr#assh}r$h}r%h]r&j#assuh}r'h}r(h}r)h]r*j#asssuUgrid_map_demosr+}r,(h}r-h}r.h]r/Uros/jade/grid_mapr0assh ˆh }r1(h}r2h}r3h]r4Uros-jade-grid-map-demosr5assh}r6h}r7h]r8j5assuh}r9h}r:h}r;h]r<j5asssuUgeometric_shapesr=}r>(h}r?h}r@h]rAUros/jade/geometric_shapesrBassh ˆh }rC(h}rDh}rEh]rFUros-jade-geometric-shapesrGassh}rHh}rIh]rJjGassuh}rKh}rLh}rMh]rNjGasssuUrosh_robot_pluginsrO}rP(h}rQh}rRh]rSUros/jade/rosh_robot_pluginsrTassh ˆh }rU(h}rVh}rWh]rXUros-jade-rosh-robot-pluginsrYassh}rZh}r[h]r\jYassuh}r]h}r^h}r_h]r`jYasssuUunderwater_sensor_msgsra}rb(h}rch}rdh]reUros/jade/underwater_simulationrfassh ˆh }rg(h}rhh}rih]rjUros-jade-underwater-sensor-msgsrkassh}rlh}rmh]rnjkassuh}roh}rph}rqh]rrjkasssuUecl_mathrs}rt(h}ruh}rvh]rwUros/jade/ecl_corerxassh ˆh }ry(h}rzh}r{h]r|Uros-jade-ecl-mathr}assh}r~h}rh]r€j}assuh}rh}r‚h}rƒh]r„j}asssuUmkr…}r†(h}r‡h}rˆh]r‰U ros/jade/rosrŠassh ˆh }r‹(h}rŒh}rh]rŽU ros-jade-mkrassh}rh}r‘h]r’jassuh}r“h}r”h}r•h]r–jasssuUexecutive_smach_visualizationr—}r˜(h}r™h}ršh]r›U&ros/jade/executive_smach_visualizationrœassh ˆh }r(h}ržh}rŸh]r U&ros-jade-executive-smach-visualizationr¡assh}r¢h}r£h]r¤j¡assuh}r¥h}r¦h}r§h]r¨j¡asssuUrosconsole_bridger©}rª(h}r«h}r¬h]r­Uros/jade/rosconsole_bridger®assh ˆh }r¯(h}r°h}r±h]r²Uros-jade-rosconsole-bridger³assh}r´h}rµh]r¶j³assuh}r·h}r¸h}r¹h]rºj³asssuU aniso8601r»}r¼(h}r½h}r¾h]r¿Uros/jade/aniso8601rÀassh ˆh }rÁ(h}rÂh}rÃh]rÄUros-jade-aniso8601rÅassh}rÆh}rÇh]rÈjÅassuh}rÉh}rÊh}rËh]rÌjÅasssuUobject_recognition_todrÍ}rÎ(h}rÏh}rÐh]rÑUros/jade/object_recognition_todrÒassh ˆh }rÓ(h}rÔh}rÕh]rÖUros-jade-object-recognition-todr×assh}rØh}rÙh]rÚj×assuh}rÛh}rÜh}rÝh]rÞj×asssuUsimple_messagerß}rà(h}ráh}râh]rãUros/jade/industrial_coreräassh ˆh }rå(h}ræh}rçh]rèUros-jade-simple-messageréassh}rêh}rëh]rìjéassuh}ríh}rîh}rïh]rðjéasssuUjoint_states_settlerrñ}rò(h}róh}rôh]rõUros/jade/calibrationröassh ˆh }r÷(h}røh}rùh]rúUros-jade-joint-states-settlerrûassh}rüh}rýh]rþjûassuh}rÿh}rh}rh]rjûasssuUcanopen_motor_noder}r(h}rh}rh]rUros/jade/ros_canopenrassh ˆh }r (h}r h}r h]r Uros-jade-canopen-motor-noder assh}rh}rh]rj assuh}rh}rh}rh]rj asssuUecl_linear_algebrar}r(h}rh}rh]rUros/jade/ecl_corerassh ˆh }r(h}rh}rh]rUros-jade-ecl-linear-algebrarassh}r h}r!h]r"jassuh}r#h}r$h}r%h]r&jasssuUpepper_sensors_pyr'}r((h}r)h}r*h]r+Uros/jade/pepper_robotr,assh ˆh }r-(h}r.h}r/h]r0Uros-jade-pepper-sensors-pyr1assh}r2h}r3h]r4j1assuh}r5h}r6h}r7h]r8j1asssuUrosserial_testr9}r:(h}r;h}r<h]r=Uros/jade/rosserialr>assh ˆh }r?(h}r@h}rAh]rBUros-jade-rosserial-testrCassh}rDh}rEh]rFjCassuh}rGh}rHh}rIh]rJjCasssuU rail_mapsrK}rL(h}rMh}rNh]rOUros/jade/rail_mapsrPassh ˆh }rQ(h}rRh}rSh]rTUros-jade-rail-mapsrUassh}rVh}rWh]rXjUassuh}rYh}rZh}r[h]r\jUasssuU task_compilerr]}r^(h}r_h}r`h]raUros/jade/jsk_planningrbassh ˆh }rc(h}rdh}reh]rfUros-jade-task-compilerrgassh}rhh}rih]rjjgassuh}rkh}rlh}rmh]rnjgasssuUpr2_mechanism_msgsro}rp(h}rqh}rrh]rsUros/jade/pr2_mechanism_msgsrtassh ˆh }ru(h}rvh}rwh]rxUros-jade-pr2-mechanism-msgsryassh}rzh}r{h]r|jyassuh}r}h}r~h}rh]r€jyasssuUhrpsysr}r‚(h}rƒh}r„h]r…Uros/jade/hrpsysr†assh ˆh }r‡(h}rˆh}r‰h]rŠUros-jade-hrpsysr‹assh}rŒh}rh]rŽj‹assuh}rh}rh}r‘h]r’j‹asssuU planning_msgsr“}r”(h}r•h}r–h]r—Uros/jade/iai_common_msgsr˜assh ˆh }r™(h}ršh}r›h]rœUros-jade-planning-msgsrassh}ržh}rŸh]r jassuh}r¡h}r¢h}r£h]r¤jasssuU stdr_msgsr¥}r¦(h}r§h}r¨h]r©Uros/jade/stdr_simulatorrªassh ˆh }r«(h}r¬h}r­h]r®Uros-jade-stdr-msgsr¯assh}r°h}r±h]r²j¯assuh}r³h}r´h}rµh]r¶j¯asssuU grizzly_msgsr·}r¸(h}r¹h}rºh]r»Uros/jade/grizzlyr¼assh ˆh }r½(h}r¾h}r¿h]rÀUros-jade-grizzly-msgsrÁassh}rÂh}rÃh]rÄjÁassuh}rÅh}rÆh}rÇh]rÈjÁasssuUnovatel_gps_driverrÉ}rÊ(h}rËh}rÌh]rÍUros/jade/novatel_gps_driverrÎassh ˆh }rÏ(h}rÐh}rÑh]rÒUros-jade-novatel-gps-driverrÓassh}rÔh}rÕh]rÖjÓassuh}r×h}rØh}rÙh]rÚjÓasssuUhardware_interfacerÛ}rÜ(h}rÝh}rÞh]rßUros/jade/ros_controlràassh ˆh }rá(h}râh}rãh]räUros-jade-hardware-interfaceråassh}ræh}rçh]rèjåassuh}réh}rêh}rëh]rìjåasssuUrtt_diagnostic_msgsrí}rî(h}rïh}rðh]rñUros/jade/rtt_ros_integrationròassh ˆh }ró(h}rôh}rõh]röUros-jade-rtt-diagnostic-msgsr÷assh}røh}rùh]rúj÷assuh}rûh}rüh}rýh]rþj÷asssuU smach_viewerrÿ}r(h}rh}rh]rU&ros/jade/executive_smach_visualizationrassh ˆh }r(h}rh}rh]rUros-jade-smach-viewerr assh}r h}r h]r j assuh}r h}rh}rh]rj asssuUcamera_info_manager_pyr}r(h}rh}rh]rUros/jade/camera_info_manager_pyrassh ˆh }r(h}rh}rh]rUros-jade-camera-info-manager-pyrassh}rh}rh]rjassuh}rh}r h}r!h]r"jasssuUhector_quadrotor_gazebor#}r$(h}r%h}r&h]r'Uros/jade/hector_quadrotorr(assh ˆh }r)(h}r*h}r+h]r,U ros-jade-hector-quadrotor-gazebor-assh}r.h}r/h]r0j-assuh}r1h}r2h}r3h]r4j-asssuUrobot_localizationr5}r6(h}r7h}r8h]r9Uros/jade/robot_localizationr:assh ˆh }r;(h}r<h}r=h]r>Uros-jade-robot-localizationr?assh}r@h}rAh]rBj?assuh}rCh}rDh}rEh]rFj?asssuUtimestamp_toolsrG}rH(h}rIh}rJh]rKUros/jade/driver_commonrLassh ˆh }rM(h}rNh}rOh]rPUros-jade-timestamp-toolsrQassh}rRh}rSh]rTjQassuh}rUh}rVh}rWh]rXjQasssuU nav2d_msgsrY}rZ(h}r[h}r\h]r]Uros/jade/navigation_2dr^assh ˆh }r_(h}r`h}rah]rbUros-jade-nav2d-msgsrcassh}rdh}reh]rfjcassuh}rgh}rhh}rih]rjjcasssuU katana_driverrk}rl(h}rmh}rnh]roUros/jade/katana_driverrpassh ˆh }rq(h}rrh}rsh]rtUros-jade-katana-driverruassh}rvh}rwh]rxjuassuh}ryh}rzh}r{h]r|juasssuUwiimoter}}r~(h}rh}r€h]rUros/jade/joystick_driversr‚assh ˆh }rƒ(h}r„h}r…h]r†Uros-jade-wiimoter‡assh}rˆh}r‰h]rŠj‡assuh}r‹h}rŒh}rh]rŽj‡asssuUfiveamr}r(h}r‘h}r’h]r“Uros/jade/cram_3rdpartyr”assh ˆh }r•(h}r–h}r—h]r˜Uros-jade-fiveamr™assh}ršh}r›h]rœj™assuh}rh}ržh}rŸh]r j™asssuUhector_quadrotorr¡}r¢(h}r£h}r¤h]r¥Uros/jade/hector_quadrotorr¦assh ˆh }r§(h}r¨h}r©h]rªUros-jade-hector-quadrotorr«assh}r¬h}r­h]r®j«assuh}r¯h}r°h}r±h]r²j«asssuUserialr³}r´(h}rµh}r¶h]r·Uros/jade/serialr¸assh ˆh }r¹(h}rºh}r»h]r¼Uros-jade-serialr½assh}r¾h}r¿h]rÀj½assuh}rÁh}rÂh}rÃh]rÄj½asssuUmove_slow_and_clearrÅ}rÆ(h}rÇh}rÈh]rÉUros/jade/navigationrÊassh ˆh }rË(h}rÌh}rÍh]rÎUros-jade-move-slow-and-clearrÏassh}rÐh}rÑh]rÒjÏassuh}rÓh}rÔh}rÕh]rÖjÏasssuU joy_teleopr×}rØ(h}rÙh}rÚh]rÛUros/jade/teleop_toolsrÜassh ˆh }rÝ(h}rÞh}rßh]ràUros-jade-joy-teleopráassh}râh}rãh]räjáassuh}råh}ræh}rçh]rèjáasssuUpcl_rosré}rê(h}rëh}rìh]ríUros/jade/perception_pclrîassh ˆh }rï(h}rðh}rñh]ròUros-jade-pcl-rosróassh}rôh}rõh]röjóassuh}r÷h}røh}rùh]rújóasssuUcsmrû}rü(h}rýh}rþh]rÿU ros/jade/csmrassh ˆh }r(h}rh}rh]rU ros-jade-csmrassh}rh}rh]rjassuh}r h}r h}r h]r jasssuUroslz4r }r(h}rh}rh]rUros/jade/ros_commrassh ˆh }r(h}rh}rh]rUros-jade-roslz4rassh}rh}rh]rjassuh}rh}rh}rh]rjasssuUswri_serial_utilr}r (h}r!h}r"h]r#Uros/jade/marti_commonr$assh ˆh }r%(h}r&h}r'h]r(Uros-jade-swri-serial-utilr)assh}r*h}r+h]r,j)assuh}r-h}r.h}r/h]r0j)asssuUobject_recognition_capturer1}r2(h}r3h}r4h]r5U#ros/jade/object_recognition_capturer6assh ˆh }r7(h}r8h}r9h]r:U#ros-jade-object-recognition-capturer;assh}r<h}r=h]r>j;assuh}r?h}r@h}rAh]rBj;asssuUwireless_watcherrC}rD(h}rEh}rFh]rGUros/jade/wirelessrHassh ˆh }rI(h}rJh}rKh]rLUros-jade-wireless-watcherrMassh}rNh}rOh]rPjMassuh}rQh}rRh}rSh]rTjMasssuU trac_ik_librU}rV(h}rWh}rXh]rYUros/jade/trac_ikrZassh ˆh }r[(h}r\h}r]h]r^Uros-jade-trac-ik-libr_assh}r`h}rah]rbj_assuh}rch}rdh}reh]rfj_asssuUecl_ipcrg}rh(h}rih}rjh]rkUros/jade/ecl_corerlassh ˆh }rm(h}rnh}roh]rpUros-jade-ecl-ipcrqassh}rrh}rsh]rtjqassuh}ruh}rvh}rwh]rxjqasssuU$object_recognition_ros_visualizationry}rz(h}r{h}r|h]r}U-ros/jade/object_recognition_ros_visualizationr~assh ˆh }r(h}r€h}rh]r‚U-ros-jade-object-recognition-ros-visualizationrƒassh}r„h}r…h]r†jƒassuh}r‡h}rˆh}r‰h]rŠjƒasssuUinteractive_marker_twist_serverr‹}rŒ(h}rh}rŽh]rU(ros/jade/interactive_marker_twist_serverrassh ˆh }r‘(h}r’h}r“h]r”U(ros-jade-interactive-marker-twist-serverr•assh}r–h}r—h]r˜j•assuh}r™h}ršh}r›h]rœj•asssuU twist_muxr}rž(h}rŸh}r h]r¡Uros/jade/twist_muxr¢assh ˆh }r£(h}r¤h}r¥h]r¦Uros-jade-twist-muxr§assh}r¨h}r©h]rªj§assuh}r«h}r¬h}r­h]r®j§asssuUpolar_scan_matcherr¯}r°(h}r±h}r²h]r³Uros/jade/scan_toolsr´assh ˆh }rµ(h}r¶h}r·h]r¸Uros-jade-polar-scan-matcherr¹assh}rºh}r»h]r¼j¹assuh}r½h}r¾h}r¿h]rÀj¹asssuU!object_recognition_reconstructionrÁ}rÂ(h}rÃh}rÄh]rÅU*ros/jade/object_recognition_reconstructionrÆassh ˆh }rÇ(h}rÈh}rÉh]rÊU*ros-jade-object-recognition-reconstructionrËassh}rÌh}rÍh]rÎjËassuh}rÏh}rÐh}rÑh]rÒjËasssuUfreight_calibrationrÓ}rÔ(h}rÕh}rÖh]r×Uros/jade/fetch_rosrØassh ˆh }rÙ(h}rÚh}rÛh]rÜUros-jade-freight-calibrationrÝassh}rÞh}rßh]ràjÝassuh}ráh}râh}rãh]räjÝasssuUeigen_stl_containersrå}ræ(h}rçh}rèh]réUros/jade/eigen_stl_containersrêassh ˆh }rë(h}rìh}ríh]rîUros-jade-eigen-stl-containersrïassh}rðh}rñh]ròjïassuh}róh}rôh}rõh]röjïasssuUrqt_webr÷}rø(h}rùh}rúh]rûUros/jade/rqt_webrüassh ˆh }rý(h}rþh}rÿh]rUros-jade-rqt-webrassh}rh}rh]rjassuh}rh}rh}rh]rjasssuUopenrtm_ros_bridger }r (h}r h}r h]r Uros/jade/rtmros_commonrassh ˆh }r(h}rh}rh]rUros-jade-openrtm-ros-bridgerassh}rh}rh]rjassuh}rh}rh}rh]rjasssuUtetris_descriptionr}r(h}rh}rh]rUros/jade/hakutor assh ˆh }r!(h}r"h}r#h]r$Uros-jade-tetris-descriptionr%assh}r&h}r'h]r(j%assuh}r)h}r*h}r+h]r,j%asssuUtrivial_gray_streamsr-}r.(h}r/h}r0h]r1Uros/jade/cram_3rdpartyr2assh ˆh }r3(h}r4h}r5h]r6Uros-jade-trivial-gray-streamsr7assh}r8h}r9h]r:j7assuh}r;h}r<h}r=h]r>j7asssuUgscamr?}r@(h}rAh}rBh]rCUros/jade/gscamrDassh ˆh }rE(h}rFh}rGh]rHUros-jade-gscamrIassh}rJh}rKh]rLjIassuh}rMh}rNh}rOh]rPjIasssuU uvc_camerarQ}rR(h}rSh}rTh]rUUros/jade/camera_umdrVassh ˆh }rW(h}rXh}rYh]rZUros-jade-uvc-camerar[assh}r\h}r]h]r^j[assuh}r_h}r`h}rah]rbj[asssuUnav_msgsrc}rd(h}reh}rfh]rgUros/jade/common_msgsrhassh ˆh }ri(h}rjh}rkh]rlUros-jade-nav-msgsrmassh}rnh}roh]rpjmassuh}rqh}rrh}rsh]rtjmasssuUrail_pick_and_place_toolsru}rv(h}rwh}rxh]ryUros/jade/rail_pick_and_placerzassh ˆh }r{(h}r|h}r}h]r~U"ros-jade-rail-pick-and-place-toolsrassh}r€h}rh]r‚jassuh}rƒh}r„h}r…h]r†jasssuU open_kartor‡}rˆ(h}r‰h}rŠh]r‹Uros/jade/open_kartorŒassh ˆh }r(h}rŽh}rh]rUros-jade-open-kartor‘assh}r’h}r“h]r”j‘assuh}r•h}r–h}r—h]r˜j‘asssuUdiff_drive_controllerr™}rš(h}r›h}rœh]rUros/jade/ros_controllersržassh ˆh }rŸ(h}r h}r¡h]r¢Uros-jade-diff-drive-controllerr£assh}r¤h}r¥h]r¦j£assuh}r§h}r¨h}r©h]rªj£asssuUcl_transforms_stampedr«}r¬(h}r­h}r®h]r¯Uros/jade/roslisp_commonr°assh ˆh }r±(h}r²h}r³h]r´Uros-jade-cl-transforms-stampedrµassh}r¶h}r·h]r¸jµassuh}r¹h}rºh}r»h]r¼jµasssuU pr2eus_moveitr½}r¾(h}r¿h}rÀh]rÁUros/jade/jsk_pr2eusrÂassh ˆh }rÃ(h}rÄh}rÅh]rÆUros-jade-pr2eus-moveitrÇassh}rÈh}rÉh]rÊjÇassuh}rËh}rÌh}rÍh]rÎjÇasssuUmoveit_runtimerÏ}rÐ(h}rÑh}rÒh]rÓUros/jade/moveitrÔassh ˆh }rÕ(h}rÖh}r×h]rØUros-jade-moveit-runtimerÙassh}rÚh}rÛh]rÜjÙassuh}rÝh}rÞh}rßh]ràjÙasssuUtwist_mux_msgsrá}râ(h}rãh}räh]råUros/jade/twist_mux_msgsræassh ˆh }rç(h}rèh}réh]rêUros-jade-twist-mux-msgsrëassh}rìh}ríh]rîjëassuh}rïh}rðh}rñh]ròjëasssuUmoveit_visual_toolsró}rô(h}rõh}röh]r÷Uros/jade/moveit_visual_toolsrøassh ˆh }rù(h}rúh}rûh]rüUros-jade-moveit-visual-toolsrýassh}rþh}rÿh]rjýassuh}rh}rh}rh]rjýasssuUgrizzly_navigationr}r(h}rh}rh]r Uros/jade/grizzlyr assh ˆh }r (h}r h}r h]rUros-jade-grizzly-navigationrassh}rh}rh]rjassuh}rh}rh}rh]rjasssuUgmappingr}r(h}rh}rh]rUros/jade/slam_gmappingrassh ˆh }r(h}rh}rh]r Uros-jade-gmappingr!assh}r"h}r#h]r$j!assuh}r%h}r&h}r'h]r(j!asssuUfetch_depth_layerr)}r*(h}r+h}r,h]r-Uros/jade/fetch_rosr.assh ˆh }r/(h}r0h}r1h]r2Uros-jade-fetch-depth-layerr3assh}r4h}r5h]r6j3assuh}r7h}r8h}r9h]r:j3asssuUmrpt_graphslam_2dr;}r<(h}r=h}r>h]r?Uros/jade/mrpt_slamr@assh ˆh }rA(h}rBh}rCh]rDUros-jade-mrpt-graphslam-2drEassh}rFh}rGh]rHjEassuh}rIh}rJh}rKh]rLjEasssuUrail_manipulation_msgsrM}rN(h}rOh}rPh]rQUros/jade/rail_manipulation_msgsrRassh ˆh }rS(h}rTh}rUh]rVUros-jade-rail-manipulation-msgsrWassh}rXh}rYh]rZjWassuh}r[h}r\h}r]h]r^jWasssuUffr_}r`(h}rah}rbh]rcUros/jade/jsk_3rdpartyrdassh ˆh }re(h}rfh}rgh]rhU ros-jade-ffriassh}rjh}rkh]rljiassuh}rmh}rnh}roh]rpjiasssuUrtt_sensor_msgsrq}rr(h}rsh}rth]ruUros/jade/rtt_ros_integrationrvassh ˆh }rw(h}rxh}ryh]rzUros-jade-rtt-sensor-msgsr{assh}r|h}r}h]r~j{assuh}rh}r€h}rh]r‚j{asssuUlaser_assemblerrƒ}r„(h}r…h}r†h]r‡Uros/jade/laser_assemblerrˆassh ˆh }r‰(h}rŠh}r‹h]rŒUros-jade-laser-assemblerrassh}rŽh}rh]rjassuh}r‘h}r’h}r“h]r”jasssuUurg_cr•}r–(h}r—h}r˜h]r™Uros/jade/urg_cršassh ˆh }r›(h}rœh}rh]ržUros-jade-urg-crŸassh}r h}r¡h]r¢jŸassuh}r£h}r¤h}r¥h]r¦jŸasssuUmoveit_plannersr§}r¨(h}r©h}rªh]r«Uros/jade/moveitr¬assh ˆh }r­(h}r®h}r¯h]r°Uros-jade-moveit-plannersr±assh}r²h}r³h]r´j±assuh}rµh}r¶h}r·h]r¸j±asssuUrospeex_webaudiomonitorr¹}rº(h}r»h}r¼h]r½Uros/jade/rospeexr¾assh ˆh }r¿(h}rÀh}rÁh]rÂU ros-jade-rospeex-webaudiomonitorrÃassh}rÄh}rÅh]rÆjÃassuh}rÇh}rÈh}rÉh]rÊjÃasssuU stdr_robotrË}rÌ(h}rÍh}rÎh]rÏUros/jade/stdr_simulatorrÐassh ˆh }rÑ(h}rÒh}rÓh]rÔUros-jade-stdr-robotrÕassh}rÖh}r×h]rØjÕassuh}rÙh}rÚh}rÛh]rÜjÕasssuU tf2_eigenrÝ}rÞ(h}rßh}ràh]ráUros/jade/geometry2râassh ˆh }rã(h}räh}råh]ræUros-jade-tf2-eigenrçassh}rèh}réh]rêjçassuh}rëh}rìh}ríh]rîjçasssuU rqt_tf_treerï}rð(h}rñh}ròh]róUros/jade/rqt_tf_treerôassh ˆh }rõ(h}röh}r÷h]røUros-jade-rqt-tf-treerùassh}rúh}rûh]rüjùassuh}rýh}rþh}rÿh]rjùasssuUgazebo_ros_controlr}r(h}rh}rh]rUros/jade/gazebo_ros_pkgsrassh ˆh }r(h}rh}r h]r Uros-jade-gazebo-ros-controlr assh}r h}r h]rj assuh}rh}rh}rh]rj asssuU pddl_msgsr}r(h}rh}rh]rUros/jade/jsk_planningrassh ˆh }r(h}rh}rh]rUros-jade-pddl-msgsrassh}rh}rh]r jassuh}r!h}r"h}r#h]r$jasssuU rqt_moveitr%}r&(h}r'h}r(h]r)Uros/jade/rqt_moveitr*assh ˆh }r+(h}r,h}r-h]r.Uros-jade-rqt-moveitr/assh}r0h}r1h]r2j/assuh}r3h}r4h}r5h]r6j/asssuUeuslispr7}r8(h}r9h}r:h]r;Uros/jade/euslispr<assh ˆh }r=(h}r>h}r?h]r@Uros-jade-euslisprAassh}rBh}rCh]rDjAassuh}rEh}rFh}rGh]rHjAasssuUuwsim_osgoceanrI}rJ(h}rKh}rLh]rMUros/jade/uwsim_osgoceanrNassh ˆh }rO(h}rPh}rQh]rRUros-jade-uwsim-osgoceanrSassh}rTh}rUh]rVjSassuh}rWh}rXh}rYh]rZjSasssuUcalibration_launchr[}r\(h}r]h}r^h]r_Uros/jade/calibrationr`assh ˆh }ra(h}rbh}rch]rdUros-jade-calibration-launchreassh}rfh}rgh]rhjeassuh}rih}rjh}rkh]rljeasssuU openni_camerarm}rn(h}roh}rph]rqUros/jade/openni_camerarrassh ˆh }rs(h}rth}ruh]rvUros-jade-openni-camerarwassh}rxh}ryh]rzjwassuh}r{h}r|h}r}h]r~jwasssuUoctomap_serverr}r€(h}rh}r‚h]rƒUros/jade/octomap_mappingr„assh ˆh }r…(h}r†h}r‡h]rˆUros-jade-octomap-serverr‰assh}rŠh}r‹h]rŒj‰assuh}rh}rŽh}rh]rj‰asssuUmln_robosherlock_msgsr‘}r’(h}r“h}r”h]r•Uros/jade/iai_common_msgsr–assh ˆh }r—(h}r˜h}r™h]ršUros-jade-mln-robosherlock-msgsr›assh}rœh}rh]ržj›assuh}rŸh}r h}r¡h]r¢j›asssuUrobotr£}r¤(h}r¥h}r¦h]r§Uros/jade/metapackagesr¨assh ˆh }r©(h}rªh}r«h]r¬Uros-jade-robotr­assh}r®h}r¯h]r°j­assuh}r±h}r²h}r³h]r´j­asssuU grid_map_cvrµ}r¶(h}r·h}r¸h]r¹Uros/jade/grid_maprºassh ˆh }r»(h}r¼h}r½h]r¾Uros-jade-grid-map-cvr¿assh}rÀh}rÁh]rÂj¿assuh}rÃh}rÄh}rÅh]rÆj¿asssuUrail_collada_modelsrÇ}rÈ(h}rÉh}rÊh]rËUros/jade/rail_collada_modelsrÌassh ˆh }rÍ(h}rÎh}rÏh]rÐUros-jade-rail-collada-modelsrÑassh}rÒh}rÓh]rÔjÑassuh}rÕh}rÖh}r×h]rØjÑasssuUfind_object_2drÙ}rÚ(h}rÛh}rÜh]rÝUros/jade/find_object_2drÞassh ˆh }rß(h}ràh}ráh]râUros-jade-find-object-2drãassh}räh}råh]ræjãassuh}rçh}rèh}réh]rêjãasssuU media_exportrë}rì(h}ríh}rîh]rïUros/jade/media_exportrðassh ˆh }rñ(h}ròh}róh]rôUros-jade-media-exportrõassh}röh}r÷h]røjõassuh}rùh}rúh}rûh]rüjõasssuU geometry_msgsrý}rþ(h}rÿh}rh]rUros/jade/common_msgsrassh ˆh }r(h}rh}rh]rUros-jade-geometry-msgsrassh}rh}r h]r jassuh}r h}r h}r h]rjasssuU romeo_robotr}r(h}rh}rh]rUros/jade/romeo_robotrassh ˆh }r(h}rh}rh]rUros-jade-romeo-robotrassh}rh}rh]rjassuh}rh}rh}rh]r jasssuUrosh_visualizationr!}r"(h}r#h}r$h]r%Uros/jade/rosh_desktop_pluginsr&assh ˆh }r'(h}r(h}r)h]r*Uros-jade-rosh-visualizationr+assh}r,h}r-h]r.j+assuh}r/h}r0h}r1h]r2j+asssuUmarti_visualization_msgsr3}r4(h}r5h}r6h]r7Uros/jade/marti_messagesr8assh ˆh }r9(h}r:h}r;h]r<U!ros-jade-marti-visualization-msgsr=assh}r>h}r?h]r@j=assuh}rAh}rBh}rCh]rDj=asssuU unique_idrE}rF(h}rGh}rHh]rIUros/jade/unique_identifierrJassh ˆh }rK(h}rLh}rMh]rNUros-jade-unique-idrOassh}rPh}rQh]rRjOassuh}rSh}rTh}rUh]rVjOasssuU rosh_commonrW}rX(h}rYh}rZh]r[Uros/jade/rosh_robot_pluginsr\assh ˆh }r](h}r^h}r_h]r`Uros-jade-rosh-commonraassh}rbh}rch]rdjaassuh}reh}rfh}rgh]rhjaasssuU nodelet_coreri}rj(h}rkh}rlh]rmUros/jade/nodelet_corernassh ˆh }ro(h}rph}rqh]rrUros-jade-nodelet-corersassh}rth}ruh]rvjsassuh}rwh}rxh}ryh]rzjsasssuUmoveit_ros_move_groupr{}r|(h}r}h}r~h]rUros/jade/moveitr€assh ˆh }r(h}r‚h}rƒh]r„Uros-jade-moveit-ros-move-groupr…assh}r†h}r‡h]rˆj…assuh}r‰h}rŠh}r‹h]rŒj…asssuU mongodb_storer}rŽ(h}rh}rh]r‘Uros/jade/mongodb_storer’assh ˆh }r“(h}r”h}r•h]r–Uros-jade-mongodb-storer—assh}r˜h}r™h]ršj—assuh}r›h}rœh}rh]ržj—asssuU slime_wrapperrŸ}r (h}r¡h}r¢h]r£Uros/jade/ros_emacs_utilsr¤assh ˆh }r¥(h}r¦h}r§h]r¨Uros-jade-slime-wrapperr©assh}rªh}r«h]r¬j©assuh}r­h}r®h}r¯h]r°j©asssuUsocial_navigation_layersr±}r²(h}r³h}r´h]rµUros/jade/navigation_layersr¶assh ˆh }r·(h}r¸h}r¹h]rºU!ros-jade-social-navigation-layersr»assh}r¼h}r½h]r¾j»assuh}r¿h}rÀh}rÁh]rÂj»asssuUurdfrÃ}rÄ(h}rÅh}rÆh]rÇUros/jade/robot_modelrÈassh ˆh }rÉ(h}rÊh}rËh]rÌU ros-jade-urdfrÍassh}rÎh}rÏh]rÐjÍassuh}rÑh}rÒh}rÓh]rÔjÍasssuUcffirÕ}rÖ(h}r×h}rØh]rÙUros/jade/cram_3rdpartyrÚassh ˆh }rÛ(h}rÜh}rÝh]rÞU ros-jade-cffirßassh}ràh}ráh]râjßassuh}rãh}räh}råh]ræjßasssuUresource_retrieverrç}rè(h}réh}rêh]rëUros/jade/resource_retrieverrìassh ˆh }rí(h}rîh}rïh]rðUros-jade-resource-retrieverrñassh}ròh}róh]rôjñassuh}rõh}röh}r÷h]røjñasssuUwebtestrù}rú(h}rûh}rüh]rýUros/jade/webtestrþassh ˆh }rÿ(h}rh}rh]rUros-jade-webtestrassh}rh}rh]rjassuh}rh}rh}r h]r jasssuUforce_torque_toolsr }r (h}r h}rh]rUros/jade/force_torque_toolsrassh ˆh }r(h}rh}rh]rUros-jade-force-torque-toolsrassh}rh}rh]rjassuh}rh}rh}rh]rjasssuU rqt_graphr}r(h}rh}r h]r!Uros/jade/rqt_graphr"assh ˆh }r#(h}r$h}r%h]r&Uros-jade-rqt-graphr'assh}r(h}r)h]r*j'assuh}r+h}r,h}r-h]r.j'asssuUrotate_recoveryr/}r0(h}r1h}r2h]r3Uros/jade/navigationr4assh ˆh }r5(h}r6h}r7h]r8Uros-jade-rotate-recoveryr9assh}r:h}r;h]r<j9assuh}r=h}r>h}r?h]r@j9asssuU stage_rosrA}rB(h}rCh}rDh]rEUros/jade/stage_rosrFassh ˆh }rG(h}rHh}rIh]rJUros-jade-stage-rosrKassh}rLh}rMh]rNjKassuh}rOh}rPh}rQh]rRjKasssuUfake_localizationrS}rT(h}rUh}rVh]rWUros/jade/navigationrXassh ˆh }rY(h}rZh}r[h]r\Uros-jade-fake-localizationr]assh}r^h}r_h]r`j]assuh}rah}rbh}rch]rdj]asssuUqt_guire}rf(h}rgh}rhh]riUros/jade/qt_gui_corerjassh ˆh }rk(h}rlh}rmh]rnUros-jade-qt-guiroassh}rph}rqh]rrjoassuh}rsh}rth}ruh]rvjoasssuUfiltersrw}rx(h}ryh}rzh]r{Uros/jade/filtersr|assh ˆh }r}(h}r~h}rh]r€Uros-jade-filtersrassh}r‚h}rƒh]r„jassuh}r…h}r†h}r‡h]rˆjasssuU"hector_quadrotor_controller_gazebor‰}rŠ(h}r‹h}rŒh]rUros/jade/hector_quadrotorrŽassh ˆh }r(h}rh}r‘h]r’U+ros-jade-hector-quadrotor-controller-gazebor“assh}r”h}r•h]r–j“assuh}r—h}r˜h}r™h]ršj“asssuUomplr›}rœ(h}rh}ržh]rŸU ros/jade/omplr assh ˆh }r¡(h}r¢h}r£h]r¤U ros-jade-omplr¥assh}r¦h}r§h]r¨j¥assuh}r©h}rªh}r«h]r¬j¥asssuU katana_teleopr­}r®(h}r¯h}r°h]r±Uros/jade/katana_driverr²assh ˆh }r³(h}r´h}rµh]r¶Uros-jade-katana-teleopr·assh}r¸h}r¹h]rºj·assuh}r»h}r¼h}r½h]r¾j·asssuUhector_object_trackerr¿}rÀ(h}rÁh}rÂh]rÃUros/jade/hector_worldmodelrÄassh ˆh }rÅ(h}rÆh}rÇh]rÈUros-jade-hector-object-trackerrÉassh}rÊh}rËh]rÌjÉassuh}rÍh}rÎh}rÏh]rÐjÉasssuUmoveit_ros_planning_interfacerÑ}rÒ(h}rÓh}rÔh]rÕUros/jade/moveitrÖassh ˆh }r×(h}rØh}rÙh]rÚU&ros-jade-moveit-ros-planning-interfacerÛassh}rÜh}rÝh]rÞjÛassuh}rßh}ràh}ráh]râjÛasssuU imu_pipelinerã}rä(h}råh}ræh]rçUros/jade/imu_pipelinerèassh ˆh }ré(h}rêh}rëh]rìUros-jade-imu-pipelineríassh}rîh}rïh]rðjíassuh}rñh}ròh}róh]rôjíasssuU moveit_simple_controller_managerrõ}rö(h}r÷h}røh]rùUros/jade/moveitrúassh ˆh }rû(h}rüh}rýh]rþU)ros-jade-moveit-simple-controller-managerrÿassh}rh}rh]rjÿassuh}rh}rh}rh]rjÿasssuUrtt_stereo_msgsr}r(h}r h}r h]r Uros/jade/rtt_ros_integrationr assh ˆh }r (h}rh}rh]rUros-jade-rtt-stereo-msgsrassh}rh}rh]rjassuh}rh}rh}rh]rjasssuU polled_camerar}r(h}rh}rh]rUros/jade/image_commonrassh ˆh }r(h}r h}r!h]r"Uros-jade-polled-camerar#assh}r$h}r%h]r&j#assuh}r'h}r(h}r)h]r*j#asssuUperception_pclr+}r,(h}r-h}r.h]r/Uros/jade/perception_pclr0assh ˆh }r1(h}r2h}r3h]r4Uros-jade-perception-pclr5assh}r6h}r7h]r8j5assuh}r9h}r:h}r;h]r<j5asssuU fetch_mapsr=}r>(h}r?h}r@h]rAUros/jade/fetch_rosrBassh ˆh }rC(h}rDh}rEh]rFUros-jade-fetch-mapsrGassh}rHh}rIh]rJjGassuh}rKh}rLh}rMh]rNjGasssuUwfov_camera_msgsrO}rP(h}rQh}rRh]rSU ros/jade/pointgrey_camera_driverrTassh ˆh }rU(h}rVh}rWh]rXUros-jade-wfov-camera-msgsrYassh}rZh}r[h]r\jYassuh}r]h}r^h}r_h]r`jYasssuU jsk_roseusra}rb(h}rch}rdh]reUros/jade/jsk_roseusrfassh ˆh }rg(h}rhh}rih]rjUros-jade-jsk-roseusrkassh}rlh}rmh]rnjkassuh}roh}rph}rqh]rrjkasssuUcheckerboard_detectorrs}rt(h}ruh}rvh]rwUros/jade/jsk_recognitionrxassh ˆh }ry(h}rzh}r{h]r|Uros-jade-checkerboard-detectorr}assh}r~h}rh]r€j}assuh}rh}r‚h}rƒh]r„j}asssuUroscpp_serializationr…}r†(h}r‡h}rˆh]r‰Uros/jade/roscpp_corerŠassh ˆh }r‹(h}rŒh}rh]rŽUros-jade-roscpp-serializationrassh}rh}r‘h]r’jassuh}r“h}r”h}r•h]r–jasssuUstdr_guir—}r˜(h}r™h}ršh]r›Uros/jade/stdr_simulatorrœassh ˆh }r(h}ržh}rŸh]r Uros-jade-stdr-guir¡assh}r¢h}r£h]r¤j¡assuh}r¥h}r¦h}r§h]r¨j¡asssuU libmavconnr©}rª(h}r«h}r¬h]r­Uros/jade/mavrosr®assh ˆh }r¯(h}r°h}r±h]r²Uros-jade-libmavconnr³assh}r´h}rµh]r¶j³assuh}r·h}r¸h}r¹h]rºj³asssuUcsapexr»}r¼(h}r½h}r¾h]r¿Uros/jade/csapexrÀassh ˆh }rÁ(h}rÂh}rÃh]rÄUros-jade-csapexrÅassh}rÆh}rÇh]rÈjÅassuh}rÉh}rÊh}rËh]rÌjÅasssuU kdl_parser_pyrÍ}rÎ(h}rÏh}rÐh]rÑUros/jade/kdl_parserrÒassh ˆh }rÓ(h}rÔh}rÕh]rÖUros-jade-kdl-parser-pyr×assh}rØh}rÙh]rÚj×assuh}rÛh}rÜh}rÝh]rÞj×asssuUgentyrß}rà(h}ráh}râh]rãUros/jade/gentyräassh ˆh }rå(h}ræh}rçh]rèUros-jade-gentyréassh}rêh}rëh]rìjéassuh}ríh}rîh}rïh]rðjéasssuUdefault_cfg_fkierñ}rò(h}róh}rôh]rõUros/jade/multimaster_fkieröassh ˆh }r÷(h}røh}rùh]rúUros-jade-default-cfg-fkierûassh}rüh}rýh]rþjûassuh}rÿh}rh}rh]rjûasssuUpcl_msgsr}r(h}rh}rh]rUros/jade/pcl_msgsrassh ˆh }r (h}r h}r h]r Uros-jade-pcl-msgsr assh}rh}rh]rj assuh}rh}rh}rh]rj asssuUpepper_dcm_bringupr}r(h}rh}rh]rUros/jade/pepper_dcm_robotrassh ˆh }r(h}rh}rh]rUros-jade-pepper-dcm-bringuprassh}r h}r!h]r"jassuh}r#h}r$h}r%h]r&jasssuUrosemacsr'}r((h}r)h}r*h]r+Uros/jade/ros_emacs_utilsr,assh ˆh }r-(h}r.h}r/h]r0Uros-jade-rosemacsr1assh}r2h}r3h]r4j1assuh}r5h}r6h}r7h]r8j1asssuU openrtm_aistr9}r:(h}r;h}r<h]r=Uros/jade/openrtm_aistr>assh ˆh }r?(h}r@h}rAh]rBUros-jade-openrtm-aistrCassh}rDh}rEh]rFjCassuh}rGh}rHh}rIh]rJjCasssuUmoveit_kinematicsrK}rL(h}rMh}rNh]rOUros/jade/moveitrPassh ˆh }rQ(h}rRh}rSh]rTUros-jade-moveit-kinematicsrUassh}rVh}rWh]rXjUassuh}rYh}rZh}r[h]r\jUasssuUnaoqi_dashboardr]}r^(h}r_h}r`h]raUros/jade/naoqi_dashboardrbassh ˆh }rc(h}rdh}reh]rfUros-jade-naoqi-dashboardrgassh}rhh}rih]rjjgassuh}rkh}rlh}rmh]rnjgasssuU costmap_2dro}rp(h}rqh}rrh]rsUros/jade/navigationrtassh ˆh }ru(h}rvh}rwh]rxUros-jade-costmap-2dryassh}rzh}r{h]r|jyassuh}r}h}r~h}rh]r€jyasssuU ros_canopenr}r‚(h}rƒh}r„h]r…Uros/jade/ros_canopenr†assh ˆh }r‡(h}rˆh}r‰h]rŠUros-jade-ros-canopenr‹assh}rŒh}rh]rŽj‹assuh}rh}rh}r‘h]r’j‹asssuU nerian_sp1r“}r”(h}r•h}r–h]r—Uros/jade/nerian_sp1r˜assh ˆh }r™(h}ršh}r›h]rœUros-jade-nerian-sp1rassh}ržh}rŸh]r jassuh}r¡h}r¢h}r£h]r¤jasssuUmavrosr¥}r¦(h}r§h}r¨h]r©Uros/jade/mavrosrªassh ˆh }r«(h}r¬h}r­h]r®Uros-jade-mavrosr¯assh}r°h}r±h]r²j¯assuh}r³h}r´h}rµh]r¶j¯asssuUmoveit_ros_robot_interactionr·}r¸(h}r¹h}rºh]r»Uros/jade/moveitr¼assh ˆh }r½(h}r¾h}r¿h]rÀU%ros-jade-moveit-ros-robot-interactionrÁassh}rÂh}rÃh]rÄjÁassuh}rÅh}rÆh}rÇh]rÈjÁasssuU urdfdom_pyrÉ}rÊ(h}rËh}rÌh]rÍUros/jade/urdfdom_pyrÎassh ˆh }rÏ(h}rÐh}rÑh]rÒUros-jade-urdfdom-pyrÓassh}rÔh}rÕh]rÖjÓassuh}r×h}rØh}rÙh]rÚjÓasssuU assimp_develrÛ}rÜ(h}rÝh}rÞh]rßUros/jade/jsk_3rdpartyràassh ˆh }rá(h}râh}rãh]räUros-jade-assimp-develråassh}ræh}rçh]rèjåassuh}réh}rêh}rëh]rìjåasssuUrosserial_tivacrí}rî(h}rïh}rðh]rñUros/jade/rosserialròassh ˆh }ró(h}rôh}rõh]röUros-jade-rosserial-tivacr÷assh}røh}rùh]rúj÷assuh}rûh}rüh}rýh]rþj÷asssuU stdr_parserrÿ}r(h}rh}rh]rUros/jade/stdr_simulatorrassh ˆh }r(h}rh}rh]rUros-jade-stdr-parserr assh}r h}r h]r j assuh}r h}rh}rh]rj asssuUuwsim_osgworksr}r(h}rh}rh]rUros/jade/uwsim_osgworksrassh ˆh }r(h}rh}rh]rUros-jade-uwsim-osgworksrassh}rh}rh]rjassuh}rh}r h}r!h]r"jasssuUlibrviz_tutorialr#}r$(h}r%h}r&h]r'U ros/jade/visualization_tutorialsr(assh ˆh }r)(h}r*h}r+h]r,Uros-jade-librviz-tutorialr-assh}r.h}r/h]r0j-assuh}r1h}r2h}r3h]r4j-asssuU rqt_actionr5}r6(h}r7h}r8h]r9Uros/jade/rqt_actionr:assh ˆh }r;(h}r<h}r=h]r>Uros-jade-rqt-actionr?assh}r@h}rAh]rBj?assuh}rCh}rDh}rEh]rFj?asssuUxacrorG}rH(h}rIh}rJh]rKUros/jade/xacrorLassh ˆh }rM(h}rNh}rOh]rPUros-jade-xacrorQassh}rRh}rSh]rTjQassuh}rUh}rVh}rWh]rXjQasssuU roseus_mongorY}rZ(h}r[h}r\h]r]Uros/jade/jsk_roseusr^assh ˆh }r_(h}r`h}rah]rbUros-jade-roseus-mongorcassh}rdh}reh]rfjcassuh}rgh}rhh}rih]rjjcasssuUdiagnostic_msgsrk}rl(h}rmh}rnh]roUros/jade/common_msgsrpassh ˆh }rq(h}rrh}rsh]rtUros-jade-diagnostic-msgsruassh}rvh}rwh]rxjuassuh}ryh}rzh}r{h]r|juasssuUgripper_action_controllerr}}r~(h}rh}r€h]rUros/jade/ros_controllersr‚assh ˆh }rƒ(h}r„h}r…h]r†U"ros-jade-gripper-action-controllerr‡assh}rˆh}r‰h]rŠj‡assuh}r‹h}rŒh}rh]rŽj‡asssuUrqt_robot_dashboardr}r(h}r‘h}r’h]r“Uros/jade/rqt_robot_dashboardr”assh ˆh }r•(h}r–h}r—h]r˜Uros-jade-rqt-robot-dashboardr™assh}ršh}r›h]rœj™assuh}rh}ržh}rŸh]r j™asssuU pluginlibr¡}r¢(h}r£h}r¤h]r¥Uros/jade/pluginlibr¦assh ˆh }r§(h}r¨h}r©h]rªUros-jade-pluginlibr«assh}r¬h}r­h]r®j«assuh}r¯h}r°h}r±h]r²j«asssuUpepper_bringupr³}r´(h}rµh}r¶h]r·Uros/jade/pepper_robotr¸assh ˆh }r¹(h}rºh}r»h]r¼Uros-jade-pepper-bringupr½assh}r¾h}r¿h]rÀj½assuh}rÁh}rÂh}rÃh]rÄj½asssuUrtmbuildrÅ}rÆ(h}rÇh}rÈh]rÉUros/jade/rtmros_commonrÊassh ˆh }rË(h}rÌh}rÍh]rÎUros-jade-rtmbuildrÏassh}rÐh}rÑh]rÒjÏassuh}rÓh}rÔh}rÕh]rÖjÏasssuUlibrmsr×}rØ(h}rÙh}rÚh]rÛUros/jade/librmsrÜassh ˆh }rÝ(h}rÞh}rßh]ràUros-jade-librmsráassh}râh}rãh]räjáassuh}råh}ræh}rçh]rèjáasssuUros_type_introspectionré}rê(h}rëh}rìh]ríUros/jade/ros_type_introspectionrîassh ˆh }rï(h}rðh}rñh]ròUros-jade-ros-type-introspectionróassh}rôh}rõh]röjóassuh}r÷h}røh}rùh]rújóasssuU leg_detectorrû}rü(h}rýh}rþh]rÿUros/jade/peoplerassh ˆh }r(h}rh}rh]rUros-jade-leg-detectorrassh}rh}rh]rjassuh}r h}r h}r h]r jasssuU rosdoc_liter }r(h}rh}rh]rUros/jade/rosdoc_literassh ˆh }r(h}rh}rh]rUros-jade-rosdoc-literassh}rh}rh]rjassuh}rh}rh}rh]rjasssuUxmlrpcppr}r (h}r!h}r"h]r#Uros/jade/ros_commr$assh ˆh }r%(h}r&h}r'h]r(Uros-jade-xmlrpcppr)assh}r*h}r+h]r,j)assuh}r-h}r.h}r/h]r0j)asssuU mini_maxwellr1}r2(h}r3h}r4h]r5Uros/jade/jsk_3rdpartyr6assh ˆh }r7(h}r8h}r9h]r:Uros-jade-mini-maxwellr;assh}r<h}r=h]r>j;assuh}r?h}r@h}rAh]rBj;asssuU mavros_extrasrC}rD(h}rEh}rFh]rGUros/jade/mavrosrHassh ˆh }rI(h}rJh}rKh]rLUros-jade-mavros-extrasrMassh}rNh}rOh]rPjMassuh}rQh}rRh}rSh]rTjMasssuU test_mavrosrU}rV(h}rWh}rXh]rYUros/jade/mavrosrZassh ˆh }r[(h}r\h}r]h]r^Uros-jade-test-mavrosr_assh}r`h}rah]rbj_assuh}rch}rdh}reh]rfj_asssuUdynamic_edt_3drg}rh(h}rih}rjh]rkUros/jade/octomaprlassh ˆh }rm(h}rnh}roh]rpUros-jade-dynamic-edt-3drqassh}rrh}rsh]rtjqassuh}ruh}rvh}rwh]rxjqasssuUsophusry}rz(h}r{h}r|h]r}Uros/jade/sophusr~assh ˆh }r(h}r€h}rh]r‚Uros-jade-sophusrƒassh}r„h}r…h]r†jƒassuh}r‡h}rˆh}r‰h]rŠjƒasssuUnode_manager_fkier‹}rŒ(h}rh}rŽh]rUros/jade/multimaster_fkierassh ˆh }r‘(h}r’h}r“h]r”Uros-jade-node-manager-fkier•assh}r–h}r—h]r˜j•assuh}r™h}ršh}r›h]rœj•asssuUrotors_descriptionr}rž(h}rŸh}r h]r¡Uros/jade/rotors_simulatorr¢assh ˆh }r£(h}r¤h}r¥h]r¦Uros-jade-rotors-descriptionr§assh}r¨h}r©h]rªj§assuh}r«h}r¬h}r­h]r®j§asssuUromeo_descriptionr¯}r°(h}r±h}r²h]r³Uros/jade/romeo_robotr´assh ˆh }rµ(h}r¶h}r·h]r¸Uros-jade-romeo-descriptionr¹assh}rºh}r»h]r¼j¹assuh}r½h}r¾h}r¿h]rÀj¹asssuU gl_dependencyrÁ}rÂ(h}rÃh}rÄh]rÅUros/jade/gl_dependencyrÆassh ˆh }rÇ(h}rÈh}rÉh]rÊUros-jade-gl-dependencyrËassh}rÌh}rÍh]rÎjËassuh}rÏh}rÐh}rÑh]rÒjËasssuUswri_math_utilrÓ}rÔ(h}rÕh}rÖh]r×Uros/jade/marti_commonrØassh ˆh }rÙ(h}rÚh}rÛh]rÜUros-jade-swri-math-utilrÝassh}rÞh}rßh]ràjÝassuh}ráh}râh}rãh]räjÝasssuU self_testrå}ræ(h}rçh}rèh]réUros/jade/diagnosticsrêassh ˆh }rë(h}rìh}ríh]rîUros-jade-self-testrïassh}rðh}rñh]ròjïassuh}róh}rôh}rõh]röjïasssuUoctomap_rviz_pluginsr÷}rø(h}rùh}rúh]rûUros/jade/octomap_rviz_pluginsrüassh ˆh }rý(h}rþh}rÿh]rUros-jade-octomap-rviz-pluginsrassh}rh}rh]rjassuh}rh}rh}rh]rjasssuUrospackr }r (h}r h}r h]r Uros/jade/rospackrassh ˆh }r(h}rh}rh]rUros-jade-rospackrassh}rh}rh]rjassuh}rh}rh}rh]rjasssuU wu_ros_toolsr}r(h}rh}rh]rUros/jade/wu_ros_toolsr assh ˆh }r!(h}r"h}r#h]r$Uros-jade-wu-ros-toolsr%assh}r&h}r'h]r(j%assuh}r)h}r*h}r+h]r,j%asssuU ros_controlr-}r.(h}r/h}r0h]r1Uros/jade/ros_controlr2assh ˆh }r3(h}r4h}r5h]r6Uros-jade-ros-controlr7assh}r8h}r9h]r:j7assuh}r;h}r<h}r=h]r>j7asssuUrtt_shape_msgsr?}r@(h}rAh}rBh]rCUros/jade/rtt_ros_integrationrDassh ˆh }rE(h}rFh}rGh]rHUros-jade-rtt-shape-msgsrIassh}rJh}rKh]rLjIassuh}rMh}rNh}rOh]rPjIasssuU jsk_pr2eusrQ}rR(h}rSh}rTh]rUUros/jade/jsk_pr2eusrVassh ˆh }rW(h}rXh}rYh]rZUros-jade-jsk-pr2eusr[assh}r\h}r]h]r^j[assuh}r_h}r`h}rah]rbj[asssuUforce_torque_sensor_calibrc}rd(h}reh}rfh]rgUros/jade/force_torque_toolsrhassh ˆh }ri(h}rjh}rkh]rlU"ros-jade-force-torque-sensor-calibrmassh}rnh}roh]rpjmassuh}rqh}rrh}rsh]rtjmasssuUactionlib_lispru}rv(h}rwh}rxh]ryUros/jade/roslisp_commonrzassh ˆh }r{(h}r|h}r}h]r~Uros-jade-actionlib-lisprassh}r€h}rh]r‚jassuh}rƒh}r„h}r…h]r†jasssuUarbotix_firmwarer‡}rˆ(h}r‰h}rŠh]r‹Uros/jade/arbotix_rosrŒassh ˆh }r(h}rŽh}rh]rUros-jade-arbotix-firmwarer‘assh}r’h}r“h]r”j‘assuh}r•h}r–h}r—h]r˜j‘asssuUhector_geotiffr™}rš(h}r›h}rœh]rUros/jade/hector_slamržassh ˆh }rŸ(h}r h}r¡h]r¢Uros-jade-hector-geotiffr£assh}r¤h}r¥h]r¦j£assuh}r§h}r¨h}r©h]rªj£asssuU fzi_icl_canr«}r¬(h}r­h}r®h]r¯Uros/jade/fzi_icl_canr°assh ˆh }r±(h}r²h}r³h]r´Uros-jade-fzi-icl-canrµassh}r¶h}r·h]r¸jµassuh}r¹h}rºh}r»h]r¼jµasssuUcalibration_setup_helperr½}r¾(h}r¿h}rÀh]rÁUros/jade/calibrationrÂassh ˆh }rÃ(h}rÄh}rÅh]rÆU!ros-jade-calibration-setup-helperrÇassh}rÈh}rÉh]rÊjÇassuh}rËh}rÌh}rÍh]rÎjÇasssuUrosserial_serverrÏ}rÐ(h}rÑh}rÒh]rÓUros/jade/rosserialrÔassh ˆh }rÕ(h}rÖh}r×h]rØUros-jade-rosserial-serverrÙassh}rÚh}rÛh]rÜjÙassuh}rÝh}rÞh}rßh]ràjÙasssuUhector_pose_estimationrá}râ(h}rãh}räh]råUros/jade/hector_localizationræassh ˆh }rç(h}rèh}réh]rêUros-jade-hector-pose-estimationrëassh}rìh}ríh]rîjëassuh}rïh}rðh}rñh]ròjëasssuUecl_manipulationró}rô(h}rõh}röh]r÷Uros/jade/ecl_manipulationrøassh ˆh }rù(h}rúh}rûh]rüUros-jade-ecl-manipulationrýassh}rþh}rÿh]rjýassuh}rh}rh}rh]rjýasssuUtf2_msgsr}r(h}rh}rh]r Uros/jade/geometry2r assh ˆh }r (h}r h}r h]rUros-jade-tf2-msgsrassh}rh}rh]rjassuh}rh}rh}rh]rjasssuUmrpt_ekf_slam_3dr}r(h}rh}rh]rUros/jade/mrpt_slamrassh ˆh }r(h}rh}rh]r Uros-jade-mrpt-ekf-slam-3dr!assh}r"h}r#h]r$j!assuh}r%h}r&h}r'h]r(j!asssuUvelodyne_descriptionr)}r*(h}r+h}r,h]r-Uros/jade/velodyne_simulatorr.assh ˆh }r/(h}r0h}r1h]r2Uros-jade-velodyne-descriptionr3assh}r4h}r5h]r6j3assuh}r7h}r8h}r9h]r:j3asssuU mrpt_slamr;}r<(h}r=h}r>h]r?Uros/jade/mrpt_slamr@assh ˆh }rA(h}rBh}rCh]rDUros-jade-mrpt-slamrEassh}rFh}rGh]rHjEassuh}rIh}rJh}rKh]rLjEasssuUrostimerM}rN(h}rOh}rPh]rQUros/jade/roscpp_corerRassh ˆh }rS(h}rTh}rUh]rVUros-jade-rostimerWassh}rXh}rYh]rZjWassuh}r[h}r\h}r]h]r^jWasssuUjsk_network_toolsr_}r`(h}rah}rbh]rcUros/jade/jsk_commonrdassh ˆh }re(h}rfh}rgh]rhUros-jade-jsk-network-toolsriassh}rjh}rkh]rljiassuh}rmh}rnh}roh]rpjiasssuU rqt_gaugesrq}rr(h}rsh}rth]ruUros/jade/gaugesrvassh ˆh }rw(h}rxh}ryh]rzUros-jade-rqt-gaugesr{assh}r|h}r}h]r~j{assuh}rh}r€h}rh]r‚j{asssuUpr2eus_tutorialsrƒ}r„(h}r…h}r†h]r‡Uros/jade/jsk_pr2eusrˆassh ˆh }r‰(h}rŠh}r‹h]rŒUros-jade-pr2eus-tutorialsrassh}rŽh}rh]rjassuh}r‘h}r’h}r“h]r”jasssuUhector_compressed_map_transportr•}r–(h}r—h}r˜h]r™Uros/jade/hector_slamršassh ˆh }r›(h}rœh}rh]ržU(ros-jade-hector-compressed-map-transportrŸassh}r h}r¡h]r¢jŸassuh}r£h}r¤h}r¥h]r¦jŸasssuUdynpick_driverr§}r¨(h}r©h}rªh]r«Uros/jade/dynpick_driverr¬assh ˆh }r­(h}r®h}r¯h]r°Uros-jade-dynpick-driverr±assh}r²h}r³h]r´j±assuh}rµh}r¶h}r·h]r¸j±asssuU phidgets_apir¹}rº(h}r»h}r¼h]r½Uros/jade/phidgets_driversr¾assh ˆh }r¿(h}rÀh}rÁh]rÂUros-jade-phidgets-apirÃassh}rÄh}rÅh]rÆjÃassuh}rÇh}rÈh}rÉh]rÊjÃasssuU driver_baserË}rÌ(h}rÍh}rÎh]rÏUros/jade/driver_commonrÐassh ˆh }rÑ(h}rÒh}rÓh]rÔUros-jade-driver-baserÕassh}rÖh}r×h]rØjÕassuh}rÙh}rÚh}rÛh]rÜjÕasssuU rtt_rosparamrÝ}rÞ(h}rßh}ràh]ráUros/jade/rtt_ros_integrationrâassh ˆh }rã(h}räh}råh]ræUros-jade-rtt-rosparamrçassh}rèh}réh]rêjçassuh}rëh}rìh}ríh]rîjçasssuU schunk_ezn64rï}rð(h}rñh}ròh]róUros/jade/schunk_grippersrôassh ˆh }rõ(h}röh}r÷h]røUros-jade-schunk-ezn64rùassh}rúh}rûh]rüjùassuh}rýh}rþh}rÿh]rjùasssuUpr2_mechanism_modelr}r(h}rh}rh]rUros/jade/pr2_mechanismrassh ˆh }r(h}rh}r h]r Uros-jade-pr2-mechanism-modelr assh}r h}r h]rj assuh}rh}rh}rh]rj asssuU laser_filtersr}r(h}rh}rh]rUros/jade/laser_filtersrassh ˆh }r(h}rh}rh]rUros-jade-laser-filtersrassh}rh}rh]r jassuh}r!h}r"h}r#h]r$jasssuUum7r%}r&(h}r'h}r(h]r)U ros/jade/um7r*assh ˆh }r+(h}r,h}r-h]r.U ros-jade-um7r/assh}r0h}r1h]r2j/assuh}r3h}r4h}r5h]r6j/asssuUgrasp_stability_msgsr7}r8(h}r9h}r:h]r;Uros/jade/iai_common_msgsr<assh ˆh }r=(h}r>h}r?h]r@Uros-jade-grasp-stability-msgsrAassh}rBh}rCh]rDjAassuh}rEh}rFh}rGh]rHjAasssuU roswiki_noderI}rJ(h}rKh}rLh]rMUros/jade/wu_ros_toolsrNassh ˆh }rO(h}rPh}rQh]rRUros-jade-roswiki-noderSassh}rTh}rUh]rVjSassuh}rWh}rXh}rYh]rZjSasssuU graph_msgsr[}r\(h}r]h}r^h]r_Uros/jade/graph_msgsr`assh ˆh }ra(h}rbh}rch]rdUros-jade-graph-msgsreassh}rfh}rgh]rhjeassuh}rih}rjh}rkh]rljeasssuUcamera_calibrationrm}rn(h}roh}rph]rqUros/jade/image_pipelinerrassh ˆh }rs(h}rth}ruh]rvUros-jade-camera-calibrationrwassh}rxh}ryh]rzjwassuh}r{h}r|h}r}h]r~jwasssuUompl_visual_toolsr}r€(h}rh}r‚h]rƒUros/jade/ompl_visual_toolsr„assh ˆh }r…(h}r†h}r‡h]rˆUros-jade-ompl-visual-toolsr‰assh}rŠh}r‹h]rŒj‰assuh}rh}rŽh}rh]rj‰asssuU perceptionr‘}r’(h}r“h}r”h]r•Uros/jade/metapackagesr–assh ˆh }r—(h}r˜h}r™h]ršUros-jade-perceptionr›assh}rœh}rh]ržj›assuh}rŸh}r h}r¡h]r¢j›asssuUrtt_common_msgsr£}r¤(h}r¥h}r¦h]r§Uros/jade/rtt_ros_integrationr¨assh ˆh }r©(h}rªh}r«h]r¬Uros-jade-rtt-common-msgsr­assh}r®h}r¯h]r°j­assuh}r±h}r²h}r³h]r´j­asssuUpepper_descriptionrµ}r¶(h}r·h}r¸h]r¹Uros/jade/pepper_robotrºassh ˆh }r»(h}r¼h}r½h]r¾Uros-jade-pepper-descriptionr¿assh}rÀh}rÁh]rÂj¿assuh}rÃh}rÄh}rÅh]rÆj¿asssuUsick_timrÇ}rÈ(h}rÉh}rÊh]rËUros/jade/sick_timrÌassh ˆh }rÍ(h}rÎh}rÏh]rÐUros-jade-sick-timrÑassh}rÒh}rÓh]rÔjÑassuh}rÕh}rÖh}r×h]rØjÑasssuUnao_dcm_bringuprÙ}rÚ(h}rÛh}rÜh]rÝUros/jade/nao_dcm_robotrÞassh ˆh }rß(h}ràh}ráh]râUros-jade-nao-dcm-bringuprãassh}räh}råh]ræjãassuh}rçh}rèh}réh]rêjãasssuUeclrë}rì(h}ríh}rîh]rïUros/jade/ecl_manipulationrðassh ˆh }rñ(h}ròh}róh]rôU ros-jade-eclrõassh}röh}r÷h]røjõassuh}rùh}rúh}rûh]rüjõasssuUrospeex_launchrý}rþ(h}rÿh}rh]rUros/jade/rospeexrassh ˆh }r(h}rh}rh]rUros-jade-rospeex-launchrassh}rh}r h]r jassuh}r h}r h}r h]rjasssuUdepthcloud_encoderr}r(h}rh}rh]rUros/jade/depthcloud_encoderrassh ˆh }r(h}rh}rh]rUros-jade-depthcloud-encoderrassh}rh}rh]rjassuh}rh}rh}rh]r jasssuU rosservicer!}r"(h}r#h}r$h]r%Uros/jade/ros_commr&assh ˆh }r'(h}r(h}r)h]r*Uros-jade-rosservicer+assh}r,h}r-h]r.j+assuh}r/h}r0h}r1h]r2j+asssuU turtle_tfr3}r4(h}r5h}r6h]r7Uros/jade/geometry_tutorialsr8assh ˆh }r9(h}r:h}r;h]r<Uros-jade-turtle-tfr=assh}r>h}r?h]r@j=assuh}rAh}rBh}rCh]rDj=asssuUpr2_gripper_actionrE}rF(h}rGh}rHh]rIUros/jade/pr2_controllersrJassh ˆh }rK(h}rLh}rMh]rNUros-jade-pr2-gripper-actionrOassh}rPh}rQh]rRjOassuh}rSh}rTh}rUh]rVjOasssuUpython-watchdogrW}rX(h}rYh}rZh]r[Uros/jade/python-watchdogr\assh ˆh }r](h}r^h}r_h]r`Uros-jade-python-watchdograassh}rbh}rch]rdjaassuh}reh}rfh}rgh]rhjaasssuUpr2_controllers_msgsri}rj(h}rkh}rlh]rmUros/jade/pr2_controllersrnassh ˆh }ro(h}rph}rqh]rrUros-jade-pr2-controllers-msgsrsassh}rth}ruh]rvjsassuh}rwh}rxh}ryh]rzjsasssuUrotors_simulatorr{}r|(h}r}h}r~h]rUros/jade/rotors_simulatorr€assh ˆh }r(h}r‚h}rƒh]r„Uros-jade-rotors-simulatorr…assh}r†h}r‡h]rˆj…assuh}r‰h}rŠh}r‹h]rŒj…asssuUtf2_geometry_msgsr}rŽ(h}rh}rh]r‘Uros/jade/geometry2r’assh ˆh }r“(h}r”h}r•h]r–Uros-jade-tf2-geometry-msgsr—assh}r˜h}r™h]ršj—assuh}r›h}rœh}rh]ržj—asssuUindustrial_deprecatedrŸ}r (h}r¡h}r¢h]r£Uros/jade/industrial_corer¤assh ˆh }r¥(h}r¦h}r§h]r¨Uros-jade-industrial-deprecatedr©assh}rªh}r«h]r¬j©assuh}r­h}r®h}r¯h]r°j©asssuUvisualization_marker_tutorialsr±}r²(h}r³h}r´h]rµU ros/jade/visualization_tutorialsr¶assh ˆh }r·(h}r¸h}r¹h]rºU'ros-jade-visualization-marker-tutorialsr»assh}r¼h}r½h]r¾j»assuh}r¿h}rÀh}rÁh]rÂj»asssuU audio_playrÃ}rÄ(h}rÅh}rÆh]rÇUros/jade/audio_commonrÈassh ˆh }rÉ(h}rÊh}rËh]rÌUros-jade-audio-playrÍassh}rÎh}rÏh]rÐjÍassuh}rÑh}rÒh}rÓh]rÔjÍasssuUmoveit_resourcesrÕ}rÖ(h}r×h}rØh]rÙUros/jade/moveit_resourcesrÚassh ˆh }rÛ(h}rÜh}rÝh]rÞUros-jade-moveit-resourcesrßassh}ràh}ráh]râjßassuh}rãh}räh}råh]ræjßasssuUgeometryrç}rè(h}réh}rêh]rëUros/jade/geometryrìassh ˆh }rí(h}rîh}rïh]rðUros-jade-geometryrñassh}ròh}róh]rôjñassuh}rõh}röh}r÷h]røjñasssuUpluginlib_tutorialsrù}rú(h}rûh}rüh]rýUros/jade/common_tutorialsrþassh ˆh }rÿ(h}r h}r h]r Uros-jade-pluginlib-tutorialsr assh}r h}r h]r j assuh}r h}r h}r h]r j asssuUsbplr }r (h}r h}r h]r U ros/jade/sbplr assh ˆh }r (h}r h}r h]r U ros-jade-sbplr assh}r h}r h]r j assuh}r h}r h}r h]r j asssuUdynamixel_controllersr }r (h}r h}r h]r! Uros/jade/dynamixel_motorr" assh ˆh }r# (h}r$ h}r% h]r& Uros-jade-dynamixel-controllersr' assh}r( h}r) h]r* j' assuh}r+ h}r, h}r- h]r. j' asssuUmd49_base_controllerr/ }r0 (h}r1 h}r2 h]r3 Uros/jade/md49_base_controllerr4 assh ˆh }r5 (h}r6 h}r7 h]r8 Uros-jade-md49-base-controllerr9 assh}r: h}r; h]r< j9 assuh}r= h}r> h}r? h]r@ j9 asssuU grid_map_pclrA }rB (h}rC h}rD h]rE Uros/jade/grid_maprF assh ˆh }rG (h}rH h}rI h]rJ Uros-jade-grid-map-pclrK assh}rL h}rM h]rN jK assuh}rO h}rP h}rQ h]rR jK asssuU pyros_testrS }rT (h}rU h}rV h]rW Uros/jade/pyros_testrX assh ˆh }rY (h}rZ h}r[ h]r\ Uros-jade-pyros-testr] assh}r^ h}r_ h]r` j] assuh}ra h}rb h}rc h]rd j] asssuUpr2_mechanism_controllersre }rf (h}rg h}rh h]ri Uros/jade/pr2_controllersrj assh ˆh }rk (h}rl h}rm h]rn U"ros-jade-pr2-mechanism-controllersro assh}rp h}rq h]rr jo assuh}rs h}rt h}ru h]rv jo asssuU octomap_rosrw }rx (h}ry h}rz h]r{ Uros/jade/octomap_rosr| assh ˆh }r} (h}r~ h}r h]r€ Uros-jade-octomap-rosr assh}r‚ h}rƒ h]r„ j assuh}r… h}r† h}r‡ h]rˆ j asssuU nao_robotr‰ }rŠ (h}r‹ h}rŒ h]r Uros/jade/nao_robotrŽ assh ˆh }r (h}r h}r‘ h]r’ Uros-jade-nao-robotr“ assh}r” h}r• h]r– j“ assuh}r— h}r˜ h}r™ h]rš j“ asssuU rosh_robotr› }rœ (h}r h}rž h]rŸ Uros/jade/rosh_robot_pluginsr  assh ˆh }r¡ (h}r¢ h}r£ h]r¤ Uros-jade-rosh-robotr¥ assh}r¦ h}r§ h]r¨ j¥ assuh}r© h}rª h}r« h]r¬ j¥ asssuU screen_grabr­ }r® (h}r¯ h}r° h]r± Uros/jade/screen_grabr² assh ˆh }r³ (h}r´ h}rµ h]r¶ Uros-jade-screen-grabr· assh}r¸ h}r¹ h]rº j· assuh}r» h}r¼ h}r½ h]r¾ j· asssuUrqt_robot_monitorr¿ }rÀ (h}rÁ h}r h]rà Uros/jade/rqt_robot_monitorrÄ assh ˆh }rÅ (h}rÆ h}rÇ h]rÈ Uros-jade-rqt-robot-monitorrÉ assh}rÊ h}rË h]rÌ jÉ assuh}rÍ h}rÎ h}rÏ h]rÐ jÉ asssuUkatana_descriptionrÑ }rÒ (h}rÓ h}rÔ h]rÕ Uros/jade/katana_driverrÖ assh ˆh }r× (h}rØ h}rÙ h]rÚ Uros-jade-katana-descriptionrÛ assh}rÜ h}rÝ h]rÞ jÛ assuh}rß h}rà h}rá h]râ jÛ asssuUnav2d_navigatorrã }rä (h}rå h}ræ h]rç Uros/jade/navigation_2drè assh ˆh }ré (h}rê h}rë h]rì Uros-jade-nav2d-navigatorrí assh}rî h}rï h]rð jí assuh}rñ h}rò h}ró h]rô jí asssuUpepper_gazebo_pluginrõ }rö (h}r÷ h}rø h]rù Uros/jade/pepper_virtualrú assh ˆh }rû (h}rü h}rý h]rþ Uros-jade-pepper-gazebo-pluginrÿ assh}r!h}r!h]r!jÿ assuh}r!h}r!h}r!h]r!jÿ asssuU stereo_msgsr!}r!(h}r !h}r !h]r !Uros/jade/common_msgsr !assh ˆh }r !(h}r!h}r!h]r!Uros-jade-stereo-msgsr!assh}r!h}r!h]r!j!assuh}r!h}r!h}r!h]r!j!asssuUroboteq_diagnosticsr!}r!(h}r!h}r!h]r!Uros/jade/roboteqr!assh ˆh }r!(h}r !h}r!!h]r"!Uros-jade-roboteq-diagnosticsr#!assh}r$!h}r%!h]r&!j#!assuh}r'!h}r(!h}r)!h]r*!j#!asssuUtrajectory_msgsr+!}r,!(h}r-!h}r.!h]r/!Uros/jade/common_msgsr0!assh ˆh }r1!(h}r2!h}r3!h]r4!Uros-jade-trajectory-msgsr5!assh}r6!h}r7!h]r8!j5!assuh}r9!h}r:!h}r;!h]r!(h}r?!h}r@!h]rA!Uros/jade/marti_messagesrB!assh ˆh }rC!(h}rD!h}rE!h]rF!Uros-jade-marti-can-msgsrG!assh}rH!h}rI!h]rJ!jG!assuh}rK!h}rL!h}rM!h]rN!jG!asssuUobject_recognition_rendererrO!}rP!(h}rQ!h}rR!h]rS!U$ros/jade/object_recognition_rendererrT!assh ˆh }rU!(h}rV!h}rW!h]rX!U$ros-jade-object-recognition-rendererrY!assh}rZ!h}r[!h]r\!jY!assuh}r]!h}r^!h}r_!h]r`!jY!asssuUimage_publisherra!}rb!(h}rc!h}rd!h]re!Uros/jade/image_pipelinerf!assh ˆh }rg!(h}rh!h}ri!h]rj!Uros-jade-image-publisherrk!assh}rl!h}rm!h]rn!jk!assuh}ro!h}rp!h}rq!h]rr!jk!asssuU nao_visionrs!}rt!(h}ru!h}rv!h]rw!Uros/jade/nao_interactionrx!assh ˆh }ry!(h}rz!h}r{!h]r|!Uros-jade-nao-visionr}!assh}r~!h}r!h]r€!j}!assuh}r!h}r‚!h}rƒ!h]r„!j}!asssuUswri_image_utilr…!}r†!(h}r‡!h}rˆ!h]r‰!Uros/jade/marti_commonrŠ!assh ˆh }r‹!(h}rŒ!h}r!h]rŽ!Uros-jade-swri-image-utilr!assh}r!h}r‘!h]r’!j!assuh}r“!h}r”!h}r•!h]r–!j!asssuU visp_trackerr—!}r˜!(h}r™!h}rš!h]r›!Uros/jade/vision_visprœ!assh ˆh }r!(h}rž!h}rŸ!h]r !Uros-jade-visp-trackerr¡!assh}r¢!h}r£!h]r¤!j¡!assuh}r¥!h}r¦!h}r§!h]r¨!j¡!asssuU ecl_errorsr©!}rª!(h}r«!h}r¬!h]r­!Uros/jade/ecl_liter®!assh ˆh }r¯!(h}r°!h}r±!h]r²!Uros-jade-ecl-errorsr³!assh}r´!h}rµ!h]r¶!j³!assuh}r·!h}r¸!h}r¹!h]rº!j³!asssuU rqt_rotorsr»!}r¼!(h}r½!h}r¾!h]r¿!Uros/jade/rotors_simulatorrÀ!assh ˆh }rÁ!(h}rÂ!h}rÃ!h]rÄ!Uros-jade-rqt-rotorsrÅ!assh}rÆ!h}rÇ!h]rÈ!jÅ!assuh}rÉ!h}rÊ!h}rË!h]rÌ!jÅ!asssuUnavigation_layersrÍ!}rÎ!(h}rÏ!h}rÐ!h]rÑ!Uros/jade/navigation_layersrÒ!assh ˆh }rÓ!(h}rÔ!h}rÕ!h]rÖ!Uros-jade-navigation-layersr×!assh}rØ!h}rÙ!h]rÚ!j×!assuh}rÛ!h}rÜ!h}rÝ!h]rÞ!j×!asssuU cmake_modulesrß!}rà!(h}rá!h}râ!h]rã!Uros/jade/cmake_modulesrä!assh ˆh }rå!(h}ræ!h}rç!h]rè!Uros-jade-cmake-modulesré!assh}rê!h}rë!h]rì!jé!assuh}rí!h}rî!h}rï!h]rð!jé!asssuUtf2rñ!}rò!(h}ró!h}rô!h]rõ!Uros/jade/geometry2rö!assh ˆh }r÷!(h}rø!h}rù!h]rú!U ros-jade-tf2rû!assh}rü!h}rý!h]rþ!jû!assuh}rÿ!h}r"h}r"h]r"jû!asssuUhector_quadrotor_gazebo_pluginsr"}r"(h}r"h}r"h]r"Uros/jade/hector_quadrotorr"assh ˆh }r "(h}r "h}r "h]r "U(ros-jade-hector-quadrotor-gazebo-pluginsr "assh}r"h}r"h]r"j "assuh}r"h}r"h}r"h]r"j "asssuU eus_qpoasesr"}r"(h}r"h}r"h]r"Uros/jade/jsk_controlr"assh ˆh }r"(h}r"h}r"h]r"Uros-jade-eus-qpoasesr"assh}r "h}r!"h]r""j"assuh}r#"h}r$"h}r%"h]r&"j"asssuU data_vis_msgsr'"}r("(h}r)"h}r*"h]r+"Uros/jade/iai_common_msgsr,"assh ˆh }r-"(h}r."h}r/"h]r0"Uros-jade-data-vis-msgsr1"assh}r2"h}r3"h]r4"j1"assuh}r5"h}r6"h}r7"h]r8"j1"asssuUposition_controllersr9"}r:"(h}r;"h}r<"h]r="Uros/jade/ros_controllersr>"assh ˆh }r?"(h}r@"h}rA"h]rB"Uros-jade-position-controllersrC"assh}rD"h}rE"h]rF"jC"assuh}rG"h}rH"h}rI"h]rJ"jC"asssuUrospyrK"}rL"(h}rM"h}rN"h]rO"Uros/jade/ros_commrP"assh ˆh }rQ"(h}rR"h}rS"h]rT"Uros-jade-rospyrU"assh}rV"h}rW"h]rX"jU"assuh}rY"h}rZ"h}r["h]r\"jU"asssuUfrontier_explorationr]"}r^"(h}r_"h}r`"h]ra"Uros/jade/frontier_explorationrb"assh ˆh }rc"(h}rd"h}re"h]rf"Uros-jade-frontier-explorationrg"assh}rh"h}ri"h]rj"jg"assuh}rk"h}rl"h}rm"h]rn"jg"asssuU naoqi_bridgero"}rp"(h}rq"h}rr"h]rs"Uros/jade/naoqi_bridgert"assh ˆh }ru"(h}rv"h}rw"h]rx"Uros-jade-naoqi-bridgery"assh}rz"h}r{"h]r|"jy"assuh}r}"h}r~"h}r"h]r€"jy"asssuU pr2_machiner"}r‚"(h}rƒ"h}r„"h]r…"Uros/jade/pr2_commonr†"assh ˆh }r‡"(h}rˆ"h}r‰"h]rŠ"Uros-jade-pr2-machiner‹"assh}rŒ"h}r"h]rŽ"j‹"assuh}r"h}r"h}r‘"h]r’"j‹"asssuU marker_msgsr“"}r”"(h}r•"h}r–"h]r—"Uros/jade/marker_msgsr˜"assh ˆh }r™"(h}rš"h}r›"h]rœ"Uros-jade-marker-msgsr"assh}rž"h}rŸ"h]r "j"assuh}r¡"h}r¢"h}r£"h]r¤"j"asssuU arbotix_msgsr¥"}r¦"(h}r§"h}r¨"h]r©"Uros/jade/arbotix_rosrª"assh ˆh }r«"(h}r¬"h}r­"h]r®"Uros-jade-arbotix-msgsr¯"assh}r°"h}r±"h]r²"j¯"assuh}r³"h}r´"h}rµ"h]r¶"j¯"asssuUrostestr·"}r¸"(h}r¹"h}rº"h]r»"Uros/jade/ros_commr¼"assh ˆh }r½"(h}r¾"h}r¿"h]rÀ"Uros-jade-rostestrÁ"assh}rÂ"h}rÃ"h]rÄ"jÁ"assuh}rÅ"h}rÆ"h}rÇ"h]rÈ"jÁ"asssuUecl_timerÉ"}rÊ"(h}rË"h}rÌ"h]rÍ"Uros/jade/ecl_corerÎ"assh ˆh }rÏ"(h}rÐ"h}rÑ"h]rÒ"Uros-jade-ecl-timerÓ"assh}rÔ"h}rÕ"h]rÖ"jÓ"assuh}r×"h}rØ"h}rÙ"h]rÚ"jÓ"asssuU rosbagliverÛ"}rÜ"(h}rÝ"h}rÞ"h]rß"Uros/jade/wu_ros_toolsrà"assh ˆh }rá"(h}râ"h}rã"h]rä"Uros-jade-rosbagliverå"assh}ræ"h}rç"h]rè"jå"assuh}ré"h}rê"h}rë"h]rì"jå"asssuU rtt_ros_commrí"}rî"(h}rï"h}rð"h]rñ"Uros/jade/rtt_ros_integrationrò"assh ˆh }ró"(h}rô"h}rõ"h]rö"Uros-jade-rtt-ros-commr÷"assh}rø"h}rù"h]rú"j÷"assuh}rû"h}rü"h}rý"h]rþ"j÷"asssuU libphidget21rÿ"}r#(h}r#h}r#h]r#Uros/jade/phidgets_driversr#assh ˆh }r#(h}r#h}r#h]r#Uros-jade-libphidget21r #assh}r #h}r #h]r #j #assuh}r #h}r#h}r#h]r#j #asssuUdynamixel_driverr#}r#(h}r#h}r#h]r#Uros/jade/dynamixel_motorr#assh ˆh }r#(h}r#h}r#h]r#Uros-jade-dynamixel-driverr#assh}r#h}r#h]r#j#assuh}r#h}r #h}r!#h]r"#j#asssuU cpp_commonr##}r$#(h}r%#h}r&#h]r'#Uros/jade/roscpp_corer(#assh ˆh }r)#(h}r*#h}r+#h]r,#Uros-jade-cpp-commonr-#assh}r.#h}r/#h]r0#j-#assuh}r1#h}r2#h}r3#h]r4#j-#asssuU sound_playr5#}r6#(h}r7#h}r8#h]r9#Uros/jade/audio_commonr:#assh ˆh }r;#(h}r<#h}r=#h]r>#Uros-jade-sound-playr?#assh}r@#h}rA#h]rB#j?#assuh}rC#h}rD#h}rE#h]rF#j?#asssuU people_msgsrG#}rH#(h}rI#h}rJ#h]rK#Uros/jade/peoplerL#assh ˆh }rM#(h}rN#h}rO#h]rP#Uros-jade-people-msgsrQ#assh}rR#h}rS#h]rT#jQ#assuh}rU#h}rV#h}rW#h]rX#jQ#asssuUiai_content_msgsrY#}rZ#(h}r[#h}r\#h]r]#Uros/jade/iai_common_msgsr^#assh ˆh }r_#(h}r`#h}ra#h]rb#Uros-jade-iai-content-msgsrc#assh}rd#h}re#h]rf#jc#assuh}rg#h}rh#h}ri#h]rj#jc#asssuUnavigation_stagerk#}rl#(h}rm#h}rn#h]ro#Uros/jade/navigation_tutorialsrp#assh ˆh }rq#(h}rr#h}rs#h]rt#Uros-jade-navigation-stageru#assh}rv#h}rw#h]rx#ju#assuh}ry#h}rz#h}r{#h]r|#ju#asssuU smach_rosr}#}r~#(h}r#h}r€#h]r#Uros/jade/executive_smachr‚#assh ˆh }rƒ#(h}r„#h}r…#h]r†#Uros-jade-smach-rosr‡#assh}rˆ#h}r‰#h]rŠ#j‡#assuh}r‹#h}rŒ#h}r#h]rŽ#j‡#asssuUcompressed_image_transportr#}r#(h}r‘#h}r’#h]r“#U ros/jade/image_transport_pluginsr”#assh ˆh }r•#(h}r–#h}r—#h]r˜#U#ros-jade-compressed-image-transportr™#assh}rš#h}r›#h]rœ#j™#assuh}r#h}rž#h}rŸ#h]r #j™#asssuU variant_msgsr¡#}r¢#(h}r£#h}r¤#h]r¥#Uros/jade/variantr¦#assh ˆh }r§#(h}r¨#h}r©#h]rª#Uros-jade-variant-msgsr«#assh}r¬#h}r­#h]r®#j«#assuh}r¯#h}r°#h}r±#h]r²#j«#asssuU gazebo_msgsr³#}r´#(h}rµ#h}r¶#h]r·#Uros/jade/gazebo_ros_pkgsr¸#assh ˆh }r¹#(h}rº#h}r»#h]r¼#Uros-jade-gazebo-msgsr½#assh}r¾#h}r¿#h]rÀ#j½#assuh}rÁ#h}rÂ#h}rÃ#h]rÄ#j½#asssuU octomap_msgsrÅ#}rÆ#(h}rÇ#h}rÈ#h]rÉ#Uros/jade/octomap_msgsrÊ#assh ˆh }rË#(h}rÌ#h}rÍ#h]rÎ#Uros-jade-octomap-msgsrÏ#assh}rÐ#h}rÑ#h]rÒ#jÏ#assuh}rÓ#h}rÔ#h}rÕ#h]rÖ#jÏ#asssuUecl_mobile_robotr×#}rØ#(h}rÙ#h}rÚ#h]rÛ#Uros/jade/ecl_navigationrÜ#assh ˆh }rÝ#(h}rÞ#h}rß#h]rà#Uros-jade-ecl-mobile-robotrá#assh}râ#h}rã#h]rä#já#assuh}rå#h}ræ#h}rç#h]rè#já#asssuU xsens_driverré#}rê#(h}rë#h}rì#h]rí#Uros/jade/xsens_driverrî#assh ˆh }rï#(h}rð#h}rñ#h]rò#Uros-jade-xsens-driverró#assh}rô#h}rõ#h]rö#jó#assuh}r÷#h}rø#h}rù#h]rú#jó#asssuU simulatorsrû#}rü#(h}rý#h}rþ#h]rÿ#Uros/jade/metapackagesr$assh ˆh }r$(h}r$h}r$h]r$Uros-jade-simulatorsr$assh}r$h}r$h]r$j$assuh}r $h}r $h}r $h]r $j$asssuUueye_camr $}r$(h}r$h}r$h]r$Uros/jade/ueye_camr$assh ˆh }r$(h}r$h}r$h]r$Uros-jade-ueye-camr$assh}r$h}r$h]r$j$assuh}r$h}r$h}r$h]r$j$asssuUopenrtm_aist_pythonr$}r $(h}r!$h}r"$h]r#$Uros/jade/openrtm_aist_pythonr$$assh ˆh }r%$(h}r&$h}r'$h]r($Uros-jade-openrtm-aist-pythonr)$assh}r*$h}r+$h]r,$j)$assuh}r-$h}r.$h}r/$h]r0$j)$asssuU qt_dotgraphr1$}r2$(h}r3$h}r4$h]r5$Uros/jade/qt_gui_corer6$assh ˆh }r7$(h}r8$h}r9$h]r:$Uros-jade-qt-dotgraphr;$assh}r<$h}r=$h]r>$j;$assuh}r?$h}r@$h}rA$h]rB$j;$asssuUcl_utilsrC$}rD$(h}rE$h}rF$h]rG$Uros/jade/roslisp_commonrH$assh ˆh }rI$(h}rJ$h}rK$h]rL$Uros-jade-cl-utilsrM$assh}rN$h}rO$h]rP$jM$assuh}rQ$h}rR$h}rS$h]rT$jM$asssuUjoint_trajectory_controllerrU$}rV$(h}rW$h}rX$h]rY$Uros/jade/ros_controllersrZ$assh ˆh }r[$(h}r\$h}r]$h]r^$U$ros-jade-joint-trajectory-controllerr_$assh}r`$h}ra$h]rb$j_$assuh}rc$h}rd$h}re$h]rf$j_$asssuUnao_interactionrg$}rh$(h}ri$h}rj$h]rk$Uros/jade/nao_interactionrl$assh ˆh }rm$(h}rn$h}ro$h]rp$Uros-jade-nao-interactionrq$assh}rr$h}rs$h]rt$jq$assuh}ru$h}rv$h}rw$h]rx$jq$asssuUrosbag_storagery$}rz$(h}r{$h}r|$h]r}$Uros/jade/ros_commr~$assh ˆh }r$(h}r€$h}r$h]r‚$Uros-jade-rosbag-storagerƒ$assh}r„$h}r…$h]r†$jƒ$assuh}r‡$h}rˆ$h}r‰$h]rŠ$jƒ$asssuUecl_navigationr‹$}rŒ$(h}r$h}rŽ$h]r$Uros/jade/ecl_navigationr$assh ˆh }r‘$(h}r’$h}r“$h]r”$Uros-jade-ecl-navigationr•$assh}r–$h}r—$h]r˜$j•$assuh}r™$h}rš$h}r›$h]rœ$j•$asssuU ecl_utilitiesr$}rž$(h}rŸ$h}r $h]r¡$Uros/jade/ecl_corer¢$assh ˆh }r£$(h}r¤$h}r¥$h]r¦$Uros-jade-ecl-utilitiesr§$assh}r¨$h}r©$h]rª$j§$assuh}r«$h}r¬$h}r­$h]r®$j§$asssuU hokuyo_noder¯$}r°$(h}r±$h}r²$h]r³$Uros/jade/hokuyo_noder´$assh ˆh }rµ$(h}r¶$h}r·$h]r¸$Uros-jade-hokuyo-noder¹$assh}rº$h}r»$h]r¼$j¹$assuh}r½$h}r¾$h}r¿$h]rÀ$j¹$asssuUrobot_calibration_msgsrÁ$}rÂ$(h}rÃ$h}rÄ$h]rÅ$Uros/jade/robot_calibrationrÆ$assh ˆh }rÇ$(h}rÈ$h}rÉ$h]rÊ$Uros-jade-robot-calibration-msgsrË$assh}rÌ$h}rÍ$h]rÎ$jË$assuh}rÏ$h}rÐ$h}rÑ$h]rÒ$jË$asssuU mrpt_rawlogrÓ$}rÔ$(h}rÕ$h}rÖ$h]r×$Uros/jade/mrpt_navigationrØ$assh ˆh }rÙ$(h}rÚ$h}rÛ$h]rÜ$Uros-jade-mrpt-rawlogrÝ$assh}rÞ$h}rß$h]rà$jÝ$assuh}rá$h}râ$h}rã$h]rä$jÝ$asssuUtf2_web_republisherrå$}ræ$(h}rç$h}rè$h]ré$Uros/jade/tf2_web_republisherrê$assh ˆh }rë$(h}rì$h}rí$h]rî$Uros-jade-tf2-web-republisherrï$assh}rð$h}rñ$h]rò$jï$assuh}ró$h}rô$h}rõ$h]rö$jï$asssuUtblibr÷$}rø$(h}rù$h}rú$h]rû$Uros/jade/tblibrü$assh ˆh }rý$(h}rþ$h}rÿ$h]r%Uros-jade-tblibr%assh}r%h}r%h]r%j%assuh}r%h}r%h}r%h]r%j%asssuUdynamixel_motorr %}r %(h}r %h}r %h]r %Uros/jade/dynamixel_motorr%assh ˆh }r%(h}r%h}r%h]r%Uros-jade-dynamixel-motorr%assh}r%h}r%h]r%j%assuh}r%h}r%h}r%h]r%j%asssuUnodeletr%}r%(h}r%h}r%h]r%Uros/jade/nodelet_corer %assh ˆh }r!%(h}r"%h}r#%h]r$%Uros-jade-nodeletr%%assh}r&%h}r'%h]r(%j%%assuh}r)%h}r*%h}r+%h]r,%j%%asssuUrqt_logger_levelr-%}r.%(h}r/%h}r0%h]r1%Uros/jade/rqt_logger_levelr2%assh ˆh }r3%(h}r4%h}r5%h]r6%Uros-jade-rqt-logger-levelr7%assh}r8%h}r9%h]r:%j7%assuh}r;%h}r<%h}r=%h]r>%j7%asssuU swri_roscppr?%}r@%(h}rA%h}rB%h]rC%Uros/jade/marti_commonrD%assh ˆh }rE%(h}rF%h}rG%h]rH%Uros-jade-swri-roscpprI%assh}rJ%h}rK%h]rL%jI%assuh}rM%h}rN%h}rO%h]rP%jI%asssuUstdr_simulatorrQ%}rR%(h}rS%h}rT%h]rU%Uros/jade/stdr_simulatorrV%assh ˆh }rW%(h}rX%h}rY%h]rZ%Uros-jade-stdr-simulatorr[%assh}r\%h}r]%h]r^%j[%assuh}r_%h}r`%h}ra%h]rb%j[%asssuUroseus_tutorialsrc%}rd%(h}re%h}rf%h]rg%Uros/jade/jsk_roseusrh%assh ˆh }ri%(h}rj%h}rk%h]rl%Uros-jade-roseus-tutorialsrm%assh}rn%h}ro%h]rp%jm%assuh}rq%h}rr%h}rs%h]rt%jm%asssuU openni_launchru%}rv%(h}rw%h}rx%h]ry%Uros/jade/openni_launchrz%assh ˆh }r{%(h}r|%h}r}%h]r~%Uros-jade-openni-launchr%assh}r€%h}r%h]r‚%j%assuh}rƒ%h}r„%h}r…%h]r†%j%asssuU ecto_opennir‡%}rˆ%(h}r‰%h}rŠ%h]r‹%Uros/jade/ecto_opennirŒ%assh ˆh }r%(h}rŽ%h}r%h]r%Uros-jade-ecto-opennir‘%assh}r’%h}r“%h]r”%j‘%assuh}r•%h}r–%h}r—%h]r˜%j‘%asssuUvelodyne_simulatorr™%}rš%(h}r›%h}rœ%h]r%Uros/jade/velodyne_simulatorrž%assh ˆh }rŸ%(h}r %h}r¡%h]r¢%Uros-jade-velodyne-simulatorr£%assh}r¤%h}r¥%h]r¦%j£%assuh}r§%h}r¨%h}r©%h]rª%j£%asssuUroboteq_driverr«%}r¬%(h}r­%h}r®%h]r¯%Uros/jade/roboteqr°%assh ˆh }r±%(h}r²%h}r³%h]r´%Uros-jade-roboteq-driverrµ%assh}r¶%h}r·%h]r¸%jµ%assuh}r¹%h}rº%h}r»%h]r¼%jµ%asssuUrfsmr½%}r¾%(h}r¿%h}rÀ%h]rÁ%U ros/jade/rfsmrÂ%assh ˆh }rÃ%(h}rÄ%h}rÅ%h]rÆ%U ros-jade-rfsmrÇ%assh}rÈ%h}rÉ%h]rÊ%jÇ%assuh}rË%h}rÌ%h}rÍ%h]rÎ%jÇ%asssuUpr2_controller_managerrÏ%}rÐ%(h}rÑ%h}rÒ%h]rÓ%Uros/jade/pr2_mechanismrÔ%assh ˆh }rÕ%(h}rÖ%h}r×%h]rØ%Uros-jade-pr2-controller-managerrÙ%assh}rÚ%h}rÛ%h]rÜ%jÙ%assuh}rÝ%h}rÞ%h}rß%h]rà%jÙ%asssuUcl_storerá%}râ%(h}rã%h}rä%h]rå%Uros/jade/cram_3rdpartyræ%assh ˆh }rç%(h}rè%h}ré%h]rê%Uros-jade-cl-storerë%assh}rì%h}rí%h]rî%jë%assuh}rï%h}rð%h}rñ%h]rò%jë%asssuUtf2_kdlró%}rô%(h}rõ%h}rö%h]r÷%Uros/jade/geometry2rø%assh ˆh }rù%(h}rú%h}rû%h]rü%Uros-jade-tf2-kdlrý%assh}rþ%h}rÿ%h]r&jý%assuh}r&h}r&h}r&h]r&jý%asssuUsmachr&}r&(h}r&h}r&h]r &Uros/jade/executive_smachr &assh ˆh }r &(h}r &h}r &h]r&Uros-jade-smachr&assh}r&h}r&h]r&j&assuh}r&h}r&h}r&h]r&j&asssuUethercat_trigger_controllersr&}r&(h}r&h}r&h]r&Uros/jade/pr2_controllersr&assh ˆh }r&(h}r&h}r&h]r &U%ros-jade-ethercat-trigger-controllersr!&assh}r"&h}r#&h]r$&j!&assuh}r%&h}r&&h}r'&h]r(&j!&asssuU rtabmap_rosr)&}r*&(h}r+&h}r,&h]r-&Uros/jade/rtabmap_rosr.&assh ˆh }r/&(h}r0&h}r1&h]r2&Uros-jade-rtabmap-rosr3&assh}r4&h}r5&h]r6&j3&assuh}r7&h}r8&h}r9&h]r:&j3&asssuUopenslam_gmappingr;&}r<&(h}r=&h}r>&h]r?&Uros/jade/openslam_gmappingr@&assh ˆh }rA&(h}rB&h}rC&h]rD&Uros-jade-openslam-gmappingrE&assh}rF&h}rG&h]rH&jE&assuh}rI&h}rJ&h}rK&h]rL&jE&asssuU pr2_mechanismrM&}rN&(h}rO&h}rP&h]rQ&Uros/jade/pr2_mechanismrR&assh ˆh }rS&(h}rT&h}rU&h]rV&Uros-jade-pr2-mechanismrW&assh}rX&h}rY&h]rZ&jW&assuh}r[&h}r\&h}r]&h]r^&jW&asssuU pgm_learnerr_&}r`&(h}ra&h}rb&h]rc&Uros/jade/jsk_3rdpartyrd&assh ˆh }re&(h}rf&h}rg&h]rh&Uros-jade-pgm-learnerri&assh}rj&h}rk&h]rl&ji&assuh}rm&h}rn&h}ro&h]rp&ji&asssuUrtshellrq&}rr&(h}rs&h}rt&h]ru&Uros/jade/rtshellrv&assh ˆh }rw&(h}rx&h}ry&h]rz&Uros-jade-rtshellr{&assh}r|&h}r}&h]r~&j{&assuh}r&h}r€&h}r&h]r‚&j{&asssuU slam_kartorƒ&}r„&(h}r…&h}r†&h]r‡&Uros/jade/slam_kartorˆ&assh ˆh }r‰&(h}rŠ&h}r‹&h]rŒ&Uros-jade-slam-kartor&assh}rŽ&h}r&h]r&j&assuh}r‘&h}r’&h}r“&h]r”&j&asssuU collada_urdfr•&}r–&(h}r—&h}r˜&h]r™&Uros/jade/collada_urdfrš&assh ˆh }r›&(h}rœ&h}r&h]rž&Uros-jade-collada-urdfrŸ&assh}r &h}r¡&h]r¢&jŸ&assuh}r£&h}r¤&h}r¥&h]r¦&jŸ&asssuUimu_complementary_filterr§&}r¨&(h}r©&h}rª&h]r«&Uros/jade/imu_toolsr¬&assh ˆh }r­&(h}r®&h}r¯&h]r°&U!ros-jade-imu-complementary-filterr±&assh}r²&h}r³&h]r´&j±&assuh}rµ&h}r¶&h}r·&h]r¸&j±&asssuU rospeex_msgsr¹&}rº&(h}r»&h}r¼&h]r½&Uros/jade/rospeexr¾&assh ˆh }r¿&(h}rÀ&h}rÁ&h]rÂ&Uros-jade-rospeex-msgsrÃ&assh}rÄ&h}rÅ&h]rÆ&jÃ&assuh}rÇ&h}rÈ&h}rÉ&h]rÊ&jÃ&asssuUscan_to_cloud_converterrË&}rÌ&(h}rÍ&h}rÎ&h]rÏ&Uros/jade/scan_toolsrÐ&assh ˆh }rÑ&(h}rÒ&h}rÓ&h]rÔ&U ros-jade-scan-to-cloud-converterrÕ&assh}rÖ&h}r×&h]rØ&jÕ&assuh}rÙ&h}rÚ&h}rÛ&h]rÜ&jÕ&asssuU pr2_commonrÝ&}rÞ&(h}rß&h}rà&h]rá&Uros/jade/pr2_commonrâ&assh ˆh }rã&(h}rä&h}rå&h]ræ&Uros-jade-pr2-commonrç&assh}rè&h}ré&h]rê&jç&assuh}rë&h}rì&h}rí&h]rî&jç&asssuUkatana_gazebo_pluginsrï&}rð&(h}rñ&h}rò&h]ró&Uros/jade/katana_driverrô&assh ˆh }rõ&(h}rö&h}r÷&h]rø&Uros-jade-katana-gazebo-pluginsrù&assh}rú&h}rû&h]rü&jù&assuh}rý&h}rþ&h}rÿ&h]r'jù&asssuU cv_camerar'}r'(h}r'h}r'h]r'Uros/jade/cv_camerar'assh ˆh }r'(h}r'h}r 'h]r 'Uros-jade-cv-camerar 'assh}r 'h}r 'h]r'j 'assuh}r'h}r'h}r'h]r'j 'asssuU rosserialr'}r'(h}r'h}r'h]r'Uros/jade/rosserialr'assh ˆh }r'(h}r'h}r'h]r'Uros-jade-rosserialr'assh}r'h}r'h]r 'j'assuh}r!'h}r"'h}r#'h]r$'j'asssuUnaoqi_libqicorer%'}r&'(h}r''h}r('h]r)'Uros/jade/naoqi_libqicorer*'assh ˆh }r+'(h}r,'h}r-'h]r.'Uros-jade-naoqi-libqicorer/'assh}r0'h}r1'h]r2'j/'assuh}r3'h}r4'h}r5'h]r6'j/'asssuUrosmaker7'}r8'(h}r9'h}r:'h]r;'U ros/jade/rosr<'assh ˆh }r='(h}r>'h}r?'h]r@'Uros-jade-rosmakerA'assh}rB'h}rC'h]rD'jA'assuh}rE'h}rF'h}rG'h]rH'jA'asssuU tetris_gazeborI'}rJ'(h}rK'h}rL'h]rM'Uros/jade/hakutorN'assh ˆh }rO'(h}rP'h}rQ'h]rR'Uros-jade-tetris-gazeborS'assh}rT'h}rU'h]rV'jS'assuh}rW'h}rX'h}rY'h]rZ'jS'asssuUmoveit_setup_assistantr['}r\'(h}r]'h}r^'h]r_'Uros/jade/moveitr`'assh ˆh }ra'(h}rb'h}rc'h]rd'Uros-jade-moveit-setup-assistantre'assh}rf'h}rg'h]rh'je'assuh}ri'h}rj'h}rk'h]rl'je'asssuUecl_type_traitsrm'}rn'(h}ro'h}rp'h]rq'Uros/jade/ecl_corerr'assh ˆh }rs'(h}rt'h}ru'h]rv'Uros-jade-ecl-type-traitsrw'assh}rx'h}ry'h]rz'jw'assuh}r{'h}r|'h}r}'h]r~'jw'asssuUtheora_image_transportr'}r€'(h}r'h}r‚'h]rƒ'U ros/jade/image_transport_pluginsr„'assh ˆh }r…'(h}r†'h}r‡'h]rˆ'Uros-jade-theora-image-transportr‰'assh}rŠ'h}r‹'h]rŒ'j‰'assuh}r'h}rŽ'h}r'h]r'j‰'asssuUzbar_rosr‘'}r’'(h}r“'h}r”'h]r•'Uros/jade/zbar_rosr–'assh ˆh }r—'(h}r˜'h}r™'h]rš'Uros-jade-zbar-rosr›'assh}rœ'h}r'h]rž'j›'assuh}rŸ'h}r 'h}r¡'h]r¢'j›'asssuUbabelr£'}r¤'(h}r¥'h}r¦'h]r§'Uros/jade/cram_3rdpartyr¨'assh ˆh }r©'(h}rª'h}r«'h]r¬'Uros-jade-babelr­'assh}r®'h}r¯'h]r°'j­'assuh}r±'h}r²'h}r³'h]r´'j­'asssuU actionlibrµ'}r¶'(h}r·'h}r¸'h]r¹'Uros/jade/actionlibrº'assh ˆh }r»'(h}r¼'h}r½'h]r¾'Uros-jade-actionlibr¿'assh}rÀ'h}rÁ'h]rÂ'j¿'assuh}rÃ'h}rÄ'h}rÅ'h]rÆ'j¿'asssuU hector_quadrotor_pose_estimationrÇ'}rÈ'(h}rÉ'h}rÊ'h]rË'Uros/jade/hector_quadrotorrÌ'assh ˆh }rÍ'(h}rÎ'h}rÏ'h]rÐ'U)ros-jade-hector-quadrotor-pose-estimationrÑ'assh}rÒ'h}rÓ'h]rÔ'jÑ'assuh}rÕ'h}rÖ'h}r×'h]rØ'jÑ'asssuUrosgraphrÙ'}rÚ'(h}rÛ'h}rÜ'h]rÝ'Uros/jade/ros_commrÞ'assh ˆh }rß'(h}rà'h}rá'h]râ'Uros-jade-rosgraphrã'assh}rä'h}rå'h]ræ'jã'assuh}rç'h}rè'h}ré'h]rê'jã'asssuU rosnode_rtcrë'}rì'(h}rí'h}rî'h]rï'Uros/jade/rtmros_commonrð'assh ˆh }rñ'(h}rò'h}ró'h]rô'Uros-jade-rosnode-rtcrõ'assh}rö'h}r÷'h]rø'jõ'assuh}rù'h}rú'h}rû'h]rü'jõ'asssuUrqt_launchtreerý'}rþ'(h}rÿ'h}r(h]r(Uros/jade/rqt_launchtreer(assh ˆh }r((h}r(h}r(h]r(Uros-jade-rqt-launchtreer(assh}r(h}r (h]r (j(assuh}r (h}r (h}r (h]r(j(asssuUindustrial_msgsr(}r((h}r(h}r(h]r(Uros/jade/industrial_corer(assh ˆh }r((h}r(h}r(h]r(Uros-jade-industrial-msgsr(assh}r(h}r(h]r(j(assuh}r(h}r(h}r(h]r (j(asssuUiai_kinematics_msgsr!(}r"((h}r#(h}r$(h]r%(Uros/jade/iai_common_msgsr&(assh ˆh }r'((h}r((h}r)(h]r*(Uros-jade-iai-kinematics-msgsr+(assh}r,(h}r-(h]r.(j+(assuh}r/(h}r0(h}r1(h]r2(j+(asssuUgrid_mapr3(}r4((h}r5(h}r6(h]r7(Uros/jade/grid_mapr8(assh ˆh }r9((h}r:(h}r;(h]r<(Uros-jade-grid-mapr=(assh}r>(h}r?(h]r@(j=(assuh}rA(h}rB(h}rC(h]rD(j=(asssuUbase_local_plannerrE(}rF((h}rG(h}rH(h]rI(Uros/jade/navigationrJ(assh ˆh }rK((h}rL(h}rM(h]rN(Uros-jade-base-local-plannerrO(assh}rP(h}rQ(h]rR(jO(assuh}rS(h}rT(h}rU(h]rV(jO(asssuUrtt_kdl_conversionsrW(}rX((h}rY(h}rZ(h]r[(Uros/jade/rtt_ros_integrationr\(assh ˆh }r]((h}r^(h}r_(h]r`(Uros-jade-rtt-kdl-conversionsra(assh}rb(h}rc(h]rd(ja(assuh}re(h}rf(h}rg(h]rh(ja(asssuUgsdri(}rj((h}rk(h}rl(h]rm(Uros/jade/cram_3rdpartyrn(assh ˆh }ro((h}rp(h}rq(h]rr(U ros-jade-gsdrs(assh}rt(h}ru(h]rv(js(assuh}rw(h}rx(h}ry(h]rz(js(asssuU shape_toolsr{(}r|((h}r}(h}r~(h]r(Uros/jade/shape_toolsr€(assh ˆh }r((h}r‚(h}rƒ(h]r„(Uros-jade-shape-toolsr…(assh}r†(h}r‡(h]rˆ(j…(assuh}r‰(h}rŠ(h}r‹(h]rŒ(j…(asssuUlaser_filteringr(}rŽ((h}r(h}r(h]r‘(Uros/jade/laser_filteringr’(assh ˆh }r“((h}r”(h}r•(h]r–(Uros-jade-laser-filteringr—(assh}r˜(h}r™(h]rš(j—(assuh}r›(h}rœ(h}r(h]rž(j—(asssuUvisprŸ(}r ((h}r¡(h}r¢(h]r£(U ros/jade/vispr¤(assh ˆh }r¥((h}r¦(h}r§(h]r¨(U ros-jade-vispr©(assh}rª(h}r«(h]r¬(j©(assuh}r­(h}r®(h}r¯(h]r°(j©(asssuUroslispr±(}r²((h}r³(h}r´(h]rµ(Uros/jade/roslispr¶(assh ˆh }r·((h}r¸(h}r¹(h]rº(Uros-jade-roslispr»(assh}r¼(h}r½(h]r¾(j»(assuh}r¿(h}rÀ(h}rÁ(h]rÂ(j»(asssuUkatana_tutorialsrÃ(}rÄ((h}rÅ(h}rÆ(h]rÇ(Uros/jade/katana_driverrÈ(assh ˆh }rÉ((h}rÊ(h}rË(h]rÌ(Uros-jade-katana-tutorialsrÍ(assh}rÎ(h}rÏ(h]rÐ(jÍ(assuh}rÑ(h}rÒ(h}rÓ(h]rÔ(jÍ(asssuU message_to_tfrÕ(}rÖ((h}r×(h}rØ(h]rÙ(Uros/jade/hector_localizationrÚ(assh ˆh }rÛ((h}rÜ(h}rÝ(h]rÞ(Uros-jade-message-to-tfrß(assh}rà(h}rá(h]râ(jß(assuh}rã(h}rä(h}rå(h]ræ(jß(asssuUtornadorç(}rè((h}ré(h}rê(h]rë(Uros/jade/tornadorì(assh ˆh }rí((h}rî(h}rï(h]rð(Uros-jade-tornadorñ(assh}rò(h}ró(h]rô(jñ(assuh}rõ(h}rö(h}r÷(h]rø(jñ(asssuUindustrial_robot_clientrù(}rú((h}rû(h}rü(h]rý(Uros/jade/industrial_corerþ(assh ˆh }rÿ((h}r)h}r)h]r)U ros-jade-industrial-robot-clientr)assh}r)h}r)h]r)j)assuh}r)h}r)h}r )h]r )j)asssuU ecl_configr )}r )(h}r )h}r)h]r)Uros/jade/ecl_liter)assh ˆh }r)(h}r)h}r)h]r)Uros-jade-ecl-configr)assh}r)h}r)h]r)j)assuh}r)h}r)h}r)h]r)j)asssuUrosserial_arduinor)}r)(h}r)h}r )h]r!)Uros/jade/rosserialr")assh ˆh }r#)(h}r$)h}r%)h]r&)Uros-jade-rosserial-arduinor')assh}r()h}r))h]r*)j')assuh}r+)h}r,)h}r-)h]r.)j')asssuU opencv_appsr/)}r0)(h}r1)h}r2)h]r3)Uros/jade/opencv_appsr4)assh ˆh }r5)(h}r6)h}r7)h]r8)Uros-jade-opencv-appsr9)assh}r:)h}r;)h]r<)j9)assuh}r=)h}r>)h}r?)h]r@)j9)asssuU!hector_worldmodel_geotiff_pluginsrA)}rB)(h}rC)h}rD)h]rE)Uros/jade/hector_worldmodelrF)assh ˆh }rG)(h}rH)h}rI)h]rJ)U*ros-jade-hector-worldmodel-geotiff-pluginsrK)assh}rL)h}rM)h]rN)jK)assuh}rO)h}rP)h}rQ)h]rR)jK)asssuU phidgets_imurS)}rT)(h}rU)h}rV)h]rW)Uros/jade/phidgets_driversrX)assh ˆh }rY)(h}rZ)h}r[)h]r\)Uros-jade-phidgets-imur])assh}r^)h}r_)h]r`)j])assuh}ra)h}rb)h}rc)h]rd)j])asssuU lpg_plannerre)}rf)(h}rg)h}rh)h]ri)Uros/jade/jsk_3rdpartyrj)assh ˆh }rk)(h}rl)h}rm)h]rn)Uros-jade-lpg-plannerro)assh}rp)h}rq)h]rr)jo)assuh}rs)h}rt)h}ru)h]rv)jo)asssuU grid_map_rosrw)}rx)(h}ry)h}rz)h]r{)Uros/jade/grid_mapr|)assh ˆh }r})(h}r~)h}r)h]r€)Uros-jade-grid-map-rosr)assh}r‚)h}rƒ)h]r„)j)assuh}r…)h}r†)h}r‡)h]rˆ)j)asssuUclear_costmap_recoveryr‰)}rŠ)(h}r‹)h}rŒ)h]r)Uros/jade/navigationrŽ)assh ˆh }r)(h}r)h}r‘)h]r’)Uros-jade-clear-costmap-recoveryr“)assh}r”)h}r•)h]r–)j“)assuh}r—)h}r˜)h}r™)h]rš)j“)asssuUhector_quadrotor_modelr›)}rœ)(h}r)h}rž)h]rŸ)Uros/jade/hector_quadrotorr )assh ˆh }r¡)(h}r¢)h}r£)h]r¤)Uros-jade-hector-quadrotor-modelr¥)assh}r¦)h}r§)h]r¨)j¥)assuh}r©)h}rª)h}r«)h]r¬)j¥)asssuUrosserial_xbeer­)}r®)(h}r¯)h}r°)h]r±)Uros/jade/rosserialr²)assh ˆh }r³)(h}r´)h}rµ)h]r¶)Uros-jade-rosserial-xbeer·)assh}r¸)h}r¹)h]rº)j·)assuh}r»)h}r¼)h}r½)h]r¾)j·)asssuUlaser_scan_publisher_tutorialr¿)}rÀ)(h}rÁ)h}rÂ)h]rÃ)Uros/jade/navigation_tutorialsrÄ)assh ˆh }rÅ)(h}rÆ)h}rÇ)h]rÈ)U&ros-jade-laser-scan-publisher-tutorialrÉ)assh}rÊ)h}rË)h]rÌ)jÉ)assuh}rÍ)h}rÎ)h}rÏ)h]rÐ)jÉ)asssuUfclrÑ)}rÒ)(h}rÓ)h}rÔ)h]rÕ)U ros/jade/fclrÖ)assh ˆh }r×)(h}rØ)h}rÙ)h]rÚ)U ros-jade-fclrÛ)assh}rÜ)h}rÝ)h]rÞ)jÛ)assuh}rß)h}rà)h}rá)h]râ)jÛ)asssuU flask_restfulrã)}rä)(h}rå)h}ræ)h]rç)Uros/jade/flask_restfulrè)assh ˆh }ré)(h}rê)h}rë)h]rì)Uros-jade-flask-restfulrí)assh}rî)h}rï)h]rð)jí)assuh}rñ)h}rò)h}ró)h]rô)jí)asssuU osg_markersrõ)}rö)(h}r÷)h}rø)h]rù)Uros/jade/visualization_osgrú)assh ˆh }rû)(h}rü)h}rý)h]rþ)Uros-jade-osg-markersrÿ)assh}r*h}r*h]r*jÿ)assuh}r*h}r*h}r*h]r*jÿ)asssuUrail_recognitionr*}r*(h}r *h}r *h]r *Uros/jade/rail_pick_and_placer *assh ˆh }r *(h}r*h}r*h]r*Uros-jade-rail-recognitionr*assh}r*h}r*h]r*j*assuh}r*h}r*h}r*h]r*j*asssuU compressed_depth_image_transportr*}r*(h}r*h}r*h]r*U ros/jade/image_transport_pluginsr*assh ˆh }r*(h}r *h}r!*h]r"*U)ros-jade-compressed-depth-image-transportr#*assh}r$*h}r%*h]r&*j#*assuh}r'*h}r(*h}r)*h]r**j#*asssuU scan_toolsr+*}r,*(h}r-*h}r.*h]r/*Uros/jade/scan_toolsr0*assh ˆh }r1*(h}r2*h}r3*h]r4*Uros-jade-scan-toolsr5*assh}r6*h}r7*h]r8*j5*assuh}r9*h}r:*h}r;*h]r<*j5*asssuUcollada_urdf_jsk_patchr=*}r>*(h}r?*h}r@*h]rA*Uros/jade/jsk_3rdpartyrB*assh ˆh }rC*(h}rD*h}rE*h]rF*Uros-jade-collada-urdf-jsk-patchrG*assh}rH*h}rI*h]rJ*jG*assuh}rK*h}rL*h}rM*h]rN*jG*asssuUmarti_data_structuresrO*}rP*(h}rQ*h}rR*h]rS*Uros/jade/marti_commonrT*assh ˆh }rU*(h}rV*h}rW*h]rX*Uros-jade-marti-data-structuresrY*assh}rZ*h}r[*h]r\*jY*assuh}r]*h}r^*h}r_*h]r`*jY*asssuU carl_estopra*}rb*(h}rc*h}rd*h]re*Uros/jade/carl_estoprf*assh ˆh }rg*(h}rh*h}ri*h]rj*Uros-jade-carl-estoprk*assh}rl*h}rm*h]rn*jk*assuh}ro*h}rp*h}rq*h]rr*jk*asssuUjsk_rqt_pluginsrs*}rt*(h}ru*h}rv*h]rw*Uros/jade/jsk_visualizationrx*assh ˆh }ry*(h}rz*h}r{*h]r|*Uros-jade-jsk-rqt-pluginsr}*assh}r~*h}r*h]r€*j}*assuh}r*h}r‚*h}rƒ*h]r„*j}*asssuUhector_nav_msgsr…*}r†*(h}r‡*h}rˆ*h]r‰*Uros/jade/hector_slamrŠ*assh ˆh }r‹*(h}rŒ*h}r*h]rŽ*Uros-jade-hector-nav-msgsr*assh}r*h}r‘*h]r’*j*assuh}r“*h}r”*h}r•*h]r–*j*asssuUros_controllersr—*}r˜*(h}r™*h}rš*h]r›*Uros/jade/ros_controllersrœ*assh ˆh }r*(h}rž*h}rŸ*h]r *Uros-jade-ros-controllersr¡*assh}r¢*h}r£*h]r¤*j¡*assuh}r¥*h}r¦*h}r§*h]r¨*j¡*asssuUrosserial_msgsr©*}rª*(h}r«*h}r¬*h]r­*Uros/jade/rosserialr®*assh ˆh }r¯*(h}r°*h}r±*h]r²*Uros-jade-rosserial-msgsr³*assh}r´*h}rµ*h]r¶*j³*assuh}r·*h}r¸*h}r¹*h]rº*j³*asssuUurdf_parser_pluginr»*}r¼*(h}r½*h}r¾*h]r¿*Uros/jade/robot_modelrÀ*assh ˆh }rÁ*(h}rÂ*h}rÃ*h]rÄ*Uros-jade-urdf-parser-pluginrÅ*assh}rÆ*h}rÇ*h]rÈ*jÅ*assuh}rÉ*h}rÊ*h}rË*h]rÌ*jÅ*asssuU diagnosticsrÍ*}rÎ*(h}rÏ*h}rÐ*h]rÑ*Uros/jade/diagnosticsrÒ*assh ˆh }rÓ*(h}rÔ*h}rÕ*h]rÖ*Uros-jade-diagnosticsr×*assh}rØ*h}rÙ*h]rÚ*j×*assuh}rÛ*h}rÜ*h}rÝ*h]rÞ*j×*asssuU rtsprofilerß*}rà*(h}rá*h}râ*h]rã*Uros/jade/rtsprofilerä*assh ˆh }rå*(h}ræ*h}rç*h]rè*Uros-jade-rtsprofileré*assh}rê*h}rë*h]rì*jé*assuh}rí*h}rî*h}rï*h]rð*jé*asssuU orocos_kdlrñ*}rò*(h}ró*h}rô*h]rõ*U#ros/jade/orocos_kinematics_dynamicsrö*assh ˆh }r÷*(h}rø*h}rù*h]rú*Uros-jade-orocos-kdlrû*assh}rü*h}rý*h]rþ*jû*assuh}rÿ*h}r+h}r+h]r+jû*asssuUhector_components_descriptionr+}r+(h}r+h}r+h]r+Uros/jade/hector_modelsr+assh ˆh }r +(h}r +h}r +h]r +U&ros-jade-hector-components-descriptionr +assh}r+h}r+h]r+j +assuh}r+h}r+h}r+h]r+j +asssuUrosbag_migration_ruler+}r+(h}r+h}r+h]r+Uros/jade/rosbag_migration_ruler+assh ˆh }r+(h}r+h}r+h]r+Uros-jade-rosbag-migration-ruler+assh}r +h}r!+h]r"+j+assuh}r#+h}r$+h}r%+h]r&+j+asssuU jpeg_streamerr'+}r(+(h}r)+h}r*+h]r++Uros/jade/camera_umdr,+assh ˆh }r-+(h}r.+h}r/+h]r0+Uros-jade-jpeg-streamerr1+assh}r2+h}r3+h]r4+j1+assuh}r5+h}r6+h}r7+h]r8+j1+asssuU imagesiftr9+}r:+(h}r;+h}r<+h]r=+Uros/jade/jsk_recognitionr>+assh ˆh }r?+(h}r@+h}rA+h]rB+Uros-jade-imagesiftrC+assh}rD+h}rE+h]rF+jC+assuh}rG+h}rH+h}rI+h]rJ+jC+asssuUivconrK+}rL+(h}rM+h}rN+h]rO+Uros/jade/ivconrP+assh ˆh }rQ+(h}rR+h}rS+h]rT+Uros-jade-ivconrU+assh}rV+h}rW+h]rX+jU+assuh}rY+h}rZ+h}r[+h]r\+jU+asssuUusb_camr]+}r^+(h}r_+h}r`+h]ra+Uros/jade/usb_camrb+assh ˆh }rc+(h}rd+h}re+h]rf+Uros-jade-usb-camrg+assh}rh+h}ri+h]rj+jg+assuh}rk+h}rl+h}rm+h]rn+jg+asssuUrviz_visual_toolsro+}rp+(h}rq+h}rr+h]rs+Uros/jade/rviz_visual_toolsrt+assh ˆh }ru+(h}rv+h}rw+h]rx+Uros-jade-rviz-visual-toolsry+assh}rz+h}r{+h]r|+jy+assuh}r}+h}r~+h}r+h]r€+jy+asssuUroshr+}r‚+(h}rƒ+h}r„+h]r…+Uros/jade/rosh_corer†+assh ˆh }r‡+(h}rˆ+h}r‰+h]rŠ+U ros-jade-roshr‹+assh}rŒ+h}r+h]rŽ+j‹+assuh}r+h}r+h}r‘+h]r’+j‹+asssuUsimple_graspingr“+}r”+(h}r•+h}r–+h]r—+Uros/jade/simple_graspingr˜+assh ˆh }r™+(h}rš+h}r›+h]rœ+Uros-jade-simple-graspingr+assh}rž+h}rŸ+h]r +j+assuh}r¡+h}r¢+h}r£+h]r¤+j+asssuUcarrot_plannerr¥+}r¦+(h}r§+h}r¨+h]r©+Uros/jade/navigationrª+assh ˆh }r«+(h}r¬+h}r­+h]r®+Uros-jade-carrot-plannerr¯+assh}r°+h}r±+h]r²+j¯+assuh}r³+h}r´+h}rµ+h]r¶+j¯+asssuUmultirobot_map_merger·+}r¸+(h}r¹+h}rº+h]r»+Uros/jade/m_explorer¼+assh ˆh }r½+(h}r¾+h}r¿+h]rÀ+Uros-jade-multirobot-map-mergerÁ+assh}rÂ+h}rÃ+h]rÄ+jÁ+assuh}rÅ+h}rÆ+h}rÇ+h]rÈ+jÁ+asssuUrobot_calibrationrÉ+}rÊ+(h}rË+h}rÌ+h]rÍ+Uros/jade/robot_calibrationrÎ+assh ˆh }rÏ+(h}rÐ+h}rÑ+h]rÒ+Uros-jade-robot-calibrationrÓ+assh}rÔ+h}rÕ+h]rÖ+jÓ+assuh}r×+h}rØ+h}rÙ+h]rÚ+jÓ+asssuU osg_utilsrÛ+}rÜ+(h}rÝ+h}rÞ+h]rß+Uros/jade/visualization_osgrà+assh ˆh }rá+(h}râ+h}rã+h]rä+Uros-jade-osg-utilsrå+assh}ræ+h}rç+h]rè+jå+assuh}ré+h}rê+h}rë+h]rì+jå+asssuUswri_prefix_toolsrí+}rî+(h}rï+h}rð+h]rñ+Uros/jade/marti_commonrò+assh ˆh }ró+(h}rô+h}rõ+h]rö+Uros-jade-swri-prefix-toolsr÷+assh}rø+h}rù+h]rú+j÷+assuh}rû+h}rü+h}rý+h]rþ+j÷+asssuUnodelet_topic_toolsrÿ+}r,(h}r,h}r,h]r,Uros/jade/nodelet_corer,assh ˆh }r,(h}r,h}r,h]r,Uros-jade-nodelet-topic-toolsr ,assh}r ,h}r ,h]r ,j ,assuh}r ,h}r,h}r,h]r,j ,asssuUrttr,}r,(h}r,h}r,h]r,U ros/jade/rttr,assh ˆh }r,(h}r,h}r,h]r,U ros-jade-rttr,assh}r,h}r,h]r,j,assuh}r,h}r ,h}r!,h]r",j,asssuU rtt_rospackr#,}r$,(h}r%,h}r&,h]r',Uros/jade/rtt_ros_integrationr(,assh ˆh }r),(h}r*,h}r+,h]r,,Uros-jade-rtt-rospackr-,assh}r.,h}r/,h]r0,j-,assuh}r1,h}r2,h}r3,h]r4,j-,asssuUnodelet_tutorial_mathr5,}r6,(h}r7,h}r8,h]r9,Uros/jade/common_tutorialsr:,assh ˆh }r;,(h}r<,h}r=,h]r>,Uros-jade-nodelet-tutorial-mathr?,assh}r@,h}rA,h]rB,j?,assuh}rC,h}rD,h}rE,h]rF,j?,asssuU naoqi_appsrG,}rH,(h}rI,h}rJ,h]rK,Uros/jade/naoqi_bridgerL,assh ˆh }rM,(h}rN,h}rO,h]rP,Uros-jade-naoqi-appsrQ,assh}rR,h}rS,h]rT,jQ,assuh}rU,h}rV,h}rW,h]rX,jQ,asssuUschunk_grippersrY,}rZ,(h}r[,h}r\,h]r],Uros/jade/schunk_grippersr^,assh ˆh }r_,(h}r`,h}ra,h]rb,Uros-jade-schunk-grippersrc,assh}rd,h}re,h]rf,jc,assuh}rg,h}rh,h}ri,h]rj,jc,asssuUopenni2_launchrk,}rl,(h}rm,h}rn,h]ro,Uros/jade/openni2_launchrp,assh ˆh }rq,(h}rr,h}rs,h]rt,Uros-jade-openni2-launchru,assh}rv,h}rw,h]rx,ju,assuh}ry,h}rz,h}r{,h]r|,ju,asssuUswri_transform_utilr},}r~,(h}r,h}r€,h]r,Uros/jade/marti_commonr‚,assh ˆh }rƒ,(h}r„,h}r…,h]r†,Uros-jade-swri-transform-utilr‡,assh}rˆ,h}r‰,h]rŠ,j‡,assuh}r‹,h}rŒ,h}r,h]rŽ,j‡,asssuUjoystick_driversr,}r,(h}r‘,h}r’,h]r“,Uros/jade/joystick_driversr”,assh ˆh }r•,(h}r–,h}r—,h]r˜,Uros-jade-joystick-driversr™,assh}rš,h}r›,h]rœ,j™,assuh}r,h}rž,h}rŸ,h]r ,j™,asssuUecl_exceptionsr¡,}r¢,(h}r£,h}r¤,h]r¥,Uros/jade/ecl_corer¦,assh ˆh }r§,(h}r¨,h}r©,h]rª,Uros-jade-ecl-exceptionsr«,assh}r¬,h}r­,h]r®,j«,assuh}r¯,h}r°,h}r±,h]r²,j«,asssuU fetch_teleopr³,}r´,(h}rµ,h}r¶,h]r·,Uros/jade/fetch_rosr¸,assh ˆh }r¹,(h}rº,h}r»,h]r¼,Uros-jade-fetch-teleopr½,assh}r¾,h}r¿,h]rÀ,j½,assuh}rÁ,h}rÂ,h}rÃ,h]rÄ,j½,asssuUsplit_sequencerÅ,}rÆ,(h}rÇ,h}rÈ,h]rÉ,Uros/jade/cram_3rdpartyrÊ,assh ˆh }rË,(h}rÌ,h}rÍ,h]rÎ,Uros-jade-split-sequencerÏ,assh}rÐ,h}rÑ,h]rÒ,jÏ,assuh}rÓ,h}rÔ,h}rÕ,h]rÖ,jÏ,asssuUteleop_tools_msgsr×,}rØ,(h}rÙ,h}rÚ,h]rÛ,Uros/jade/teleop_toolsrÜ,assh ˆh }rÝ,(h}rÞ,h}rß,h]rà,Uros-jade-teleop-tools-msgsrá,assh}râ,h}rã,h]rä,já,assuh}rå,h}ræ,h}rç,h]rè,já,asssuUlaser_cb_detectorré,}rê,(h}rë,h}rì,h]rí,Uros/jade/calibrationrî,assh ˆh }rï,(h}rð,h}rñ,h]rò,Uros-jade-laser-cb-detectorró,assh}rô,h}rõ,h]rö,jó,assuh}r÷,h}rø,h}rù,h]rú,jó,asssuUwebargsrû,}rü,(h}rý,h}rþ,h]rÿ,Uros/jade/webargsr-assh ˆh }r-(h}r-h}r-h]r-Uros-jade-webargsr-assh}r-h}r-h]r-j-assuh}r -h}r -h}r -h]r -j-asssuUrqt_reconfigurer -}r-(h}r-h}r-h]r-Uros/jade/rqt_reconfigurer-assh ˆh }r-(h}r-h}r-h]r-Uros-jade-rqt-reconfigurer-assh}r-h}r-h]r-j-assuh}r-h}r-h}r-h]r-j-asssuUobject_recognition_msgsr-}r -(h}r!-h}r"-h]r#-U ros/jade/object_recognition_msgsr$-assh ˆh }r%-(h}r&-h}r'-h]r(-U ros-jade-object-recognition-msgsr)-assh}r*-h}r+-h]r,-j)-assuh}r--h}r.-h}r/-h]r0-j)-asssuUhector_xacro_toolsr1-}r2-(h}r3-h}r4-h]r5-Uros/jade/hector_modelsr6-assh ˆh }r7-(h}r8-h}r9-h]r:-Uros-jade-hector-xacro-toolsr;-assh}r<-h}r=-h]r>-j;-assuh}r?-h}r@-h}rA-h]rB-j;-asssuU face_detectorrC-}rD-(h}rE-h}rF-h]rG-Uros/jade/peoplerH-assh ˆh }rI-(h}rJ-h}rK-h]rL-Uros-jade-face-detectorrM-assh}rN-h}rO-h]rP-jM-assuh}rQ-h}rR-h}rS-h]rT-jM-asssuUcontroller_manager_msgsrU-}rV-(h}rW-h}rX-h]rY-Uros/jade/ros_controlrZ-assh ˆh }r[-(h}r\-h}r]-h]r^-U ros-jade-controller-manager-msgsr_-assh}r`-h}ra-h]rb-j_-assuh}rc-h}rd-h}re-h]rf-j_-asssuUroslibrg-}rh-(h}ri-h}rj-h]rk-U ros/jade/rosrl-assh ˆh }rm-(h}rn-h}ro-h]rp-Uros-jade-roslibrq-assh}rr-h}rs-h]rt-jq-assuh}ru-h}rv-h}rw-h]rx-jq-asssuUgeneusry-}rz-(h}r{-h}r|-h]r}-Uros/jade/geneusr~-assh ˆh }r-(h}r€-h}r-h]r‚-Uros-jade-geneusrƒ-assh}r„-h}r…-h]r†-jƒ-assuh}r‡-h}rˆ-h}r‰-h]rŠ-jƒ-asssuUimage_pipeliner‹-}rŒ-(h}r-h}rŽ-h]r-Uros/jade/image_pipeliner-assh ˆh }r‘-(h}r’-h}r“-h]r”-Uros-jade-image-pipeliner•-assh}r–-h}r—-h]r˜-j•-assuh}r™-h}rš-h}r›-h]rœ-j•-asssuUbflr-}rž-(h}rŸ-h}r -h]r¡-U ros/jade/bflr¢-assh ˆh }r£-(h}r¤-h}r¥-h]r¦-U ros-jade-bflr§-assh}r¨-h}r©-h]rª-j§-assuh}r«-h}r¬-h}r­-h]r®-j§-asssuU ecto_opencvr¯-}r°-(h}r±-h}r²-h]r³-Uros/jade/ecto_opencvr´-assh ˆh }rµ-(h}r¶-h}r·-h]r¸-Uros-jade-ecto-opencvr¹-assh}rº-h}r»-h]r¼-j¹-assuh}r½-h}r¾-h}r¿-h]rÀ-j¹-asssuUdiagnostic_common_diagnosticsrÁ-}rÂ-(h}rÃ-h}rÄ-h]rÅ-Uros/jade/diagnosticsrÆ-assh ˆh }rÇ-(h}rÈ-h}rÉ-h]rÊ-U&ros-jade-diagnostic-common-diagnosticsrË-assh}rÌ-h}rÍ-h]rÎ-jË-assuh}rÏ-h}rÐ-h}rÑ-h]rÒ-jË-asssuU image_view2rÓ-}rÔ-(h}rÕ-h}rÖ-h]r×-Uros/jade/jsk_commonrØ-assh ˆh }rÙ-(h}rÚ-h}rÛ-h]rÜ-Uros-jade-image-view2rÝ-assh}rÞ-h}rß-h]rà-jÝ-assuh}rá-h}râ-h}rã-h]rä-jÝ-asssuUconvex_decompositionrå-}ræ-(h}rç-h}rè-h]ré-Uros/jade/convex_decompositionrê-assh ˆh }rë-(h}rì-h}rí-h]rî-Uros-jade-convex-decompositionrï-assh}rð-h}rñ-h]rò-jï-assuh}ró-h}rô-h}rõ-h]rö-jï-asssuUroswtfr÷-}rø-(h}rù-h}rú-h]rû-Uros/jade/ros_commrü-assh ˆh }rý-(h}rþ-h}rÿ-h]r.Uros-jade-roswtfr.assh}r.h}r.h]r.j.assuh}r.h}r.h}r.h]r.j.asssuUhector_uav_msgsr .}r .(h}r .h}r .h]r .Uros/jade/hector_quadrotorr.assh ˆh }r.(h}r.h}r.h]r.Uros-jade-hector-uav-msgsr.assh}r.h}r.h]r.j.assuh}r.h}r.h}r.h]r.j.asssuUpoint_cloud_publisher_tutorialr.}r.(h}r.h}r.h]r.Uros/jade/navigation_tutorialsr .assh ˆh }r!.(h}r".h}r#.h]r$.U'ros-jade-point-cloud-publisher-tutorialr%.assh}r&.h}r'.h]r(.j%.assuh}r).h}r*.h}r+.h]r,.j%.asssuU eus_nloptr-.}r..(h}r/.h}r0.h]r1.Uros/jade/jsk_controlr2.assh ˆh }r3.(h}r4.h}r5.h]r6.Uros-jade-eus-nloptr7.assh}r8.h}r9.h]r:.j7.assuh}r;.h}r<.h}r=.h]r>.j7.asssuU map_serverr?.}r@.(h}rA.h}rB.h]rC.Uros/jade/navigationrD.assh ˆh }rE.(h}rF.h}rG.h]rH.Uros-jade-map-serverrI.assh}rJ.h}rK.h]rL.jI.assuh}rM.h}rN.h}rO.h]rP.jI.asssuUroslisp_commonrQ.}rR.(h}rS.h}rT.h]rU.Uros/jade/roslisp_commonrV.assh ˆh }rW.(h}rX.h}rY.h]rZ.Uros-jade-roslisp-commonr[.assh}r\.h}r].h]r^.j[.assuh}r_.h}r`.h}ra.h]rb.j[.asssuUecl_containersrc.}rd.(h}re.h}rf.h]rg.Uros/jade/ecl_corerh.assh ˆh }ri.(h}rj.h}rk.h]rl.Uros-jade-ecl-containersrm.assh}rn.h}ro.h]rp.jm.assuh}rq.h}rr.h}rs.h]rt.jm.asssuUresized_image_transportru.}rv.(h}rw.h}rx.h]ry.Uros/jade/jsk_recognitionrz.assh ˆh }r{.(h}r|.h}r}.h]r~.U ros-jade-resized-image-transportr.assh}r€.h}r.h]r‚.j.assuh}rƒ.h}r„.h}r….h]r†.j.asssuU smach_msgsr‡.}rˆ.(h}r‰.h}rŠ.h]r‹.Uros/jade/executive_smachrŒ.assh ˆh }r.(h}rŽ.h}r.h]r.Uros-jade-smach-msgsr‘.assh}r’.h}r“.h]r”.j‘.assuh}r•.h}r–.h}r—.h]r˜.j‘.asssuUhector_slam_launchr™.}rš.(h}r›.h}rœ.h]r.Uros/jade/hector_slamrž.assh ˆh }rŸ.(h}r .h}r¡.h]r¢.Uros-jade-hector-slam-launchr£.assh}r¤.h}r¥.h]r¦.j£.assuh}r§.h}r¨.h}r©.h]rª.j£.asssuUrqt_py_consoler«.}r¬.(h}r­.h}r®.h]r¯.Uros/jade/rqt_py_consoler°.assh ˆh }r±.(h}r².h}r³.h]r´.Uros-jade-rqt-py-consolerµ.assh}r¶.h}r·.h]r¸.jµ.assuh}r¹.h}rº.h}r».h]r¼.jµ.asssuU pepper_meshesr½.}r¾.(h}r¿.h}rÀ.h]rÁ.Uros/jade/pepper_meshesrÂ.assh ˆh }rÃ.(h}rÄ.h}rÅ.h]rÆ.Uros-jade-pepper-meshesrÇ.assh}rÈ.h}rÉ.h]rÊ.jÇ.assuh}rË.h}rÌ.h}rÍ.h]rÎ.jÇ.asssuUteleop_twist_keyboardrÏ.}rÐ.(h}rÑ.h}rÒ.h]rÓ.Uros/jade/teleop_twist_keyboardrÔ.assh ˆh }rÕ.(h}rÖ.h}r×.h]rØ.Uros-jade-teleop-twist-keyboardrÙ.assh}rÚ.h}rÛ.h]rÜ.jÙ.assuh}rÝ.h}rÞ.h}rß.h]rà.jÙ.asssuUimage_transport_pluginsrá.}râ.(h}rã.h}rä.h]rå.U ros/jade/image_transport_pluginsræ.assh ˆh }rç.(h}rè.h}ré.h]rê.U ros-jade-image-transport-pluginsrë.assh}rì.h}rí.h]rî.jë.assuh}rï.h}rð.h}rñ.h]rò.jë.asssuU&object_recognition_transparent_objectsró.}rô.(h}rõ.h}rö.h]r÷.U/ros/jade/object_recognition_transparent_objectsrø.assh ˆh }rù.(h}rú.h}rû.h]rü.U/ros-jade-object-recognition-transparent-objectsrý.assh}rþ.h}rÿ.h]r/jý.assuh}r/h}r/h}r/h]r/jý.asssuUnav_pcontrollerr/}r/(h}r/h}r/h]r /Uros/jade/nav_pcontrollerr /assh ˆh }r /(h}r /h}r /h]r/Uros-jade-nav-pcontrollerr/assh}r/h}r/h]r/j/assuh}r/h}r/h}r/h]r/j/asssuUrandom_numbersr/}r/(h}r/h}r/h]r/Uros/jade/random_numbersr/assh ˆh }r/(h}r/h}r/h]r /Uros-jade-random-numbersr!/assh}r"/h}r#/h]r$/j!/assuh}r%/h}r&/h}r'/h]r(/j!/asssuUrqt_rvizr)/}r*/(h}r+/h}r,/h]r-/Uros/jade/rqt_rvizr./assh ˆh }r//(h}r0/h}r1/h]r2/Uros-jade-rqt-rvizr3/assh}r4/h}r5/h]r6/j3/assuh}r7/h}r8/h}r9/h]r:/j3/asssuUlog4cppr;/}r/h]r?/Uros/jade/log4cppr@/assh ˆh }rA/(h}rB/h}rC/h]rD/Uros-jade-log4cpprE/assh}rF/h}rG/h]rH/jE/assuh}rI/h}rJ/h}rK/h]rL/jE/asssuUtrivial_featuresrM/}rN/(h}rO/h}rP/h]rQ/Uros/jade/cram_3rdpartyrR/assh ˆh }rS/(h}rT/h}rU/h]rV/Uros-jade-trivial-featuresrW/assh}rX/h}rY/h]rZ/jW/assuh}r[/h}r\/h}r]/h]r^/jW/asssuU rosgraph_msgsr_/}r`/(h}ra/h}rb/h]rc/Uros/jade/ros_comm_msgsrd/assh ˆh }re/(h}rf/h}rg/h]rh/Uros-jade-rosgraph-msgsri/assh}rj/h}rk/h]rl/ji/assuh}rm/h}rn/h}ro/h]rp/ji/asssuUecl_mplrq/}rr/(h}rs/h}rt/h]ru/Uros/jade/ecl_corerv/assh ˆh }rw/(h}rx/h}ry/h]rz/Uros-jade-ecl-mplr{/assh}r|/h}r}/h]r~/j{/assuh}r/h}r€/h}r/h]r‚/j{/asssuUecl_manipulatorsrƒ/}r„/(h}r…/h}r†/h]r‡/Uros/jade/ecl_manipulationrˆ/assh ˆh }r‰/(h}rŠ/h}r‹/h]rŒ/Uros-jade-ecl-manipulatorsr/assh}rŽ/h}r/h]r/j/assuh}r‘/h}r’/h}r“/h]r”/j/asssuUecto_pclr•/}r–/(h}r—/h}r˜/h]r™/Uros/jade/ecto_pclrš/assh ˆh }r›/(h}rœ/h}r/h]rž/Uros-jade-ecto-pclrŸ/assh}r /h}r¡/h]r¢/jŸ/assuh}r£/h}r¤/h}r¥/h]r¦/jŸ/asssuUrqt_msgr§/}r¨/(h}r©/h}rª/h]r«/Uros/jade/rqt_msgr¬/assh ˆh }r­/(h}r®/h}r¯/h]r°/Uros-jade-rqt-msgr±/assh}r²/h}r³/h]r´/j±/assuh}rµ/h}r¶/h}r·/h]r¸/j±/asssuU nao_extrasr¹/}rº/(h}r»/h}r¼/h]r½/Uros/jade/nao_extrasr¾/assh ˆh }r¿/(h}rÀ/h}rÁ/h]rÂ/Uros-jade-nao-extrasrÃ/assh}rÄ/h}rÅ/h]rÆ/jÃ/assuh}rÇ/h}rÈ/h}rÉ/h]rÊ/jÃ/asssuU schunk_pg70rË/}rÌ/(h}rÍ/h}rÎ/h]rÏ/Uros/jade/schunk_grippersrÐ/assh ˆh }rÑ/(h}rÒ/h}rÓ/h]rÔ/Uros-jade-schunk-pg70rÕ/assh}rÖ/h}r×/h]rØ/jÕ/assuh}rÙ/h}rÚ/h}rÛ/h]rÜ/jÕ/asssuU rtt_actionlibrÝ/}rÞ/(h}rß/h}rà/h]rá/Uros/jade/rtt_ros_integrationrâ/assh ˆh }rã/(h}rä/h}rå/h]ræ/Uros-jade-rtt-actionlibrç/assh}rè/h}ré/h]rê/jç/assuh}rë/h}rì/h}rí/h]rî/jç/asssuU libsiftfastrï/}rð/(h}rñ/h}rò/h]ró/Uros/jade/jsk_3rdpartyrô/assh ˆh }rõ/(h}rö/h}r÷/h]rø/Uros-jade-libsiftfastrù/assh}rú/h}rû/h]rü/jù/assuh}rý/h}rþ/h}rÿ/h]r0jù/asssuUar_track_alvarr0}r0(h}r0h}r0h]r0Uros/jade/ar_track_alvarr0assh ˆh }r0(h}r0h}r 0h]r 0Uros-jade-ar-track-alvarr 0assh}r 0h}r 0h]r0j 0assuh}r0h}r0h}r0h]r0j 0asssuUrobot_controllers_interfacer0}r0(h}r0h}r0h]r0Uros/jade/robot_controllersr0assh ˆh }r0(h}r0h}r0h]r0U$ros-jade-robot-controllers-interfacer0assh}r0h}r0h]r 0j0assuh}r!0h}r"0h}r#0h]r$0j0asssuUmanipulation_msgsr%0}r&0(h}r'0h}r(0h]r)0Uros/jade/manipulation_msgsr*0assh ˆh }r+0(h}r,0h}r-0h]r.0Uros-jade-manipulation-msgsr/0assh}r00h}r10h]r20j/0assuh}r30h}r40h}r50h]r60j/0asssuUswri_console_utilr70}r80(h}r90h}r:0h]r;0Uros/jade/marti_commonr<0assh ˆh }r=0(h}r>0h}r?0h]r@0Uros-jade-swri-console-utilrA0assh}rB0h}rC0h]rD0jA0assuh}rE0h}rF0h}rG0h]rH0jA0asssuUjsk_perceptionrI0}rJ0(h}rK0h}rL0h]rM0Uros/jade/jsk_recognitionrN0assh ˆh }rO0(h}rP0h}rQ0h]rR0Uros-jade-jsk-perceptionrS0assh}rT0h}rU0h]rV0jS0assuh}rW0h}rX0h}rY0h]rZ0jS0asssuUmaster_discovery_fkier[0}r\0(h}r]0h}r^0h]r_0Uros/jade/multimaster_fkier`0assh ˆh }ra0(h}rb0h}rc0h]rd0Uros-jade-master-discovery-fkiere0assh}rf0h}rg0h]rh0je0assuh}ri0h}rj0h}rk0h]rl0je0asssuUrosnoderm0}rn0(h}ro0h}rp0h]rq0Uros/jade/ros_commrr0assh ˆh }rs0(h}rt0h}ru0h]rv0Uros-jade-rosnoderw0assh}rx0h}ry0h]rz0jw0assuh}r{0h}r|0h}r}0h]r~0jw0asssuU rospeex_ifr0}r€0(h}r0h}r‚0h]rƒ0Uros/jade/rospeexr„0assh ˆh }r…0(h}r†0h}r‡0h]rˆ0Uros-jade-rospeex-ifr‰0assh}rŠ0h}r‹0h]rŒ0j‰0assuh}r0h}rŽ0h}r0h]r0j‰0asssuU openrtm_toolsr‘0}r’0(h}r“0h}r”0h]r•0Uros/jade/rtmros_commonr–0assh ˆh }r—0(h}r˜0h}r™0h]rš0Uros-jade-openrtm-toolsr›0assh}rœ0h}r0h]rž0j›0assuh}rŸ0h}r 0h}r¡0h]r¢0j›0asssuUhector_worldmodelr£0}r¤0(h}r¥0h}r¦0h]r§0Uros/jade/hector_worldmodelr¨0assh ˆh }r©0(h}rª0h}r«0h]r¬0Uros-jade-hector-worldmodelr­0assh}r®0h}r¯0h]r°0j­0assuh}r±0h}r²0h}r³0h]r´0j­0asssuUobject_recognition_rosrµ0}r¶0(h}r·0h}r¸0h]r¹0Uros/jade/object_recognition_rosrº0assh ˆh }r»0(h}r¼0h}r½0h]r¾0Uros-jade-object-recognition-rosr¿0assh}rÀ0h}rÁ0h]rÂ0j¿0assuh}rÃ0h}rÄ0h}rÅ0h]rÆ0j¿0asssuUbackports_ssl_match_hostnamerÇ0}rÈ0(h}rÉ0h}rÊ0h]rË0U%ros/jade/backports_ssl_match_hostnamerÌ0assh ˆh }rÍ0(h}rÎ0h}rÏ0h]rÐ0U%ros-jade-backports-ssl-match-hostnamerÑ0assh}rÒ0h}rÓ0h]rÔ0jÑ0assuh}rÕ0h}rÖ0h}r×0h]rØ0jÑ0asssuU ecl_conceptsrÙ0}rÚ0(h}rÛ0h}rÜ0h]rÝ0Uros/jade/ecl_corerÞ0assh ˆh }rß0(h}rà0h}rá0h]râ0Uros-jade-ecl-conceptsrã0assh}rä0h}rå0h]ræ0jã0assuh}rç0h}rè0h}ré0h]rê0jã0asssuUpidrë0}rì0(h}rí0h}rî0h]rï0U ros/jade/pidrð0assh ˆh }rñ0(h}rò0h}ró0h]rô0U ros-jade-pidrõ0assh}rö0h}r÷0h]rø0jõ0assuh}rù0h}rú0h}rû0h]rü0jõ0asssuUkeyboardrý0}rþ0(h}rÿ0h}r1h]r1Uros/jade/keyboardr1assh ˆh }r1(h}r1h}r1h]r1Uros-jade-keyboardr1assh}r1h}r 1h]r 1j1assuh}r 1h}r 1h}r 1h]r1j1asssuUnmea_navsat_driverr1}r1(h}r1h}r1h]r1Uros/jade/nmea_navsat_driverr1assh ˆh }r1(h}r1h}r1h]r1Uros-jade-nmea-navsat-driverr1assh}r1h}r1h]r1j1assuh}r1h}r1h}r1h]r 1j1asssuUgencppr!1}r"1(h}r#1h}r$1h]r%1Uros/jade/gencppr&1assh ˆh }r'1(h}r(1h}r)1h]r*1Uros-jade-gencppr+1assh}r,1h}r-1h]r.1j+1assuh}r/1h}r01h}r11h]r21j+1asssuUhector_quadrotor_teleopr31}r41(h}r51h}r61h]r71Uros/jade/hector_quadrotorr81assh ˆh }r91(h}r:1h}r;1h]r<1U ros-jade-hector-quadrotor-teleopr=1assh}r>1h}r?1h]r@1j=1assuh}rA1h}rB1h}rC1h]rD1j=1asssuUmoveit_ros_warehouserE1}rF1(h}rG1h}rH1h]rI1Uros/jade/moveitrJ1assh ˆh }rK1(h}rL1h}rM1h]rN1Uros-jade-moveit-ros-warehouserO1assh}rP1h}rQ1h]rR1jO1assuh}rS1h}rT1h}rU1h]rV1jO1asssuUecl_filesystemrW1}rX1(h}rY1h}rZ1h]r[1Uros/jade/ecl_corer\1assh ˆh }r]1(h}r^1h}r_1h]r`1Uros-jade-ecl-filesystemra1assh}rb1h}rc1h]rd1ja1assuh}re1h}rf1h}rg1h]rh1ja1asssuUglobal_plannerri1}rj1(h}rk1h}rl1h]rm1Uros/jade/navigationrn1assh ˆh }ro1(h}rp1h}rq1h]rr1Uros-jade-global-plannerrs1assh}rt1h}ru1h]rv1js1assuh}rw1h}rx1h}ry1h]rz1js1asssuUjsk_teleop_joyr{1}r|1(h}r}1h}r~1h]r1Uros/jade/jsk_controlr€1assh ˆh }r1(h}r‚1h}rƒ1h]r„1Uros-jade-jsk-teleop-joyr…1assh}r†1h}r‡1h]rˆ1j…1assuh}r‰1h}rŠ1h}r‹1h]rŒ1j…1asssuUtest_diagnostic_aggregatorr1}rŽ1(h}r1h}r1h]r‘1Uros/jade/diagnosticsr’1assh ˆh }r“1(h}r”1h}r•1h]r–1U#ros-jade-test-diagnostic-aggregatorr—1assh}r˜1h}r™1h]rš1j—1assuh}r›1h}rœ1h}r1h]rž1j—1asssuU naoqi_driverrŸ1}r 1(h}r¡1h}r¢1h]r£1Uros/jade/naoqi_driverr¤1assh ˆh }r¥1(h}r¦1h}r§1h]r¨1Uros-jade-naoqi-driverr©1assh}rª1h}r«1h]r¬1j©1assuh}r­1h}r®1h}r¯1h]r°1j©1asssuUoctovisr±1}r²1(h}r³1h}r´1h]rµ1Uros/jade/octomapr¶1assh ˆh }r·1(h}r¸1h}r¹1h]rº1Uros-jade-octovisr»1assh}r¼1h}r½1h]r¾1j»1assuh}r¿1h}rÀ1h}rÁ1h]rÂ1j»1asssuU joy_mouserÃ1}rÄ1(h}rÅ1h}rÆ1h]rÇ1Uros/jade/jsk_controlrÈ1assh ˆh }rÉ1(h}rÊ1h}rË1h]rÌ1Uros-jade-joy-mouserÍ1assh}rÎ1h}rÏ1h]rÐ1jÍ1assuh}rÑ1h}rÒ1h}rÓ1h]rÔ1jÍ1asssuUdepth_image_procrÕ1}rÖ1(h}r×1h}rØ1h]rÙ1Uros/jade/image_pipelinerÚ1assh ˆh }rÛ1(h}rÜ1h}rÝ1h]rÞ1Uros-jade-depth-image-procrß1assh}rà1h}rá1h]râ1jß1assuh}rã1h}rä1h}rå1h]ræ1jß1asssuU rostwitterrç1}rè1(h}ré1h}rê1h]rë1Uros/jade/jsk_3rdpartyrì1assh ˆh }rí1(h}rî1h}rï1h]rð1Uros-jade-rostwitterrñ1assh}rò1h}ró1h]rô1jñ1assuh}rõ1h}rö1h}r÷1h]rø1jñ1asssuU libuvc_camerarù1}rú1(h}rû1h}rü1h]rý1Uros/jade/libuvc_rosrþ1assh ˆh }rÿ1(h}r2h}r2h]r2Uros-jade-libuvc-camerar2assh}r2h}r2h]r2j2assuh}r2h}r2h}r 2h]r 2j2asssuU nao_bringupr 2}r 2(h}r 2h}r2h]r2Uros/jade/nao_robotr2assh ˆh }r2(h}r2h}r2h]r2Uros-jade-nao-bringupr2assh}r2h}r2h]r2j2assuh}r2h}r2h}r2h]r2j2asssuUpython_qt_bindingr2}r2(h}r2h}r 2h]r!2Uros/jade/python_qt_bindingr"2assh ˆh }r#2(h}r$2h}r%2h]r&2Uros-jade-python-qt-bindingr'2assh}r(2h}r)2h]r*2j'2assuh}r+2h}r,2h}r-2h]r.2j'2asssuUsingle_joint_position_actionr/2}r02(h}r12h}r22h]r32Uros/jade/pr2_controllersr42assh ˆh }r52(h}r62h}r72h]r82U%ros-jade-single-joint-position-actionr92assh}r:2h}r;2h]r<2j92assuh}r=2h}r>2h}r?2h]r@2j92asssuUmarti_perception_msgsrA2}rB2(h}rC2h}rD2h]rE2Uros/jade/marti_messagesrF2assh ˆh }rG2(h}rH2h}rI2h]rJ2Uros-jade-marti-perception-msgsrK2assh}rL2h}rM2h]rN2jK2assuh}rO2h}rP2h}rQ2h]rR2jK2asssuUnaoqi_sensors_pyrS2}rT2(h}rU2h}rV2h]rW2Uros/jade/naoqi_bridgerX2assh ˆh }rY2(h}rZ2h}r[2h]r\2Uros-jade-naoqi-sensors-pyr]2assh}r^2h}r_2h]r`2j]2assuh}ra2h}rb2h}rc2h]rd2j]2asssuU rqt_gui_cppre2}rf2(h}rg2h}rh2h]ri2U ros/jade/rqtrj2assh ˆh }rk2(h}rl2h}rm2h]rn2Uros-jade-rqt-gui-cppro2assh}rp2h}rq2h]rr2jo2assuh}rs2h}rt2h}ru2h]rv2jo2asssuUmaster_sync_fkierw2}rx2(h}ry2h}rz2h]r{2Uros/jade/multimaster_fkier|2assh ˆh }r}2(h}r~2h}r2h]r€2Uros-jade-master-sync-fkier2assh}r‚2h}rƒ2h]r„2j2assuh}r…2h}r†2h}r‡2h]rˆ2j2asssuUpyrosr‰2}rŠ2(h}r‹2h}rŒ2h]r2Uros/jade/pyrosrŽ2assh ˆh }r2(h}r2h}r‘2h]r’2Uros-jade-pyrosr“2assh}r”2h}r•2h]r–2j“2assuh}r—2h}r˜2h}r™2h]rš2j“2asssuU fzi_icl_corer›2}rœ2(h}r2h}rž2h]rŸ2Uros/jade/fzi_icl_corer 2assh ˆh }r¡2(h}r¢2h}r£2h]r¤2Uros-jade-fzi-icl-corer¥2assh}r¦2h}r§2h]r¨2j¥2assuh}r©2h}rª2h}r«2h]r¬2j¥2asssuU roscpp_traitsr­2}r®2(h}r¯2h}r°2h]r±2Uros/jade/roscpp_corer²2assh ˆh }r³2(h}r´2h}rµ2h]r¶2Uros-jade-roscpp-traitsr·2assh}r¸2h}r¹2h]rº2j·2assuh}r»2h}r¼2h}r½2h]r¾2j·2asssuU rtt_nav_msgsr¿2}rÀ2(h}rÁ2h}rÂ2h]rÃ2Uros/jade/rtt_ros_integrationrÄ2assh ˆh }rÅ2(h}rÆ2h}rÇ2h]rÈ2Uros-jade-rtt-nav-msgsrÉ2assh}rÊ2h}rË2h]rÌ2jÉ2assuh}rÍ2h}rÎ2h}rÏ2h]rÐ2jÉ2asssuUrtt_rosgraph_msgsrÑ2}rÒ2(h}rÓ2h}rÔ2h]rÕ2Uros/jade/rtt_ros_integrationrÖ2assh ˆh }r×2(h}rØ2h}rÙ2h]rÚ2Uros-jade-rtt-rosgraph-msgsrÛ2assh}rÜ2h}rÝ2h]rÞ2jÛ2assuh}rß2h}rà2h}rá2h]râ2jÛ2asssuU slime_rosrã2}rä2(h}rå2h}ræ2h]rç2Uros/jade/ros_emacs_utilsrè2assh ˆh }ré2(h}rê2h}rë2h]rì2Uros-jade-slime-rosrí2assh}rî2h}rï2h]rð2jí2assuh}rñ2h}rò2h}ró2h]rô2jí2asssuU jsk_controlrõ2}rö2(h}r÷2h}rø2h]rù2Uros/jade/jsk_controlrú2assh ˆh }rû2(h}rü2h}rý2h]rþ2Uros-jade-jsk-controlrÿ2assh}r3h}r3h]r3jÿ2assuh}r3h}r3h}r3h]r3jÿ2asssuUjoyr3}r3(h}r 3h}r 3h]r 3Uros/jade/joystick_driversr 3assh ˆh }r 3(h}r3h}r3h]r3U ros-jade-joyr3assh}r3h}r3h]r3j3assuh}r3h}r3h}r3h]r3j3asssuU visp_bridger3}r3(h}r3h}r3h]r3Uros/jade/vision_vispr3assh ˆh }r3(h}r 3h}r!3h]r"3Uros-jade-visp-bridger#3assh}r$3h}r%3h]r&3j#3assuh}r'3h}r(3h}r)3h]r*3j#3asssuUmultisense_descriptionr+3}r,3(h}r-3h}r.3h]r/3Uros/jade/multisense_rosr03assh ˆh }r13(h}r23h}r33h]r43Uros-jade-multisense-descriptionr53assh}r63h}r73h]r83j53assuh}r93h}r:3h}r;3h]r<3j53asssuU rtt_rosclockr=3}r>3(h}r?3h}r@3h]rA3Uros/jade/rtt_ros_integrationrB3assh ˆh }rC3(h}rD3h}rE3h]rF3Uros-jade-rtt-rosclockrG3assh}rH3h}rI3h]rJ3jG3assuh}rK3h}rL3h}rM3h]rN3jG3asssuUnao_path_followerrO3}rP3(h}rQ3h}rR3h]rS3Uros/jade/nao_extrasrT3assh ˆh }rU3(h}rV3h}rW3h]rX3Uros-jade-nao-path-followerrY3assh}rZ3h}r[3h]r\3jY3assuh}r]3h}r^3h}r_3h]r`3jY3asssuU image_commonra3}rb3(h}rc3h}rd3h]re3Uros/jade/image_commonrf3assh ˆh }rg3(h}rh3h}ri3h]rj3Uros-jade-image-commonrk3assh}rl3h}rm3h]rn3jk3assuh}ro3h}rp3h}rq3h]rr3jk3asssuUrtt_dynamic_reconfigurers3}rt3(h}ru3h}rv3h]rw3Uros/jade/rtt_ros_integrationrx3assh ˆh }ry3(h}rz3h}r{3h]r|3U ros-jade-rtt-dynamic-reconfigurer}3assh}r~3h}r3h]r€3j}3assuh}r3h}r‚3h}rƒ3h]r„3j}3asssuUpr2_mechanism_diagnosticsr…3}r†3(h}r‡3h}rˆ3h]r‰3Uros/jade/pr2_mechanismrŠ3assh ˆh }r‹3(h}rŒ3h}r3h]rŽ3U"ros-jade-pr2-mechanism-diagnosticsr3assh}r3h}r‘3h]r’3j3assuh}r“3h}r”3h}r•3h]r–3j3asssuU pddl_plannerr—3}r˜3(h}r™3h}rš3h]r›3Uros/jade/jsk_planningrœ3assh ˆh }r3(h}rž3h}rŸ3h]r 3Uros-jade-pddl-plannerr¡3assh}r¢3h}r£3h]r¤3j¡3assuh}r¥3h}r¦3h}r§3h]r¨3j¡3asssuUcatkinize_thisr©3}rª3(h}r«3h}r¬3h]r­3Uros/jade/wu_ros_toolsr®3assh ˆh }r¯3(h}r°3h}r±3h]r²3Uros-jade-catkinize-thisr³3assh}r´3h}rµ3h]r¶3j³3assuh}r·3h}r¸3h}r¹3h]rº3j³3asssuUkdl_conversionsr»3}r¼3(h}r½3h}r¾3h]r¿3Uros/jade/geometryrÀ3assh ˆh }rÁ3(h}rÂ3h}rÃ3h]rÄ3Uros-jade-kdl-conversionsrÅ3assh}rÆ3h}rÇ3h]rÈ3jÅ3assuh}rÉ3h}rÊ3h}rË3h]rÌ3jÅ3asssuU p2os_teleoprÍ3}rÎ3(h}rÏ3h}rÐ3h]rÑ3U ros/jade/p2osrÒ3assh ˆh }rÓ3(h}rÔ3h}rÕ3h]rÖ3Uros-jade-p2os-teleopr×3assh}rØ3h}rÙ3h]rÚ3j×3assuh}rÛ3h}rÜ3h}rÝ3h]rÞ3j×3asssuUrange_sensor_layerrß3}rà3(h}rá3h}râ3h]rã3Uros/jade/navigation_layersrä3assh ˆh }rå3(h}ræ3h}rç3h]rè3Uros-jade-range-sensor-layerré3assh}rê3h}rë3h]rì3jé3assuh}rí3h}rî3h}rï3h]rð3jé3asssuU rotors_gazeborñ3}rò3(h}ró3h}rô3h]rõ3Uros/jade/rotors_simulatorrö3assh ˆh }r÷3(h}rø3h}rù3h]rú3Uros-jade-rotors-gazeborû3assh}rü3h}rý3h]rþ3jû3assuh}rÿ3h}r4h}r4h]r4jû3asssuUrail_grasp_collectionr4}r4(h}r4h}r4h]r4Uros/jade/rail_pick_and_placer4assh ˆh }r 4(h}r 4h}r 4h]r 4Uros-jade-rail-grasp-collectionr 4assh}r4h}r4h]r4j 4assuh}r4h}r4h}r4h]r4j 4asssuU hypothesisr4}r4(h}r4h}r4h]r4Uros/jade/hypothesisr4assh ˆh }r4(h}r4h}r4h]r4Uros-jade-hypothesisr4assh}r 4h}r!4h]r"4j4assuh}r#4h}r$4h}r%4h]r&4j4asssuUgrid_map_costmap_2dr'4}r(4(h}r)4h}r*4h]r+4Uros/jade/grid_mapr,4assh ˆh }r-4(h}r.4h}r/4h]r04Uros-jade-grid-map-costmap-2dr14assh}r24h}r34h]r44j14assuh}r54h}r64h}r74h]r84j14asssuU nav2d_kartor94}r:4(h}r;4h}r<4h]r=4Uros/jade/navigation_2dr>4assh ˆh }r?4(h}r@4h}rA4h]rB4Uros-jade-nav2d-kartorC4assh}rD4h}rE4h]rF4jC4assuh}rG4h}rH4h}rI4h]rJ4jC4asssuU ecl_geometryrK4}rL4(h}rM4h}rN4h]rO4Uros/jade/ecl_corerP4assh ˆh }rQ4(h}rR4h}rS4h]rT4Uros-jade-ecl-geometryrU4assh}rV4h}rW4h]rX4jU4assuh}rY4h}rZ4h}r[4h]r\4jU4asssuU aruco_rosr]4}r^4(h}r_4h}r`4h]ra4Uros/jade/aruco_rosrb4assh ˆh }rc4(h}rd4h}re4h]rf4Uros-jade-aruco-rosrg4assh}rh4h}ri4h]rj4jg4assuh}rk4h}rl4h}rm4h]rn4jg4asssuU ros_numpyro4}rp4(h}rq4h}rr4h]rs4Uros/jade/ros_numpyrt4assh ˆh }ru4(h}rv4h}rw4h]rx4Uros-jade-ros-numpyry4assh}rz4h}r{4h]r|4jy4assuh}r}4h}r~4h}r4h]r€4jy4asssuUrtt_geometry_msgsr4}r‚4(h}rƒ4h}r„4h]r…4Uros/jade/rtt_ros_integrationr†4assh ˆh }r‡4(h}rˆ4h}r‰4h]rŠ4Uros-jade-rtt-geometry-msgsr‹4assh}rŒ4h}r4h]rŽ4j‹4assuh}r4h}r4h}r‘4h]r’4j‹4asssuUturtle_actionlibr“4}r”4(h}r•4h}r–4h]r—4Uros/jade/common_tutorialsr˜4assh ˆh }r™4(h}rš4h}r›4h]rœ4Uros-jade-turtle-actionlibr4assh}rž4h}rŸ4h]r 4j4assuh}r¡4h}r¢4h}r£4h]r¤4j4asssuU grid_map_corer¥4}r¦4(h}r§4h}r¨4h]r©4Uros/jade/grid_maprª4assh ˆh }r«4(h}r¬4h}r­4h]r®4Uros-jade-grid-map-corer¯4assh}r°4h}r±4h]r²4j¯4assuh}r³4h}r´4h}rµ4h]r¶4j¯4asssuU camera_umdr·4}r¸4(h}r¹4h}rº4h]r»4Uros/jade/camera_umdr¼4assh ˆh }r½4(h}r¾4h}r¿4h]rÀ4Uros-jade-camera-umdrÁ4assh}rÂ4h}rÃ4h]rÄ4jÁ4assuh}rÅ4h}rÆ4h}rÇ4h]rÈ4jÁ4asssuUgrid_map_filtersrÉ4}rÊ4(h}rË4h}rÌ4h]rÍ4Uros/jade/grid_maprÎ4assh ˆh }rÏ4(h}rÐ4h}rÑ4h]rÒ4Uros-jade-grid-map-filtersrÓ4assh}rÔ4h}rÕ4h]rÖ4jÓ4assuh}r×4h}rØ4h}rÙ4h]rÚ4jÓ4asssuU person_msgsrÛ4}rÜ4(h}rÝ4h}rÞ4h]rß4Uros/jade/iai_common_msgsrà4assh ˆh }rá4(h}râ4h}rã4h]rä4Uros-jade-person-msgsrå4assh}ræ4h}rç4h]rè4jå4assuh}ré4h}rê4h}rë4h]rì4jå4asssuUdynamixel_tutorialsrí4}rî4(h}rï4h}rð4h]rñ4Uros/jade/dynamixel_motorrò4assh ˆh }ró4(h}rô4h}rõ4h]rö4Uros-jade-dynamixel-tutorialsr÷4assh}rø4h}rù4h]rú4j÷4assuh}rû4h}rü4h}rý4h]rþ4j÷4asssuU tf2_bulletrÿ4}r5(h}r5h}r5h]r5Uros/jade/geometry2r5assh ˆh }r5(h}r5h}r5h]r5Uros-jade-tf2-bulletr 5assh}r 5h}r 5h]r 5j 5assuh}r 5h}r5h}r5h]r5j 5asssuU uavc_v4lctlr5}r5(h}r5h}r5h]r5Uros/jade/uavc_v4lctlr5assh ˆh }r5(h}r5h}r5h]r5Uros-jade-uavc-v4lctlr5assh}r5h}r5h]r5j5assuh}r5h}r 5h}r!5h]r"5j5asssuUopenhrp3r#5}r$5(h}r%5h}r&5h]r'5Uros/jade/openhrp3r(5assh ˆh }r)5(h}r*5h}r+5h]r,5Uros-jade-openhrp3r-5assh}r.5h}r/5h]r05j-5assuh}r15h}r25h}r35h]r45j-5asssuUforward_command_controllerr55}r65(h}r75h}r85h]r95Uros/jade/ros_controllersr:5assh ˆh }r;5(h}r<5h}r=5h]r>5U#ros-jade-forward-command-controllerr?5assh}r@5h}rA5h]rB5j?5assuh}rC5h}rD5h}rE5h]rF5j?5asssuUgenpyrG5}rH5(h}rI5h}rJ5h]rK5Uros/jade/genpyrL5assh ˆh }rM5(h}rN5h}rO5h]rP5Uros-jade-genpyrQ5assh}rR5h}rS5h]rT5jQ5assuh}rU5h}rV5h}rW5h]rX5jQ5asssuUrqt_bag_pluginsrY5}rZ5(h}r[5h}r\5h]r]5Uros/jade/rqt_bagr^5assh ˆh }r_5(h}r`5h}ra5h]rb5Uros-jade-rqt-bag-pluginsrc5assh}rd5h}re5h]rf5jc5assuh}rg5h}rh5h}ri5h]rj5jc5asssuUrotors_gazebo_pluginsrk5}rl5(h}rm5h}rn5h]ro5Uros/jade/rotors_simulatorrp5assh ˆh }rq5(h}rr5h}rs5h]rt5Uros-jade-rotors-gazebo-pluginsru5assh}rv5h}rw5h]rx5ju5assuh}ry5h}rz5h}r{5h]r|5ju5asssuUcanopen_masterr}5}r~5(h}r5h}r€5h]r5Uros/jade/ros_canopenr‚5assh ˆh }rƒ5(h}r„5h}r…5h]r†5Uros-jade-canopen-masterr‡5assh}rˆ5h}r‰5h]rŠ5j‡5assuh}r‹5h}rŒ5h}r5h]rŽ5j‡5asssuUecl_convertersr5}r5(h}r‘5h}r’5h]r“5Uros/jade/ecl_corer”5assh ˆh }r•5(h}r–5h}r—5h]r˜5Uros-jade-ecl-convertersr™5assh}rš5h}r›5h]rœ5j™5assuh}r5h}rž5h}rŸ5h]r 5j™5asssuU iai_urdf_msgsr¡5}r¢5(h}r£5h}r¤5h]r¥5Uros/jade/iai_common_msgsr¦5assh ˆh }r§5(h}r¨5h}r©5h]rª5Uros-jade-iai-urdf-msgsr«5assh}r¬5h}r­5h]r®5j«5assuh}r¯5h}r°5h}r±5h]r²5j«5asssuUarbotix_sensorsr³5}r´5(h}rµ5h}r¶5h]r·5Uros/jade/arbotix_rosr¸5assh ˆh }r¹5(h}rº5h}r»5h]r¼5Uros-jade-arbotix-sensorsr½5assh}r¾5h}r¿5h]rÀ5j½5assuh}rÁ5h}rÂ5h}rÃ5h]rÄ5j½5asssuUactionlib_tutorialsrÅ5}rÆ5(h}rÇ5h}rÈ5h]rÉ5Uros/jade/common_tutorialsrÊ5assh ˆh }rË5(h}rÌ5h}rÍ5h]rÎ5Uros-jade-actionlib-tutorialsrÏ5assh}rÐ5h}rÑ5h]rÒ5jÏ5assuh}rÓ5h}rÔ5h}rÕ5h]rÖ5jÏ5asssuU turtlesimr×5}rØ5(h}rÙ5h}rÚ5h]rÛ5Uros/jade/ros_tutorialsrÜ5assh ˆh }rÝ5(h}rÞ5h}rß5h]rà5Uros-jade-turtlesimrá5assh}râ5h}rã5h]rä5já5assuh}rå5h}ræ5h}rç5h]rè5já5asssuUgeographic_msgsré5}rê5(h}rë5h}rì5h]rí5Uros/jade/geographic_inforî5assh ˆh }rï5(h}rð5h}rñ5h]rò5Uros-jade-geographic-msgsró5assh}rô5h}rõ5h]rö5jó5assuh}r÷5h}rø5h}rù5h]rú5jó5asssuUrail_segmentationrû5}rü5(h}rý5h}rþ5h]rÿ5Uros/jade/rail_segmentationr6assh ˆh }r6(h}r6h}r6h]r6Uros-jade-rail-segmentationr6assh}r6h}r6h]r6j6assuh}r 6h}r 6h}r 6h]r 6j6asssuUvrpnr 6}r6(h}r6h}r6h]r6U ros/jade/vrpnr6assh ˆh }r6(h}r6h}r6h]r6U ros-jade-vrpnr6assh}r6h}r6h]r6j6assuh}r6h}r6h}r6h]r6j6asssuUeffort_controllersr6}r 6(h}r!6h}r"6h]r#6Uros/jade/ros_controllersr$6assh ˆh }r%6(h}r&6h}r'6h]r(6Uros-jade-effort-controllersr)6assh}r*6h}r+6h]r,6j)6assuh}r-6h}r.6h}r/6h]r06j)6asssuUinnok_heros_driverr16}r26(h}r36h}r46h]r56Uros/jade/innok_heros_driverr66assh ˆh }r76(h}r86h}r96h]r:6Uros-jade-innok-heros-driverr;6assh}r<6h}r=6h]r>6j;6assuh}r?6h}r@6h}rA6h]rB6j;6asssuUgrizzly_teleoprC6}rD6(h}rE6h}rF6h]rG6Uros/jade/grizzlyrH6assh ˆh }rI6(h}rJ6h}rK6h]rL6Uros-jade-grizzly-teleoprM6assh}rN6h}rO6h]rP6jM6assuh}rQ6h}rR6h}rS6h]rT6jM6asssuUdiagnostic_analysisrU6}rV6(h}rW6h}rX6h]rY6Uros/jade/diagnosticsrZ6assh ˆh }r[6(h}r\6h}r]6h]r^6Uros-jade-diagnostic-analysisr_6assh}r`6h}ra6h]rb6j_6assuh}rc6h}rd6h}re6h]rf6j_6asssuUmongo_cxx_driverrg6}rh6(h}ri6h}rj6h]rk6Uros/jade/mongo_cxx_driverrl6assh ˆh }rm6(h}rn6h}ro6h]rp6Uros-jade-mongo-cxx-driverrq6assh}rr6h}rs6h]rt6jq6assuh}ru6h}rv6h}rw6h]rx6jq6asssuUmapviz_pluginsry6}rz6(h}r{6h}r|6h]r}6Uros/jade/mapvizr~6assh ˆh }r6(h}r€6h}r6h]r‚6Uros-jade-mapviz-pluginsrƒ6assh}r„6h}r…6h]r†6jƒ6assuh}r‡6h}rˆ6h}r‰6h]rŠ6jƒ6asssuUmap_msgsr‹6}rŒ6(h}r6h}rŽ6h]r6Uros/jade/navigation_msgsr6assh ˆh }r‘6(h}r’6h}r“6h]r”6Uros-jade-map-msgsr•6assh}r–6h}r—6h]r˜6j•6assuh}r™6h}rš6h}r›6h]rœ6j•6asssuUjsk_common_msgsr6}rž6(h}rŸ6h}r 6h]r¡6Uros/jade/jsk_common_msgsr¢6assh ˆh }r£6(h}r¤6h}r¥6h]r¦6Uros-jade-jsk-common-msgsr§6assh}r¨6h}r©6h]rª6j§6assuh}r«6h}r¬6h}r­6h]r®6j§6asssuU catkin_pipr¯6}r°6(h}r±6h}r²6h]r³6Uros/jade/catkin_pipr´6assh ˆh }rµ6(h}r¶6h}r·6h]r¸6Uros-jade-catkin-pipr¹6assh}rº6h}r»6h]r¼6j¹6assuh}r½6h}r¾6h}r¿6h]rÀ6j¹6asssuU ncd_parserrÁ6}rÂ6(h}rÃ6h}rÄ6h]rÅ6Uros/jade/scan_toolsrÆ6assh ˆh }rÇ6(h}rÈ6h}rÉ6h]rÊ6Uros-jade-ncd-parserrË6assh}rÌ6h}rÍ6h]rÎ6jË6assuh}rÏ6h}rÐ6h}rÑ6h]rÒ6jË6asssuUgsllrÓ6}rÔ6(h}rÕ6h}rÖ6h]r×6Uros/jade/cram_3rdpartyrØ6assh ˆh }rÙ6(h}rÚ6h}rÛ6h]rÜ6U ros-jade-gsllrÝ6assh}rÞ6h}rß6h]rà6jÝ6assuh}rá6h}râ6h}rã6h]rä6jÝ6asssuUrazor_imu_9dofrå6}ræ6(h}rç6h}rè6h]ré6Uros/jade/razor_imu_9dofrê6assh ˆh }rë6(h}rì6h}rí6h]rî6Uros-jade-razor-imu-9dofrï6assh}rð6h}rñ6h]rò6jï6assuh}ró6h}rô6h}rõ6h]rö6jï6asssuUgeographic_infor÷6}rø6(h}rù6h}rú6h]rû6Uros/jade/geographic_inforü6assh ˆh }rý6(h}rþ6h}rÿ6h]r7Uros-jade-geographic-infor7assh}r7h}r7h]r7j7assuh}r7h}r7h}r7h]r7j7asssuU slam_gmappingr 7}r 7(h}r 7h}r 7h]r 7Uros/jade/slam_gmappingr7assh ˆh }r7(h}r7h}r7h]r7Uros-jade-slam-gmappingr7assh}r7h}r7h]r7j7assuh}r7h}r7h}r7h]r7j7asssuUdepthimage_to_laserscanr7}r7(h}r7h}r7h]r7U ros/jade/depthimage_to_laserscanr 7assh ˆh }r!7(h}r"7h}r#7h]r$7U ros-jade-depthimage-to-laserscanr%7assh}r&7h}r'7h]r(7j%7assuh}r)7h}r*7h}r+7h]r,7j%7asssuUjsk_pcl_ros_utilsr-7}r.7(h}r/7h}r07h]r17Uros/jade/jsk_recognitionr27assh ˆh }r37(h}r47h}r57h]r67Uros-jade-jsk-pcl-ros-utilsr77assh}r87h}r97h]r:7j77assuh}r;7h}r<7h}r=7h]r>7j77asssuU mrpt_msgsr?7}r@7(h}rA7h}rB7h]rC7Uros/jade/mrpt_navigationrD7assh ˆh }rE7(h}rF7h}rG7h]rH7Uros-jade-mrpt-msgsrI7assh}rJ7h}rK7h]rL7jI7assuh}rM7h}rN7h}rO7h]rP7jI7asssuUflask_reverse_proxyrQ7}rR7(h}rS7h}rT7h]rU7Uros/jade/flask_reverse_proxyrV7assh ˆh }rW7(h}rX7h}rY7h]rZ7Uros-jade-flask-reverse-proxyr[7assh}r\7h}r]7h]r^7j[7assuh}r_7h}r`7h}ra7h]rb7j[7asssuUrobot_pose_publisherrc7}rd7(h}re7h}rf7h]rg7Uros/jade/robot_pose_publisherrh7assh ˆh }ri7(h}rj7h}rk7h]rl7Uros-jade-robot-pose-publisherrm7assh}rn7h}ro7h]rp7jm7assuh}rq7h}rr7h}rs7h]rt7jm7asssuU rtt_roscommru7}rv7(h}rw7h}rx7h]ry7Uros/jade/rtt_ros_integrationrz7assh ˆh }r{7(h}r|7h}r}7h]r~7Uros-jade-rtt-roscommr7assh}r€7h}r7h]r‚7j7assuh}rƒ7h}r„7h}r…7h]r†7j7asssuUrosbuildr‡7}rˆ7(h}r‰7h}rŠ7h]r‹7U ros/jade/rosrŒ7assh ˆh }r7(h}rŽ7h}r7h]r7Uros-jade-rosbuildr‘7assh}r’7h}r“7h]r”7j‘7assuh}r•7h}r–7h}r—7h]r˜7j‘7asssuUpython_ethernet_rmpr™7}rš7(h}r›7h}rœ7h]r7Uros/jade/python_ethernet_rmprž7assh ˆh }rŸ7(h}r 7h}r¡7h]r¢7Uros-jade-python-ethernet-rmpr£7assh}r¤7h}r¥7h]r¦7j£7assuh}r§7h}r¨7h}r©7h]rª7j£7asssuUmav_msgsr«7}r¬7(h}r­7h}r®7h]r¯7Uros/jade/mav_commr°7assh ˆh }r±7(h}r²7h}r³7h]r´7Uros-jade-mav-msgsrµ7assh}r¶7h}r·7h]r¸7jµ7assuh}r¹7h}rº7h}r»7h]r¼7jµ7asssuUjsk_calibrationr½7}r¾7(h}r¿7h}rÀ7h]rÁ7Uros/jade/jsk_controlrÂ7assh ˆh }rÃ7(h}rÄ7h}rÅ7h]rÆ7Uros-jade-jsk-calibrationrÇ7assh}rÈ7h}rÉ7h]rÊ7jÇ7assuh}rË7h}rÌ7h}rÍ7h]rÎ7jÇ7asssuUpr2_controller_interfacerÏ7}rÐ7(h}rÑ7h}rÒ7h]rÓ7Uros/jade/pr2_mechanismrÔ7assh ˆh }rÕ7(h}rÖ7h}r×7h]rØ7U!ros-jade-pr2-controller-interfacerÙ7assh}rÚ7h}rÛ7h]rÜ7jÙ7assuh}rÝ7h}rÞ7h}rß7h]rà7jÙ7asssuUjsk_interactive_markerrá7}râ7(h}rã7h}rä7h]rå7Uros/jade/jsk_visualizationræ7assh ˆh }rç7(h}rè7h}ré7h]rê7Uros-jade-jsk-interactive-markerrë7assh}rì7h}rí7h]rî7jë7assuh}rï7h}rð7h}rñ7h]rò7jë7asssuUrobot_controllers_msgsró7}rô7(h}rõ7h}rö7h]r÷7Uros/jade/robot_controllersrø7assh ˆh }rù7(h}rú7h}rû7h]rü7Uros-jade-robot-controllers-msgsrý7assh}rþ7h}rÿ7h]r8jý7assuh}r8h}r8h}r8h]r8jý7asssuUrqt_srvr8}r8(h}r8h}r8h]r 8Uros/jade/rqt_srvr 8assh ˆh }r 8(h}r 8h}r 8h]r8Uros-jade-rqt-srvr8assh}r8h}r8h]r8j8assuh}r8h}r8h}r8h]r8j8asssuU vision_vispr8}r8(h}r8h}r8h]r8Uros/jade/vision_vispr8assh ˆh }r8(h}r8h}r8h]r 8Uros-jade-vision-vispr!8assh}r"8h}r#8h]r$8j!8assuh}r%8h}r&8h}r'8h]r(8j!8asssuU aruco_mappingr)8}r*8(h}r+8h}r,8h]r-8Uros/jade/aruco_mappingr.8assh ˆh }r/8(h}r08h}r18h]r28Uros-jade-aruco-mappingr38assh}r48h}r58h]r68j38assuh}r78h}r88h}r98h]r:8j38asssuUcollada_parserr;8}r<8(h}r=8h}r>8h]r?8Uros/jade/collada_urdfr@8assh ˆh }rA8(h}rB8h}rC8h]rD8Uros-jade-collada-parserrE8assh}rF8h}rG8h]rH8jE8assuh}rI8h}rJ8h}rK8h]rL8jE8asssuUschunk_canopen_driverrM8}rN8(h}rO8h}rP8h]rQ8Uros/jade/schunk_canopen_driverrR8assh ˆh }rS8(h}rT8h}rU8h]rV8Uros-jade-schunk-canopen-driverrW8assh}rX8h}rY8h]rZ8jW8assuh}r[8h}r\8h}r]8h]r^8jW8asssuUvisp_auto_trackerr_8}r`8(h}ra8h}rb8h]rc8Uros/jade/vision_visprd8assh ˆh }re8(h}rf8h}rg8h]rh8Uros-jade-visp-auto-trackerri8assh}rj8h}rk8h]rl8ji8assuh}rm8h}rn8h}ro8h]rp8ji8asssuUhector_sensors_gazeborq8}rr8(h}rs8h}rt8h]ru8Uros/jade/hector_gazeborv8assh ˆh }rw8(h}rx8h}ry8h]rz8Uros-jade-hector-sensors-gazebor{8assh}r|8h}r}8h]r~8j{8assuh}r8h}r€8h}r8h]r‚8j{8asssuUrmp_msgsrƒ8}r„8(h}r…8h}r†8h]r‡8Uros/jade/rmp_msgsrˆ8assh ˆh }r‰8(h}rŠ8h}r‹8h]rŒ8Uros-jade-rmp-msgsr8assh}rŽ8h}r8h]r8j8assuh}r‘8h}r’8h}r“8h]r”8j8asssuUmonocam_settlerr•8}r–8(h}r—8h}r˜8h]r™8Uros/jade/calibrationrš8assh ˆh }r›8(h}rœ8h}r8h]rž8Uros-jade-monocam-settlerrŸ8assh}r 8h}r¡8h]r¢8jŸ8assuh}r£8h}r¤8h}r¥8h]r¦8jŸ8asssuU qt_gui_appr§8}r¨8(h}r©8h}rª8h]r«8Uros/jade/qt_gui_corer¬8assh ˆh }r­8(h}r®8h}r¯8h]r°8Uros-jade-qt-gui-appr±8assh}r²8h}r³8h]r´8j±8assuh}rµ8h}r¶8h}r·8h]r¸8j±8asssuU iot_bridger¹8}rº8(h}r»8h}r¼8h]r½8Uros/jade/iot_bridger¾8assh ˆh }r¿8(h}rÀ8h}rÁ8h]rÂ8Uros-jade-iot-bridgerÃ8assh}rÄ8h}rÅ8h]rÆ8jÃ8assuh}rÇ8h}rÈ8h}rÉ8h]rÊ8jÃ8asssuU common_msgsrË8}rÌ8(h}rÍ8h}rÎ8h]rÏ8Uros/jade/common_msgsrÐ8assh ˆh }rÑ8(h}rÒ8h}rÓ8h]rÔ8Uros-jade-common-msgsrÕ8assh}rÖ8h}r×8h]rØ8jÕ8assuh}rÙ8h}rÚ8h}rÛ8h]rÜ8jÕ8asssuUtrac_ik_kinematics_pluginrÝ8}rÞ8(h}rß8h}rà8h]rá8Uros/jade/trac_ikrâ8assh ˆh }rã8(h}rä8h}rå8h]ræ8U"ros-jade-trac-ik-kinematics-pluginrç8assh}rè8h}ré8h]rê8jç8assuh}rë8h}rì8h}rí8h]rî8jç8asssuUkatana_arm_gazeborï8}rð8(h}rñ8h}rò8h]ró8Uros/jade/katana_driverrô8assh ˆh }rõ8(h}rö8h}r÷8h]rø8Uros-jade-katana-arm-gazeborù8assh}rú8h}rû8h]rü8jù8assuh}rý8h}rþ8h}rÿ8h]r9jù8asssuUps3joyr9}r9(h}r9h}r9h]r9Uros/jade/joystick_driversr9assh ˆh }r9(h}r9h}r 9h]r 9Uros-jade-ps3joyr 9assh}r 9h}r 9h]r9j 9assuh}r9h}r9h}r9h]r9j 9asssuUnaoqi_driver_pyr9}r9(h}r9h}r9h]r9Uros/jade/naoqi_bridger9assh ˆh }r9(h}r9h}r9h]r9Uros-jade-naoqi-driver-pyr9assh}r9h}r9h]r 9j9assuh}r!9h}r"9h}r#9h]r$9j9asssuU roseus_smachr%9}r&9(h}r'9h}r(9h]r)9Uros/jade/jsk_roseusr*9assh ˆh }r+9(h}r,9h}r-9h]r.9Uros-jade-roseus-smachr/9assh}r09h}r19h]r29j/9assuh}r39h}r49h}r59h]r69j/9asssuU rtt_rosnoder79}r89(h}r99h}r:9h]r;9Uros/jade/rtt_ros_integrationr<9assh ˆh }r=9(h}r>9h}r?9h]r@9Uros-jade-rtt-rosnoderA9assh}rB9h}rC9h]rD9jA9assuh}rE9h}rF9h}rG9h]rH9jA9asssuUcl_tf2rI9}rJ9(h}rK9h}rL9h]rM9Uros/jade/roslisp_commonrN9assh ˆh }rO9(h}rP9h}rQ9h]rR9Uros-jade-cl-tf2rS9assh}rT9h}rU9h]rV9jS9assuh}rW9h}rX9h}rY9h]rZ9jS9asssuUcan_msgsr[9}r\9(h}r]9h}r^9h]r_9Uros/jade/ros_canopenr`9assh ˆh }ra9(h}rb9h}rc9h]rd9Uros-jade-can-msgsre9assh}rf9h}rg9h]rh9je9assuh}ri9h}rj9h}rk9h]rl9je9asssuUstd_msgsrm9}rn9(h}ro9h}rp9h]rq9Uros/jade/std_msgsrr9assh ˆh }rs9(h}rt9h}ru9h]rv9Uros-jade-std-msgsrw9assh}rx9h}ry9h]rz9jw9assuh}r{9h}r|9h}r}9h]r~9jw9asssuUnao_descriptionr9}r€9(h}r9h}r‚9h]rƒ9Uros/jade/nao_robotr„9assh ˆh }r…9(h}r†9h}r‡9h]rˆ9Uros-jade-nao-descriptionr‰9assh}rŠ9h}r‹9h]rŒ9j‰9assuh}r9h}rŽ9h}r9h]r9j‰9asssuUdynamic_tf_publisherr‘9}r’9(h}r“9h}r”9h]r•9Uros/jade/jsk_commonr–9assh ˆh }r—9(h}r˜9h}r™9h]rš9Uros-jade-dynamic-tf-publisherr›9assh}rœ9h}r9h]rž9j›9assuh}rŸ9h}r 9h}r¡9h]r¢9j›9asssuUanglesr£9}r¤9(h}r¥9h}r¦9h]r§9Uros/jade/anglesr¨9assh ˆh }r©9(h}rª9h}r«9h]r¬9Uros-jade-anglesr­9assh}r®9h}r¯9h]r°9j­9assuh}r±9h}r²9h}r³9h]r´9j­9asssuUimu_filter_madgwickrµ9}r¶9(h}r·9h}r¸9h]r¹9Uros/jade/imu_toolsrº9assh ˆh }r»9(h}r¼9h}r½9h]r¾9Uros-jade-imu-filter-madgwickr¿9assh}rÀ9h}rÁ9h]rÂ9j¿9assuh}rÃ9h}rÄ9h}rÅ9h]rÆ9j¿9asssuUcl_urdfrÇ9}rÈ9(h}rÉ9h}rÊ9h]rË9Uros/jade/roslisp_commonrÌ9assh ˆh }rÍ9(h}rÎ9h}rÏ9h]rÐ9Uros-jade-cl-urdfrÑ9assh}rÒ9h}rÓ9h]rÔ9jÑ9assuh}rÕ9h}rÖ9h}r×9h]rØ9jÑ9asssuUimagezero_image_transportrÙ9}rÚ9(h}rÛ9h}rÜ9h]rÝ9Uros/jade/imagezero_transportrÞ9assh ˆh }rß9(h}rà9h}rá9h]râ9U"ros-jade-imagezero-image-transportrã9assh}rä9h}rå9h]ræ9jã9assuh}rç9h}rè9h}ré9h]rê9jã9asssuU romeo_bringuprë9}rì9(h}rí9h}rî9h]rï9Uros/jade/romeo_robotrð9assh ˆh }rñ9(h}rò9h}ró9h]rô9Uros-jade-romeo-bringuprõ9assh}rö9h}r÷9h]rø9jõ9assuh}rù9h}rú9h}rû9h]rü9jõ9asssuUbondcpprý9}rþ9(h}rÿ9h}r:h]r:Uros/jade/bond_corer:assh ˆh }r:(h}r:h}r:h]r:Uros-jade-bondcppr:assh}r:h}r :h]r :j:assuh}r :h}r :h}r :h]r:j:asssuU imagezeror:}r:(h}r:h}r:h]r:Uros/jade/imagezero_transportr:assh ˆh }r:(h}r:h}r:h]r:Uros-jade-imagezeror:assh}r:h}r:h]r:j:assuh}r:h}r:h}r:h]r :j:asssuUmrpt_ekf_slam_2dr!:}r":(h}r#:h}r$:h]r%:Uros/jade/mrpt_slamr&:assh ˆh }r':(h}r(:h}r):h]r*:Uros-jade-mrpt-ekf-slam-2dr+:assh}r,:h}r-:h]r.:j+:assuh}r/:h}r0:h}r1:h]r2:j+:asssuU mouse_teleopr3:}r4:(h}r5:h}r6:h]r7:Uros/jade/teleop_toolsr8:assh ˆh }r9:(h}r::h}r;:h]r<:Uros-jade-mouse-teleopr=:assh}r>:h}r?:h]r@:j=:assuh}rA:h}rB:h}rC:h]rD:j=:asssuUinteractive_marker_proxyrE:}rF:(h}rG:h}rH:h]rI:U!ros/jade/interactive_marker_proxyrJ:assh ˆh }rK:(h}rL:h}rM:h]rN:U!ros-jade-interactive-marker-proxyrO:assh}rP:h}rQ:h]rR:jO:assuh}rS:h}rT:h}rU:h]rV:jO:asssuUtf_keyboard_calrW:}rX:(h}rY:h}rZ:h]r[:Uros/jade/tf_keyboard_calr\:assh ˆh }r]:(h}r^:h}r_:h]r`:Uros-jade-tf-keyboard-calra:assh}rb:h}rc:h]rd:ja:assuh}re:h}rf:h}rg:h]rh:ja:asssuUmrpt_tutorialsri:}rj:(h}rk:h}rl:h]rm:Uros/jade/mrpt_navigationrn:assh ˆh }ro:(h}rp:h}rq:h]rr:Uros-jade-mrpt-tutorialsrs:assh}rt:h}ru:h]rv:js:assuh}rw:h}rx:h}ry:h]rz:js:asssuUhector_map_toolsr{:}r|:(h}r}:h}r~:h]r:Uros/jade/hector_slamr€:assh ˆh }r:(h}r‚:h}rƒ:h]r„:Uros-jade-hector-map-toolsr…:assh}r†:h}r‡:h]rˆ:j…:assuh}r‰:h}rŠ:h}r‹:h]rŒ:j…:asssuUlaser_scan_sparsifierr:}rŽ:(h}r:h}r:h]r‘:Uros/jade/scan_toolsr’:assh ˆh }r“:(h}r”:h}r•:h]r–:Uros-jade-laser-scan-sparsifierr—:assh}r˜:h}r™:h]rš:j—:assuh}r›:h}rœ:h}r:h]rž:j—:asssuUjoint_state_publisherrŸ:}r :(h}r¡:h}r¢:h]r£:Uros/jade/robot_modelr¤:assh ˆh }r¥:(h}r¦:h}r§:h]r¨:Uros-jade-joint-state-publisherr©:assh}rª:h}r«:h]r¬:j©:assuh}r­:h}r®:h}r¯:h]r°:j©:asssuUnao_moveit_configr±:}r²:(h}r³:h}r´:h]rµ:Uros/jade/nao_moveit_configr¶:assh ˆh }r·:(h}r¸:h}r¹:h]rº:Uros-jade-nao-moveit-configr»:assh}r¼:h}r½:h]r¾:j»:assuh}r¿:h}rÀ:h}rÁ:h]rÂ:j»:asssuUyasonrÃ:}rÄ:(h}rÅ:h}rÆ:h]rÇ:Uros/jade/cram_3rdpartyrÈ:assh ˆh }rÉ:(h}rÊ:h}rË:h]rÌ:Uros-jade-yasonrÍ:assh}rÎ:h}rÏ:h]rÐ:jÍ:assuh}rÑ:h}rÒ:h}rÓ:h]rÔ:jÍ:asssuUstereo_image_procrÕ:}rÖ:(h}r×:h}rØ:h]rÙ:Uros/jade/image_pipelinerÚ:assh ˆh }rÛ:(h}rÜ:h}rÝ:h]rÞ:Uros-jade-stereo-image-procrß:assh}rà:h}rá:h]râ:jß:assuh}rã:h}rä:h}rå:h]ræ:jß:asssuUlibcmtrç:}rè:(h}ré:h}rê:h]rë:Uros/jade/jsk_3rdpartyrì:assh ˆh }rí:(h}rî:h}rï:h]rð:Uros-jade-libcmtrñ:assh}rò:h}ró:h]rô:jñ:assuh}rõ:h}rö:h}r÷:h]rø:jñ:asssuU simple_navigation_goals_tutorialrù:}rú:(h}rû:h}rü:h]rý:Uros/jade/navigation_tutorialsrþ:assh ˆh }rÿ:(h}r;h}r;h]r;U)ros-jade-simple-navigation-goals-tutorialr;assh}r;h}r;h]r;j;assuh}r;h}r;h}r ;h]r ;j;asssuUswri_route_utilr ;}r ;(h}r ;h}r;h]r;Uros/jade/marti_commonr;assh ˆh }r;(h}r;h}r;h]r;Uros-jade-swri-route-utilr;assh}r;h}r;h]r;j;assuh}r;h}r;h}r;h]r;j;asssuU plotjugglerr;}r;(h}r;h}r ;h]r!;Uros/jade/plotjugglerr";assh ˆh }r#;(h}r$;h}r%;h]r&;Uros-jade-plotjugglerr';assh}r(;h}r);h]r*;j';assuh}r+;h}r,;h}r-;h]r.;j';asssuU roboteq_msgsr/;}r0;(h}r1;h}r2;h]r3;Uros/jade/roboteqr4;assh ˆh }r5;(h}r6;h}r7;h]r8;Uros-jade-roboteq-msgsr9;assh}r:;h}r;;h]r<;j9;assuh}r=;h}r>;h}r?;h]r@;j9;asssuUmultisense_rosrA;}rB;(h}rC;h}rD;h]rE;Uros/jade/multisense_rosrF;assh ˆh }rG;(h}rH;h}rI;h]rJ;Uros-jade-multisense-rosrK;assh}rL;h}rM;h]rN;jK;assuh}rO;h}rP;h}rQ;h]rR;jK;asssuUmoveit_ros_benchmarksrS;}rT;(h}rU;h}rV;h]rW;Uros/jade/moveitrX;assh ˆh }rY;(h}rZ;h}r[;h]r\;Uros-jade-moveit-ros-benchmarksr];assh}r^;h}r_;h]r`;j];assuh}ra;h}rb;h}rc;h]rd;j];asssuUgrid_map_visualizationre;}rf;(h}rg;h}rh;h]ri;Uros/jade/grid_maprj;assh ˆh }rk;(h}rl;h}rm;h]rn;Uros-jade-grid-map-visualizationro;assh}rp;h}rq;h]rr;jo;assuh}rs;h}rt;h}ru;h]rv;jo;asssuU naoqi_poserw;}rx;(h}ry;h}rz;h]r{;Uros/jade/naoqi_bridger|;assh ˆh }r};(h}r~;h}r;h]r€;Uros-jade-naoqi-poser;assh}r‚;h}rƒ;h]r„;j;assuh}r…;h}r†;h}r‡;h]rˆ;j;asssuUrospeex_samplesr‰;}rŠ;(h}r‹;h}rŒ;h]r;Uros/jade/rospeexrŽ;assh ˆh }r;(h}r;h}r‘;h]r’;Uros-jade-rospeex-samplesr“;assh}r”;h}r•;h]r–;j“;assuh}r—;h}r˜;h}r™;h]rš;j“;asssuUecl_formattersr›;}rœ;(h}r;h}rž;h]rŸ;Uros/jade/ecl_corer ;assh ˆh }r¡;(h}r¢;h}r£;h]r¤;Uros-jade-ecl-formattersr¥;assh}r¦;h}r§;h]r¨;j¥;assuh}r©;h}rª;h}r«;h]r¬;j¥;asssuU robot_upstartr­;}r®;(h}r¯;h}r°;h]r±;Uros/jade/robot_upstartr²;assh ˆh }r³;(h}r´;h}rµ;h]r¶;Uros-jade-robot-upstartr·;assh}r¸;h}r¹;h]rº;j·;assuh}r»;h}r¼;h}r½;h]r¾;j·;asssuU class_loaderr¿;}rÀ;(h}rÁ;h}rÂ;h]rÃ;Uros/jade/class_loaderrÄ;assh ˆh }rÅ;(h}rÆ;h}rÇ;h]rÈ;Uros-jade-class-loaderrÉ;assh}rÊ;h}rË;h]rÌ;jÉ;assuh}rÍ;h}rÎ;h}rÏ;h]rÐ;jÉ;asssuU uuid_msgsrÑ;}rÒ;(h}rÓ;h}rÔ;h]rÕ;Uros/jade/unique_identifierrÖ;assh ˆh }r×;(h}rØ;h}rÙ;h]rÚ;Uros-jade-uuid-msgsrÛ;assh}rÜ;h}rÝ;h]rÞ;jÛ;assuh}rß;h}rà;h}rá;h]râ;jÛ;asssuU cl_transformsrã;}rä;(h}rå;h}ræ;h]rç;Uros/jade/roslisp_commonrè;assh ˆh }ré;(h}rê;h}rë;h]rì;Uros-jade-cl-transformsrí;assh}rî;h}rï;h]rð;jí;assuh}rñ;h}rò;h}ró;h]rô;jí;asssuU explore_literõ;}rö;(h}r÷;h}rø;h]rù;Uros/jade/m_explorerú;assh ˆh }rû;(h}rü;h}rý;h]rþ;Uros-jade-explore-literÿ;assh}r<h}r<h]r<jÿ;assuh}r<h}r<h}r<h]r<jÿ;asssuUnao_appsr<}r<(h}r <h}r <h]r <Uros/jade/nao_robotr <assh ˆh }r <(h}r<h}r<h]r<Uros-jade-nao-appsr<assh}r<h}r<h]r<j<assuh}r<h}r<h}r<h]r<j<asssuUhector_sensors_descriptionr<}r<(h}r<h}r<h]r<Uros/jade/hector_modelsr<assh ˆh }r<(h}r <h}r!<h]r"<U#ros-jade-hector-sensors-descriptionr#<assh}r$<h}r%<h]r&<j#<assuh}r'<h}r(<h}r)<h]r*<j#<asssuUecl_sigslots_liter+<}r,<(h}r-<h}r.<h]r/<Uros/jade/ecl_liter0<assh ˆh }r1<(h}r2<h}r3<h]r4<Uros-jade-ecl-sigslots-liter5<assh}r6<h}r7<h]r8<j5<assuh}r9<h}r:<h}r;<h]r<<j5<asssuUposedetection_msgsr=<}r><(h}r?<h}r@<h]rA<Uros/jade/jsk_common_msgsrB<assh ˆh }rC<(h}rD<h}rE<h]rF<Uros-jade-posedetection-msgsrG<assh}rH<h}rI<h]rJ<jG<assuh}rK<h}rL<h}rM<h]rN<jG<asssuUstatistics_msgsrO<}rP<(h}rQ<h}rR<h]rS<U ros/jade/pointgrey_camera_driverrT<assh ˆh }rU<(h}rV<h}rW<h]rX<Uros-jade-statistics-msgsrY<assh}rZ<h}r[<h]r\<jY<assuh}r]<h}r^<h}r_<h]r`<jY<asssuU nao_teleopra<}rb<(h}rc<h}rd<h]re<Uros/jade/nao_extrasrf<assh ˆh }rg<(h}rh<h}ri<h]rj<Uros-jade-nao-teleoprk<assh}rl<h}rm<h]rn<jk<assuh}ro<h}rp<h}rq<h]rr<jk<asssuU qt_gui_corers<}rt<(h}ru<h}rv<h]rw<Uros/jade/qt_gui_corerx<assh ˆh }ry<(h}rz<h}r{<h]r|<Uros-jade-qt-gui-corer}<assh}r~<h}r<h]r€<j}<assuh}r<h}r‚<h}rƒ<h]r„<j}<asssuU eus_assimpr…<}r†<(h}r‡<h}rˆ<h]r‰<Uros/jade/jsk_model_toolsrŠ<assh ˆh }r‹<(h}rŒ<h}r<h]rŽ<Uros-jade-eus-assimpr<assh}r<h}r‘<h]r’<j<assuh}r“<h}r”<h}r•<h]r–<j<asssuUgrid_map_loaderr—<}r˜<(h}r™<h}rš<h]r›<Uros/jade/grid_maprœ<assh ˆh }r<(h}rž<h}rŸ<h]r <Uros-jade-grid-map-loaderr¡<assh}r¢<h}r£<h]r¤<j¡<assuh}r¥<h}r¦<h}r§<h]r¨<j¡<asssuUcanopen_chain_noder©<}rª<(h}r«<h}r¬<h]r­<Uros/jade/ros_canopenr®<assh ˆh }r¯<(h}r°<h}r±<h]r²<Uros-jade-canopen-chain-noder³<assh}r´<h}rµ<h]r¶<j³<assuh}r·<h}r¸<h}r¹<h]rº<j³<asssuU bond_corer»<}r¼<(h}r½<h}r¾<h]r¿<Uros/jade/bond_corerÀ<assh ˆh }rÁ<(h}rÂ<h}rÃ<h]rÄ<Uros-jade-bond-corerÅ<assh}rÆ<h}rÇ<h]rÈ<jÅ<assuh}rÉ<h}rÊ<h}rË<h]rÌ<jÅ<asssuUros_ethernet_rmprÍ<}rÎ<(h}rÏ<h}rÐ<h]rÑ<Uros/jade/ros_ethernet_rmprÒ<assh ˆh }rÓ<(h}rÔ<h}rÕ<h]rÖ<Uros-jade-ros-ethernet-rmpr×<assh}rØ<h}rÙ<h]rÚ<j×<assuh}rÛ<h}rÜ<h}rÝ<h]rÞ<j×<asssuUecl_command_linerß<}rà<(h}rá<h}râ<h]rã<Uros/jade/ecl_corerä<assh ˆh }rå<(h}ræ<h}rç<h]rè<Uros-jade-ecl-command-lineré<assh}rê<h}rë<h]rì<jé<assuh}rí<h}rî<h}rï<h]rð<jé<asssuUeus_qprñ<}rò<(h}ró<h}rô<h]rõ<Uros/jade/jsk_controlrö<assh ˆh }r÷<(h}rø<h}rù<h]rú<Uros-jade-eus-qprû<assh}rü<h}rý<h]rþ<jû<assuh}rÿ<h}r=h}r=h]r=jû<asssuUrospeex_audiomonitorr=}r=(h}r=h}r=h]r=Uros/jade/rospeexr=assh ˆh }r =(h}r =h}r =h]r =Uros-jade-rospeex-audiomonitorr =assh}r=h}r=h]r=j =assuh}r=h}r=h}r=h]r=j =asssuU md49_messagesr=}r=(h}r=h}r=h]r=Uros/jade/md49_base_controllerr=assh ˆh }r=(h}r=h}r=h]r=Uros-jade-md49-messagesr=assh}r =h}r!=h]r"=j=assuh}r#=h}r$=h}r%=h]r&=j=asssuUrosparamr'=}r(=(h}r)=h}r*=h]r+=Uros/jade/ros_commr,=assh ˆh }r-=(h}r.=h}r/=h]r0=Uros-jade-rosparamr1=assh}r2=h}r3=h]r4=j1=assuh}r5=h}r6=h}r7=h]r8=j1=asssuU jsk_commonr9=}r:=(h}r;=h}r<=h]r==Uros/jade/jsk_commonr>=assh ˆh }r?=(h}r@=h}rA=h]rB=Uros-jade-jsk-commonrC=assh}rD=h}rE=h]rF=jC=assuh}rG=h}rH=h}rI=h]rJ=jC=asssuU imu_toolsrK=}rL=(h}rM=h}rN=h]rO=Uros/jade/imu_toolsrP=assh ˆh }rQ=(h}rR=h}rS=h]rT=Uros-jade-imu-toolsrU=assh}rV=h}rW=h]rX=jU=assuh}rY=h}rZ=h}r[=h]r\=jU=asssuUroslintr]=}r^=(h}r_=h}r`=h]ra=Uros/jade/roslintrb=assh ˆh }rc=(h}rd=h}re=h]rf=Uros-jade-roslintrg=assh}rh=h}ri=h]rj=jg=assuh}rk=h}rl=h}rm=h]rn=jg=asssuUtf2_rosro=}rp=(h}rq=h}rr=h]rs=Uros/jade/geometry2rt=assh ˆh }ru=(h}rv=h}rw=h]rx=Uros-jade-tf2-rosry=assh}rz=h}r{=h]r|=jy=assuh}r}=h}r~=h}r=h]r€=jy=asssuUmvsimr=}r‚=(h}rƒ=h}r„=h]r…=Uros/jade/mvsimr†=assh ˆh }r‡=(h}rˆ=h}r‰=h]rŠ=Uros-jade-mvsimr‹=assh}rŒ=h}r=h]rŽ=j‹=assuh}r=h}r=h}r‘=h]r’=j‹=asssuUdna_extraction_msgsr“=}r”=(h}r•=h}r–=h]r—=Uros/jade/iai_common_msgsr˜=assh ˆh }r™=(h}rš=h}r›=h]rœ=Uros-jade-dna-extraction-msgsr=assh}rž=h}rŸ=h]r =j=assuh}r¡=h}r¢=h}r£=h]r¤=j=asssuUswri_geometry_utilr¥=}r¦=(h}r§=h}r¨=h]r©=Uros/jade/marti_commonrª=assh ˆh }r«=(h}r¬=h}r­=h]r®=Uros-jade-swri-geometry-utilr¯=assh}r°=h}r±=h]r²=j¯=assuh}r³=h}r´=h}rµ=h]r¶=j¯=asssuUrosmsgr·=}r¸=(h}r¹=h}rº=h]r»=Uros/jade/ros_commr¼=assh ˆh }r½=(h}r¾=h}r¿=h]rÀ=Uros-jade-rosmsgrÁ=assh}rÂ=h}rÃ=h]rÄ=jÁ=assuh}rÅ=h}rÆ=h}rÇ=h]rÈ=jÁ=asssuUimage_geometryrÉ=}rÊ=(h}rË=h}rÌ=h]rÍ=Uros/jade/vision_opencvrÎ=assh ˆh }rÏ=(h}rÐ=h}rÑ=h]rÒ=Uros-jade-image-geometryrÓ=assh}rÔ=h}rÕ=h]rÖ=jÓ=assuh}r×=h}rØ=h}rÙ=h]rÚ=jÓ=asssuUmrpt_icp_slam_2drÛ=}rÜ=(h}rÝ=h}rÞ=h]rß=Uros/jade/mrpt_slamrà=assh ˆh }rá=(h}râ=h}rã=h]rä=Uros-jade-mrpt-icp-slam-2drå=assh}ræ=h}rç=h]rè=jå=assuh}ré=h}rê=h}rë=h]rì=jå=asssuUgrid_map_rviz_pluginrí=}rî=(h}rï=h}rð=h]rñ=Uros/jade/grid_maprò=assh ˆh }ró=(h}rô=h}rõ=h]rö=Uros-jade-grid-map-rviz-pluginr÷=assh}rø=h}rù=h]rú=j÷=assuh}rû=h}rü=h}rý=h]rþ=j÷=asssuUimage_transportrÿ=}r>(h}r>h}r>h]r>Uros/jade/image_commonr>assh ˆh }r>(h}r>h}r>h]r>Uros-jade-image-transportr >assh}r >h}r >h]r >j >assuh}r >h}r>h}r>h]r>j >asssuUcommon_tutorialsr>}r>(h}r>h}r>h]r>Uros/jade/common_tutorialsr>assh ˆh }r>(h}r>h}r>h]r>Uros-jade-common-tutorialsr>assh}r>h}r>h]r>j>assuh}r>h}r >h}r!>h]r">j>asssuUpepperl_fuchs_r2000r#>}r$>(h}r%>h}r&>h]r'>Uros/jade/pepperl_fuchsr(>assh ˆh }r)>(h}r*>h}r+>h]r,>Uros-jade-pepperl-fuchs-r2000r->assh}r.>h}r/>h]r0>j->assuh}r1>h}r2>h}r3>h]r4>j->asssuU jsk_gui_msgsr5>}r6>(h}r7>h}r8>h]r9>Uros/jade/jsk_common_msgsr:>assh ˆh }r;>(h}r<>h}r=>h]r>>Uros-jade-jsk-gui-msgsr?>assh}r@>h}rA>h]rB>j?>assuh}rC>h}rD>h}rE>h]rF>j?>asssuUros_commrG>}rH>(h}rI>h}rJ>h]rK>Uros/jade/ros_commrL>assh ˆh }rM>(h}rN>h}rO>h]rP>Uros-jade-ros-commrQ>assh}rR>h}rS>h]rT>jQ>assuh}rU>h}rV>h}rW>h]rX>jQ>asssuUiai_common_msgsrY>}rZ>(h}r[>h}r\>h]r]>Uros/jade/iai_common_msgsr^>assh ˆh }r_>(h}r`>h}ra>h]rb>Uros-jade-iai-common-msgsrc>assh}rd>h}re>h]rf>jc>assuh}rg>h}rh>h}ri>h]rj>jc>asssuU rospeex_corerk>}rl>(h}rm>h}rn>h]ro>Uros/jade/rospeexrp>assh ˆh }rq>(h}rr>h}rs>h]rt>Uros-jade-rospeex-coreru>assh}rv>h}rw>h]rx>ju>assuh}ry>h}rz>h}r{>h]r|>ju>asssuU rospatliter}>}r~>(h}r>h}r€>h]r>Uros/jade/jsk_3rdpartyr‚>assh ˆh }rƒ>(h}r„>h}r…>h]r†>Uros-jade-rospatliter‡>assh}rˆ>h}r‰>h]rŠ>j‡>assuh}r‹>h}rŒ>h}r>h]rŽ>j‡>asssuUrosbridge_libraryr>}r>(h}r‘>h}r’>h]r“>Uros/jade/rosbridge_suiter”>assh ˆh }r•>(h}r–>h}r—>h]r˜>Uros-jade-rosbridge-libraryr™>assh}rš>h}r›>h]rœ>j™>assuh}r>h}rž>h}rŸ>h]r >j™>asssuUrobot_setup_tf_tutorialr¡>}r¢>(h}r£>h}r¤>h]r¥>Uros/jade/navigation_tutorialsr¦>assh ˆh }r§>(h}r¨>h}r©>h]rª>U ros-jade-robot-setup-tf-tutorialr«>assh}r¬>h}r­>h]r®>j«>assuh}r¯>h}r°>h}r±>h]r²>j«>asssuU mongodb_logr³>}r´>(h}rµ>h}r¶>h]r·>Uros/jade/mongodb_storer¸>assh ˆh }r¹>(h}rº>h}r»>h]r¼>Uros-jade-mongodb-logr½>assh}r¾>h}r¿>h]rÀ>j½>assuh}rÁ>h}rÂ>h}rÃ>h]rÄ>j½>asssuUgenlisprÅ>}rÆ>(h}rÇ>h}rÈ>h]rÉ>Uros/jade/genlisprÊ>assh ˆh }rË>(h}rÌ>h}rÍ>h]rÎ>Uros-jade-genlisprÏ>assh}rÐ>h}rÑ>h]rÒ>jÏ>assuh}rÓ>h}rÔ>h}rÕ>h]rÖ>jÏ>asssuUtile_mapr×>}rØ>(h}rÙ>h}rÚ>h]rÛ>Uros/jade/mapvizrÜ>assh ˆh }rÝ>(h}rÞ>h}rß>h]rà>Uros-jade-tile-maprá>assh}râ>h}rã>h]rä>já>assuh}rå>h}ræ>h}rç>h]rè>já>asssuUstream_manipulator_3dré>}rê>(h}rë>h}rì>h]rí>Uros/jade/stream_manipulator_3drî>assh ˆh }rï>(h}rð>h}rñ>h]rò>Uros-jade-stream-manipulator-3dró>assh}rô>h}rõ>h]rö>jó>assuh}r÷>h}rø>h}rù>h]rú>jó>asssuUhrpsys_ros_bridgerû>}rü>(h}rý>h}rþ>h]rÿ>Uros/jade/rtmros_commonr?assh ˆh }r?(h}r?h}r?h]r?Uros-jade-hrpsys-ros-bridger?assh}r?h}r?h]r?j?assuh}r ?h}r ?h}r ?h]r ?j?asssuUfetch_ikfast_pluginr ?}r?(h}r?h}r?h]r?Uros/jade/fetch_rosr?assh ˆh }r?(h}r?h}r?h]r?Uros-jade-fetch-ikfast-pluginr?assh}r?h}r?h]r?j?assuh}r?h}r?h}r?h]r?j?asssuUbattery_monitor_rmpr?}r ?(h}r!?h}r"?h]r#?Uros/jade/battery_monitor_rmpr$?assh ˆh }r%?(h}r&?h}r'?h]r(?Uros-jade-battery-monitor-rmpr)?assh}r*?h}r+?h]r,?j)?assuh}r-?h}r.?h}r/?h]r0?j)?asssuUtf_conversionsr1?}r2?(h}r3?h}r4?h]r5?Uros/jade/geometryr6?assh ˆh }r7?(h}r8?h}r9?h]r:?Uros-jade-tf-conversionsr;?assh}r?j;?assuh}r??h}r@?h}rA?h]rB?j;?asssuUroscpprC?}rD?(h}rE?h}rF?h]rG?Uros/jade/ros_commrH?assh ˆh }rI?(h}rJ?h}rK?h]rL?Uros-jade-roscpprM?assh}rN?h}rO?h]rP?jM?assuh}rQ?h}rR?h}rS?h]rT?jM?asssuU roslaunchrU?}rV?(h}rW?h}rX?h]rY?Uros/jade/ros_commrZ?assh ˆh }r[?(h}r\?h}r]?h]r^?Uros-jade-roslaunchr_?assh}r`?h}ra?h]rb?j_?assuh}rc?h}rd?h}re?h]rf?j_?asssuUueyerg?}rh?(h}ri?h}rj?h]rk?U ros/jade/ueyerl?assh ˆh }rm?(h}rn?h}ro?h]rp?U ros-jade-ueyerq?assh}rr?h}rs?h]rt?jq?assuh}ru?h}rv?h}rw?h]rx?jq?asssuUcontroller_managerry?}rz?(h}r{?h}r|?h]r}?Uros/jade/ros_controlr~?assh ˆh }r?(h}r€?h}r?h]r‚?Uros-jade-controller-managerrƒ?assh}r„?h}r…?h]r†?jƒ?assuh}r‡?h}rˆ?h}r‰?h]rŠ?jƒ?asssuUmarti_nav_msgsr‹?}rŒ?(h}r?h}rŽ?h]r?Uros/jade/marti_messagesr?assh ˆh }r‘?(h}r’?h}r“?h]r”?Uros-jade-marti-nav-msgsr•?assh}r–?h}r—?h]r˜?j•?assuh}r™?h}rš?h}r›?h]rœ?j•?asssuUknir?}rž?(h}rŸ?h}r ?h]r¡?Uros/jade/katana_driverr¢?assh ˆh }r£?(h}r¤?h}r¥?h]r¦?U ros-jade-knir§?assh}r¨?h}r©?h]rª?j§?assuh}r«?h}r¬?h}r­?h]r®?j§?asssuUlaser_pipeliner¯?}r°?(h}r±?h}r²?h]r³?Uros/jade/laser_pipeliner´?assh ˆh }rµ?(h}r¶?h}r·?h]r¸?Uros-jade-laser-pipeliner¹?assh}rº?h}r»?h]r¼?j¹?assuh}r½?h}r¾?h}r¿?h]rÀ?j¹?asssuUoctomap_mappingrÁ?}rÂ?(h}rÃ?h}rÄ?h]rÅ?Uros/jade/octomap_mappingrÆ?assh ˆh }rÇ?(h}rÈ?h}rÉ?h]rÊ?Uros-jade-octomap-mappingrË?assh}rÌ?h}rÍ?h]rÎ?jË?assuh}rÏ?h}rÐ?h}rÑ?h]rÒ?jË?asssuUtf2_sensor_msgsrÓ?}rÔ?(h}rÕ?h}rÖ?h]r×?Uros/jade/geometry2rØ?assh ˆh }rÙ?(h}rÚ?h}rÛ?h]rÜ?Uros-jade-tf2-sensor-msgsrÝ?assh}rÞ?h}rß?h]rà?jÝ?assuh}rá?h}râ?h}rã?h]rä?jÝ?asssuUimu_sensor_controllerrå?}ræ?(h}rç?h}rè?h]ré?Uros/jade/ros_controllersrê?assh ˆh }rë?(h}rì?h}rí?h]rî?Uros-jade-imu-sensor-controllerrï?assh}rð?h}rñ?h]rò?jï?assuh}ró?h}rô?h}rõ?h]rö?jï?asssuUvirtual_force_publisherr÷?}rø?(h}rù?h}rú?h]rû?Uros/jade/jsk_commonrü?assh ˆh }rý?(h}rþ?h}rÿ?h]r@U ros-jade-virtual-force-publisherr@assh}r@h}r@h]r@j@assuh}r@h}r@h}r@h]r@j@asssuU cram_3rdpartyr @}r @(h}r @h}r @h]r @Uros/jade/cram_3rdpartyr@assh ˆh }r@(h}r@h}r@h]r@Uros-jade-cram-3rdpartyr@assh}r@h}r@h]r@j@assuh}r@h}r@h}r@h]r@j@asssuU tf2_toolsr@}r@(h}r@h}r@h]r@Uros/jade/geometry2r @assh ˆh }r!@(h}r"@h}r#@h]r$@Uros-jade-tf2-toolsr%@assh}r&@h}r'@h]r(@j%@assuh}r)@h}r*@h}r+@h]r,@j%@asssuU p2os_urdfr-@}r.@(h}r/@h}r0@h]r1@U ros/jade/p2osr2@assh ˆh }r3@(h}r4@h}r5@h]r6@Uros-jade-p2os-urdfr7@assh}r8@h}r9@h]r:@j7@assuh}r;@h}r<@h}r=@h]r>@j7@asssuUrqt_joint_trajectory_controllerr?@}r@@(h}rA@h}rB@h]rC@Uros/jade/ros_controllersrD@assh ˆh }rE@(h}rF@h}rG@h]rH@U(ros-jade-rqt-joint-trajectory-controllerrI@assh}rJ@h}rK@h]rL@jI@assuh}rM@h}rN@h}rO@h]rP@jI@asssuUhector_mappingrQ@}rR@(h}rS@h}rT@h]rU@Uros/jade/hector_slamrV@assh ˆh }rW@(h}rX@h}rY@h]rZ@Uros-jade-hector-mappingr[@assh}r\@h}r]@h]r^@j[@assuh}r_@h}r`@h}ra@h]rb@j[@asssuUecl_statisticsrc@}rd@(h}re@h}rf@h]rg@Uros/jade/ecl_corerh@assh ˆh }ri@(h}rj@h}rk@h]rl@Uros-jade-ecl-statisticsrm@assh}rn@h}ro@h]rp@jm@assuh}rq@h}rr@h}rs@h]rt@jm@asssuU audio_captureru@}rv@(h}rw@h}rx@h]ry@Uros/jade/audio_commonrz@assh ˆh }r{@(h}r|@h}r}@h]r~@Uros-jade-audio-capturer@assh}r€@h}r@h]r‚@j@assuh}rƒ@h}r„@h}r…@h]r†@j@asssuUrosbridge_suiter‡@}rˆ@(h}r‰@h}rŠ@h]r‹@Uros/jade/rosbridge_suiterŒ@assh ˆh }r@(h}rŽ@h}r@h]r@Uros-jade-rosbridge-suiter‘@assh}r’@h}r“@h]r”@j‘@assuh}r•@h}r–@h}r—@h]r˜@j‘@asssuUmongodb_store_msgsr™@}rš@(h}r›@h}rœ@h]r@Uros/jade/mongodb_storerž@assh ˆh }rŸ@(h}r @h}r¡@h]r¢@Uros-jade-mongodb-store-msgsr£@assh}r¤@h}r¥@h]r¦@j£@assuh}r§@h}r¨@h}r©@h]rª@j£@asssuUcatkinr«@}r¬@(h}r­@h}r®@h]r¯@Uros/jade/catkinr°@assh ˆh }r±@(h}r²@h}r³@h]r´@Uros-jade-catkinrµ@assh}r¶@h}r·@h]r¸@jµ@assuh}r¹@h}rº@h}r»@h]r¼@jµ@asssuUmrpt_mapr½@}r¾@(h}r¿@h}rÀ@h]rÁ@Uros/jade/mrpt_navigationrÂ@assh ˆh }rÃ@(h}rÄ@h}rÅ@h]rÆ@Uros-jade-mrpt-maprÇ@assh}rÈ@h}rÉ@h]rÊ@jÇ@assuh}rË@h}rÌ@h}rÍ@h]rÎ@jÇ@asssuU image_viewrÏ@}rÐ@(h}rÑ@h}rÒ@h]rÓ@Uros/jade/image_pipelinerÔ@assh ˆh }rÕ@(h}rÖ@h}r×@h]rØ@Uros-jade-image-viewrÙ@assh}rÚ@h}rÛ@h]rÜ@jÙ@assuh}rÝ@h}rÞ@h}rß@h]rà@jÙ@asssuUweb_video_serverrá@}râ@(h}rã@h}rä@h]rå@Uros/jade/web_video_serverræ@assh ˆh }rç@(h}rè@h}ré@h]rê@Uros-jade-web-video-serverrë@assh}rì@h}rí@h]rî@jë@assuh}rï@h}rð@h}rñ@h]rò@jë@asssuUgrid_map_octomapró@}rô@(h}rõ@h}rö@h]r÷@Uros/jade/grid_maprø@assh ˆh }rù@(h}rú@h}rû@h]rü@Uros-jade-grid-map-octomaprý@assh}rþ@h}rÿ@h]rAjý@assuh}rAh}rAh}rAh]rAjý@asssuU idolink_noderA}rA(h}rAh}rAh]r AUros/jade/idolink_noder Aassh ˆh }r A(h}r Ah}r Ah]rAUros-jade-idolink-noderAassh}rAh}rAh]rAjAassuh}rAh}rAh}rAh]rAjAasssuUrtt_ros_integrationrA}rA(h}rAh}rAh]rAUros/jade/rtt_ros_integrationrAassh ˆh }rA(h}rAh}rAh]r AUros-jade-rtt-ros-integrationr!Aassh}r"Ah}r#Ah]r$Aj!Aassuh}r%Ah}r&Ah}r'Ah]r(Aj!AasssuUpr2eusr)A}r*A(h}r+Ah}r,Ah]r-AUros/jade/jsk_pr2eusr.Aassh ˆh }r/A(h}r0Ah}r1Ah]r2AUros-jade-pr2eusr3Aassh}r4Ah}r5Ah]r6Aj3Aassuh}r7Ah}r8Ah}r9Ah]r:Aj3AasssuUmoveit_ros_planningr;A}rAh]r?AUros/jade/moveitr@Aassh ˆh }rAA(h}rBAh}rCAh]rDAUros-jade-moveit-ros-planningrEAassh}rFAh}rGAh]rHAjEAassuh}rIAh}rJAh}rKAh]rLAjEAasssuUhector_imu_toolsrMA}rNA(h}rOAh}rPAh]rQAUros/jade/hector_slamrRAassh ˆh }rSA(h}rTAh}rUAh]rVAUros-jade-hector-imu-toolsrWAassh}rXAh}rYAh]rZAjWAassuh}r[Ah}r\Ah}r]Ah]r^AjWAasssuU parrot_arsdkr_A}r`A(h}raAh}rbAh]rcAUros/jade/parrot_arsdkrdAassh ˆh }reA(h}rfAh}rgAh]rhAUros-jade-parrot-arsdkriAassh}rjAh}rkAh]rlAjiAassuh}rmAh}rnAh}roAh]rpAjiAasssuUmultires_imagerqA}rrA(h}rsAh}rtAh]ruAUros/jade/mapvizrvAassh ˆh }rwA(h}rxAh}ryAh]rzAUros-jade-multires-imager{Aassh}r|Ah}r}Ah]r~Aj{Aassuh}rAh}r€Ah}rAh]r‚Aj{AasssuUnavigation_tutorialsrƒA}r„A(h}r…Ah}r†Ah]r‡AUros/jade/navigation_tutorialsrˆAassh ˆh }r‰A(h}rŠAh}r‹Ah]rŒAUros-jade-navigation-tutorialsrAassh}rŽAh}rAh]rAjAassuh}r‘Ah}r’Ah}r“Ah]r”AjAasssuUiai_wsg_50_msgsr•A}r–A(h}r—Ah}r˜Ah]r™AUros/jade/iai_common_msgsršAassh ˆh }r›A(h}rœAh}rAh]ržAUros-jade-iai-wsg-50-msgsrŸAassh}r Ah}r¡Ah]r¢AjŸAassuh}r£Ah}r¤Ah}r¥Ah]r¦AjŸAasssuU grid_map_msgsr§A}r¨A(h}r©Ah}rªAh]r«AUros/jade/grid_mapr¬Aassh ˆh }r­A(h}r®Ah}r¯Ah]r°AUros-jade-grid-map-msgsr±Aassh}r²Ah}r³Ah]r´Aj±Aassuh}rµAh}r¶Ah}r·Ah]r¸Aj±AasssuUcontroller_manager_testsr¹A}rºA(h}r»Ah}r¼Ah]r½AUros/jade/ros_controlr¾Aassh ˆh }r¿A(h}rÀAh}rÁAh]rÂAU!ros-jade-controller-manager-testsrÃAassh}rÄAh}rÅAh]rÆAjÃAassuh}rÇAh}rÈAh}rÉAh]rÊAjÃAasssuU pepper_robotrËA}rÌA(h}rÍAh}rÎAh]rÏAUros/jade/pepper_robotrÐAassh ˆh }rÑA(h}rÒAh}rÓAh]rÔAUros-jade-pepper-robotrÕAassh}rÖAh}r×Ah]rØAjÕAassuh}rÙAh}rÚAh}rÛAh]rÜAjÕAasssuUackermann_msgsrÝA}rÞA(h}rßAh}ràAh]ráAUros/jade/ackermann_msgsrâAassh ˆh }rãA(h}räAh}råAh]ræAUros-jade-ackermann-msgsrçAassh}rèAh}réAh]rêAjçAassuh}rëAh}rìAh}ríAh]rîAjçAasssuU moveit_ikfastrïA}rðA(h}rñAh}ròAh]róAUros/jade/moveit_ikfastrôAassh ˆh }rõA(h}röAh}r÷Ah]røAUros-jade-moveit-ikfastrùAassh}rúAh}rûAh]rüAjùAassuh}rýAh}rþAh}rÿAh]rBjùAasssuU rotors_commrB}rB(h}rBh}rBh]rBUros/jade/rotors_simulatorrBassh ˆh }rB(h}rBh}r Bh]r BUros-jade-rotors-commr Bassh}r Bh}r Bh]rBj Bassuh}rBh}rBh}rBh]rBj BasssuUnavfnrB}rB(h}rBh}rBh]rBUros/jade/navigationrBassh ˆh }rB(h}rBh}rBh]rBUros-jade-navfnrBassh}rBh}rBh]r BjBassuh}r!Bh}r"Bh}r#Bh]r$BjBasssuUrqt_ez_publisherr%B}r&B(h}r'Bh}r(Bh]r)BUros/jade/rqt_ez_publisherr*Bassh ˆh }r+B(h}r,Bh}r-Bh]r.BUros-jade-rqt-ez-publisherr/Bassh}r0Bh}r1Bh]r2Bj/Bassuh}r3Bh}r4Bh}r5Bh]r6Bj/BasssuUpeople_tracking_filterr7B}r8B(h}r9Bh}r:Bh]r;BUros/jade/peoplerBh}r?Bh]r@BUros-jade-people-tracking-filterrABassh}rBBh}rCBh]rDBjABassuh}rEBh}rFBh}rGBh]rHBjABasssuU swri_rospyrIB}rJB(h}rKBh}rLBh]rMBUros/jade/marti_commonrNBassh ˆh }rOB(h}rPBh}rQBh]rRBUros-jade-swri-rospyrSBassh}rTBh}rUBh]rVBjSBassuh}rWBh}rXBh}rYBh]rZBjSBasssuUdwa_local_plannerr[B}r\B(h}r]Bh}r^Bh]r_BUros/jade/navigationr`Bassh ˆh }raB(h}rbBh}rcBh]rdBUros-jade-dwa-local-plannerreBassh}rfBh}rgBh]rhBjeBassuh}riBh}rjBh}rkBh]rlBjeBasssuUrtabmaprmB}rnB(h}roBh}rpBh]rqBUros/jade/rtabmaprrBassh ˆh }rsB(h}rtBh}ruBh]rvBUros-jade-rtabmaprwBassh}rxBh}ryBh]rzBjwBassuh}r{Bh}r|Bh}r}Bh]r~BjwBasssuUsmclibrB}r€B(h}rBh}r‚Bh]rƒBUros/jade/bond_corer„Bassh ˆh }r…B(h}r†Bh}r‡Bh]rˆBUros-jade-smclibr‰Bassh}rŠBh}r‹Bh]rŒBj‰Bassuh}rBh}rŽBh}rBh]rBj‰BasssuU ecl_devicesr‘B}r’B(h}r“Bh}r”Bh]r•BUros/jade/ecl_corer–Bassh ˆh }r—B(h}r˜Bh}r™Bh]ršBUros-jade-ecl-devicesr›Bassh}rœBh}rBh]ržBj›Bassuh}rŸBh}r Bh}r¡Bh]r¢Bj›BasssuUdesktopr£B}r¤B(h}r¥Bh}r¦Bh]r§BUros/jade/metapackagesr¨Bassh ˆh }r©B(h}rªBh}r«Bh]r¬BUros-jade-desktopr­Bassh}r®Bh}r¯Bh]r°Bj­Bassuh}r±Bh}r²Bh}r³Bh]r´Bj­BasssuU lisp_unitrµB}r¶B(h}r·Bh}r¸Bh]r¹BUros/jade/cram_3rdpartyrºBassh ˆh }r»B(h}r¼Bh}r½Bh]r¾BUros-jade-lisp-unitr¿Bassh}rÀBh}rÁBh]rÂBj¿Bassuh}rÃBh}rÄBh}rÅBh]rÆBj¿BasssuUjsk_footstep_msgsrÇB}rÈB(h}rÉBh}rÊBh]rËBUros/jade/jsk_common_msgsrÌBassh ˆh }rÍB(h}rÎBh}rÏBh]rÐBUros-jade-jsk-footstep-msgsrÑBassh}rÒBh}rÓBh]rÔBjÑBassuh}rÕBh}rÖBh}r×Bh]rØBjÑBasssuUhector_worldmodel_msgsrÙB}rÚB(h}rÛBh}rÜBh]rÝBUros/jade/hector_worldmodelrÞBassh ˆh }rßB(h}ràBh}ráBh]râBUros-jade-hector-worldmodel-msgsrãBassh}räBh}råBh]ræBjãBassuh}rçBh}rèBh}réBh]rêBjãBasssuUdynamic_reconfigurerëB}rìB(h}ríBh}rîBh]rïBUros/jade/dynamic_reconfigurerðBassh ˆh }rñB(h}ròBh}róBh]rôBUros-jade-dynamic-reconfigurerõBassh}röBh}r÷Bh]røBjõBassuh}rùBh}rúBh}rûBh]rüBjõBasssuU pyros_msgsrýB}rþB(h}rÿBh}rCh]rCUros/jade/pyros_msgsrCassh ˆh }rC(h}rCh}rCh]rCUros-jade-pyros-msgsrCassh}rCh}r Ch]r CjCassuh}r Ch}r Ch}r Ch]rCjCasssuUroslangrC}rC(h}rCh}rCh]rCU ros/jade/rosrCassh ˆh }rC(h}rCh}rCh]rCUros-jade-roslangrCassh}rCh}rCh]rCjCassuh}rCh}rCh}rCh]r CjCasssuUrqt_stream_manipulator_3dr!C}r"C(h}r#Ch}r$Ch]r%CUros/jade/stream_manipulator_3dr&Cassh ˆh }r'C(h}r(Ch}r)Ch]r*CU"ros-jade-rqt-stream-manipulator-3dr+Cassh}r,Ch}r-Ch]r.Cj+Cassuh}r/Ch}r0Ch}r1Ch]r2Cj+CasssuUhector_localizationr3C}r4C(h}r5Ch}r6Ch]r7CUros/jade/hector_localizationr8Cassh ˆh }r9C(h}r:Ch}r;Ch]rCh}r?Ch]r@Cj=Cassuh}rACh}rBCh}rCCh]rDCj=CasssuUrail_pick_and_placerEC}rFC(h}rGCh}rHCh]rICUros/jade/rail_pick_and_placerJCassh ˆh }rKC(h}rLCh}rMCh]rNCUros-jade-rail-pick-and-placerOCassh}rPCh}rQCh]rRCjOCassuh}rSCh}rTCh}rUCh]rVCjOCasssuUview_controller_msgsrWC}rXC(h}rYCh}rZCh]r[CUros/jade/view_controller_msgsr\Cassh ˆh }r]C(h}r^Ch}r_Ch]r`CUros-jade-view-controller-msgsraCassh}rbCh}rcCh]rdCjaCassuh}reCh}rfCh}rgCh]rhCjaCasssuUsocketcan_interfaceriC}rjC(h}rkCh}rlCh]rmCUros/jade/ros_canopenrnCassh ˆh }roC(h}rpCh}rqCh]rrCUros-jade-socketcan-interfacersCassh}rtCh}ruCh]rvCjsCassuh}rwCh}rxCh}ryCh]rzCjsCasssuUros_corer{C}r|C(h}r}Ch}r~Ch]rCUros/jade/metapackagesr€Cassh ˆh }rC(h}r‚Ch}rƒCh]r„CUros-jade-ros-corer…Cassh}r†Ch}r‡Ch]rˆCj…Cassuh}r‰Ch}rŠCh}r‹Ch]rŒCj…CasssuUinteractive_markersrC}rŽC(h}rCh}rCh]r‘CUros/jade/interactive_markersr’Cassh ˆh }r“C(h}r”Ch}r•Ch]r–CUros-jade-interactive-markersr—Cassh}r˜Ch}r™Ch]ršCj—Cassuh}r›Ch}rœCh}rCh]ržCj—CasssuUmrpt_navigationrŸC}r C(h}r¡Ch}r¢Ch]r£CUros/jade/mrpt_navigationr¤Cassh ˆh }r¥C(h}r¦Ch}r§Ch]r¨CUros-jade-mrpt-navigationr©Cassh}rªCh}r«Ch]r¬Cj©Cassuh}r­Ch}r®Ch}r¯Ch]r°Cj©CasssuUosg_interactive_markersr±C}r²C(h}r³Ch}r´Ch]rµCUros/jade/visualization_osgr¶Cassh ˆh }r·C(h}r¸Ch}r¹Ch]rºCU ros-jade-osg-interactive-markersr»Cassh}r¼Ch}r½Ch]r¾Cj»Cassuh}r¿Ch}rÀCh}rÁCh]rÂCj»CasssuUrobot_state_publisherrÃC}rÄC(h}rÅCh}rÆCh]rÇCUros/jade/robot_state_publisherrÈCassh ˆh }rÉC(h}rÊCh}rËCh]rÌCUros-jade-robot-state-publisherrÍCassh}rÎCh}rÏCh]rÐCjÍCassuh}rÑCh}rÒCh}rÓCh]rÔCjÍCasssuUlms1xxrÕC}rÖC(h}r×Ch}rØCh]rÙCUros/jade/lms1xxrÚCassh ˆh }rÛC(h}rÜCh}rÝCh]rÞCUros-jade-lms1xxrßCassh}ràCh}ráCh]râCjßCassuh}rãCh}räCh}råCh]ræCjßCasssuUkatanarçC}rèC(h}réCh}rêCh]rëCUros/jade/katana_driverrìCassh ˆh }ríC(h}rîCh}rïCh]rðCUros-jade-katanarñCassh}ròCh}róCh]rôCjñCassuh}rõCh}röCh}r÷Ch]røCjñCasssuUjoint_trajectory_actionrùC}rúC(h}rûCh}rüCh]rýCUros/jade/pr2_controllersrþCassh ˆh }rÿC(h}rDh}rDh]rDU ros-jade-joint-trajectory-actionrDassh}rDh}rDh]rDjDassuh}rDh}rDh}r Dh]r DjDasssuU!moveit_controller_manager_exampler D}r D(h}r Dh}rDh]rDUros/jade/moveitrDassh ˆh }rD(h}rDh}rDh]rDU*ros-jade-moveit-controller-manager-examplerDassh}rDh}rDh]rDjDassuh}rDh}rDh}rDh]rDjDasssuUpr2_hardware_interfacerD}rD(h}rDh}r Dh]r!DUros/jade/pr2_mechanismr"Dassh ˆh }r#D(h}r$Dh}r%Dh]r&DUros-jade-pr2-hardware-interfacer'Dassh}r(Dh}r)Dh]r*Dj'Dassuh}r+Dh}r,Dh}r-Dh]r.Dj'DasssuU voice_textr/D}r0D(h}r1Dh}r2Dh]r3DUros/jade/jsk_3rdpartyr4Dassh ˆh }r5D(h}r6Dh}r7Dh]r8DUros-jade-voice-textr9Dassh}r:Dh}r;Dh]rDh}r?Dh]r@Dj9DasssuU joy_listenerrAD}rBD(h}rCDh}rDDh]rEDUros/jade/wu_ros_toolsrFDassh ˆh }rGD(h}rHDh}rIDh]rJDUros-jade-joy-listenerrKDassh}rLDh}rMDh]rNDjKDassuh}rODh}rPDh}rQDh]rRDjKDasssuU laser_procrSD}rTD(h}rUDh}rVDh]rWDUros/jade/laser_procrXDassh ˆh }rYD(h}rZDh}r[Dh]r\DUros-jade-laser-procr]Dassh}r^Dh}r_Dh]r`Dj]Dassuh}raDh}rbDh}rcDh]rdDj]DasssuUrospeexreD}rfD(h}rgDh}rhDh]riDUros/jade/rospeexrjDassh ˆh }rkD(h}rlDh}rmDh]rnDUros-jade-rospeexroDassh}rpDh}rqDh]rrDjoDassuh}rsDh}rtDh}ruDh]rvDjoDasssuUrotors_joy_interfacerwD}rxD(h}ryDh}rzDh]r{DUros/jade/rotors_simulatorr|Dassh ˆh }r}D(h}r~Dh}rDh]r€DUros-jade-rotors-joy-interfacerDassh}r‚Dh}rƒDh]r„DjDassuh}r…Dh}r†Dh}r‡Dh]rˆDjDasssuUrqt_topr‰D}rŠD(h}r‹Dh}rŒDh]rDUros/jade/rqt_toprŽDassh ˆh }rD(h}rDh}r‘Dh]r’DUros-jade-rqt-topr“Dassh}r”Dh}r•Dh]r–Dj“Dassuh}r—Dh}r˜Dh}r™Dh]ršDj“DasssuUrosbridge_serverr›D}rœD(h}rDh}ržDh]rŸDUros/jade/rosbridge_suiter Dassh ˆh }r¡D(h}r¢Dh}r£Dh]r¤DUros-jade-rosbridge-serverr¥Dassh}r¦Dh}r§Dh]r¨Dj¥Dassuh}r©Dh}rªDh}r«Dh]r¬Dj¥DasssuUexecutive_smachr­D}r®D(h}r¯Dh}r°Dh]r±DUros/jade/executive_smachr²Dassh ˆh }r³D(h}r´Dh}rµDh]r¶DUros-jade-executive-smachr·Dassh}r¸Dh}r¹Dh]rºDj·Dassuh}r»Dh}r¼Dh}r½Dh]r¾Dj·DasssuUurg_noder¿D}rÀD(h}rÁDh}rÂDh]rÃDUros/jade/urg_noderÄDassh ˆh }rÅD(h}rÆDh}rÇDh]rÈDUros-jade-urg-noderÉDassh}rÊDh}rËDh]rÌDjÉDassuh}rÍDh}rÎDh}rÏDh]rÐDjÉDasssuU move_baserÑD}rÒD(h}rÓDh}rÔDh]rÕDUros/jade/navigationrÖDassh ˆh }r×D(h}rØDh}rÙDh]rÚDUros-jade-move-baserÛDassh}rÜDh}rÝDh]rÞDjÛDassuh}rßDh}ràDh}ráDh]râDjÛDasssuUgenmsgrãD}räD(h}råDh}ræDh]rçDUros/jade/genmsgrèDassh ˆh }réD(h}rêDh}rëDh]rìDUros-jade-genmsgríDassh}rîDh}rïDh]rðDjíDassuh}rñDh}ròDh}róDh]rôDjíDasssuUcontrol_toolboxrõD}röD(h}r÷Dh}røDh]rùDUros/jade/control_toolboxrúDassh ˆh }rûD(h}rüDh}rýDh]rþDUros-jade-control-toolboxrÿDassh}rEh}rEh]rEjÿDassuh}rEh}rEh}rEh]rEjÿDasssuU turtle_tf2rE}rE(h}r Eh}r Eh]r EUros/jade/geometry_tutorialsr Eassh ˆh }r E(h}rEh}rEh]rEUros-jade-turtle-tf2rEassh}rEh}rEh]rEjEassuh}rEh}rEh}rEh]rEjEasssuUdiagnostic_updaterrE}rE(h}rEh}rEh]rEUros/jade/diagnosticsrEassh ˆh }rE(h}r Eh}r!Eh]r"EUros-jade-diagnostic-updaterr#Eassh}r$Eh}r%Eh]r&Ej#Eassuh}r'Eh}r(Eh}r)Eh]r*Ej#EasssuUslicr+E}r,E(h}r-Eh}r.Eh]r/EUros/jade/jsk_3rdpartyr0Eassh ˆh }r1E(h}r2Eh}r3Eh]r4EU ros-jade-slicr5Eassh}r6Eh}r7Eh]r8Ej5Eassuh}r9Eh}r:Eh}r;Eh]rE(h}r?Eh}r@Eh]rAEUros/jade/rtt_ros_integrationrBEassh ˆh }rCE(h}rDEh}rEEh]rFEUros-jade-rtt-actionlib-msgsrGEassh}rHEh}rIEh]rJEjGEassuh}rKEh}rLEh}rMEh]rNEjGEasssuUpr2_arm_kinematicsrOE}rPE(h}rQEh}rREh]rSEUros/jade/pr2_kinematicsrTEassh ˆh }rUE(h}rVEh}rWEh]rXEUros-jade-pr2-arm-kinematicsrYEassh}rZEh}r[Eh]r\EjYEassuh}r]Eh}r^Eh}r_Eh]r`EjYEasssuU cv_backportsraE}rbE(h}rcEh}rdEh]reEUros/jade/cv_backportsrfEassh ˆh }rgE(h}rhEh}riEh]rjEUros-jade-cv-backportsrkEassh}rlEh}rmEh]rnEjkEassuh}roEh}rpEh}rqEh]rrEjkEasssuU rqt_gui_pyrsE}rtE(h}ruEh}rvEh]rwEU ros/jade/rqtrxEassh ˆh }ryE(h}rzEh}r{Eh]r|EUros-jade-rqt-gui-pyr}Eassh}r~Eh}rEh]r€Ej}Eassuh}rEh}r‚Eh}rƒEh]r„Ej}EasssuUrobot_mechanism_controllersr…E}r†E(h}r‡Eh}rˆEh]r‰EUros/jade/pr2_controllersrŠEassh ˆh }r‹E(h}rŒEh}rEh]rŽEU$ros-jade-robot-mechanism-controllersrEassh}rEh}r‘Eh]r’EjEassuh}r“Eh}r”Eh}r•Eh]r–EjEasssuUrosserial_pythonr—E}r˜E(h}r™Eh}ršEh]r›EUros/jade/rosserialrœEassh ˆh }rE(h}ržEh}rŸEh]r EUros-jade-rosserial-pythonr¡Eassh}r¢Eh}r£Eh]r¤Ej¡Eassuh}r¥Eh}r¦Eh}r§Eh]r¨Ej¡EasssuU rosmasterr©E}rªE(h}r«Eh}r¬Eh]r­EUros/jade/ros_commr®Eassh ˆh }r¯E(h}r°Eh}r±Eh]r²EUros-jade-rosmasterr³Eassh}r´Eh}rµEh]r¶Ej³Eassuh}r·Eh}r¸Eh}r¹Eh]rºEj³EasssuU kalman_filterr»E}r¼E(h}r½Eh}r¾Eh]r¿EUros/jade/wu_ros_toolsrÀEassh ˆh }rÁE(h}rÂEh}rÃEh]rÄEUros-jade-kalman-filterrÅEassh}rÆEh}rÇEh]rÈEjÅEassuh}rÉEh}rÊEh}rËEh]rÌEjÅEasssuUdownwardrÍE}rÎE(h}rÏEh}rÐEh]rÑEUros/jade/jsk_3rdpartyrÒEassh ˆh }rÓE(h}rÔEh}rÕEh]rÖEUros-jade-downwardr×Eassh}rØEh}rÙEh]rÚEj×Eassuh}rÛEh}rÜEh}rÝEh]rÞEj×EasssuU stdr_samplesrßE}ràE(h}ráEh}râEh]rãEUros/jade/stdr_simulatorräEassh ˆh }råE(h}ræEh}rçEh]rèEUros-jade-stdr-samplesréEassh}rêEh}rëEh]rìEjéEassuh}ríEh}rîEh}rïEh]rðEjéEasssuUvariantrñE}ròE(h}róEh}rôEh]rõEUros/jade/variantröEassh ˆh }r÷E(h}røEh}rùEh]rúEUros-jade-variantrûEassh}rüEh}rýEh]rþEjûEassuh}rÿEh}rFh}rFh]rFjûEasssuUspeech_recognition_msgsrF}rF(h}rFh}rFh]rFUros/jade/jsk_common_msgsrFassh ˆh }r F(h}r Fh}r Fh]r FU ros-jade-speech-recognition-msgsr Fassh}rFh}rFh]rFj Fassuh}rFh}rFh}rFh]rFj FasssuUrail_pick_and_place_msgsrF}rF(h}rFh}rFh]rFUros/jade/rail_pick_and_placerFassh ˆh }rF(h}rFh}rFh]rFU!ros-jade-rail-pick-and-place-msgsrFassh}r Fh}r!Fh]r"FjFassuh}r#Fh}r$Fh}r%Fh]r&FjFasssuUmarti_common_msgsr'F}r(F(h}r)Fh}r*Fh]r+FUros/jade/marti_messagesr,Fassh ˆh }r-F(h}r.Fh}r/Fh]r0FUros-jade-marti-common-msgsr1Fassh}r2Fh}r3Fh]r4Fj1Fassuh}r5Fh}r6Fh}r7Fh]r8Fj1FasssuUpeopler9F}r:F(h}r;Fh}rFassh ˆh }r?F(h}r@Fh}rAFh]rBFUros-jade-peoplerCFassh}rDFh}rEFh]rFFjCFassuh}rGFh}rHFh}rIFh]rJFjCFasssuUactionlib_msgsrKF}rLF(h}rMFh}rNFh]rOFUros/jade/common_msgsrPFassh ˆh }rQF(h}rRFh}rSFh]rTFUros-jade-actionlib-msgsrUFassh}rVFh}rWFh]rXFjUFassuh}rYFh}rZFh}r[Fh]r\FjUFasssuu(Usicktoolbox_wrapperr]F}r^F(h}r_Fh}r`Fh]raFUros/jade/sicktoolbox_wrapperrbFassh ˆh }rcF(h}rdFh}reFh]rfFUros-jade-sicktoolbox-wrapperrgFassh}rhFh}riFh]rjFjgFassuh}rkFh}rlFh}rmFh]rnFjgFasssuUecl_converters_literoF}rpF(h}rqFh}rrFh]rsFUros/jade/ecl_litertFassh ˆh }ruF(h}rvFh}rwFh]rxFUros-jade-ecl-converters-literyFassh}rzFh}r{Fh]r|FjyFassuh}r}Fh}r~Fh}rFh]r€FjyFasssuUrqtrF}r‚F(h}rƒFh}r„Fh]r…FU ros/jade/rqtr†Fassh ˆh }r‡F(h}rˆFh}r‰Fh]rŠFU ros-jade-rqtr‹Fassh}rŒFh}rFh]rŽFj‹Fassuh}rFh}rFh}r‘Fh]r’Fj‹FasssuUffhar“F}r”F(h}r•Fh}r–Fh]r—FUros/jade/jsk_3rdpartyr˜Fassh ˆh }r™F(h}ršFh}r›Fh]rœFU ros-jade-ffharFassh}ržFh}rŸFh]r FjFassuh}r¡Fh}r¢Fh}r£Fh]r¤FjFasssuUwebkit_dependencyr¥F}r¦F(h}r§Fh}r¨Fh]r©FUros/jade/webkit_dependencyrªFassh ˆh }r«F(h}r¬Fh}r­Fh]r®FUros-jade-webkit-dependencyr¯Fassh}r°Fh}r±Fh]r²Fj¯Fassuh}r³Fh}r´Fh}rµFh]r¶Fj¯FasssuUvizr·F}r¸F(h}r¹Fh}rºFh]r»FUros/jade/metapackagesr¼Fassh ˆh }r½F(h}r¾Fh}r¿Fh]rÀFU ros-jade-vizrÁFassh}rÂFh}rÃFh]rÄFjÁFassuh}rÅFh}rÆFh}rÇFh]rÈFjÁFasssuUstdr_launchersrÉF}rÊF(h}rËFh}rÌFh]rÍFUros/jade/stdr_simulatorrÎFassh ˆh }rÏF(h}rÐFh}rÑFh]rÒFUros-jade-stdr-launchersrÓFassh}rÔFh}rÕFh]rÖFjÓFassuh}r×Fh}rØFh}rÙFh]rÚFjÓFasssuUnao_interaction_msgsrÛF}rÜF(h}rÝFh}rÞFh]rßFUros/jade/nao_interactionràFassh ˆh }ráF(h}râFh}rãFh]räFUros-jade-nao-interaction-msgsråFassh}ræFh}rçFh]rèFjåFassuh}réFh}rêFh}rëFh]rìFjåFasssuUrosserial_clientríF}rîF(h}rïFh}rðFh]rñFUros/jade/rosserialròFassh ˆh }róF(h}rôFh}rõFh]röFUros-jade-rosserial-clientr÷Fassh}røFh}rùFh]rúFj÷Fassuh}rûFh}rüFh}rýFh]rþFj÷FasssuU multisenserÿF}rG(h}rGh}rGh]rGUros/jade/multisense_rosrGassh ˆh }rG(h}rGh}rGh]rGUros-jade-multisenser Gassh}r Gh}r Gh]r Gj Gassuh}r Gh}rGh}rGh]rGj GasssuUjoint_limits_interfacerG}rG(h}rGh}rGh]rGUros/jade/ros_controlrGassh ˆh }rG(h}rGh}rGh]rGUros-jade-joint-limits-interfacerGassh}rGh}rGh]rGjGassuh}rGh}r Gh}r!Gh]r"GjGasssuUcontact_states_observerr#G}r$G(h}r%Gh}r&Gh]r'GUros/jade/jsk_controlr(Gassh ˆh }r)G(h}r*Gh}r+Gh]r,GU ros-jade-contact-states-observerr-Gassh}r.Gh}r/Gh]r0Gj-Gassuh}r1Gh}r2Gh}r3Gh]r4Gj-GasssuU saphari_msgsr5G}r6G(h}r7Gh}r8Gh]r9GUros/jade/iai_common_msgsr:Gassh ˆh }r;G(h}rGUros-jade-saphari-msgsr?Gassh}r@Gh}rAGh]rBGj?Gassuh}rCGh}rDGh}rEGh]rFGj?GasssuU ntpd_driverrGG}rHG(h}rIGh}rJGh]rKGUros/jade/ntpd_driverrLGassh ˆh }rMG(h}rNGh}rOGh]rPGUros-jade-ntpd-driverrQGassh}rRGh}rSGh]rTGjQGassuh}rUGh}rVGh}rWGh]rXGjQGasssuUsocketcan_bridgerYG}rZG(h}r[Gh}r\Gh]r]GUros/jade/ros_canopenr^Gassh ˆh }r_G(h}r`Gh}raGh]rbGUros-jade-socketcan-bridgercGassh}rdGh}reGh]rfGjcGassuh}rgGh}rhGh}riGh]rjGjcGasssuUhokuyo3drkG}rlG(h}rmGh}rnGh]roGUros/jade/hokuyo3drpGassh ˆh }rqG(h}rrGh}rsGh]rtGUros-jade-hokuyo3druGassh}rvGh}rwGh]rxGjuGassuh}ryGh}rzGh}r{Gh]r|GjuGasssuU leap_motionr}G}r~G(h}rGh}r€Gh]rGUros/jade/leap_motionr‚Gassh ˆh }rƒG(h}r„Gh}r…Gh]r†GUros-jade-leap-motionr‡Gassh}rˆGh}r‰Gh]rŠGj‡Gassuh}r‹Gh}rŒGh}rGh]rŽGj‡GasssuU tetris_launchrG}rG(h}r‘Gh}r’Gh]r“GUros/jade/hakutor”Gassh ˆh }r•G(h}r–Gh}r—Gh]r˜GUros-jade-tetris-launchr™Gassh}ršGh}r›Gh]rœGj™Gassuh}rGh}ržGh}rŸGh]r Gj™GasssuUindustrial_trajectory_filtersr¡G}r¢G(h}r£Gh}r¤Gh]r¥GUros/jade/industrial_corer¦Gassh ˆh }r§G(h}r¨Gh}r©Gh]rªGU&ros-jade-industrial-trajectory-filtersr«Gassh}r¬Gh}r­Gh]r®Gj«Gassuh}r¯Gh}r°Gh}r±Gh]r²Gj«GasssuU key_teleopr³G}r´G(h}rµGh}r¶Gh]r·GUros/jade/teleop_toolsr¸Gassh ˆh }r¹G(h}rºGh}r»Gh]r¼GUros-jade-key-teleopr½Gassh}r¾Gh}r¿Gh]rÀGj½Gassuh}rÁGh}rÂGh}rÃGh]rÄGj½GasssuUgeometry_experimentalrÅG}rÆG(h}rÇGh}rÈGh]rÉGUros/jade/geometry2rÊGassh ˆh }rËG(h}rÌGh}rÍGh]rÎGUros-jade-geometry-experimentalrÏGassh}rÐGh}rÑGh]rÒGjÏGassuh}rÓGh}rÔGh}rÕGh]rÖGjÏGasssuUrqt_bagr×G}rØG(h}rÙGh}rÚGh]rÛGUros/jade/rqt_bagrÜGassh ˆh }rÝG(h}rÞGh}rßGh]ràGUros-jade-rqt-bagráGassh}râGh}rãGh]räGjáGassuh}råGh}ræGh}rçGh]rèGjáGasssuUschunk_svh_driverréG}rêG(h}rëGh}rìGh]ríGUros/jade/schunk_svh_driverrîGassh ˆh }rïG(h}rðGh}rñGh]ròGUros-jade-schunk-svh-driverróGassh}rôGh}rõGh]röGjóGassuh}r÷Gh}røGh}rùGh]rúGjóGasssuUrplidar_pythonrûG}rüG(h}rýGh}rþGh]rÿGUros/jade/rplidar_pythonrHassh ˆh }rH(h}rHh}rHh]rHUros-jade-rplidar-pythonrHassh}rHh}rHh]rHjHassuh}r Hh}r Hh}r Hh]r HjHasssuU map_laserr H}rH(h}rHh}rHh]rHUros/jade/laser_filteringrHassh ˆh }rH(h}rHh}rHh]rHUros-jade-map-laserrHassh}rHh}rHh]rHjHassuh}rHh}rHh}rHh]rHjHasssuU euscolladarH}r H(h}r!Hh}r"Hh]r#HUros/jade/jsk_model_toolsr$Hassh ˆh }r%H(h}r&Hh}r'Hh]r(HUros-jade-euscolladar)Hassh}r*Hh}r+Hh]r,Hj)Hassuh}r-Hh}r.Hh}r/Hh]r0Hj)HasssuUpr2_kinematicsr1H}r2H(h}r3Hh}r4Hh]r5HUros/jade/pr2_kinematicsr6Hassh ˆh }r7H(h}r8Hh}r9Hh]r:HUros-jade-pr2-kinematicsr;Hassh}rHj;Hassuh}r?Hh}r@Hh}rAHh]rBHj;HasssuU libuvc_rosrCH}rDH(h}rEHh}rFHh]rGHUros/jade/libuvc_rosrHHassh ˆh }rIH(h}rJHh}rKHh]rLHUros-jade-libuvc-rosrMHassh}rNHh}rOHh]rPHjMHassuh}rQHh}rRHh}rSHh]rTHjMHasssuU swri_consolerUH}rVH(h}rWHh}rXHh]rYHUros/jade/swri_consolerZHassh ˆh }r[H(h}r\Hh}r]Hh]r^HUros-jade-swri-consoler_Hassh}r`Hh}raHh]rbHj_Hassuh}rcHh}rdHh}reHh]rfHj_HasssuU rtt_std_msgsrgH}rhH(h}riHh}rjHh]rkHUros/jade/rtt_ros_integrationrlHassh ˆh }rmH(h}rnHh}roHh]rpHUros-jade-rtt-std-msgsrqHassh}rrHh}rsHh]rtHjqHassuh}ruHh}rvHh}rwHh]rxHjqHasssuUeusurdfryH}rzH(h}r{Hh}r|Hh]r}HUros/jade/jsk_model_toolsr~Hassh ˆh }rH(h}r€Hh}rHh]r‚HUros-jade-eusurdfrƒHassh}r„Hh}r…Hh]r†HjƒHassuh}r‡Hh}rˆHh}r‰Hh]rŠHjƒHasssuU p2os_msgsr‹H}rŒH(h}rHh}rŽHh]rHU ros/jade/p2osrHassh ˆh }r‘H(h}r’Hh}r“Hh]r”HUros-jade-p2os-msgsr•Hassh}r–Hh}r—Hh]r˜Hj•Hassuh}r™Hh}ršHh}r›Hh]rœHj•HasssuU jsk_toolsrH}ržH(h}rŸHh}r Hh]r¡HUros/jade/jsk_commonr¢Hassh ˆh }r£H(h}r¤Hh}r¥Hh]r¦HUros-jade-jsk-toolsr§Hassh}r¨Hh}r©Hh]rªHj§Hassuh}r«Hh}r¬Hh}r­Hh]r®Hj§HasssuU jsk_ik_serverr¯H}r°H(h}r±Hh}r²Hh]r³HUros/jade/jsk_controlr´Hassh ˆh }rµH(h}r¶Hh}r·Hh]r¸HUros-jade-jsk-ik-serverr¹Hassh}rºHh}r»Hh]r¼Hj¹Hassuh}r½Hh}r¾Hh}r¿Hh]rÀHj¹HasssuU pyros_configrÁH}rÂH(h}rÃHh}rÄHh]rÅHUros/jade/pyros_configrÆHassh ˆh }rÇH(h}rÈHh}rÉHh]rÊHUros-jade-pyros-configrËHassh}rÌHh}rÍHh]rÎHjËHassuh}rÏHh}rÐHh}rÑHh]rÒHjËHasssuUiai_robosherlock_actionsrÓH}rÔH(h}rÕHh}rÖHh]r×HUros/jade/iai_common_msgsrØHassh ˆh }rÙH(h}rÚHh}rÛHh]rÜHU!ros-jade-iai-robosherlock-actionsrÝHassh}rÞHh}rßHh]ràHjÝHassuh}ráHh}râHh}rãHh]räHjÝHasssuUqwt_dependencyråH}ræH(h}rçHh}rèHh]réHUros/jade/qwt_dependencyrêHassh ˆh }rëH(h}rìHh}ríHh]rîHUros-jade-qwt-dependencyrïHassh}rðHh}rñHh]ròHjïHassuh}róHh}rôHh}rõHh]röHjïHasssuUpr2_dashboard_aggregatorr÷H}røH(h}rùHh}rúHh]rûHUros/jade/pr2_commonrüHassh ˆh }rýH(h}rþHh}rÿHh]rIU!ros-jade-pr2-dashboard-aggregatorrIassh}rIh}rIh]rIjIassuh}rIh}rIh}rIh]rIjIasssuUromeo_sensors_pyr I}r I(h}r Ih}r Ih]r IUros/jade/romeo_robotrIassh ˆh }rI(h}rIh}rIh]rIUros-jade-romeo-sensors-pyrIassh}rIh}rIh]rIjIassuh}rIh}rIh}rIh]rIjIasssuU naoqi_libqirI}rI(h}rIh}rIh]rIUros/jade/naoqi_libqir Iassh ˆh }r!I(h}r"Ih}r#Ih]r$IUros-jade-naoqi-libqir%Iassh}r&Ih}r'Ih]r(Ij%Iassuh}r)Ih}r*Ih}r+Ih]r,Ij%IasssuUurdf_sim_tutorialr-I}r.I(h}r/Ih}r0Ih]r1IUros/jade/urdf_tutorialr2Iassh ˆh }r3I(h}r4Ih}r5Ih]r6IUros-jade-urdf-sim-tutorialr7Iassh}r8Ih}r9Ih]r:Ij7Iassuh}r;Ih}rIj7IasssuUjson_prolog_msgsr?I}r@I(h}rAIh}rBIh]rCIUros/jade/iai_common_msgsrDIassh ˆh }rEI(h}rFIh}rGIh]rHIUros-jade-json-prolog-msgsrIIassh}rJIh}rKIh]rLIjIIassuh}rMIh}rNIh}rOIh]rPIjIIasssuU rail_ceilingrQI}rRI(h}rSIh}rTIh]rUIUros/jade/rail_ceilingrVIassh ˆh }rWI(h}rXIh}rYIh]rZIUros-jade-rail-ceilingr[Iassh}r\Ih}r]Ih]r^Ij[Iassuh}r_Ih}r`Ih}raIh]rbIj[IasssuUhector_geotiff_pluginsrcI}rdI(h}reIh}rfIh]rgIUros/jade/hector_slamrhIassh ˆh }riI(h}rjIh}rkIh]rlIUros-jade-hector-geotiff-pluginsrmIassh}rnIh}roIh]rpIjmIassuh}rqIh}rrIh}rsIh]rtIjmIasssuU rqt_multiplotruI}rvI(h}rwIh}rxIh]ryIUros/jade/rqt_multiplot_pluginrzIassh ˆh }r{I(h}r|Ih}r}Ih]r~IUros-jade-rqt-multiplotrIassh}r€Ih}rIh]r‚IjIassuh}rƒIh}r„Ih}r…Ih]r†IjIasssuUm4atx_battery_monitorr‡I}rˆI(h}r‰Ih}rŠIh]r‹IUros/jade/m4atx_battery_monitorrŒIassh ˆh }rI(h}rŽIh}rIh]rIUros-jade-m4atx-battery-monitorr‘Iassh}r’Ih}r“Ih]r”Ij‘Iassuh}r•Ih}r–Ih}r—Ih]r˜Ij‘IasssuUmrpt_rbpf_slamr™I}ršI(h}r›Ih}rœIh]rIUros/jade/mrpt_slamržIassh ˆh }rŸI(h}r Ih}r¡Ih]r¢IUros-jade-mrpt-rbpf-slamr£Iassh}r¤Ih}r¥Ih]r¦Ij£Iassuh}r§Ih}r¨Ih}r©Ih]rªIj£IasssuU ecl_time_liter«I}r¬I(h}r­Ih}r®Ih]r¯IUros/jade/ecl_liter°Iassh ˆh }r±I(h}r²Ih}r³Ih]r´IUros-jade-ecl-time-literµIassh}r¶Ih}r·Ih]r¸IjµIassuh}r¹Ih}rºIh}r»Ih]r¼IjµIasssuUrosunitr½I}r¾I(h}r¿Ih}rÀIh]rÁIU ros/jade/rosrÂIassh ˆh }rÃI(h}rÄIh}rÅIh]rÆIUros-jade-rosunitrÇIassh}rÈIh}rÉIh]rÊIjÇIassuh}rËIh}rÌIh}rÍIh]rÎIjÇIasssuUmove_base_msgsrÏI}rÐI(h}rÑIh}rÒIh]rÓIUros/jade/navigation_msgsrÔIassh ˆh }rÕI(h}rÖIh}r×Ih]rØIUros-jade-move-base-msgsrÙIassh}rÚIh}rÛIh]rÜIjÙIassuh}rÝIh}rÞIh}rßIh]ràIjÙIasssuUhector_gazebo_thermal_cameraráI}râI(h}rãIh}räIh]råIUros/jade/hector_gazeboræIassh ˆh }rçI(h}rèIh}réIh]rêIU%ros-jade-hector-gazebo-thermal-camerarëIassh}rìIh}ríIh]rîIjëIassuh}rïIh}rðIh}rñIh]ròIjëIasssuUpointcloud_to_laserscanróI}rôI(h}rõIh}röIh]r÷IU ros/jade/pointcloud_to_laserscanrøIassh ˆh }rùI(h}rúIh}rûIh]rüIU ros-jade-pointcloud-to-laserscanrýIassh}rþIh}rÿIh]rJjýIassuh}rJh}rJh}rJh]rJjýIasssuU jsk_hark_msgsrJ}rJ(h}rJh}rJh]r JUros/jade/jsk_common_msgsr Jassh ˆh }r J(h}r Jh}r Jh]rJUros-jade-jsk-hark-msgsrJassh}rJh}rJh]rJjJassuh}rJh}rJh}rJh]rJjJasssuUrosparam_handlerrJ}rJ(h}rJh}rJh]rJUros/jade/rosparam_handlerrJassh ˆh }rJ(h}rJh}rJh]r JUros-jade-rosparam-handlerr!Jassh}r"Jh}r#Jh]r$Jj!Jassuh}r%Jh}r&Jh}r'Jh]r(Jj!JasssuUstager)J}r*J(h}r+Jh}r,Jh]r-JUros/jade/stager.Jassh ˆh }r/J(h}r0Jh}r1Jh]r2JUros-jade-stager3Jassh}r4Jh}r5Jh]r6Jj3Jassuh}r7Jh}r8Jh}r9Jh]r:Jj3JasssuU roomba_stager;J}rJh]r?JUros/jade/navigation_tutorialsr@Jassh ˆh }rAJ(h}rBJh}rCJh]rDJUros-jade-roomba-stagerEJassh}rFJh}rGJh]rHJjEJassuh}rIJh}rJJh}rKJh]rLJjEJasssuU gps_commonrMJ}rNJ(h}rOJh}rPJh]rQJUros/jade/gps_umdrRJassh ˆh }rSJ(h}rTJh}rUJh]rVJUros-jade-gps-commonrWJassh}rXJh}rYJh]rZJjWJassuh}r[Jh}r\Jh}r]Jh]r^JjWJasssuUjsk_datar_J}r`J(h}raJh}rbJh]rcJUros/jade/jsk_commonrdJassh ˆh }reJ(h}rfJh}rgJh]rhJUros-jade-jsk-datariJassh}rjJh}rkJh]rlJjiJassuh}rmJh}rnJh}roJh]rpJjiJasssuUnovatel_span_driverrqJ}rrJ(h}rsJh}rtJh]ruJUros/jade/novatel_span_driverrvJassh ˆh }rwJ(h}rxJh}ryJh]rzJUros-jade-novatel-span-driverr{Jassh}r|Jh}r}Jh]r~Jj{Jassuh}rJh}r€Jh}rJh]r‚Jj{JasssuU mrpt_bridgerƒJ}r„J(h}r…Jh}r†Jh]r‡JUros/jade/mrpt_navigationrˆJassh ˆh }r‰J(h}rŠJh}r‹Jh]rŒJUros-jade-mrpt-bridgerJassh}rŽJh}rJh]rJjJassuh}r‘Jh}r’Jh}r“Jh]r”JjJasssuU canopen_402r•J}r–J(h}r—Jh}r˜Jh]r™JUros/jade/ros_canopenršJassh ˆh }r›J(h}rœJh}rJh]ržJUros-jade-canopen-402rŸJassh}r Jh}r¡Jh]r¢JjŸJassuh}r£Jh}r¤Jh}r¥Jh]r¦JjŸJasssuUcamera_info_managerr§J}r¨J(h}r©Jh}rªJh]r«JUros/jade/image_commonr¬Jassh ˆh }r­J(h}r®Jh}r¯Jh]r°JUros-jade-camera-info-managerr±Jassh}r²Jh}r³Jh]r´Jj±Jassuh}rµJh}r¶Jh}r·Jh]r¸Jj±JasssuU wireless_msgsr¹J}rºJ(h}r»Jh}r¼Jh]r½JUros/jade/wirelessr¾Jassh ˆh }r¿J(h}rÀJh}rÁJh]rÂJUros-jade-wireless-msgsrÃJassh}rÄJh}rÅJh]rÆJjÃJassuh}rÇJh}rÈJh}rÉJh]rÊJjÃJasssuUpddl_planner_viewerrËJ}rÌJ(h}rÍJh}rÎJh]rÏJUros/jade/jsk_planningrÐJassh ˆh }rÑJ(h}rÒJh}rÓJh]rÔJUros-jade-pddl-planner-viewerrÕJassh}rÖJh}r×Jh]rØJjÕJassuh}rÙJh}rÚJh}rÛJh]rÜJjÕJasssuUroswwwrÝJ}rÞJ(h}rßJh}ràJh]ráJUros/jade/roswwwrâJassh ˆh }rãJ(h}räJh}råJh]ræJUros-jade-roswwwrçJassh}rèJh}réJh]rêJjçJassuh}rëJh}rìJh}ríJh]rîJjçJasssuUgrizzly_motionrïJ}rðJ(h}rñJh}ròJh]róJUros/jade/grizzlyrôJassh ˆh }rõJ(h}röJh}r÷Jh]røJUros-jade-grizzly-motionrùJassh}rúJh}rûJh]rüJjùJassuh}rýJh}rþJh}rÿJh]rKjùJasssuUrosh_desktop_pluginsrK}rK(h}rKh}rKh]rKUros/jade/rosh_desktop_pluginsrKassh ˆh }rK(h}rKh}r Kh]r KUros-jade-rosh-desktop-pluginsr Kassh}r Kh}r Kh]rKj Kassuh}rKh}rKh}rKh]rKj KasssuUflakyrK}rK(h}rKh}rKh]rKUros/jade/flakyrKassh ˆh }rK(h}rKh}rKh]rKUros-jade-flakyrKassh}rKh}rKh]r KjKassuh}r!Kh}r"Kh}r#Kh]r$KjKasssuUrtt_rosdeploymentr%K}r&K(h}r'Kh}r(Kh]r)KUros/jade/rtt_ros_integrationr*Kassh ˆh }r+K(h}r,Kh}r-Kh]r.KUros-jade-rtt-rosdeploymentr/Kassh}r0Kh}r1Kh]r2Kj/Kassuh}r3Kh}r4Kh}r5Kh]r6Kj/KasssuUnloptr7K}r8K(h}r9Kh}r:Kh]r;KUros/jade/jsk_3rdpartyrKh}r?Kh]r@KUros-jade-nloptrAKassh}rBKh}rCKh]rDKjAKassuh}rEKh}rFKh}rGKh]rHKjAKasssuUopencv3rIK}rJK(h}rKKh}rLKh]rMKUros/jade/opencv3rNKassh ˆh }rOK(h}rPKh}rQKh]rRKUros-jade-opencv3rSKassh}rTKh}rUKh]rVKjSKassuh}rWKh}rXKh}rYKh]rZKjSKasssuU kdl_typekitr[K}r\K(h}r]Kh}r^Kh]r_KUros/jade/rtt_geometryr`Kassh ˆh }raK(h}rbKh}rcKh]rdKUros-jade-kdl-typekitreKassh}rfKh}rgKh]rhKjeKassuh}riKh}rjKh}rkKh]rlKjeKasssuUardrone_autonomyrmK}rnK(h}roKh}rpKh]rqKUros/jade/ardrone_autonomyrrKassh ˆh }rsK(h}rtKh}ruKh]rvKUros-jade-ardrone-autonomyrwKassh}rxKh}ryKh]rzKjwKassuh}r{Kh}r|Kh}r}Kh]r~KjwKasssuUbondrK}r€K(h}rKh}r‚Kh]rƒKUros/jade/bond_corer„Kassh ˆh }r…K(h}r†Kh}r‡Kh]rˆKU ros-jade-bondr‰Kassh}rŠKh}r‹Kh]rŒKj‰Kassuh}rKh}rŽKh}rKh]rKj‰KasssuU rtt_ros_msgsr‘K}r’K(h}r“Kh}r”Kh]r•KUros/jade/rtt_ros_integrationr–Kassh ˆh }r—K(h}r˜Kh}r™Kh]ršKUros-jade-rtt-ros-msgsr›Kassh}rœKh}rKh]ržKj›Kassuh}rŸKh}r Kh}r¡Kh]r¢Kj›KasssuUvisp_camera_calibrationr£K}r¤K(h}r¥Kh}r¦Kh]r§KUros/jade/vision_vispr¨Kassh ˆh }r©K(h}rªKh}r«Kh]r¬KU ros-jade-visp-camera-calibrationr­Kassh}r®Kh}r¯Kh]r°Kj­Kassuh}r±Kh}r²Kh}r³Kh]r´Kj­KasssuUrotors_hil_interfacerµK}r¶K(h}r·Kh}r¸Kh]r¹KUros/jade/rotors_simulatorrºKassh ˆh }r»K(h}r¼Kh}r½Kh]r¾KUros-jade-rotors-hil-interfacer¿Kassh}rÀKh}rÁKh]rÂKj¿Kassuh}rÃKh}rÄKh}rÅKh]rÆKj¿KasssuUmoveit_ros_perceptionrÇK}rÈK(h}rÉKh}rÊKh]rËKUros/jade/moveitrÌKassh ˆh }rÍK(h}rÎKh}rÏKh]rÐKUros-jade-moveit-ros-perceptionrÑKassh}rÒKh}rÓKh]rÔKjÑKassuh}rÕKh}rÖKh}r×Kh]rØKjÑKasssuUcontroller_interfacerÙK}rÚK(h}rÛKh}rÜKh]rÝKUros/jade/ros_controlrÞKassh ˆh }rßK(h}ràKh}ráKh]râKUros-jade-controller-interfacerãKassh}räKh}råKh]ræKjãKassuh}rçKh}rèKh}réKh]rêKjãKasssuU marshmallowrëK}rìK(h}ríKh}rîKh]rïKUros/jade/marshmallowrðKassh ˆh }rñK(h}ròKh}róKh]rôKUros-jade-marshmallowrõKassh}röKh}r÷Kh]røKjõKassuh}rùKh}rúKh}rûKh]rüKjõKasssuUmanifest_cleanerrýK}rþK(h}rÿKh}rLh]rLUros/jade/wu_ros_toolsrLassh ˆh }rL(h}rLh}rLh]rLUros-jade-manifest-cleanerrLassh}rLh}r Lh]r LjLassuh}r Lh}r Lh}r Lh]rLjLasssuUobject_recognition_corerL}rL(h}rLh}rLh]rLU ros/jade/object_recognition_corerLassh ˆh }rL(h}rLh}rLh]rLU ros-jade-object-recognition-corerLassh}rLh}rLh]rLjLassuh}rLh}rLh}rLh]r LjLasssuU qt_gui_cppr!L}r"L(h}r#Lh}r$Lh]r%LUros/jade/qt_gui_corer&Lassh ˆh }r'L(h}r(Lh}r)Lh]r*LUros-jade-qt-gui-cppr+Lassh}r,Lh}r-Lh]r.Lj+Lassuh}r/Lh}r0Lh}r1Lh]r2Lj+LasssuU fetch_gazebor3L}r4L(h}r5Lh}r6Lh]r7LUros/jade/fetch_gazebor8Lassh ˆh }r9L(h}r:Lh}r;Lh]rLh}r?Lh]r@Lj=Lassuh}rALh}rBLh}rCLh]rDLj=LasssuUmoveit_ros_benchmarks_guirEL}rFL(h}rGLh}rHLh]rILUros/jade/moveitrJLassh ˆh }rKL(h}rLLh}rMLh]rNLU"ros-jade-moveit-ros-benchmarks-guirOLassh}rPLh}rQLh]rRLjOLassuh}rSLh}rTLh}rULh]rVLjOLasssuUjsk_footstep_plannerrWL}rXL(h}rYLh}rZLh]r[LUros/jade/jsk_controlr\Lassh ˆh }r]L(h}r^Lh}r_Lh]r`LUros-jade-jsk-footstep-plannerraLassh}rbLh}rcLh]rdLjaLassuh}reLh}rfLh}rgLh]rhLjaLasssuUdesignator_integration_msgsriL}rjL(h}rkLh}rlLh]rmLUros/jade/iai_common_msgsrnLassh ˆh }roL(h}rpLh}rqLh]rrLU$ros-jade-designator-integration-msgsrsLassh}rtLh}ruLh]rvLjsLassuh}rwLh}rxLh}ryLh]rzLjsLasssuUrwt_config_generatorr{L}r|L(h}r}Lh}r~Lh]rLUros/jade/rwt_config_generatorr€Lassh ˆh }rL(h}r‚Lh}rƒLh]r„LUros-jade-rwt-config-generatorr…Lassh}r†Lh}r‡Lh]rˆLj…Lassuh}r‰Lh}rŠLh}r‹Lh]rŒLj…LasssuUjsk_footstep_controllerrL}rŽL(h}rLh}rLh]r‘LUros/jade/jsk_controlr’Lassh ˆh }r“L(h}r”Lh}r•Lh]r–LU ros-jade-jsk-footstep-controllerr—Lassh}r˜Lh}r™Lh]ršLj—Lassuh}r›Lh}rœLh}rLh]ržLj—LasssuU roslisp_replrŸL}r L(h}r¡Lh}r¢Lh]r£LUros/jade/ros_emacs_utilsr¤Lassh ˆh }r¥L(h}r¦Lh}r§Lh]r¨LUros-jade-roslisp-replr©Lassh}rªLh}r«Lh]r¬Lj©Lassuh}r­Lh}r®Lh}r¯Lh]r°Lj©LasssuUmarti_sensor_msgsr±L}r²L(h}r³Lh}r´Lh]rµLUros/jade/marti_messagesr¶Lassh ˆh }r·L(h}r¸Lh}r¹Lh]rºLUros-jade-marti-sensor-msgsr»Lassh}r¼Lh}r½Lh]r¾Lj»Lassuh}r¿Lh}rÀLh}rÁLh]rÂLj»LasssuUrviz_python_tutorialrÃL}rÄL(h}rÅLh}rÆLh]rÇLU ros/jade/visualization_tutorialsrÈLassh ˆh }rÉL(h}rÊLh}rËLh]rÌLUros-jade-rviz-python-tutorialrÍLassh}rÎLh}rÏLh]rÐLjÍLassuh}rÑLh}rÒLh}rÓLh]rÔLjÍLasssuU katana_msgsrÕL}rÖL(h}r×Lh}rØLh]rÙLUros/jade/katana_driverrÚLassh ˆh }rÛL(h}rÜLh}rÝLh]rÞLUros-jade-katana-msgsrßLassh}ràLh}ráLh]râLjßLassuh}rãLh}räLh}råLh]ræLjßLasssuU ecl_toolsrçL}rèL(h}réLh}rêLh]rëLUros/jade/ecl_toolsrìLassh ˆh }ríL(h}rîLh}rïLh]rðLUros-jade-ecl-toolsrñLassh}ròLh}róLh]rôLjñLassuh}rõLh}röLh}r÷Lh]røLjñLasssuUimage_exposure_msgsrùL}rúL(h}rûLh}rüLh]rýLU ros/jade/pointgrey_camera_driverrþLassh ˆh }rÿL(h}rMh}rMh]rMUros-jade-image-exposure-msgsrMassh}rMh}rMh]rMjMassuh}rMh}rMh}r Mh]r MjMasssuUpeople_velocity_trackerr M}r M(h}r Mh}rMh]rMUros/jade/peoplerMassh ˆh }rM(h}rMh}rMh]rMU ros-jade-people-velocity-trackerrMassh}rMh}rMh]rMjMassuh}rMh}rMh}rMh]rMjMasssuUmoveit_ros_manipulationrM}rM(h}rMh}r Mh]r!MUros/jade/moveitr"Massh ˆh }r#M(h}r$Mh}r%Mh]r&MU ros-jade-moveit-ros-manipulationr'Massh}r(Mh}r)Mh]r*Mj'Massuh}r+Mh}r,Mh}r-Mh]r.Mj'MasssuUrosbashr/M}r0M(h}r1Mh}r2Mh]r3MU ros/jade/rosr4Massh ˆh }r5M(h}r6Mh}r7Mh]r8MUros-jade-rosbashr9Massh}r:Mh}r;Mh]rMh}r?Mh]r@Mj9MasssuUnaoqi_bridge_msgsrAM}rBM(h}rCMh}rDMh]rEMUros/jade/naoqi_bridge_msgsrFMassh ˆh }rGM(h}rHMh}rIMh]rJMUros-jade-naoqi-bridge-msgsrKMassh}rLMh}rMMh]rNMjKMassuh}rOMh}rPMh}rQMh]rRMjKMasssuUrqt_common_pluginsrSM}rTM(h}rUMh}rVMh]rWMUros/jade/rqt_common_pluginsrXMassh ˆh }rYM(h}rZMh}r[Mh]r\MUros-jade-rqt-common-pluginsr]Massh}r^Mh}r_Mh]r`Mj]Massuh}raMh}rbMh}rcMh]rdMj]MasssuU gpsd_clientreM}rfM(h}rgMh}rhMh]riMUros/jade/gps_umdrjMassh ˆh }rkM(h}rlMh}rmMh]rnMUros-jade-gpsd-clientroMassh}rpMh}rqMh]rrMjoMassuh}rsMh}rtMh}ruMh]rvMjoMasssuU rtmros_commonrwM}rxM(h}ryMh}rzMh]r{MUros/jade/rtmros_commonr|Massh ˆh }r}M(h}r~Mh}rMh]r€MUros-jade-rtmros-commonrMassh}r‚Mh}rƒMh]r„MjMassuh}r…Mh}r†Mh}r‡Mh]rˆMjMasssuU swri_nodeletr‰M}rŠM(h}r‹Mh}rŒMh]rMUros/jade/marti_commonrŽMassh ˆh }rM(h}rMh}r‘Mh]r’MUros-jade-swri-nodeletr“Massh}r”Mh}r•Mh]r–Mj“Massuh}r—Mh}r˜Mh}r™Mh]ršMj“MasssuUuwsimr›M}rœM(h}rMh}ržMh]rŸMUros/jade/underwater_simulationr Massh ˆh }r¡M(h}r¢Mh}r£Mh]r¤MUros-jade-uwsimr¥Massh}r¦Mh}r§Mh]r¨Mj¥Massuh}r©Mh}rªMh}r«Mh]r¬Mj¥MasssuUrqt_plotr­M}r®M(h}r¯Mh}r°Mh]r±MUros/jade/rqt_plotr²Massh ˆh }r³M(h}r´Mh}rµMh]r¶MUros-jade-rqt-plotr·Massh}r¸Mh}r¹Mh]rºMj·Massuh}r»Mh}r¼Mh}r½Mh]r¾Mj·MasssuUteleop_twist_joyr¿M}rÀM(h}rÁMh}rÂMh]rÃMUros/jade/teleop_twist_joyrÄMassh ˆh }rÅM(h}rÆMh}rÇMh]rÈMUros-jade-teleop-twist-joyrÉMassh}rÊMh}rËMh]rÌMjÉMassuh}rÍMh}rÎMh}rÏMh]rÐMjÉMasssuUsherlock_sim_msgsrÑM}rÒM(h}rÓMh}rÔMh]rÕMUros/jade/iai_common_msgsrÖMassh ˆh }r×M(h}rØMh}rÙMh]rÚMUros-jade-sherlock-sim-msgsrÛMassh}rÜMh}rÝMh]rÞMjÛMassuh}rßMh}ràMh}ráMh]râMjÛMasssuU control_msgsrãM}räM(h}råMh}ræMh]rçMUros/jade/control_msgsrèMassh ˆh }réM(h}rêMh}rëMh]rìMUros-jade-control-msgsríMassh}rîMh}rïMh]rðMjíMassuh}rñMh}ròMh}róMh]rôMjíMasssuUpr2_msgsrõM}röM(h}r÷Mh}røMh]rùMUros/jade/pr2_commonrúMassh ˆh }rûM(h}rüMh}rýMh]rþMUros-jade-pr2-msgsrÿMassh}rNh}rNh]rNjÿMassuh}rNh}rNh}rNh]rNjÿMasssuUrviz_imu_pluginrN}rN(h}r Nh}r Nh]r NUros/jade/imu_toolsr Nassh ˆh }r N(h}rNh}rNh]rNUros-jade-rviz-imu-pluginrNassh}rNh}rNh]rNjNassuh}rNh}rNh}rNh]rNjNasssuUlaser_ortho_projectorrN}rN(h}rNh}rNh]rNUros/jade/scan_toolsrNassh ˆh }rN(h}r Nh}r!Nh]r"NUros-jade-laser-ortho-projectorr#Nassh}r$Nh}r%Nh]r&Nj#Nassuh}r'Nh}r(Nh}r)Nh]r*Nj#NasssuUmoveit_commanderr+N}r,N(h}r-Nh}r.Nh]r/NUros/jade/moveitr0Nassh ˆh }r1N(h}r2Nh}r3Nh]r4NUros-jade-moveit-commanderr5Nassh}r6Nh}r7Nh]r8Nj5Nassuh}r9Nh}r:Nh}r;Nh]rN(h}r?Nh}r@Nh]rANUros/jade/ros_controlrBNassh ˆh }rCN(h}rDNh}rENh]rFNUros-jade-transmission-interfacerGNassh}rHNh}rINh]rJNjGNassuh}rKNh}rLNh}rMNh]rNNjGNasssuUcalibration_msgsrON}rPN(h}rQNh}rRNh]rSNUros/jade/calibrationrTNassh ˆh }rUN(h}rVNh}rWNh]rXNUros-jade-calibration-msgsrYNassh}rZNh}r[Nh]r\NjYNassuh}r]Nh}r^Nh}r_Nh]r`NjYNasssuUaxcliraN}rbN(h}rcNh}rdNh]reNUros/jade/axclirfNassh ˆh }rgN(h}rhNh}riNh]rjNUros-jade-axclirkNassh}rlNh}rmNh]rnNjkNassuh}roNh}rpNh}rqNh]rrNjkNasssuU image_rotatersN}rtN(h}ruNh}rvNh]rwNUros/jade/image_pipelinerxNassh ˆh }ryN(h}rzNh}r{Nh]r|NUros-jade-image-rotater}Nassh}r~Nh}rNh]r€Nj}Nassuh}rNh}r‚Nh}rƒNh]r„Nj}NasssuU pocketsphinxr…N}r†N(h}r‡Nh}rˆNh]r‰NUros/jade/pocketsphinxrŠNassh ˆh }r‹N(h}rŒNh}rNh]rŽNUros-jade-pocketsphinxrNassh}rNh}r‘Nh]r’NjNassuh}r“Nh}r”Nh}r•Nh]r–NjNasssuUjsk_interactive_testr—N}r˜N(h}r™Nh}ršNh]r›NUros/jade/jsk_visualizationrœNassh ˆh }rN(h}ržNh}rŸNh]r NUros-jade-jsk-interactive-testr¡Nassh}r¢Nh}r£Nh]r¤Nj¡Nassuh}r¥Nh}r¦Nh}r§Nh]r¨Nj¡NasssuUindustrial_robot_simulatorr©N}rªN(h}r«Nh}r¬Nh]r­NUros/jade/industrial_corer®Nassh ˆh }r¯N(h}r°Nh}r±Nh]r²NU#ros-jade-industrial-robot-simulatorr³Nassh}r´Nh}rµNh]r¶Nj³Nassuh}r·Nh}r¸Nh}r¹Nh]rºNj³NasssuUodometry_publisher_tutorialr»N}r¼N(h}r½Nh}r¾Nh]r¿NUros/jade/navigation_tutorialsrÀNassh ˆh }rÁN(h}rÂNh}rÃNh]rÄNU$ros-jade-odometry-publisher-tutorialrÅNassh}rÆNh}rÇNh]rÈNjÅNassuh}rÉNh}rÊNh}rËNh]rÌNjÅNasssuU rqt_shellrÍN}rÎN(h}rÏNh}rÐNh]rÑNUros/jade/rqt_shellrÒNassh ˆh }rÓN(h}rÔNh}rÕNh]rÖNUros-jade-rqt-shellr×Nassh}rØNh}rÙNh]rÚNj×Nassuh}rÛNh}rÜNh}rÝNh]rÞNj×NasssuU range_msgsrßN}ràN(h}ráNh}râNh]rãNUros/jade/range_msgsräNassh ˆh }råN(h}ræNh}rçNh]rèNUros-jade-range-msgsréNassh}rêNh}rëNh]rìNjéNassuh}ríNh}rîNh}rïNh]rðNjéNasssuU p2os_driverrñN}ròN(h}róNh}rôNh]rõNU ros/jade/p2osröNassh ˆh }r÷N(h}røNh}rùNh]rúNUros-jade-p2os-driverrûNassh}rüNh}rýNh]rþNjûNassuh}rÿNh}rOh}rOh]rOjûNasssuUbayesian_belief_networksrO}rO(h}rOh}rOh]rOUros/jade/jsk_3rdpartyrOassh ˆh }r O(h}r Oh}r Oh]r OU!ros-jade-bayesian-belief-networksr Oassh}rOh}rOh]rOj Oassuh}rOh}rOh}rOh]rOj OasssuUjoint_state_controllerrO}rO(h}rOh}rOh]rOUros/jade/ros_controllersrOassh ˆh }rO(h}rOh}rOh]rOUros-jade-joint-state-controllerrOassh}r Oh}r!Oh]r"OjOassuh}r#Oh}r$Oh}r%Oh]r&OjOasssuUroslisp_utilitiesr'O}r(O(h}r)Oh}r*Oh]r+OUros/jade/roslisp_commonr,Oassh ˆh }r-O(h}r.Oh}r/Oh]r0OUros-jade-roslisp-utilitiesr1Oassh}r2Oh}r3Oh]r4Oj1Oassuh}r5Oh}r6Oh}r7Oh]r8Oj1OasssuUrospilotr9O}r:O(h}r;Oh}rOassh ˆh }r?O(h}r@Oh}rAOh]rBOUros-jade-rospilotrCOassh}rDOh}rEOh]rFOjCOassuh}rGOh}rHOh}rIOh]rJOjCOasssuU julius_rosrKO}rLO(h}rMOh}rNOh]rOOUros/jade/jsk_3rdpartyrPOassh ˆh }rQO(h}rROh}rSOh]rTOUros-jade-julius-rosrUOassh}rVOh}rWOh]rXOjUOassuh}rYOh}rZOh}r[Oh]r\OjUOasssuU cv_bridger]O}r^O(h}r_Oh}r`Oh]raOUros/jade/vision_opencvrbOassh ˆh }rcO(h}rdOh}reOh]rfOUros-jade-cv-bridgergOassh}rhOh}riOh]rjOjgOassuh}rkOh}rlOh}rmOh]rnOjgOasssuUaudio_common_msgsroO}rpO(h}rqOh}rrOh]rsOUros/jade/audio_commonrtOassh ˆh }ruO(h}rvOh}rwOh]rxOUros-jade-audio-common-msgsryOassh}rzOh}r{Oh]r|OjyOassuh}r}Oh}r~Oh}rOh]r€OjyOasssuUrqt_deprO}r‚O(h}rƒOh}r„Oh]r…OUros/jade/rqt_depr†Oassh ˆh }r‡O(h}rˆOh}r‰Oh]rŠOUros-jade-rqt-depr‹Oassh}rŒOh}rOh]rŽOj‹Oassuh}rOh}rOh}r‘Oh]r’Oj‹OasssuUcertifir“O}r”O(h}r•Oh}r–Oh]r—OUros/jade/certifir˜Oassh ˆh }r™O(h}ršOh}r›Oh]rœOUros-jade-certifirOassh}ržOh}rŸOh]r OjOassuh}r¡Oh}r¢Oh}r£Oh]r¤OjOasssuUstd_srvsr¥O}r¦O(h}r§Oh}r¨Oh]r©OUros/jade/ros_comm_msgsrªOassh ˆh }r«O(h}r¬Oh}r­Oh]r®OUros-jade-std-srvsr¯Oassh}r°Oh}r±Oh]r²Oj¯Oassuh}r³Oh}r´Oh}rµOh]r¶Oj¯OasssuUphidgets_driversr·O}r¸O(h}r¹Oh}rºOh]r»OUros/jade/phidgets_driversr¼Oassh ˆh }r½O(h}r¾Oh}r¿Oh]rÀOUros-jade-phidgets-driversrÁOassh}rÂOh}rÃOh]rÄOjÁOassuh}rÅOh}rÆOh}rÇOh]rÈOjÁOasssuU uwsim_bulletrÉO}rÊO(h}rËOh}rÌOh]rÍOUros/jade/uwsim_bulletrÎOassh ˆh }rÏO(h}rÐOh}rÑOh]rÒOUros-jade-uwsim-bulletrÓOassh}rÔOh}rÕOh]rÖOjÓOassuh}r×Oh}rØOh}rÙOh]rÚOjÓOasssuUvisualization_osgrÛO}rÜO(h}rÝOh}rÞOh]rßOUros/jade/visualization_osgràOassh ˆh }ráO(h}râOh}rãOh]räOUros-jade-visualization-osgråOassh}ræOh}rçOh]rèOjåOassuh}réOh}rêOh}rëOh]rìOjåOasssuUros_emacs_utilsríO}rîO(h}rïOh}rðOh]rñOUros/jade/ros_emacs_utilsròOassh ˆh }róO(h}rôOh}rõOh]röOUros-jade-ros-emacs-utilsr÷Oassh}røOh}rùOh]rúOj÷Oassuh}rûOh}rüOh}rýOh]rþOj÷OasssuUforce_torque_sensor_controllerrÿO}rP(h}rPh}rPh]rPUros/jade/ros_controllersrPassh ˆh }rP(h}rPh}rPh]rPU'ros-jade-force-torque-sensor-controllerr Passh}r Ph}r Ph]r Pj Passuh}r Ph}rPh}rPh]rPj PasssuUoctomaprP}rP(h}rPh}rPh]rPUros/jade/octomaprPassh ˆh }rP(h}rPh}rPh]rPUros-jade-octomaprPassh}rPh}rPh]rPjPassuh}rPh}r Ph}r!Ph]r"PjPasssuUamclr#P}r$P(h}r%Ph}r&Ph]r'PUros/jade/navigationr(Passh ˆh }r)P(h}r*Ph}r+Ph]r,PU ros-jade-amclr-Passh}r.Ph}r/Ph]r0Pj-Passuh}r1Ph}r2Ph}r3Ph]r4Pj-PasssuUmavlinkr5P}r6P(h}r7Ph}r8Ph]r9PUros/jade/mavlinkr:Passh ˆh }r;P(h}rPUros-jade-mavlinkr?Passh}r@Ph}rAPh]rBPj?Passuh}rCPh}rDPh}rEPh]rFPj?PasssuUlaser_geometryrGP}rHP(h}rIPh}rJPh]rKPUros/jade/laser_geometryrLPassh ˆh }rMP(h}rNPh}rOPh]rPPUros-jade-laser-geometryrQPassh}rRPh}rSPh]rTPjQPassuh}rUPh}rVPh}rWPh]rXPjQPasssuUworld_item_observerrYP}rZP(h}r[Ph}r\Ph]r]PU"ros/jade/spatial_temporal_learningr^Passh ˆh }r_P(h}r`Ph}raPh]rbPUros-jade-world-item-observerrcPassh}rdPh}rePh]rfPjcPassuh}rgPh}rhPh}riPh]rjPjcPasssuUpyzmprkP}rlP(h}rmPh}rnPh]roPUros/jade/pyzmprpPassh ˆh }rqP(h}rrPh}rsPh]rtPUros-jade-pyzmpruPassh}rvPh}rwPh]rxPjuPassuh}ryPh}rzPh}r{Ph]r|PjuPasssuUbondpyr}P}r~P(h}rPh}r€Ph]rPUros/jade/bond_corer‚Passh ˆh }rƒP(h}r„Ph}r…Ph]r†PUros-jade-bondpyr‡Passh}rˆPh}r‰Ph]rŠPj‡Passuh}r‹Ph}rŒPh}rPh]rŽPj‡PasssuUmrpt_localizationrP}rP(h}r‘Ph}r’Ph]r“PUros/jade/mrpt_navigationr”Passh ˆh }r•P(h}r–Ph}r—Ph]r˜PUros-jade-mrpt-localizationr™Passh}ršPh}r›Ph]rœPj™Passuh}rPh}ržPh}rŸPh]r Pj™PasssuU humanoid_msgsr¡P}r¢P(h}r£Ph}r¤Ph]r¥PUros/jade/humanoid_msgsr¦Passh ˆh }r§P(h}r¨Ph}r©Ph]rªPUros-jade-humanoid-msgsr«Passh}r¬Ph}r­Ph]r®Pj«Passuh}r¯Ph}r°Ph}r±Ph]r²Pj«PasssuUvariant_topic_toolsr³P}r´P(h}rµPh}r¶Ph]r·PUros/jade/variantr¸Passh ˆh }r¹P(h}rºPh}r»Ph]r¼PUros-jade-variant-topic-toolsr½Passh}r¾Ph}r¿Ph]rÀPj½Passuh}rÁPh}rÂPh}rÃPh]rÄPj½PasssuU ros_tutorialsrÅP}rÆP(h}rÇPh}rÈPh]rÉPUros/jade/ros_tutorialsrÊPassh ˆh }rËP(h}rÌPh}rÍPh]rÎPUros-jade-ros-tutorialsrÏPassh}rÐPh}rÑPh]rÒPjÏPassuh}rÓPh}rÔPh}rÕPh]rÖPjÏPasssuUrtt_visualization_msgsr×P}rØP(h}rÙPh}rÚPh]rÛPUros/jade/rtt_ros_integrationrÜPassh ˆh }rÝP(h}rÞPh}rßPh]ràPUros-jade-rtt-visualization-msgsráPassh}râPh}rãPh]räPjáPassuh}råPh}ræPh}rçPh]rèPjáPasssuUhakutoréP}rêP(h}rëPh}rìPh]ríPUros/jade/hakutorîPassh ˆh }rïP(h}rðPh}rñPh]ròPUros-jade-hakutoróPassh}rôPh}rõPh]röPjóPassuh}r÷Ph}røPh}rùPh]rúPjóPasssuUmoveitrûP}rüP(h}rýPh}rþPh]rÿPUros/jade/moveitrQassh ˆh }rQ(h}rQh}rQh]rQUros-jade-moveitrQassh}rQh}rQh]rQjQassuh}r Qh}r Qh}r Qh]r QjQasssuUtf2_pyr Q}rQ(h}rQh}rQh]rQUros/jade/geometry2rQassh ˆh }rQ(h}rQh}rQh]rQUros-jade-tf2-pyrQassh}rQh}rQh]rQjQassuh}rQh}rQh}rQh]rQjQasssuUlibuvcrQ}r Q(h}r!Qh}r"Qh]r#QUros/jade/libuvcr$Qassh ˆh }r%Q(h}r&Qh}r'Qh]r(QUros-jade-libuvcr)Qassh}r*Qh}r+Qh]r,Qj)Qassuh}r-Qh}r.Qh}r/Qh]r0Qj)QasssuUmav_commr1Q}r2Q(h}r3Qh}r4Qh]r5QUros/jade/mav_commr6Qassh ˆh }r7Q(h}r8Qh}r9Qh]r:QUros-jade-mav-commr;Qassh}rQj;Qassuh}r?Qh}r@Qh}rAQh]rBQj;QasssuU rosdiagnosticrCQ}rDQ(h}rEQh}rFQh]rGQUros/jade/diagnosticsrHQassh ˆh }rIQ(h}rJQh}rKQh]rLQUros-jade-rosdiagnosticrMQassh}rNQh}rOQh]rPQjMQassuh}rQQh}rRQh}rSQh]rTQjMQasssuU flask_corsrUQ}rVQ(h}rWQh}rXQh]rYQUros/jade/flask_corsrZQassh ˆh }r[Q(h}r\Qh}r]Qh]r^QUros-jade-flask-corsr_Qassh}r`Qh}raQh]rbQj_Qassuh}rcQh}rdQh}reQh]rfQj_QasssuUhousehold_objects_database_msgsrgQ}rhQ(h}riQh}rjQh]rkQU(ros/jade/household_objects_database_msgsrlQassh ˆh }rmQ(h}rnQh}roQh]rpQU(ros-jade-household-objects-database-msgsrqQassh}rrQh}rsQh]rtQjqQassuh}ruQh}rvQh}rwQh]rxQjqQasssuUnav_coreryQ}rzQ(h}r{Qh}r|Qh]r}QUros/jade/navigationr~Qassh ˆh }rQ(h}r€Qh}rQh]r‚QUros-jade-nav-corerƒQassh}r„Qh}r…Qh]r†QjƒQassuh}r‡Qh}rˆQh}r‰Qh]rŠQjƒQasssuUrobot_web_toolsr‹Q}rŒQ(h}rQh}rŽQh]rQUros/jade/robot_web_toolsrQassh ˆh }r‘Q(h}r’Qh}r“Qh]r”QUros-jade-robot-web-toolsr•Qassh}r–Qh}r—Qh]r˜Qj•Qassuh}r™Qh}ršQh}r›Qh]rœQj•QasssuUopenni2_camerarQ}ržQ(h}rŸQh}r Qh]r¡QUros/jade/openni2_camerar¢Qassh ˆh }r£Q(h}r¤Qh}r¥Qh]r¦QUros-jade-openni2-camerar§Qassh}r¨Qh}r©Qh]rªQj§Qassuh}r«Qh}r¬Qh}r­Qh]r®Qj§QasssuUmoveit_pluginsr¯Q}r°Q(h}r±Qh}r²Qh]r³QUros/jade/moveitr´Qassh ˆh }rµQ(h}r¶Qh}r·Qh]r¸QUros-jade-moveit-pluginsr¹Qassh}rºQh}r»Qh]r¼Qj¹Qassuh}r½Qh}r¾Qh}r¿Qh]rÀQj¹QasssuU nav2d_remoterÁQ}rÂQ(h}rÃQh}rÄQh]rÅQUros/jade/navigation_2drÆQassh ˆh }rÇQ(h}rÈQh}rÉQh]rÊQUros-jade-nav2d-remoterËQassh}rÌQh}rÍQh]rÎQjËQassuh}rÏQh}rÐQh}rÑQh]rÒQjËQasssuU moveit_corerÓQ}rÔQ(h}rÕQh}rÖQh]r×QUros/jade/moveitrØQassh ˆh }rÙQ(h}rÚQh}rÛQh]rÜQUros-jade-moveit-corerÝQassh}rÞQh}rßQh]ràQjÝQassuh}ráQh}râQh}rãQh]räQjÝQasssuUmoveit_ros_visualizationråQ}ræQ(h}rçQh}rèQh]réQUros/jade/moveitrêQassh ˆh }rëQ(h}rìQh}ríQh]rîQU!ros-jade-moveit-ros-visualizationrïQassh}rðQh}rñQh]ròQjïQassuh}róQh}rôQh}rõQh]röQjïQasssuUrobot_pose_ekfr÷Q}røQ(h}rùQh}rúQh]rûQUros/jade/navigationrüQassh ˆh }rýQ(h}rþQh}rÿQh]rRUros-jade-robot-pose-ekfrRassh}rRh}rRh]rRjRassuh}rRh}rRh}rRh]rRjRasssuUgraftr R}r R(h}r Rh}r Rh]r RUros/jade/graftrRassh ˆh }rR(h}rRh}rRh]rRUros-jade-graftrRassh}rRh}rRh]rRjRassuh}rRh}rRh}rRh]rRjRasssuUnav2d_explorationrR}rR(h}rRh}rRh]rRUros/jade/navigation_2dr Rassh ˆh }r!R(h}r"Rh}r#Rh]r$RUros-jade-nav2d-explorationr%Rassh}r&Rh}r'Rh]r(Rj%Rassuh}r)Rh}r*Rh}r+Rh]r,Rj%RasssuU image_procr-R}r.R(h}r/Rh}r0Rh]r1RUros/jade/image_pipeliner2Rassh ˆh }r3R(h}r4Rh}r5Rh]r6RUros-jade-image-procr7Rassh}r8Rh}r9Rh]r:Rj7Rassuh}r;Rh}rRj7RasssuUlaser_scan_matcherr?R}r@R(h}rARh}rBRh]rCRUros/jade/scan_toolsrDRassh ˆh }rER(h}rFRh}rGRh]rHRUros-jade-laser-scan-matcherrIRassh}rJRh}rKRh]rLRjIRassuh}rMRh}rNRh}rORh]rPRjIRasssuU easy_markersrQR}rRR(h}rSRh}rTRh]rURUros/jade/wu_ros_toolsrVRassh ˆh }rWR(h}rXRh}rYRh]rZRUros-jade-easy-markersr[Rassh}r\Rh}r]Rh]r^Rj[Rassuh}r_Rh}r`Rh}raRh]rbRj[RasssuU calibrationrcR}rdR(h}reRh}rfRh]rgRUros/jade/calibrationrhRassh ˆh }riR(h}rjRh}rkRh]rlRUros-jade-calibrationrmRassh}rnRh}roRh]rpRjmRassuh}rqRh}rrRh}rsRh]rtRjmRasssuUfetch_gazebo_demoruR}rvR(h}rwRh}rxRh]ryRUros/jade/fetch_gazeborzRassh ˆh }r{R(h}r|Rh}r}Rh]r~RUros-jade-fetch-gazebo-demorRassh}r€Rh}rRh]r‚RjRassuh}rƒRh}r„Rh}r…Rh]r†RjRasssuUrviz_plugin_tutorialsr‡R}rˆR(h}r‰Rh}rŠRh]r‹RU ros/jade/visualization_tutorialsrŒRassh ˆh }rR(h}rŽRh}rRh]rRUros-jade-rviz-plugin-tutorialsr‘Rassh}r’Rh}r“Rh]r”Rj‘Rassuh}r•Rh}r–Rh}r—Rh]r˜Rj‘RasssuUrotors_controlr™R}ršR(h}r›Rh}rœRh]rRUros/jade/rotors_simulatorržRassh ˆh }rŸR(h}r Rh}r¡Rh]r¢RUros-jade-rotors-controlr£Rassh}r¤Rh}r¥Rh]r¦Rj£Rassuh}r§Rh}r¨Rh}r©Rh]rªRj£RasssuUrosauthr«R}r¬R(h}r­Rh}r®Rh]r¯RUros/jade/rosauthr°Rassh ˆh }r±R(h}r²Rh}r³Rh]r´RUros-jade-rosauthrµRassh}r¶Rh}r·Rh]r¸RjµRassuh}r¹Rh}rºRh}r»Rh]r¼RjµRasssuUcl_tfr½R}r¾R(h}r¿Rh}rÀRh]rÁRUros/jade/roslisp_commonrÂRassh ˆh }rÃR(h}rÄRh}rÅRh]rÆRUros-jade-cl-tfrÇRassh}rÈRh}rÉRh]rÊRjÇRassuh}rËRh}rÌRh}rÍRh]rÎRjÇRasssuU youbot_driverrÏR}rÐR(h}rÑRh}rÒRh]rÓRUros/jade/youbot_driverrÔRassh ˆh }rÕR(h}rÖRh}r×Rh]rØRUros-jade-youbot-driverrÙRassh}rÚRh}rÛRh]rÜRjÙRassuh}rÝRh}rÞRh}rßRh]ràRjÙRasssuUroscleanráR}râR(h}rãRh}räRh]råRU ros/jade/rosræRassh ˆh }rçR(h}rèRh}réRh]rêRUros-jade-roscleanrëRassh}rìRh}ríRh]rîRjëRassuh}rïRh}rðRh}rñRh]ròRjëRasssuUgeodesyróR}rôR(h}rõRh}röRh]r÷RUros/jade/geographic_inforøRassh ˆh }rùR(h}rúRh}rûRh]rüRUros-jade-geodesyrýRassh}rþRh}rÿRh]rSjýRassuh}rSh}rSh}rSh]rSjýRasssuUhector_pose_estimation_corerS}rS(h}rSh}rSh]r SUros/jade/hector_localizationr Sassh ˆh }r S(h}r Sh}r Sh]rSU$ros-jade-hector-pose-estimation-corerSassh}rSh}rSh]rSjSassuh}rSh}rSh}rSh]rSjSasssuU opt_camerarS}rS(h}rSh}rSh]rSUros/jade/jsk_3rdpartyrSassh ˆh }rS(h}rSh}rSh]r SUros-jade-opt-camerar!Sassh}r"Sh}r#Sh]r$Sj!Sassuh}r%Sh}r&Sh}r'Sh]r(Sj!SasssuU ecl_licenser)S}r*S(h}r+Sh}r,Sh]r-SUros/jade/ecl_toolsr.Sassh ˆh }r/S(h}r0Sh}r1Sh]r2SUros-jade-ecl-licenser3Sassh}r4Sh}r5Sh]r6Sj3Sassuh}r7Sh}r8Sh}r9Sh]r:Sj3SasssuUhead_pose_estimationr;S}rSh]r?SUros/jade/head_pose_estimationr@Sassh ˆh }rAS(h}rBSh}rCSh]rDSUros-jade-head-pose-estimationrESassh}rFSh}rGSh]rHSjESassuh}rISh}rJSh}rKSh]rLSjESasssuUpr2_descriptionrMS}rNS(h}rOSh}rPSh]rQSUros/jade/pr2_commonrRSassh ˆh }rSS(h}rTSh}rUSh]rVSUros-jade-pr2-descriptionrWSassh}rXSh}rYSh]rZSjWSassuh}r[Sh}r\Sh}r]Sh]r^SjWSasssuUfetch_descriptionr_S}r`S(h}raSh}rbSh]rcSUros/jade/fetch_rosrdSassh ˆh }reS(h}rfSh}rgSh]rhSUros-jade-fetch-descriptionriSassh}rjSh}rkSh]rlSjiSassuh}rmSh}rnSh}roSh]rpSjiSasssuUmessage_runtimerqS}rrS(h}rsSh}rtSh]ruSUros/jade/message_runtimervSassh ˆh }rwS(h}rxSh}rySh]rzSUros-jade-message-runtimer{Sassh}r|Sh}r}Sh]r~Sj{Sassuh}rSh}r€Sh}rSh]r‚Sj{SasssuU stdr_serverrƒS}r„S(h}r…Sh}r†Sh]r‡SUros/jade/stdr_simulatorrˆSassh ˆh }r‰S(h}rŠSh}r‹Sh]rŒSUros-jade-stdr-serverrSassh}rŽSh}rSh]rSjSassuh}r‘Sh}r’Sh}r“Sh]r”SjSasssuU rqt_py_commonr•S}r–S(h}r—Sh}r˜Sh]r™SU ros/jade/rqtršSassh ˆh }r›S(h}rœSh}rSh]ržSUros-jade-rqt-py-commonrŸSassh}r Sh}r¡Sh]r¢SjŸSassuh}r£Sh}r¤Sh}r¥Sh]r¦SjŸSasssuUmessage_filtersr§S}r¨S(h}r©Sh}rªSh]r«SUros/jade/ros_commr¬Sassh ˆh }r­S(h}r®Sh}r¯Sh]r°SUros-jade-message-filtersr±Sassh}r²Sh}r³Sh]r´Sj±Sassuh}rµSh}r¶Sh}r·Sh]r¸Sj±SasssuU spacenav_noder¹S}rºS(h}r»Sh}r¼Sh]r½SUros/jade/joystick_driversr¾Sassh ˆh }r¿S(h}rÀSh}rÁSh]rÂSUros-jade-spacenav-noderÃSassh}rÄSh}rÅSh]rÆSjÃSassuh}rÇSh}rÈSh}rÉSh]rÊSjÃSasssuUunderwater_vehicle_dynamicsrËS}rÌS(h}rÍSh}rÎSh]rÏSUros/jade/underwater_simulationrÐSassh ˆh }rÑS(h}rÒSh}rÓSh]rÔSU$ros-jade-underwater-vehicle-dynamicsrÕSassh}rÖSh}r×Sh]rØSjÕSassuh}rÙSh}rÚSh}rÛSh]rÜSjÕSasssuUnav2d_localizerrÝS}rÞS(h}rßSh}ràSh]ráSUros/jade/navigation_2drâSassh ˆh }rãS(h}räSh}råSh]ræSUros-jade-nav2d-localizerrçSassh}rèSh}réSh]rêSjçSassuh}rëSh}rìSh}ríSh]rîSjçSasssuUkatana_moveit_ikfast_pluginrïS}rðS(h}rñSh}ròSh]róSUros/jade/katana_driverrôSassh ˆh }rõS(h}röSh}r÷Sh]røSU$ros-jade-katana-moveit-ikfast-pluginrùSassh}rúSh}rûSh]rüSjùSassuh}rýSh}rþSh}rÿSh]rTjùSasssuUteb_local_plannerrT}rT(h}rTh}rTh]rTUros/jade/teb_local_plannerrTassh ˆh }rT(h}rTh}r Th]r TUros-jade-teb-local-plannerr Tassh}r Th}r Th]rTj Tassuh}rTh}rTh}rTh]rTj TasssuU rosh_corerT}rT(h}rTh}rTh]rTUros/jade/rosh_corerTassh ˆh }rT(h}rTh}rTh]rTUros-jade-rosh-corerTassh}rTh}rTh]r TjTassuh}r!Th}r"Th}r#Th]r$TjTasssuU rosh_geometryr%T}r&T(h}r'Th}r(Th]r)TUros/jade/rosh_robot_pluginsr*Tassh ˆh }r+T(h}r,Th}r-Th]r.TUros-jade-rosh-geometryr/Tassh}r0Th}r1Th]r2Tj/Tassuh}r3Th}r4Th}r5Th]r6Tj/TasssuUrealtime_toolsr7T}r8T(h}r9Th}r:Th]r;TUros/jade/realtime_toolsrTh}r?Th]r@TUros-jade-realtime-toolsrATassh}rBTh}rCTh]rDTjATassuh}rETh}rFTh}rGTh]rHTjATasssuU nao_audiorIT}rJT(h}rKTh}rLTh]rMTUros/jade/nao_interactionrNTassh ˆh }rOT(h}rPTh}rQTh]rRTUros-jade-nao-audiorSTassh}rTTh}rUTh]rVTjSTassuh}rWTh}rXTh}rYTh]rZTjSTasssuUfetch_navigationr[T}r\T(h}r]Th}r^Th]r_TUros/jade/fetch_rosr`Tassh ˆh }raT(h}rbTh}rcTh]rdTUros-jade-fetch-navigationreTassh}rfTh}rgTh]rhTjeTassuh}riTh}rjTh}rkTh]rlTjeTasssuUrospy_tutorialsrmT}rnT(h}roTh}rpTh]rqTUros/jade/ros_tutorialsrrTassh ˆh }rsT(h}rtTh}ruTh]rvTUros-jade-rospy-tutorialsrwTassh}rxTh}ryTh]rzTjwTassuh}r{Th}r|Th}r}Th]r~TjwTasssuUhector_quadrotor_demorT}r€T(h}rTh}r‚Th]rƒTUros/jade/hector_quadrotorr„Tassh ˆh }r…T(h}r†Th}r‡Th]rˆTUros-jade-hector-quadrotor-demor‰Tassh}rŠTh}r‹Th]rŒTj‰Tassuh}rTh}rŽTh}rTh]rTj‰TasssuUgazebo_pluginsr‘T}r’T(h}r“Th}r”Th]r•TUros/jade/gazebo_ros_pkgsr–Tassh ˆh }r—T(h}r˜Th}r™Th]ršTUros-jade-gazebo-pluginsr›Tassh}rœTh}rTh]ržTj›Tassuh}rŸTh}r Th}r¡Th]r¢Tj›TasssuUrtt_trajectory_msgsr£T}r¤T(h}r¥Th}r¦Th]r§TUros/jade/rtt_ros_integrationr¨Tassh ˆh }r©T(h}rªTh}r«Th]r¬TUros-jade-rtt-trajectory-msgsr­Tassh}r®Th}r¯Th]r°Tj­Tassuh}r±Th}r²Th}r³Th]r´Tj­TasssuUstdr_resourcesrµT}r¶T(h}r·Th}r¸Th]r¹TUros/jade/stdr_simulatorrºTassh ˆh }r»T(h}r¼Th}r½Th]r¾TUros-jade-stdr-resourcesr¿Tassh}rÀTh}rÁTh]rÂTj¿Tassuh}rÃTh}rÄTh}rÅTh]rÆTj¿TasssuU voxel_gridrÇT}rÈT(h}rÉTh}rÊTh]rËTUros/jade/navigationrÌTassh ˆh }rÍT(h}rÎTh}rÏTh]rÐTUros-jade-voxel-gridrÑTassh}rÒTh}rÓTh]rÔTjÑTassuh}rÕTh}rÖTh}r×Th]rØTjÑTasssuUmapvizrÙT}rÚT(h}rÛTh}rÜTh]rÝTUros/jade/mapvizrÞTassh ˆh }rßT(h}ràTh}ráTh]râTUros-jade-mapvizrãTassh}räTh}råTh]ræTjãTassuh}rçTh}rèTh}réTh]rêTjãTasssuUrvizrëT}rìT(h}ríTh}rîTh]rïTU ros/jade/rvizrðTassh ˆh }rñT(h}ròTh}róTh]rôTU ros-jade-rvizrõTassh}röTh}r÷Th]røTjõTassuh}rùTh}rúTh}rûTh]rüTjõTasssuUunique_identifierrýT}rþT(h}rÿTh}rUh]rUUros/jade/unique_identifierrUassh ˆh }rU(h}rUh}rUh]rUUros-jade-unique-identifierrUassh}rUh}r Uh]r UjUassuh}r Uh}r Uh}r Uh]rUjUasssuU grasping_msgsrU}rU(h}rUh}rUh]rUUros/jade/grasping_msgsrUassh ˆh }rU(h}rUh}rUh]rUUros-jade-grasping-msgsrUassh}rUh}rUh]rUjUassuh}rUh}rUh}rUh]r UjUasssuUecto_rosr!U}r"U(h}r#Uh}r$Uh]r%UUros/jade/ecto_rosr&Uassh ˆh }r'U(h}r(Uh}r)Uh]r*UUros-jade-ecto-rosr+Uassh}r,Uh}r-Uh]r.Uj+Uassuh}r/Uh}r0Uh}r1Uh]r2Uj+UasssuUroseusr3U}r4U(h}r5Uh}r6Uh]r7UUros/jade/jsk_roseusr8Uassh ˆh }r9U(h}r:Uh}r;Uh]rUh}r?Uh]r@Uj=Uassuh}rAUh}rBUh}rCUh]rDUj=UasssuUmrpt_local_obstaclesrEU}rFU(h}rGUh}rHUh]rIUUros/jade/mrpt_navigationrJUassh ˆh }rKU(h}rLUh}rMUh]rNUUros-jade-mrpt-local-obstaclesrOUassh}rPUh}rQUh]rRUjOUassuh}rSUh}rTUh}rUUh]rVUjOUasssuUrosserial_mbedrWU}rXU(h}rYUh}rZUh]r[UUros/jade/rosserialr\Uassh ˆh }r]U(h}r^Uh}r_Uh]r`UUros-jade-rosserial-mbedraUassh}rbUh}rcUh]rdUjaUassuh}reUh}rfUh}rgUh]rhUjaUasssuUpr2_calibration_controllersriU}rjU(h}rkUh}rlUh]rmUUros/jade/pr2_controllersrnUassh ˆh }roU(h}rpUh}rqUh]rrUU$ros-jade-pr2-calibration-controllersrsUassh}rtUh}ruUh]rvUjsUassuh}rwUh}rxUh}ryUh]rzUjsUasssuUmoveit_fake_controller_managerr{U}r|U(h}r}Uh}r~Uh]rUUros/jade/moveitr€Uassh ˆh }rU(h}r‚Uh}rƒUh]r„UU'ros-jade-moveit-fake-controller-managerr…Uassh}r†Uh}r‡Uh]rˆUj…Uassuh}r‰Uh}rŠUh}r‹Uh]rŒUj…UasssuUsynchronization_toolsrU}rŽU(h}rUh}rUh]r‘UUros/jade/cram_3rdpartyr’Uassh ˆh }r“U(h}r”Uh}r•Uh]r–UUros-jade-synchronization-toolsr—Uassh}r˜Uh}r™Uh]ršUj—Uassuh}r›Uh}rœUh}rUh]ržUj—UasssuUrqt_controller_managerrŸU}r U(h}r¡Uh}r¢Uh]r£UUros/jade/ros_controlr¤Uassh ˆh }r¥U(h}r¦Uh}r§Uh]r¨UUros-jade-rqt-controller-managerr©Uassh}rªUh}r«Uh]r¬Uj©Uassuh}r­Uh}r®Uh}r¯Uh]r°Uj©UasssuUfetch_moveit_configr±U}r²U(h}r³Uh}r´Uh]rµUUros/jade/fetch_rosr¶Uassh ˆh }r·U(h}r¸Uh}r¹Uh]rºUUros-jade-fetch-moveit-configr»Uassh}r¼Uh}r½Uh]r¾Uj»Uassuh}r¿Uh}rÀUh}rÁUh]rÂUj»UasssuUobject_recognition_linemodrÃU}rÄU(h}rÅUh}rÆUh]rÇUU#ros/jade/object_recognition_linemodrÈUassh ˆh }rÉU(h}rÊUh}rËUh]rÌUU#ros-jade-object-recognition-linemodrÍUassh}rÎUh}rÏUh]rÐUjÍUassuh}rÑUh}rÒUh}rÓUh]rÔUjÍUasssuUvrpn_client_rosrÕU}rÖU(h}r×Uh}rØUh]rÙUUros/jade/vrpn_client_rosrÚUassh ˆh }rÛU(h}rÜUh}rÝUh]rÞUUros-jade-vrpn-client-rosrßUassh}ràUh}ráUh]râUjßUassuh}rãUh}räUh}råUh]ræUjßUasssuU kdl_parserrçU}rèU(h}réUh}rêUh]rëUUros/jade/kdl_parserrìUassh ˆh }ríU(h}rîUh}rïUh]rðUUros-jade-kdl-parserrñUassh}ròUh}róUh]rôUjñUassuh}rõUh}röUh}r÷Uh]røUjñUasssuUrosbagrùU}rúU(h}rûUh}rüUh]rýUUros/jade/ros_commrþUassh ˆh }rÿU(h}rVh}rVh]rVUros-jade-rosbagrVassh}rVh}rVh]rVjVassuh}rVh}rVh}r Vh]r VjVasssuU roshlaunchr V}r V(h}r Vh}rVh]rVUros/jade/rosh_corerVassh ˆh }rV(h}rVh}rVh]rVUros-jade-roshlaunchrVassh}rVh}rVh]rVjVassuh}rVh}rVh}rVh]rVjVasssuUmultisense_bringuprV}rV(h}rVh}r Vh]r!VUros/jade/multisense_rosr"Vassh ˆh }r#V(h}r$Vh}r%Vh]r&VUros-jade-multisense-bringupr'Vassh}r(Vh}r)Vh]r*Vj'Vassuh}r+Vh}r,Vh}r-Vh]r.Vj'Vasssuu.rosdep-0.21.0/test/fixtures/python3cache.pickle000066400000000000000000010654231406544147500215240ustar00rootroot00000000000000€}q(Xteleop_twist_joyq}q(Xfedoraq}q(X22q}qXyumq}qXpackagesq ]q Xros-jade-teleop-twist-joyq assX21q }q h}qh ]qh assuXosxq}qXhomebrewq}qh ]qXros/jade/teleop_twist_joyqassX_is_rosqˆXubuntuq}qXtrustyq}qXaptq}qh ]qh asssuXrail_pick_and_place_toolsq}q(h}q (h}q!h}q"h ]q#X"ros-jade-rail-pick-and-place-toolsq$assh }q%h}q&h ]q'h$assuh}q(h}q)h ]q*Xros/jade/rail_pick_and_placeq+asshˆh}q,h}q-h}q.h ]q/h$asssuX rtt_geometryq0}q1(h}q2(h}q3h}q4h ]q5Xros-jade-rtt-geometryq6assh }q7h}q8h ]q9h6assuh}q:h}q;h ]qh}q?h}q@h ]qAh6asssuX rostwitterqB}qC(h}qD(h}qEh}qFh ]qGXros-jade-rostwitterqHassh }qIh}qJh ]qKhHassuh}qLh}qMh ]qNXros/jade/jsk_3rdpartyqOasshˆh}qPh}qQh}qRh ]qShHasssuXlibccdqT}qU(h}qV(h}qWh}qXh ]qYXros-jade-libccdqZassh }q[h}q\h ]q]hZassuh}q^h}q_h ]q`Xros/jade/libccdqaasshˆh}qbh}qch}qdh ]qehZasssuXrosparamqf}qg(h}qh(h}qih}qjh ]qkXros-jade-rosparamqlassh }qmh}qnh ]qohlassuh}qph}qqh ]qrXros/jade/ros_commqsasshˆh}qth}quh}qvh ]qwhlasssuXgazebo_ros_controlqx}qy(h}qz(h}q{h}q|h ]q}Xros-jade-gazebo-ros-controlq~assh }qh}q€h ]qh~assuh}q‚h}qƒh ]q„Xros/jade/gazebo_ros_pkgsq…asshˆh}q†h}q‡h}qˆh ]q‰h~asssuXmav_commqŠ}q‹(h}qŒ(h}qh}qŽh ]qXros-jade-mav-commqassh }q‘h}q’h ]q“hassuh}q”h}q•h ]q–Xros/jade/mav_commq—asshˆh}q˜h}q™h}qšh ]q›hasssuXrqt_runtime_monitorqœ}q(h}qž(h}qŸh}q h ]q¡Xros-jade-rqt-runtime-monitorq¢assh }q£h}q¤h ]q¥h¢assuh}q¦h}q§h ]q¨Xros/jade/rqt_runtime_monitorq©asshˆh}qªh}q«h}q¬h ]q­h¢asssuXpr2_msgsq®}q¯(h}q°(h}q±h}q²h ]q³Xros-jade-pr2-msgsq´assh }qµh}q¶h ]q·h´assuh}q¸h}q¹h ]qºXros/jade/pr2_commonq»asshˆh}q¼h}q½h}q¾h ]q¿h´asssuXzbar_rosqÀ}qÁ(h}qÂ(h}qÃh}qÄh ]qÅXros-jade-zbar-rosqÆassh }qÇh}qÈh ]qÉhÆassuh}qÊh}qËh ]qÌXros/jade/zbar_rosqÍasshˆh}qÎh}qÏh}qÐh ]qÑhÆasssuX planning_msgsqÒ}qÓ(h}qÔ(h}qÕh}qÖh ]q×Xros-jade-planning-msgsqØassh }qÙh}qÚh ]qÛhØassuh}qÜh}qÝh ]qÞXros/jade/iai_common_msgsqßasshˆh}qàh}qáh}qâh ]qãhØasssuX schunk_ezn64qä}qå(h}qæ(h}qçh}qèh ]qéXros-jade-schunk-ezn64qêassh }qëh}qìh ]qíhêassuh}qîh}qïh ]qðXros/jade/schunk_grippersqñasshˆh}qòh}qóh}qôh ]qõhêasssuXoctomap_mappingqö}q÷(h}qø(h}qùh}qúh ]qûXros-jade-octomap-mappingqüassh }qýh}qþh ]qÿhüassuh}rh}rh ]rXros/jade/octomap_mappingrasshˆh}rh}rh}rh ]rhüasssuXtetris_descriptionr}r (h}r (h}r h}r h ]r Xros-jade-tetris-descriptionrassh }rh}rh ]rjassuh}rh}rh ]rXros/jade/hakutorasshˆh}rh}rh}rh ]rjasssuXpyrosr}r(h}r(h}rh}rh ]rXros-jade-pyrosr assh }r!h}r"h ]r#j assuh}r$h}r%h ]r&Xros/jade/pyrosr'asshˆh}r(h}r)h}r*h ]r+j asssuXnovatel_gps_msgsr,}r-(h}r.(h}r/h}r0h ]r1Xros-jade-novatel-gps-msgsr2assh }r3h}r4h ]r5j2assuh}r6h}r7h ]r8Xros/jade/novatel_gps_driverr9asshˆh}r:h}r;h}r<h ]r=j2asssuXros_baser>}r?(h}r@(h}rAh}rBh ]rCXros-jade-ros-baserDassh }rEh}rFh ]rGjDassuh}rHh}rIh ]rJXros/jade/metapackagesrKasshˆh}rLh}rMh}rNh ]rOjDasssuXeus_qprP}rQ(h}rR(h}rSh}rTh ]rUXros-jade-eus-qprVassh }rWh}rXh ]rYjVassuh}rZh}r[h ]r\Xros/jade/jsk_controlr]asshˆh}r^h}r_h}r`h ]rajVasssuXgeneusrb}rc(h}rd(h}reh}rfh ]rgXros-jade-geneusrhassh }rih}rjh ]rkjhassuh}rlh}rmh ]rnXros/jade/geneusroasshˆh}rph}rqh}rrh ]rsjhasssuXknirt}ru(h}rv(h}rwh}rxh ]ryX ros-jade-knirzassh }r{h}r|h ]r}jzassuh}r~h}rh ]r€Xros/jade/katana_driverrasshˆh}r‚h}rƒh}r„h ]r…jzasssuXnav2d_navigatorr†}r‡(h}rˆ(h}r‰h}rŠh ]r‹Xros-jade-nav2d-navigatorrŒassh }rh}rŽh ]rjŒassuh}rh}r‘h ]r’Xros/jade/navigation_2dr“asshˆh}r”h}r•h}r–h ]r—jŒasssuXhector_pose_estimation_corer˜}r™(h}rš(h}r›h}rœh ]rX$ros-jade-hector-pose-estimation-coreržassh }rŸh}r h ]r¡jžassuh}r¢h}r£h ]r¤Xros/jade/hector_localizationr¥asshˆh}r¦h}r§h}r¨h ]r©jžasssuXrospackrª}r«(h}r¬(h}r­h}r®h ]r¯Xros-jade-rospackr°assh }r±h}r²h ]r³j°assuh}r´h}rµh ]r¶Xros/jade/rospackr·asshˆh}r¸h}r¹h}rºh ]r»j°asssuX katana_msgsr¼}r½(h}r¾(h}r¿h}rÀh ]rÁXros-jade-katana-msgsrÂassh }rÃh}rÄh ]rÅjÂassuh}rÆh}rÇh ]rÈXros/jade/katana_driverrÉasshˆh}rÊh}rËh}rÌh ]rÍjÂasssuXpython-pathtoolsrÎ}rÏ(h}rÐ(h}rÑh}rÒh ]rÓXros-jade-python-pathtoolsrÔassh }rÕh}rÖh ]r×jÔassuh}rØh}rÙh ]rÚXros/jade/python-pathtoolsrÛasshˆh}rÜh}rÝh}rÞh ]rßjÔasssuX turtle_tf2rà}rá(h}râ(h}rãh}räh ]råXros-jade-turtle-tf2ræassh }rçh}rèh ]réjæassuh}rêh}rëh ]rìXros/jade/geometry_tutorialsríasshˆh}rîh}rïh}rðh ]rñjæasssuXdepthimage_to_laserscanrò}ró(h}rô(h}rõh}röh ]r÷X ros-jade-depthimage-to-laserscanrøassh }rùh}rúh ]rûjøassuh}rüh}rýh ]rþX ros/jade/depthimage_to_laserscanrÿasshˆh}rh}rh}rh ]rjøasssuXgrid_mapr}r(h}r(h}rh}rh ]r Xros-jade-grid-mapr assh }r h}r h ]r j assuh}rh}rh ]rXros/jade/grid_maprasshˆh}rh}rh}rh ]rj asssuX aruco_mappingr}r(h}r(h}rh}rh ]rXros-jade-aruco-mappingrassh }rh}rh ]rjassuh}r h}r!h ]r"Xros/jade/aruco_mappingr#asshˆh}r$h}r%h}r&h ]r'jasssuXhumanoid_nav_msgsr(}r)(h}r*(h}r+h}r,h ]r-Xros-jade-humanoid-nav-msgsr.assh }r/h}r0h ]r1j.assuh}r2h}r3h ]r4Xros/jade/humanoid_msgsr5asshˆh}r6h}r7h}r8h ]r9j.asssuXjoint_trajectory_actionr:}r;(h}r<(h}r=h}r>h ]r?X ros-jade-joint-trajectory-actionr@assh }rAh}rBh ]rCj@assuh}rDh}rEh ]rFXros/jade/pr2_controllersrGasshˆh}rHh}rIh}rJh ]rKj@asssuXinteractive_marker_twist_serverrL}rM(h}rN(h}rOh}rPh ]rQX(ros-jade-interactive-marker-twist-serverrRassh }rSh}rTh ]rUjRassuh}rVh}rWh ]rXX(ros/jade/interactive_marker_twist_serverrYasshˆh}rZh}r[h}r\h ]r]jRasssuXompl_visual_toolsr^}r_(h}r`(h}rah}rbh ]rcXros-jade-ompl-visual-toolsrdassh }reh}rfh ]rgjdassuh}rhh}rih ]rjXros/jade/ompl_visual_toolsrkasshˆh}rlh}rmh}rnh ]rojdasssuXdynamic_tf_publisherrp}rq(h}rr(h}rsh}rth ]ruXros-jade-dynamic-tf-publisherrvassh }rwh}rxh ]ryjvassuh}rzh}r{h ]r|Xros/jade/jsk_commonr}asshˆh}r~h}rh}r€h ]rjvasssuXpepper_moveit_configr‚}rƒ(h}r„(h}r…h}r†h ]r‡Xros-jade-pepper-moveit-configrˆassh }r‰h}rŠh ]r‹jˆassuh}rŒh}rh ]rŽXros/jade/pepper_moveit_configrasshˆh}rh}r‘h}r’h ]r“jˆasssuXroscleanr”}r•(h}r–(h}r—h}r˜h ]r™Xros-jade-roscleanršassh }r›h}rœh ]rjšassuh}ržh}rŸh ]r X ros/jade/rosr¡asshˆh}r¢h}r£h}r¤h ]r¥jšasssuXsherlock_sim_msgsr¦}r§(h}r¨(h}r©h}rªh ]r«Xros-jade-sherlock-sim-msgsr¬assh }r­h}r®h ]r¯j¬assuh}r°h}r±h ]r²Xros/jade/iai_common_msgsr³asshˆh}r´h}rµh}r¶h ]r·j¬asssuXhector_compressed_map_transportr¸}r¹(h}rº(h}r»h}r¼h ]r½X(ros-jade-hector-compressed-map-transportr¾assh }r¿h}rÀh ]rÁj¾assuh}rÂh}rÃh ]rÄXros/jade/hector_slamrÅasshˆh}rÆh}rÇh}rÈh ]rÉj¾asssuXvrpn_client_rosrÊ}rË(h}rÌ(h}rÍh}rÎh ]rÏXros-jade-vrpn-client-rosrÐassh }rÑh}rÒh ]rÓjÐassuh}rÔh}rÕh ]rÖXros/jade/vrpn_client_rosr×asshˆh}rØh}rÙh}rÚh ]rÛjÐasssuX calibrationrÜ}rÝ(h}rÞ(h}rßh}ràh ]ráXros-jade-calibrationrâassh }rãh}räh ]råjâassuh}ræh}rçh ]rèXros/jade/calibrationréasshˆh}rêh}rëh}rìh ]ríjâasssuXscanning_table_msgsrî}rï(h}rð(h}rñh}ròh ]róXros-jade-scanning-table-msgsrôassh }rõh}röh ]r÷jôassuh}røh}rùh ]rúXros/jade/iai_common_msgsrûasshˆh}rüh}rýh}rþh ]rÿjôasssuXrtabmapr}r(h}r(h}rh}rh ]rXros-jade-rtabmaprassh }rh}rh ]r jassuh}r h}r h ]r Xros/jade/rtabmapr asshˆh}rh}rh}rh ]rjasssuX marker_msgsr}r(h}r(h}rh}rh ]rXros-jade-marker-msgsrassh }rh}rh ]rjassuh}rh}rh ]rXros/jade/marker_msgsrasshˆh}r h}r!h}r"h ]r#jasssuXsingle_joint_position_actionr$}r%(h}r&(h}r'h}r(h ]r)X%ros-jade-single-joint-position-actionr*assh }r+h}r,h ]r-j*assuh}r.h}r/h ]r0Xros/jade/pr2_controllersr1asshˆh}r2h}r3h}r4h ]r5j*asssuXmoveit_resourcesr6}r7(h}r8(h}r9h}r:h ]r;Xros-jade-moveit-resourcesr<assh }r=h}r>h ]r?j<assuh}r@h}rAh ]rBXros/jade/moveit_resourcesrCasshˆh}rDh}rEh}rFh ]rGj<asssuXcffirH}rI(h}rJ(h}rKh}rLh ]rMX ros-jade-cffirNassh }rOh}rPh ]rQjNassuh}rRh}rSh ]rTXros/jade/cram_3rdpartyrUasshˆh}rVh}rWh}rXh ]rYjNasssuX ncd_parserrZ}r[(h}r\(h}r]h}r^h ]r_Xros-jade-ncd-parserr`assh }rah}rbh ]rcj`assuh}rdh}reh ]rfXros/jade/scan_toolsrgasshˆh}rhh}rih}rjh ]rkj`asssuXmoveit_ros_benchmarks_guirl}rm(h}rn(h}roh}rph ]rqX"ros-jade-moveit-ros-benchmarks-guirrassh }rsh}rth ]rujrassuh}rvh}rwh ]rxXros/jade/moveitryasshˆh}rzh}r{h}r|h ]r}jrasssuX octomap_rosr~}r(h}r€(h}rh}r‚h ]rƒXros-jade-octomap-rosr„assh }r…h}r†h ]r‡j„assuh}rˆh}r‰h ]rŠXros/jade/octomap_rosr‹asshˆh}rŒh}rh}rŽh ]rj„asssuXstd_srvsr}r‘(h}r’(h}r“h}r”h ]r•Xros-jade-std-srvsr–assh }r—h}r˜h ]r™j–assuh}ršh}r›h ]rœXros/jade/ros_comm_msgsrasshˆh}ržh}rŸh}r h ]r¡j–asssuXarucor¢}r£(h}r¤(h}r¥h}r¦h ]r§Xros-jade-arucor¨assh }r©h}rªh ]r«j¨assuh}r¬h}r­h ]r®Xros/jade/aruco_rosr¯asshˆh}r°h}r±h}r²h ]r³j¨asssuX media_exportr´}rµ(h}r¶(h}r·h}r¸h ]r¹Xros-jade-media-exportrºassh }r»h}r¼h ]r½jºassuh}r¾h}r¿h ]rÀXros/jade/media_exportrÁasshˆh}rÂh}rÃh}rÄh ]rÅjºasssuXrosbridge_libraryrÆ}rÇ(h}rÈ(h}rÉh}rÊh ]rËXros-jade-rosbridge-libraryrÌassh }rÍh}rÎh ]rÏjÌassuh}rÐh}rÑh ]rÒXros/jade/rosbridge_suiterÓasshˆh}rÔh}rÕh}rÖh ]r×jÌasssuXtblibrØ}rÙ(h}rÚ(h}rÛh}rÜh ]rÝXros-jade-tblibrÞassh }rßh}ràh ]rájÞassuh}râh}rãh ]räXros/jade/tblibråasshˆh}ræh}rçh}rèh ]réjÞasssuXslicrê}rë(h}rì(h}ríh}rîh ]rïX ros-jade-slicrðassh }rñh}ròh ]rójðassuh}rôh}rõh ]röXros/jade/jsk_3rdpartyr÷asshˆh}røh}rùh}rúh ]rûjðasssuXffharü}rý(h}rþ(h}rÿh}rh ]rX ros-jade-ffharassh }rh}rh ]rjassuh}rh}rh ]rXros/jade/jsk_3rdpartyr asshˆh}r h}r h}r h ]r jasssuX open_kartor}r(h}r(h}rh}rh ]rXros-jade-open-kartorassh }rh}rh ]rjassuh}rh}rh ]rXros/jade/open_kartorasshˆh}rh}rh}rh ]rjasssuX marshmallowr }r!(h}r"(h}r#h}r$h ]r%Xros-jade-marshmallowr&assh }r'h}r(h ]r)j&assuh}r*h}r+h ]r,Xros/jade/marshmallowr-asshˆh}r.h}r/h}r0h ]r1j&asssuXroscpp_serializationr2}r3(h}r4(h}r5h}r6h ]r7Xros-jade-roscpp-serializationr8assh }r9h}r:h ]r;j8assuh}r<h}r=h ]r>Xros/jade/roscpp_corer?asshˆh}r@h}rAh}rBh ]rCj8asssuXmavlinkrD}rE(h}rF(h}rGh}rHh ]rIXros-jade-mavlinkrJassh }rKh}rLh ]rMjJassuh}rNh}rOh ]rPXros/jade/mavlinkrQasshˆh}rRh}rSh}rTh ]rUjJasssuXnao_interaction_msgsrV}rW(h}rX(h}rYh}rZh ]r[Xros-jade-nao-interaction-msgsr\assh }r]h}r^h ]r_j\assuh}r`h}rah ]rbXros/jade/nao_interactionrcasshˆh}rdh}reh}rfh ]rgj\asssuXactionlib_tutorialsrh}ri(h}rj(h}rkh}rlh ]rmXros-jade-actionlib-tutorialsrnassh }roh}rph ]rqjnassuh}rrh}rsh ]rtXros/jade/common_tutorialsruasshˆh}rvh}rwh}rxh ]ryjnasssuXindustrial_robot_simulatorrz}r{(h}r|(h}r}h}r~h ]rX#ros-jade-industrial-robot-simulatorr€assh }rh}r‚h ]rƒj€assuh}r„h}r…h ]r†Xros/jade/industrial_corer‡asshˆh}rˆh}r‰h}rŠh ]r‹j€asssuXworld_item_observerrŒ}r(h}rŽ(h}rh}rh ]r‘Xros-jade-world-item-observerr’assh }r“h}r”h ]r•j’assuh}r–h}r—h ]r˜X"ros/jade/spatial_temporal_learningr™asshˆh}ršh}r›h}rœh ]rj’asssuXrosgraphrž}rŸ(h}r (h}r¡h}r¢h ]r£Xros-jade-rosgraphr¤assh }r¥h}r¦h ]r§j¤assuh}r¨h}r©h ]rªXros/jade/ros_commr«asshˆh}r¬h}r­h}r®h ]r¯j¤asssuX nao_extrasr°}r±(h}r²(h}r³h}r´h ]rµXros-jade-nao-extrasr¶assh }r·h}r¸h ]r¹j¶assuh}rºh}r»h ]r¼Xros/jade/nao_extrasr½asshˆh}r¾h}r¿h}rÀh ]rÁj¶asssuX rtt_actionlibrÂ}rÃ(h}rÄ(h}rÅh}rÆh ]rÇXros-jade-rtt-actionlibrÈassh }rÉh}rÊh ]rËjÈassuh}rÌh}rÍh ]rÎXros/jade/rtt_ros_integrationrÏasshˆh}rÐh}rÑh}rÒh ]rÓjÈasssuXjson_prolog_msgsrÔ}rÕ(h}rÖ(h}r×h}rØh ]rÙXros-jade-json-prolog-msgsrÚassh }rÛh}rÜh ]rÝjÚassuh}rÞh}rßh ]ràXros/jade/iai_common_msgsráasshˆh}râh}rãh}räh ]råjÚasssuXtrac_ik_examplesræ}rç(h}rè(h}réh}rêh ]rëXros-jade-trac-ik-examplesrìassh }ríh}rîh ]rïjìassuh}rðh}rñh ]ròXros/jade/trac_ikróasshˆh}rôh}rõh}röh ]r÷jìasssuXwiimoterø}rù(h}rú(h}rûh}rüh ]rýXros-jade-wiimoterþassh }rÿh}rh ]rjþassuh}rh}rh ]rXros/jade/joystick_driversrasshˆh}rh}rh}rh ]r jþasssuX roscreater }r (h}r (h}r h}rh ]rXros-jade-roscreaterassh }rh}rh ]rjassuh}rh}rh ]rX ros/jade/rosrasshˆh}rh}rh}rh ]rjasssuXfiveamr}r(h}r(h}rh}r h ]r!Xros-jade-fiveamr"assh }r#h}r$h ]r%j"assuh}r&h}r'h ]r(Xros/jade/cram_3rdpartyr)asshˆh}r*h}r+h}r,h ]r-j"asssuX$object_recognition_ros_visualizationr.}r/(h}r0(h}r1h}r2h ]r3X-ros-jade-object-recognition-ros-visualizationr4assh }r5h}r6h ]r7j4assuh}r8h}r9h ]r:X-ros/jade/object_recognition_ros_visualizationr;asshˆh}r<h}r=h}r>h ]r?j4asssuXhector_quadrotor_gazebo_pluginsr@}rA(h}rB(h}rCh}rDh ]rEX(ros-jade-hector-quadrotor-gazebo-pluginsrFassh }rGh}rHh ]rIjFassuh}rJh}rKh ]rLXros/jade/hector_quadrotorrMasshˆh}rNh}rOh}rPh ]rQjFasssuXvisp_hand2eye_calibrationrR}rS(h}rT(h}rUh}rVh ]rWX"ros-jade-visp-hand2eye-calibrationrXassh }rYh}rZh ]r[jXassuh}r\h}r]h ]r^Xros/jade/vision_vispr_asshˆh}r`h}rah}rbh ]rcjXasssuXgps_umdrd}re(h}rf(h}rgh}rhh ]riXros-jade-gps-umdrjassh }rkh}rlh ]rmjjassuh}rnh}roh ]rpXros/jade/gps_umdrqasshˆh}rrh}rsh}rth ]rujjasssuXdiagnostic_analysisrv}rw(h}rx(h}ryh}rzh ]r{Xros-jade-diagnostic-analysisr|assh }r}h}r~h ]rj|assuh}r€h}rh ]r‚Xros/jade/diagnosticsrƒasshˆh}r„h}r…h}r†h ]r‡j|asssuX carl_estoprˆ}r‰(h}rŠ(h}r‹h}rŒh ]rXros-jade-carl-estoprŽassh }rh}rh ]r‘jŽassuh}r’h}r“h ]r”Xros/jade/carl_estopr•asshˆh}r–h}r—h}r˜h ]r™jŽasssuX sicktoolboxrš}r›(h}rœ(h}rh}ržh ]rŸXros-jade-sicktoolboxr assh }r¡h}r¢h ]r£j assuh}r¤h}r¥h ]r¦Xros/jade/sicktoolboxr§asshˆh}r¨h}r©h}rªh ]r«j asssuXrqt_common_pluginsr¬}r­(h}r®(h}r¯h}r°h ]r±Xros-jade-rqt-common-pluginsr²assh }r³h}r´h ]rµj²assuh}r¶h}r·h ]r¸Xros/jade/rqt_common_pluginsr¹asshˆh}rºh}r»h}r¼h ]r½j²asssuXrail_segmentationr¾}r¿(h}rÀ(h}rÁh}rÂh ]rÃXros-jade-rail-segmentationrÄassh }rÅh}rÆh ]rÇjÄassuh}rÈh}rÉh ]rÊXros/jade/rail_segmentationrËasshˆh}rÌh}rÍh}rÎh ]rÏjÄasssuX moveit_rosrÐ}rÑ(h}rÒ(h}rÓh}rÔh ]rÕXros-jade-moveit-rosrÖassh }r×h}rØh ]rÙjÖassuh}rÚh}rÛh ]rÜXros/jade/moveitrÝasshˆh}rÞh}rßh}ràh ]rájÖasssuXmicrostrain_3dmgx2_imurâ}rã(h}rä(h}råh}ræh ]rçXros-jade-microstrain-3dmgx2-imurèassh }réh}rêh ]rëjèassuh}rìh}ríh ]rîXros/jade/microstrain_3dmgx2_imurïasshˆh}rðh}rñh}ròh ]rójèasssuXjoint_limits_interfacerô}rõ(h}rö(h}r÷h}røh ]rùXros-jade-joint-limits-interfacerúassh }rûh}rüh ]rýjúassuh}rþh}rÿh ]rXros/jade/ros_controlrasshˆh}rh}rh}rh ]rjúasssuXinteractive_markersr}r(h}r(h}r h}r h ]r Xros-jade-interactive-markersr assh }r h}rh ]rj assuh}rh}rh ]rXros/jade/interactive_markersrasshˆh}rh}rh}rh ]rj asssuXpepper_gazebo_pluginr}r(h}r(h}rh}rh ]rXros-jade-pepper-gazebo-pluginrassh }rh}r h ]r!jassuh}r"h}r#h ]r$Xros/jade/pepper_virtualr%asshˆh}r&h}r'h}r(h ]r)jasssuXmoveit_runtimer*}r+(h}r,(h}r-h}r.h ]r/Xros-jade-moveit-runtimer0assh }r1h}r2h ]r3j0assuh}r4h}r5h ]r6Xros/jade/moveitr7asshˆh}r8h}r9h}r:h ]r;j0asssuXmoveit_ros_planning_interfacer<}r=(h}r>(h}r?h}r@h ]rAX&ros-jade-moveit-ros-planning-interfacerBassh }rCh}rDh ]rEjBassuh}rFh}rGh ]rHXros/jade/moveitrIasshˆh}rJh}rKh}rLh ]rMjBasssuX rosservicerN}rO(h}rP(h}rQh}rRh ]rSXros-jade-rosservicerTassh }rUh}rVh ]rWjTassuh}rXh}rYh ]rZXros/jade/ros_commr[asshˆh}r\h}r]h}r^h ]r_jTasssuXroswwwr`}ra(h}rb(h}rch}rdh ]reXros-jade-roswwwrfassh }rgh}rhh ]rijfassuh}rjh}rkh ]rlXros/jade/roswwwrmasshˆh}rnh}roh}rph ]rqjfasssuXpepperl_fuchs_r2000rr}rs(h}rt(h}ruh}rvh ]rwXros-jade-pepperl-fuchs-r2000rxassh }ryh}rzh ]r{jxassuh}r|h}r}h ]r~Xros/jade/pepperl_fuchsrasshˆh}r€h}rh}r‚h ]rƒjxasssuXtf2_pyr„}r…(h}r†(h}r‡h}rˆh ]r‰Xros-jade-tf2-pyrŠassh }r‹h}rŒh ]rjŠassuh}rŽh}rh ]rXros/jade/geometry2r‘asshˆh}r’h}r“h}r”h ]r•jŠasssuXtornador–}r—(h}r˜(h}r™h}ršh ]r›Xros-jade-tornadorœassh }rh}ržh ]rŸjœassuh}r h}r¡h ]r¢Xros/jade/tornador£asshˆh}r¤h}r¥h}r¦h ]r§jœasssuXexecutive_smachr¨}r©(h}rª(h}r«h}r¬h ]r­Xros-jade-executive-smachr®assh }r¯h}r°h ]r±j®assuh}r²h}r³h ]r´Xros/jade/executive_smachrµasshˆh}r¶h}r·h}r¸h ]r¹j®asssuX rtt_std_msgsrº}r»(h}r¼(h}r½h}r¾h ]r¿Xros-jade-rtt-std-msgsrÀassh }rÁh}rÂh ]rÃjÀassuh}rÄh}rÅh ]rÆXros/jade/rtt_ros_integrationrÇasshˆh}rÈh}rÉh}rÊh ]rËjÀasssuXimagezero_image_transportrÌ}rÍ(h}rÎ(h}rÏh}rÐh ]rÑX"ros-jade-imagezero-image-transportrÒassh }rÓh}rÔh ]rÕjÒassuh}rÖh}r×h ]rØXros/jade/imagezero_transportrÙasshˆh}rÚh}rÛh}rÜh ]rÝjÒasssuXkorg_nanokontrolrÞ}rß(h}rà(h}ráh}râh ]rãXros-jade-korg-nanokontrolräassh }råh}ræh ]rçjäassuh}rèh}réh ]rêXros/jade/korg_nanokontrolrëasshˆh}rìh}ríh}rîh ]rïjäasssuXlaser_cb_detectorrð}rñ(h}rò(h}róh}rôh ]rõXros-jade-laser-cb-detectorröassh }r÷h}røh ]rùjöassuh}rúh}rûh ]rüXros/jade/calibrationrýasshˆh}rþh}rÿh}rh ]rjöasssuX rqt_py_commonr}r(h}r(h}rh}rh ]rXros-jade-rqt-py-commonrassh }r h}r h ]r jassuh}r h}r h ]rX ros/jade/rqtrasshˆh}rh}rh}rh ]rjasssuXcartesian_msgsr}r(h}r(h}rh}rh ]rXros-jade-cartesian-msgsrassh }rh}rh ]rjassuh}rh}rh ]r Xros/jade/cartesian_msgsr!asshˆh}r"h}r#h}r$h ]r%jasssuXros_ethernet_rmpr&}r'(h}r((h}r)h}r*h ]r+Xros-jade-ros-ethernet-rmpr,assh }r-h}r.h ]r/j,assuh}r0h}r1h ]r2Xros/jade/ros_ethernet_rmpr3asshˆh}r4h}r5h}r6h ]r7j,asssuXrobot_pose_publisherr8}r9(h}r:(h}r;h}r<h ]r=Xros-jade-robot-pose-publisherr>assh }r?h}r@h ]rAj>assuh}rBh}rCh ]rDXros/jade/robot_pose_publisherrEasshˆh}rFh}rGh}rHh ]rIj>asssuXlaser_filteringrJ}rK(h}rL(h}rMh}rNh ]rOXros-jade-laser-filteringrPassh }rQh}rRh ]rSjPassuh}rTh}rUh ]rVXros/jade/laser_filteringrWasshˆh}rXh}rYh}rZh ]r[jPasssuX image_rotater\}r](h}r^(h}r_h}r`h ]raXros-jade-image-rotaterbassh }rch}rdh ]rejbassuh}rfh}rgh ]rhXros/jade/image_pipelineriasshˆh}rjh}rkh}rlh ]rmjbasssuX move_basern}ro(h}rp(h}rqh}rrh ]rsXros-jade-move-basertassh }ruh}rvh ]rwjtassuh}rxh}ryh ]rzXros/jade/navigationr{asshˆh}r|h}r}h}r~h ]rjtasssuXvelodyne_gazebo_pluginsr€}r(h}r‚(h}rƒh}r„h ]r…X ros-jade-velodyne-gazebo-pluginsr†assh }r‡h}rˆh ]r‰j†assuh}rŠh}r‹h ]rŒXros/jade/velodyne_simulatorrasshˆh}rŽh}rh}rh ]r‘j†asssuXobject_recognition_tabletopr’}r“(h}r”(h}r•h}r–h ]r—X$ros-jade-object-recognition-tabletopr˜assh }r™h}ršh ]r›j˜assuh}rœh}rh ]ržX$ros/jade/object_recognition_tabletoprŸasshˆh}r h}r¡h}r¢h ]r£j˜asssuXmultisense_cal_checkr¤}r¥(h}r¦(h}r§h}r¨h ]r©Xros-jade-multisense-cal-checkrªassh }r«h}r¬h ]r­jªassuh}r®h}r¯h ]r°Xros/jade/multisense_rosr±asshˆh}r²h}r³h}r´h ]rµjªasssuXecl_manipulatorsr¶}r·(h}r¸(h}r¹h}rºh ]r»Xros-jade-ecl-manipulatorsr¼assh }r½h}r¾h ]r¿j¼assuh}rÀh}rÁh ]rÂXros/jade/ecl_manipulationrÃasshˆh}rÄh}rÅh}rÆh ]rÇj¼asssuXcanopen_chain_noderÈ}rÉ(h}rÊ(h}rËh}rÌh ]rÍXros-jade-canopen-chain-noderÎassh }rÏh}rÐh ]rÑjÎassuh}rÒh}rÓh ]rÔXros/jade/ros_canopenrÕasshˆh}rÖh}r×h}rØh ]rÙjÎasssuXcan_msgsrÚ}rÛ(h}rÜ(h}rÝh}rÞh ]rßXros-jade-can-msgsràassh }ráh}râh ]rãjàassuh}räh}råh ]ræXros/jade/ros_canopenrçasshˆh}rèh}réh}rêh ]rëjàasssuX rtt_roscommrì}rí(h}rî(h}rïh}rðh ]rñXros-jade-rtt-roscommròassh }róh}rôh ]rõjòassuh}röh}r÷h ]røXros/jade/rtt_ros_integrationrùasshˆh}rúh}rûh}rüh ]rýjòasssuXectorþ}rÿ(h}r(h}rh}rh ]rX ros-jade-ectorassh }rh}rh ]rjassuh}rh}r h ]r X ros/jade/ector asshˆh}r h}r h}rh ]rjasssuXnaoqi_sensors_pyr}r(h}r(h}rh}rh ]rXros-jade-naoqi-sensors-pyrassh }rh}rh ]rjassuh}rh}rh ]rXros/jade/naoqi_bridgerasshˆh}rh}rh}r h ]r!jasssuXhector_worldmodel_msgsr"}r#(h}r$(h}r%h}r&h ]r'Xros-jade-hector-worldmodel-msgsr(assh }r)h}r*h ]r+j(assuh}r,h}r-h ]r.Xros/jade/hector_worldmodelr/asshˆh}r0h}r1h}r2h ]r3j(asssuX mrpt_msgsr4}r5(h}r6(h}r7h}r8h ]r9Xros-jade-mrpt-msgsr:assh }r;h}r<h ]r=j:assuh}r>h}r?h ]r@Xros/jade/mrpt_navigationrAasshˆh}rBh}rCh}rDh ]rEj:asssuXpcl_msgsrF}rG(h}rH(h}rIh}rJh ]rKXros-jade-pcl-msgsrLassh }rMh}rNh ]rOjLassuh}rPh}rQh ]rRXros/jade/pcl_msgsrSasshˆh}rTh}rUh}rVh ]rWjLasssuXdiagnostic_common_diagnosticsrX}rY(h}rZ(h}r[h}r\h ]r]X&ros-jade-diagnostic-common-diagnosticsr^assh }r_h}r`h ]raj^assuh}rbh}rch ]rdXros/jade/diagnosticsreasshˆh}rfh}rgh}rhh ]rij^asssuXecl_iorj}rk(h}rl(h}rmh}rnh ]roXros-jade-ecl-iorpassh }rqh}rrh ]rsjpassuh}rth}ruh ]rvXros/jade/ecl_literwasshˆh}rxh}ryh}rzh ]r{jpasssuXhector_quadrotor_demor|}r}(h}r~(h}rh}r€h ]rXros-jade-hector-quadrotor-demor‚assh }rƒh}r„h ]r…j‚assuh}r†h}r‡h ]rˆXros/jade/hector_quadrotorr‰asshˆh}rŠh}r‹h}rŒh ]rj‚asssuX euscolladarŽ}r(h}r(h}r‘h}r’h ]r“Xros-jade-euscolladar”assh }r•h}r–h ]r—j”assuh}r˜h}r™h ]ršXros/jade/jsk_model_toolsr›asshˆh}rœh}rh}ržh ]rŸj”asssuX opt_camerar }r¡(h}r¢(h}r£h}r¤h ]r¥Xros-jade-opt-camerar¦assh }r§h}r¨h ]r©j¦assuh}rªh}r«h ]r¬Xros/jade/jsk_3rdpartyr­asshˆh}r®h}r¯h}r°h ]r±j¦asssuXpointgrey_camera_descriptionr²}r³(h}r´(h}rµh}r¶h ]r·X%ros-jade-pointgrey-camera-descriptionr¸assh }r¹h}rºh ]r»j¸assuh}r¼h}r½h ]r¾X ros/jade/pointgrey_camera_driverr¿asshˆh}rÀh}rÁh}rÂh ]rÃj¸asssuX urdfdom_pyrÄ}rÅ(h}rÆ(h}rÇh}rÈh ]rÉXros-jade-urdfdom-pyrÊassh }rËh}rÌh ]rÍjÊassuh}rÎh}rÏh ]rÐXros/jade/urdfdom_pyrÑasshˆh}rÒh}rÓh}rÔh ]rÕjÊasssuXstagerÖ}r×(h}rØ(h}rÙh}rÚh ]rÛXros-jade-stagerÜassh }rÝh}rÞh ]rßjÜassuh}ràh}ráh ]râXros/jade/stagerãasshˆh}räh}råh}ræh ]rçjÜasssuXcontroller_interfacerè}ré(h}rê(h}rëh}rìh ]ríXros-jade-controller-interfacerîassh }rïh}rðh ]rñjîassuh}ròh}róh ]rôXros/jade/ros_controlrõasshˆh}röh}r÷h}røh ]rùjîasssuX fetch_mapsrú}rû(h}rü(h}rýh}rþh ]rÿXros-jade-fetch-mapsr assh }r h}r h ]r j assuh}r h}r h ]r Xros/jade/fetch_rosr asshˆh}r h}r h}r h ]r j asssuXmrpt_rbpf_slamr }r (h}r (h}r h}r h ]r Xros-jade-mrpt-rbpf-slamr assh }r h}r h ]r j assuh}r h}r h ]r Xros/jade/mrpt_slamr asshˆh}r h}r h}r h ]r j asssuXgripper_action_controllerr }r (h}r (h}r! h}r" h ]r# X"ros-jade-gripper-action-controllerr$ assh }r% h}r& h ]r' j$ assuh}r( h}r) h ]r* Xros/jade/ros_controllersr+ asshˆh}r, h}r- h}r. h ]r/ j$ asssuXgmappingr0 }r1 (h}r2 (h}r3 h}r4 h ]r5 Xros-jade-gmappingr6 assh }r7 h}r8 h ]r9 j6 assuh}r: h}r; h ]r< Xros/jade/slam_gmappingr= asshˆh}r> h}r? h}r@ h ]rA j6 asssuXvisprB }rC (h}rD (h}rE h}rF h ]rG X ros-jade-visprH assh }rI h}rJ h ]rK jH assuh}rL h}rM h ]rN X ros/jade/visprO asshˆh}rP h}rQ h}rR h ]rS jH asssuXrtt_rosrT }rU (h}rV (h}rW h}rX h ]rY Xros-jade-rtt-rosrZ assh }r[ h}r\ h ]r] jZ assuh}r^ h}r_ h ]r` Xros/jade/rtt_ros_integrationra asshˆh}rb h}rc h}rd h ]re jZ asssuX audio_commonrf }rg (h}rh (h}ri h}rj h ]rk Xros-jade-audio-commonrl assh }rm h}rn h ]ro jl assuh}rp h}rq h ]rr Xros/jade/audio_commonrs asshˆh}rt h}ru h}rv h ]rw jl asssuXobject_recognition_rendererrx }ry (h}rz (h}r{ h}r| h ]r} X$ros-jade-object-recognition-rendererr~ assh }r h}r€ h ]r j~ assuh}r‚ h}rƒ h ]r„ X$ros/jade/object_recognition_rendererr… asshˆh}r† h}r‡ h}rˆ h ]r‰ j~ asssuXgravity_compensationrŠ }r‹ (h}rŒ (h}r h}rŽ h ]r Xros-jade-gravity-compensationr assh }r‘ h}r’ h ]r“ j assuh}r” h}r• h ]r– Xros/jade/force_torque_toolsr— asshˆh}r˜ h}r™ h}rš h ]r› j asssuXkdl_conversionsrœ }r (h}rž (h}rŸ h}r  h ]r¡ Xros-jade-kdl-conversionsr¢ assh }r£ h}r¤ h ]r¥ j¢ assuh}r¦ h}r§ h ]r¨ Xros/jade/geometryr© asshˆh}rª h}r« h}r¬ h ]r­ j¢ asssuXhrpsysr® }r¯ (h}r° (h}r± h}r² h ]r³ Xros-jade-hrpsysr´ assh }rµ h}r¶ h ]r· j´ assuh}r¸ h}r¹ h ]rº Xros/jade/hrpsysr» asshˆh}r¼ h}r½ h}r¾ h ]r¿ j´ asssuX image_commonrÀ }rÁ (h}r (h}rà h}rÄ h ]rÅ Xros-jade-image-commonrÆ assh }rÇ h}rÈ h ]rÉ jÆ assuh}rÊ h}rË h ]rÌ Xros/jade/image_commonrÍ asshˆh}rÎ h}rÏ h}rÐ h ]rÑ jÆ asssuX gazebo_msgsrÒ }rÓ (h}rÔ (h}rÕ h}rÖ h ]r× Xros-jade-gazebo-msgsrØ assh }rÙ h}rÚ h ]rÛ jØ assuh}rÜ h}rÝ h ]rÞ Xros/jade/gazebo_ros_pkgsrß asshˆh}rà h}rá h}râ h ]rã jØ asssuX jsk_roseusrä }rå (h}ræ (h}rç h}rè h ]ré Xros-jade-jsk-roseusrê assh }rë h}rì h ]rí jê assuh}rî h}rï h ]rð Xros/jade/jsk_roseusrñ asshˆh}rò h}ró h}rô h ]rõ jê asssuX pgm_learnerrö }r÷ (h}rø (h}rù h}rú h ]rû Xros-jade-pgm-learnerrü assh }rý h}rþ h ]rÿ jü assuh}r h}r h ]r Xros/jade/jsk_3rdpartyr asshˆh}r h}r h}r h ]r jü asssuXhousehold_objects_database_msgsr }r (h}r (h}r h}r h ]r X(ros-jade-household-objects-database-msgsr assh }r h}r h ]r j assuh}r h}r h ]r X(ros/jade/household_objects_database_msgsr asshˆh}r h}r h}r h ]r j asssuX openni_camerar }r (h}r (h}r h}r h ]r Xros-jade-openni-camerar assh }r! h}r" h ]r# j assuh}r$ h}r% h ]r& Xros/jade/openni_camerar' asshˆh}r( h}r) h}r* h ]r+ j asssuXswri_opencv_utilr, }r- (h}r. (h}r/ h}r0 h ]r1 Xros-jade-swri-opencv-utilr2 assh }r3 h}r4 h ]r5 j2 assuh}r6 h}r7 h ]r8 Xros/jade/marti_commonr9 asshˆh}r: h}r; h}r< h ]r= j2 asssuXhector_quadrotor_descriptionr> }r? (h}r@ (h}rA h}rB h ]rC X%ros-jade-hector-quadrotor-descriptionrD assh }rE h}rF h ]rG jD assuh}rH h}rI h ]rJ Xros/jade/hector_quadrotorrK asshˆh}rL h}rM h}rN h ]rO jD asssuXhector_gazebo_pluginsrP }rQ (h}rR (h}rS h}rT h ]rU Xros-jade-hector-gazebo-pluginsrV assh }rW h}rX h ]rY jV assuh}rZ h}r[ h ]r\ Xros/jade/hector_gazebor] asshˆh}r^ h}r_ h}r` h ]ra jV asssuXroslibrb }rc (h}rd (h}re h}rf h ]rg Xros-jade-roslibrh assh }ri h}rj h ]rk jh assuh}rl h}rm h ]rn X ros/jade/rosro asshˆh}rp h}rq h}rr h ]rs jh asssuXivconrt }ru (h}rv (h}rw h}rx h ]ry Xros-jade-ivconrz assh }r{ h}r| h ]r} jz assuh}r~ h}r h ]r€ Xros/jade/ivconr asshˆh}r‚ h}rƒ h}r„ h ]r… jz asssuX imagesiftr† }r‡ (h}rˆ (h}r‰ h}rŠ h ]r‹ Xros-jade-imagesiftrŒ assh }r h}rŽ h ]r jŒ assuh}r h}r‘ h ]r’ Xros/jade/jsk_recognitionr“ asshˆh}r” h}r• h}r– h ]r— jŒ asssuXeigen_conversionsr˜ }r™ (h}rš (h}r› h}rœ h ]r Xros-jade-eigen-conversionsrž assh }rŸ h}r  h ]r¡ jž assuh}r¢ h}r£ h ]r¤ Xros/jade/geometryr¥ asshˆh}r¦ h}r§ h}r¨ h ]r© jž asssuXcollada_parserrª }r« (h}r¬ (h}r­ h}r® h ]r¯ Xros-jade-collada-parserr° assh }r± h}r² h ]r³ j° assuh}r´ h}rµ h ]r¶ Xros/jade/collada_urdfr· asshˆh}r¸ h}r¹ h}rº h ]r» j° asssuX naoqi_toolsr¼ }r½ (h}r¾ (h}r¿ h}rÀ h ]rÁ Xros-jade-naoqi-toolsr assh }rà h}rÄ h ]rÅ j assuh}rÆ h}rÇ h ]rÈ Xros/jade/naoqi_bridgerÉ asshˆh}rÊ h}rË h}rÌ h ]rÍ j asssuXnao_path_followerrÎ }rÏ (h}rÐ (h}rÑ h}rÒ h ]rÓ Xros-jade-nao-path-followerrÔ assh }rÕ h}rÖ h ]r× jÔ assuh}rØ h}rÙ h ]rÚ Xros/jade/nao_extrasrÛ asshˆh}rÜ h}rÝ h}rÞ h ]rß jÔ asssuX smach_viewerrà }rá (h}râ (h}rã h}rä h ]rå Xros-jade-smach-viewerræ assh }rç h}rè h ]ré jæ assuh}rê h}rë h ]rì X&ros/jade/executive_smach_visualizationrí asshˆh}rî h}rï h}rð h ]rñ jæ asssuXfake_localizationrò }ró (h}rô (h}rõ h}rö h ]r÷ Xros-jade-fake-localizationrø assh }rù h}rú h ]rû jø assuh}rü h}rý h ]rþ Xros/jade/navigationrÿ asshˆh}r h}r h}r h ]r jø asssuXbayesian_belief_networksr }r (h}r (h}r h}r h ]r X!ros-jade-bayesian-belief-networksr assh }r h}r h ]r j assuh}r h}r h ]r Xros/jade/jsk_3rdpartyr asshˆh}r h}r h}r h ]r j asssuX rosdoc_liter }r (h}r (h}r h}r h ]r Xros-jade-rosdoc-liter assh }r h}r h ]r j assuh}r h}r! h ]r" Xros/jade/rosdoc_liter# asshˆh}r$ h}r% h}r& h ]r' j asssuXmrpt_localizationr( }r) (h}r* (h}r+ h}r, h ]r- Xros-jade-mrpt-localizationr. assh }r/ h}r0 h ]r1 j. assuh}r2 h}r3 h ]r4 Xros/jade/mrpt_navigationr5 asshˆh}r6 h}r7 h}r8 h ]r9 j. asssuXhector_localizationr: }r; (h}r< (h}r= h}r> h ]r? Xros-jade-hector-localizationr@ assh }rA h}rB h ]rC j@ assuh}rD h}rE h ]rF Xros/jade/hector_localizationrG asshˆh}rH h}rI h}rJ h ]rK j@ asssuX laser_procrL }rM (h}rN (h}rO h}rP h ]rQ Xros-jade-laser-procrR assh }rS h}rT h ]rU jR assuh}rV h}rW h ]rX Xros/jade/laser_procrY asshˆh}rZ h}r[ h}r\ h ]r] jR asssuXcheckerboard_detectorr^ }r_ (h}r` (h}ra h}rb h ]rc Xros-jade-checkerboard-detectorrd assh }re h}rf h ]rg jd assuh}rh h}ri h ]rj Xros/jade/jsk_recognitionrk asshˆh}rl h}rm h}rn h ]ro jd asssuXcertifirp }rq (h}rr (h}rs h}rt h ]ru Xros-jade-certifirv assh }rw h}rx h ]ry jv assuh}rz h}r{ h ]r| Xros/jade/certifir} asshˆh}r~ h}r h}r€ h ]r jv asssuXroswtfr‚ }rƒ (h}r„ (h}r… h}r† h ]r‡ Xros-jade-roswtfrˆ assh }r‰ h}rŠ h ]r‹ jˆ assuh}rŒ h}r h ]rŽ Xros/jade/ros_commr asshˆh}r h}r‘ h}r’ h ]r“ jˆ asssuXethercat_trigger_controllersr” }r• (h}r– (h}r— h}r˜ h ]r™ X%ros-jade-ethercat-trigger-controllersrš assh }r› h}rœ h ]r jš assuh}rž h}rŸ h ]r  Xros/jade/pr2_controllersr¡ asshˆh}r¢ h}r£ h}r¤ h ]r¥ jš asssuXmoveit_setup_assistantr¦ }r§ (h}r¨ (h}r© h}rª h ]r« Xros-jade-moveit-setup-assistantr¬ assh }r­ h}r® h ]r¯ j¬ assuh}r° h}r± h ]r² Xros/jade/moveitr³ asshˆh}r´ h}rµ h}r¶ h ]r· j¬ asssuXnodelet_tutorial_mathr¸ }r¹ (h}rº (h}r» h}r¼ h ]r½ Xros-jade-nodelet-tutorial-mathr¾ assh }r¿ h}rÀ h ]rÁ j¾ assuh}r h}rà h ]rÄ Xros/jade/common_tutorialsrÅ asshˆh}rÆ h}rÇ h}rÈ h ]rÉ j¾ asssuXar_track_alvar_msgsrÊ }rË (h}rÌ (h}rÍ h}rÎ h ]rÏ Xros-jade-ar-track-alvar-msgsrÐ assh }rÑ h}rÒ h ]rÓ jÐ assuh}rÔ h}rÕ h ]rÖ Xros/jade/ar_track_alvar_msgsr× asshˆh}rØ h}rÙ h}rÚ h ]rÛ jÐ asssuXnav_msgsrÜ }rÝ (h}rÞ (h}rß h}rà h ]rá Xros-jade-nav-msgsrâ assh }rã h}rä h ]rå jâ assuh}ræ h}rç h ]rè Xros/jade/common_msgsré asshˆh}rê h}rë h}rì h ]rí jâ asssuXcostmap_converterrî }rï (h}rð (h}rñ h}rò h ]ró Xros-jade-costmap-converterrô assh }rõ h}rö h ]r÷ jô assuh}rø h}rù h ]rú Xros/jade/costmap_converterrû asshˆh}rü h}rý h}rþ h ]rÿ jô asssuXxmlrpcppr }r (h}r (h}r h}r h ]r Xros-jade-xmlrpcppr assh }r h}r h ]r j assuh}r h}r h ]r Xros/jade/ros_commr asshˆh}r h}r h}r h ]r j asssuXmoveit_ros_warehouser }r (h}r (h}r h}r h ]r Xros-jade-moveit-ros-warehouser assh }r h}r h ]r j assuh}r h}r h ]r Xros/jade/moveitr asshˆh}r h}r! h}r" h ]r# j asssuXkeyboardr$ }r% (h}r& (h}r' h}r( h ]r) Xros-jade-keyboardr* assh }r+ h}r, h ]r- j* assuh}r. h}r/ h ]r0 Xros/jade/keyboardr1 asshˆh}r2 h}r3 h}r4 h ]r5 j* asssuXlibrviz_tutorialr6 }r7 (h}r8 (h}r9 h}r: h ]r; Xros-jade-librviz-tutorialr< assh }r= h}r> h ]r? j< assuh}r@ h}rA h ]rB X ros/jade/visualization_tutorialsrC asshˆh}rD h}rE h}rF h ]rG j< asssuXnavigation_stagerH }rI (h}rJ (h}rK h}rL h ]rM Xros-jade-navigation-stagerN assh }rO h}rP h ]rQ jN assuh}rR h}rS h ]rT Xros/jade/navigation_tutorialsrU asshˆh}rV h}rW h}rX h ]rY jN asssuXwireless_watcherrZ }r[ (h}r\ (h}r] h}r^ h ]r_ Xros-jade-wireless-watcherr` assh }ra h}rb h ]rc j` assuh}rd h}re h ]rf Xros/jade/wirelessrg asshˆh}rh h}ri h}rj h ]rk j` asssuX nav2d_kartorl }rm (h}rn (h}ro h}rp h ]rq Xros-jade-nav2d-kartorr assh }rs h}rt h ]ru jr assuh}rv h}rw h ]rx Xros/jade/navigation_2dry asshˆh}rz h}r{ h}r| h ]r} jr asssuXpr2_kinematicsr~ }r (h}r€ (h}r h}r‚ h ]rƒ Xros-jade-pr2-kinematicsr„ assh }r… h}r† h ]r‡ j„ assuh}rˆ h}r‰ h ]rŠ Xros/jade/pr2_kinematicsr‹ asshˆh}rŒ h}r h}rŽ h ]r j„ asssuX rqt_multiplotr }r‘ (h}r’ (h}r“ h}r” h ]r• Xros-jade-rqt-multiplotr– assh }r— h}r˜ h ]r™ j– assuh}rš h}r› h ]rœ Xros/jade/rqt_multiplot_pluginr asshˆh}rž h}rŸ h}r  h ]r¡ j– asssuXrotors_joy_interfacer¢ }r£ (h}r¤ (h}r¥ h}r¦ h ]r§ Xros-jade-rotors-joy-interfacer¨ assh }r© h}rª h ]r« j¨ assuh}r¬ h}r­ h ]r® Xros/jade/rotors_simulatorr¯ asshˆh}r° h}r± h}r² h ]r³ j¨ asssuXteleop_tools_msgsr´ }rµ (h}r¶ (h}r· h}r¸ h ]r¹ Xros-jade-teleop-tools-msgsrº assh }r» h}r¼ h ]r½ jº assuh}r¾ h}r¿ h ]rÀ Xros/jade/teleop_toolsrÁ asshˆh}r h}rà h}rÄ h ]rÅ jº asssuXromeo_gazebo_pluginrÆ }rÇ (h}rÈ (h}rÉ h}rÊ h ]rË Xros-jade-romeo-gazebo-pluginrÌ assh }rÍ h}rÎ h ]rÏ jÌ assuh}rÐ h}rÑ h ]rÒ Xros/jade/romeo_virtualrÓ asshˆh}rÔ h}rÕ h}rÖ h ]r× jÌ asssuX teleop_toolsrØ }rÙ (h}rÚ (h}rÛ h}rÜ h ]rÝ Xros-jade-teleop-toolsrÞ assh }rß h}rà h ]rá jÞ assuh}râ h}rã h ]rä Xros/jade/teleop_toolsrå asshˆh}ræ h}rç h}rè h ]ré jÞ asssuXrobot_self_filterrê }rë (h}rì (h}rí h}rî h ]rï Xros-jade-robot-self-filterrð assh }rñ h}rò h ]ró jð assuh}rô h}rõ h ]rö Xros/jade/robot_self_filterr÷ asshˆh}rø h}rù h}rú h ]rû jð asssuXswri_math_utilrü }rý (h}rþ (h}rÿ h}r h ]r Xros-jade-swri-math-utilr assh }r h}r h ]r j assuh}r h}r h ]r Xros/jade/marti_commonr asshˆh}r h}r h}r h ]r j asssuXrqt_robot_steeringr }r (h}r (h}r h}r h ]r Xros-jade-rqt-robot-steeringr assh }r h}r h ]r j assuh}r h}r h ]r Xros/jade/rqt_robot_steeringr asshˆh}r h}r h}r h ]r j asssuXrmp_msgsr }r! (h}r" (h}r# h}r$ h ]r% Xros-jade-rmp-msgsr& assh }r' h}r( h ]r) j& assuh}r* h}r+ h ]r, Xros/jade/rmp_msgsr- asshˆh}r. h}r/ h}r0 h ]r1 j& asssuX pr2eus_moveitr2 }r3 (h}r4 (h}r5 h}r6 h ]r7 Xros-jade-pr2eus-moveitr8 assh }r9 h}r: h ]r; j8 assuh}r< h}r= h ]r> Xros/jade/jsk_pr2eusr? asshˆh}r@ h}rA h}rB h ]rC j8 asssuXiai_content_msgsrD }rE (h}rF (h}rG h}rH h ]rI Xros-jade-iai-content-msgsrJ assh }rK h}rL h ]rM jJ assuh}rN h}rO h ]rP Xros/jade/iai_common_msgsrQ asshˆh}rR h}rS h}rT h ]rU jJ asssuXosg_interactive_markersrV }rW (h}rX (h}rY h}rZ h ]r[ X ros-jade-osg-interactive-markersr\ assh }r] h}r^ h ]r_ j\ assuh}r` h}ra h ]rb Xros/jade/visualization_osgrc asshˆh}rd h}re h}rf h ]rg j\ asssuX laser_filtersrh }ri (h}rj (h}rk h}rl h ]rm Xros-jade-laser-filtersrn assh }ro h}rp h ]rq jn assuh}rr h}rs h ]rt Xros/jade/laser_filtersru asshˆh}rv h}rw h}rx h ]ry jn asssuX roslisp_replrz }r{ (h}r| (h}r} h}r~ h ]r Xros-jade-roslisp-replr€ assh }r h}r‚ h ]rƒ j€ assuh}r„ h}r… h ]r† Xros/jade/ros_emacs_utilsr‡ asshˆh}rˆ h}r‰ h}rŠ h ]r‹ j€ asssuXlaser_geometryrŒ }r (h}rŽ (h}r h}r h ]r‘ Xros-jade-laser-geometryr’ assh }r“ h}r” h ]r• j’ assuh}r– h}r— h ]r˜ Xros/jade/laser_geometryr™ asshˆh}rš h}r› h}rœ h ]r j’ asssuXphidgets_driversrž }rŸ (h}r  (h}r¡ h}r¢ h ]r£ Xros-jade-phidgets-driversr¤ assh }r¥ h}r¦ h ]r§ j¤ assuh}r¨ h}r© h ]rª Xros/jade/phidgets_driversr« asshˆh}r¬ h}r­ h}r® h ]r¯ j¤ asssuXmoveit_pluginsr° }r± (h}r² (h}r³ h}r´ h ]rµ Xros-jade-moveit-pluginsr¶ assh }r· h}r¸ h ]r¹ j¶ assuh}rº h}r» h ]r¼ Xros/jade/moveitr½ asshˆh}r¾ h}r¿ h}rÀ h ]rÁ j¶ asssuXnovatel_span_driverr }rà (h}rÄ (h}rÅ h}rÆ h ]rÇ Xros-jade-novatel-span-driverrÈ assh }rÉ h}rÊ h ]rË jÈ assuh}rÌ h}rÍ h ]rÎ Xros/jade/novatel_span_driverrÏ asshˆh}rÐ h}rÑ h}rÒ h ]rÓ jÈ asssuX osg_markersrÔ }rÕ (h}rÖ (h}r× h}rØ h ]rÙ Xros-jade-osg-markersrÚ assh }rÛ h}rÜ h ]rÝ jÚ assuh}rÞ h}rß h ]rà Xros/jade/visualization_osgrá asshˆh}râ h}rã h}rä h ]rå jÚ asssuXcl_utilsræ }rç (h}rè (h}ré h}rê h ]rë Xros-jade-cl-utilsrì assh }rí h}rî h ]rï jì assuh}rð h}rñ h ]rò Xros/jade/roslisp_commonró asshˆh}rô h}rõ h}rö h ]r÷ jì asssuXnav2d_localizerrø }rù (h}rú (h}rû h}rü h ]rý Xros-jade-nav2d-localizerrþ assh }rÿ h}rh ]rjþ assuh}rh}rh ]rXros/jade/navigation_2drasshˆh}rh}rh}rh ]r jþ asssuXsimple_messager }r (h}r (h}r h}rh ]rXros-jade-simple-messagerassh }rh}rh ]rjassuh}rh}rh ]rXros/jade/industrial_corerasshˆh}rh}rh}rh ]rjasssuX driver_commonr}r(h}r(h}rh}r h ]r!Xros-jade-driver-commonr"assh }r#h}r$h ]r%j"assuh}r&h}r'h ]r(Xros/jade/driver_commonr)asshˆh}r*h}r+h}r,h ]r-j"asssuXrosbuildr.}r/(h}r0(h}r1h}r2h ]r3Xros-jade-rosbuildr4assh }r5h}r6h ]r7j4assuh}r8h}r9h ]r:X ros/jade/rosr;asshˆh}r<h}r=h}r>h ]r?j4asssuXnloptr@}rA(h}rB(h}rCh}rDh ]rEXros-jade-nloptrFassh }rGh}rHh ]rIjFassuh}rJh}rKh ]rLXros/jade/jsk_3rdpartyrMasshˆh}rNh}rOh}rPh ]rQjFasssuX wu_ros_toolsrR}rS(h}rT(h}rUh}rVh ]rWXros-jade-wu-ros-toolsrXassh }rYh}rZh ]r[jXassuh}r\h}r]h ]r^Xros/jade/wu_ros_toolsr_asshˆh}r`h}rah}rbh ]rcjXasssuXstd_msgsrd}re(h}rf(h}rgh}rhh ]riXros-jade-std-msgsrjassh }rkh}rlh ]rmjjassuh}rnh}roh ]rpXros/jade/std_msgsrqasshˆh}rrh}rsh}rth ]rujjasssuXnav2d_operatorrv}rw(h}rx(h}ryh}rzh ]r{Xros-jade-nav2d-operatorr|assh }r}h}r~h ]rj|assuh}r€h}rh ]r‚Xros/jade/navigation_2drƒasshˆh}r„h}r…h}r†h ]r‡j|asssuX pr2_commonrˆ}r‰(h}rŠ(h}r‹h}rŒh ]rXros-jade-pr2-commonrŽassh }rh}rh ]r‘jŽassuh}r’h}r“h ]r”Xros/jade/pr2_commonr•asshˆh}r–h}r—h}r˜h ]r™jŽasssuX rplidar_rosrš}r›(h}rœ(h}rh}ržh ]rŸXros-jade-rplidar-rosr assh }r¡h}r¢h ]r£j assuh}r¤h}r¥h ]r¦Xros/jade/rplidar_rosr§asshˆh}r¨h}r©h}rªh ]r«j asssuXsmachr¬}r­(h}r®(h}r¯h}r°h ]r±Xros-jade-smachr²assh }r³h}r´h ]rµj²assuh}r¶h}r·h ]r¸Xros/jade/executive_smachr¹asshˆh}rºh}r»h}r¼h ]r½j²asssuXgazebo_pluginsr¾}r¿(h}rÀ(h}rÁh}rÂh ]rÃXros-jade-gazebo-pluginsrÄassh }rÅh}rÆh ]rÇjÄassuh}rÈh}rÉh ]rÊXros/jade/gazebo_ros_pkgsrËasshˆh}rÌh}rÍh}rÎh ]rÏjÄasssuX novatel_msgsrÐ}rÑ(h}rÒ(h}rÓh}rÔh ]rÕXros-jade-novatel-msgsrÖassh }r×h}rØh ]rÙjÖassuh}rÚh}rÛh ]rÜXros/jade/novatel_span_driverrÝasshˆh}rÞh}rßh}ràh ]rájÖasssuXrosconsole_bridgerâ}rã(h}rä(h}råh}ræh ]rçXros-jade-rosconsole-bridgerèassh }réh}rêh ]rëjèassuh}rìh}ríh ]rîXros/jade/rosconsole_bridgerïasshˆh}rðh}rñh}ròh ]rójèasssuXvariant_topic_testrô}rõ(h}rö(h}r÷h}røh ]rùXros-jade-variant-topic-testrúassh }rûh}rüh ]rýjúassuh}rþh}rÿh ]rXros/jade/variantrasshˆh}rh}rh}rh ]rjúasssuXcommon_tutorialsr}r(h}r(h}r h}r h ]r Xros-jade-common-tutorialsr assh }r h}rh ]rj assuh}rh}rh ]rXros/jade/common_tutorialsrasshˆh}rh}rh}rh ]rj asssuX ecl_conceptsr}r(h}r(h}rh}rh ]rXros-jade-ecl-conceptsrassh }rh}r h ]r!jassuh}r"h}r#h ]r$Xros/jade/ecl_corer%asshˆh}r&h}r'h}r(h ]r)jasssuXrtmbuildr*}r+(h}r,(h}r-h}r.h ]r/Xros-jade-rtmbuildr0assh }r1h}r2h ]r3j0assuh}r4h}r5h ]r6Xros/jade/rtmros_commonr7asshˆh}r8h}r9h}r:h ]r;j0asssuXjsk_interactive_testr<}r=(h}r>(h}r?h}r@h ]rAXros-jade-jsk-interactive-testrBassh }rCh}rDh ]rEjBassuh}rFh}rGh ]rHXros/jade/jsk_visualizationrIasshˆh}rJh}rKh}rLh ]rMjBasssuX uuid_msgsrN}rO(h}rP(h}rQh}rRh ]rSXros-jade-uuid-msgsrTassh }rUh}rVh ]rWjTassuh}rXh}rYh ]rZXros/jade/unique_identifierr[asshˆh}r\h}r]h}r^h ]r_jTasssuXjsk_pcl_ros_utilsr`}ra(h}rb(h}rch}rdh ]reXros-jade-jsk-pcl-ros-utilsrfassh }rgh}rhh ]rijfassuh}rjh}rkh ]rlXros/jade/jsk_recognitionrmasshˆh}rnh}roh}rph ]rqjfasssuX imu_pipelinerr}rs(h}rt(h}ruh}rvh ]rwXros-jade-imu-pipelinerxassh }ryh}rzh ]r{jxassuh}r|h}r}h ]r~Xros/jade/imu_pipelinerasshˆh}r€h}rh}r‚h ]rƒjxasssuXhector_quadrotorr„}r…(h}r†(h}r‡h}rˆh ]r‰Xros-jade-hector-quadrotorrŠassh }r‹h}rŒh ]rjŠassuh}rŽh}rh ]rXros/jade/hector_quadrotorr‘asshˆh}r’h}r“h}r”h ]r•jŠasssuXoclr–}r—(h}r˜(h}r™h}ršh ]r›X ros-jade-oclrœassh }rh}ržh ]rŸjœassuh}r h}r¡h ]r¢X ros/jade/oclr£asshˆh}r¤h}r¥h}r¦h ]r§jœasssuXjsk_datar¨}r©(h}rª(h}r«h}r¬h ]r­Xros-jade-jsk-datar®assh }r¯h}r°h ]r±j®assuh}r²h}r³h ]r´Xros/jade/jsk_commonrµasshˆh}r¶h}r·h}r¸h ]r¹j®asssuXmultisense_librº}r»(h}r¼(h}r½h}r¾h ]r¿Xros-jade-multisense-librÀassh }rÁh}rÂh ]rÃjÀassuh}rÄh}rÅh ]rÆXros/jade/multisense_rosrÇasshˆh}rÈh}rÉh}rÊh ]rËjÀasssuXnaoqi_libqicorerÌ}rÍ(h}rÎ(h}rÏh}rÐh ]rÑXros-jade-naoqi-libqicorerÒassh }rÓh}rÔh ]rÕjÒassuh}rÖh}r×h ]rØXros/jade/naoqi_libqicorerÙasshˆh}rÚh}rÛh}rÜh ]rÝjÒasssuX eus_nloptrÞ}rß(h}rà(h}ráh}râh ]rãXros-jade-eus-nlopträassh }råh}ræh ]rçjäassuh}rèh}réh ]rêXros/jade/jsk_controlrëasshˆh}rìh}ríh}rîh ]rïjäasssuXschunk_svh_driverrð}rñ(h}rò(h}róh}rôh ]rõXros-jade-schunk-svh-driverröassh }r÷h}røh ]rùjöassuh}rúh}rûh ]rüXros/jade/schunk_svh_driverrýasshˆh}rþh}rÿh}rh ]rjöasssuXlaser_ortho_projectorr}r(h}r(h}rh}rh ]rXros-jade-laser-ortho-projectorrassh }r h}r h ]r jassuh}r h}r h ]rXros/jade/scan_toolsrasshˆh}rh}rh}rh ]rjasssuX flask_restfulr}r(h}r(h}rh}rh ]rXros-jade-flask-restfulrassh }rh}rh ]rjassuh}rh}rh ]r Xros/jade/flask_restfulr!asshˆh}r"h}r#h}r$h ]r%jasssuXimu_transformerr&}r'(h}r((h}r)h}r*h ]r+Xros-jade-imu-transformerr,assh }r-h}r.h ]r/j,assuh}r0h}r1h ]r2Xros/jade/imu_pipeliner3asshˆh}r4h}r5h}r6h ]r7j,asssuXuwsim_osgworksr8}r9(h}r:(h}r;h}r<h ]r=Xros-jade-uwsim-osgworksr>assh }r?h}r@h ]rAj>assuh}rBh}rCh ]rDXros/jade/uwsim_osgworksrEasshˆh}rFh}rGh}rHh ]rIj>asssuXnmea_navsat_driverrJ}rK(h}rL(h}rMh}rNh ]rOXros-jade-nmea-navsat-driverrPassh }rQh}rRh ]rSjPassuh}rTh}rUh ]rVXros/jade/nmea_navsat_driverrWasshˆh}rXh}rYh}rZh ]r[jPasssuX cl_transformsr\}r](h}r^(h}r_h}r`h ]raXros-jade-cl-transformsrbassh }rch}rdh ]rejbassuh}rfh}rgh ]rhXros/jade/roslisp_commonriasshˆh}rjh}rkh}rlh ]rmjbasssuXrospeex_audiomonitorrn}ro(h}rp(h}rqh}rrh ]rsXros-jade-rospeex-audiomonitorrtassh }ruh}rvh ]rwjtassuh}rxh}ryh ]rzXros/jade/rospeexr{asshˆh}r|h}r}h}r~h ]rjtasssuXrospeex_samplesr€}r(h}r‚(h}rƒh}r„h ]r…Xros-jade-rospeex-samplesr†assh }r‡h}rˆh ]r‰j†assuh}rŠh}r‹h ]rŒXros/jade/rospeexrasshˆh}rŽh}rh}rh ]r‘j†asssuX tetris_launchr’}r“(h}r”(h}r•h}r–h ]r—Xros-jade-tetris-launchr˜assh }r™h}ršh ]r›j˜assuh}rœh}rh ]ržXros/jade/hakutorŸasshˆh}r h}r¡h}r¢h ]r£j˜asssuXpointgrey_camera_driverr¤}r¥(h}r¦(h}r§h}r¨h ]r©X ros-jade-pointgrey-camera-driverrªassh }r«h}r¬h ]r­jªassuh}r®h}r¯h ]r°X ros/jade/pointgrey_camera_driverr±asshˆh}r²h}r³h}r´h ]rµjªasssuX nav2d_msgsr¶}r·(h}r¸(h}r¹h}rºh ]r»Xros-jade-nav2d-msgsr¼assh }r½h}r¾h ]r¿j¼assuh}rÀh}rÁh ]rÂXros/jade/navigation_2drÃasshˆh}rÄh}rÅh}rÆh ]rÇj¼asssuXmrpt_icp_slam_2drÈ}rÉ(h}rÊ(h}rËh}rÌh ]rÍXros-jade-mrpt-icp-slam-2drÎassh }rÏh}rÐh ]rÑjÎassuh}rÒh}rÓh ]rÔXros/jade/mrpt_slamrÕasshˆh}rÖh}r×h}rØh ]rÙjÎasssuXpr2_controller_managerrÚ}rÛ(h}rÜ(h}rÝh}rÞh ]rßXros-jade-pr2-controller-managerràassh }ráh}râh ]rãjàassuh}räh}råh ]ræXros/jade/pr2_mechanismrçasshˆh}rèh}réh}rêh ]rëjàasssuX hrpsys_toolsrì}rí(h}rî(h}rïh}rðh ]rñXros-jade-hrpsys-toolsròassh }róh}rôh ]rõjòassuh}röh}r÷h ]røXros/jade/rtmros_commonrùasshˆh}rúh}rûh}rüh ]rýjòasssuXopenrtm_ros_bridgerþ}rÿ(h}r(h}rh}rh ]rXros-jade-openrtm-ros-bridgerassh }rh}rh ]rjassuh}rh}r h ]r Xros/jade/rtmros_commonr asshˆh}r h}r h}rh ]rjasssuX roboteq_msgsr}r(h}r(h}rh}rh ]rXros-jade-roboteq-msgsrassh }rh}rh ]rjassuh}rh}rh ]rXros/jade/roboteqrasshˆh}rh}rh}r h ]r!jasssuX rqt_gui_pyr"}r#(h}r$(h}r%h}r&h ]r'Xros-jade-rqt-gui-pyr(assh }r)h}r*h ]r+j(assuh}r,h}r-h ]r.X ros/jade/rqtr/asshˆh}r0h}r1h}r2h ]r3j(asssuXpython_ethernet_rmpr4}r5(h}r6(h}r7h}r8h ]r9Xros-jade-python-ethernet-rmpr:assh }r;h}r<h ]r=j:assuh}r>h}r?h ]r@Xros/jade/python_ethernet_rmprAasshˆh}rBh}rCh}rDh ]rEj:asssuXtrivial_garbagerF}rG(h}rH(h}rIh}rJh ]rKXros-jade-trivial-garbagerLassh }rMh}rNh ]rOjLassuh}rPh}rQh ]rRXros/jade/cram_3rdpartyrSasshˆh}rTh}rUh}rVh ]rWjLasssuX!hector_worldmodel_geotiff_pluginsrX}rY(h}rZ(h}r[h}r\h ]r]X*ros-jade-hector-worldmodel-geotiff-pluginsr^assh }r_h}r`h ]raj^assuh}rbh}rch ]rdXros/jade/hector_worldmodelreasshˆh}rfh}rgh}rhh ]rij^asssuXbondpyrj}rk(h}rl(h}rmh}rnh ]roXros-jade-bondpyrpassh }rqh}rrh ]rsjpassuh}rth}ruh ]rvXros/jade/bond_corerwasshˆh}rxh}ryh}rzh ]r{jpasssuX swri_roscppr|}r}(h}r~(h}rh}r€h ]rXros-jade-swri-roscppr‚assh }rƒh}r„h ]r…j‚assuh}r†h}r‡h ]rˆXros/jade/marti_commonr‰asshˆh}rŠh}r‹h}rŒh ]rj‚asssuXecl_mplrŽ}r(h}r(h}r‘h}r’h ]r“Xros-jade-ecl-mplr”assh }r•h}r–h ]r—j”assuh}r˜h}r™h ]ršXros/jade/ecl_corer›asshˆh}rœh}rh}ržh ]rŸj”asssuXecl_filesystemr }r¡(h}r¢(h}r£h}r¤h ]r¥Xros-jade-ecl-filesystemr¦assh }r§h}r¨h ]r©j¦assuh}rªh}r«h ]r¬Xros/jade/ecl_corer­asshˆh}r®h}r¯h}r°h ]r±j¦asssuXpddl_planner_viewerr²}r³(h}r´(h}rµh}r¶h ]r·Xros-jade-pddl-planner-viewerr¸assh }r¹h}rºh ]r»j¸assuh}r¼h}r½h ]r¾Xros/jade/jsk_planningr¿asshˆh}rÀh}rÁh}rÂh ]rÃj¸asssuX nav2d_remoterÄ}rÅ(h}rÆ(h}rÇh}rÈh ]rÉXros-jade-nav2d-remoterÊassh }rËh}rÌh ]rÍjÊassuh}rÎh}rÏh ]rÐXros/jade/navigation_2drÑasshˆh}rÒh}rÓh}rÔh ]rÕjÊasssuXfetch_gazebo_demorÖ}r×(h}rØ(h}rÙh}rÚh ]rÛXros-jade-fetch-gazebo-demorÜassh }rÝh}rÞh ]rßjÜassuh}ràh}ráh ]râXros/jade/fetch_gazeborãasshˆh}räh}råh}ræh ]rçjÜasssuXtf2_kdlrè}ré(h}rê(h}rëh}rìh ]ríXros-jade-tf2-kdlrîassh }rïh}rðh ]rñjîassuh}ròh}róh ]rôXros/jade/geometry2rõasshˆh}röh}r÷h}røh ]rùjîasssuX smach_rosrú}rû(h}rü(h}rýh}rþh ]rÿXros-jade-smach-rosrassh }rh}rh ]rjassuh}rh}rh ]rXros/jade/executive_smachrasshˆh}rh}r h}r h ]r jasssuXjoint_state_controllerr }r (h}r(h}rh}rh ]rXros-jade-joint-state-controllerrassh }rh}rh ]rjassuh}rh}rh ]rXros/jade/ros_controllersrasshˆh}rh}rh}rh ]rjasssuXrwt_config_generatorr}r(h}r (h}r!h}r"h ]r#Xros-jade-rwt-config-generatorr$assh }r%h}r&h ]r'j$assuh}r(h}r)h ]r*Xros/jade/rwt_config_generatorr+asshˆh}r,h}r-h}r.h ]r/j$asssuX voice_textr0}r1(h}r2(h}r3h}r4h ]r5Xros-jade-voice-textr6assh }r7h}r8h ]r9j6assuh}r:h}r;h ]r<Xros/jade/jsk_3rdpartyr=asshˆh}r>h}r?h}r@h ]rAj6asssuX pluginlibrB}rC(h}rD(h}rEh}rFh ]rGXros-jade-pluginlibrHassh }rIh}rJh ]rKjHassuh}rLh}rMh ]rNXros/jade/pluginlibrOasshˆh}rPh}rQh}rRh ]rSjHasssuXurdf_parser_pluginrT}rU(h}rV(h}rWh}rXh ]rYXros-jade-urdf-parser-pluginrZassh }r[h}r\h ]r]jZassuh}r^h}r_h ]r`Xros/jade/robot_modelraasshˆh}rbh}rch}rdh ]rejZasssuXwebtestrf}rg(h}rh(h}rih}rjh ]rkXros-jade-webtestrlassh }rmh}rnh ]rojlassuh}rph}rqh ]rrXros/jade/webtestrsasshˆh}rth}ruh}rvh ]rwjlasssuXecl_sigslots_literx}ry(h}rz(h}r{h}r|h ]r}Xros-jade-ecl-sigslots-liter~assh }rh}r€h ]rj~assuh}r‚h}rƒh ]r„Xros/jade/ecl_liter…asshˆh}r†h}r‡h}rˆh ]r‰j~asssuXdefault_cfg_fkierŠ}r‹(h}rŒ(h}rh}rŽh ]rXros-jade-default-cfg-fkierassh }r‘h}r’h ]r“jassuh}r”h}r•h ]r–Xros/jade/multimaster_fkier—asshˆh}r˜h}r™h}ršh ]r›jasssuXmoveit_planners_omplrœ}r(h}rž(h}rŸh}r h ]r¡Xros-jade-moveit-planners-omplr¢assh }r£h}r¤h ]r¥j¢assuh}r¦h}r§h ]r¨Xros/jade/moveitr©asshˆh}rªh}r«h}r¬h ]r­j¢asssuXros_emacs_utilsr®}r¯(h}r°(h}r±h}r²h ]r³Xros-jade-ros-emacs-utilsr´assh }rµh}r¶h ]r·j´assuh}r¸h}r¹h ]rºXros/jade/ros_emacs_utilsr»asshˆh}r¼h}r½h}r¾h ]r¿j´asssuX voxel_gridrÀ}rÁ(h}rÂ(h}rÃh}rÄh ]rÅXros-jade-voxel-gridrÆassh }rÇh}rÈh ]rÉjÆassuh}rÊh}rËh ]rÌXros/jade/navigationrÍasshˆh}rÎh}rÏh}rÐh ]rÑjÆasssuX nao_bringuprÒ}rÓ(h}rÔ(h}rÕh}rÖh ]r×Xros-jade-nao-bringuprØassh }rÙh}rÚh ]rÛjØassuh}rÜh}rÝh ]rÞXros/jade/nao_robotrßasshˆh}ràh}ráh}râh ]rãjØasssuXffrä}rå(h}ræ(h}rçh}rèh ]réX ros-jade-ffrêassh }rëh}rìh ]ríjêassuh}rîh}rïh ]rðXros/jade/jsk_3rdpartyrñasshˆh}ròh}róh}rôh ]rõjêasssuX data_vis_msgsrö}r÷(h}rø(h}rùh}rúh ]rûXros-jade-data-vis-msgsrüassh }rýh}rþh ]rÿjüassuh}rh}rh ]rXros/jade/iai_common_msgsrasshˆh}rh}rh}rh ]rjüasssuXtfr}r (h}r (h}r h}r h ]r X ros-jade-tfrassh }rh}rh ]rjassuh}rh}rh ]rXros/jade/geometryrasshˆh}rh}rh}rh ]rjasssuXinteractive_marker_tutorialsr}r(h}r(h}rh}rh ]rX%ros-jade-interactive-marker-tutorialsr assh }r!h}r"h ]r#j assuh}r$h}r%h ]r&X ros/jade/visualization_tutorialsr'asshˆh}r(h}r)h}r*h ]r+j asssuXtimestamp_toolsr,}r-(h}r.(h}r/h}r0h ]r1Xros-jade-timestamp-toolsr2assh }r3h}r4h ]r5j2assuh}r6h}r7h ]r8Xros/jade/driver_commonr9asshˆh}r:h}r;h}r<h ]r=j2asssuXmonocam_settlerr>}r?(h}r@(h}rAh}rBh ]rCXros-jade-monocam-settlerrDassh }rEh}rFh ]rGjDassuh}rHh}rIh ]rJXros/jade/calibrationrKasshˆh}rLh}rMh}rNh ]rOjDasssuX osg_utilsrP}rQ(h}rR(h}rSh}rTh ]rUXros-jade-osg-utilsrVassh }rWh}rXh ]rYjVassuh}rZh}r[h ]r\Xros/jade/visualization_osgr]asshˆh}r^h}r_h}r`h ]rajVasssuXecl_literb}rc(h}rd(h}reh}rfh ]rgXros-jade-ecl-literhassh }rih}rjh ]rkjhassuh}rlh}rmh ]rnXros/jade/ecl_literoasshˆh}rph}rqh}rrh ]rsjhasssuXsicktoolbox_wrapperrt}ru(h}rv(h}rwh}rxh ]ryXros-jade-sicktoolbox-wrapperrzassh }r{h}r|h ]r}jzassuh}r~h}rh ]r€Xros/jade/sicktoolbox_wrapperrasshˆh}r‚h}rƒh}r„h ]r…jzasssuX xsens_driverr†}r‡(h}rˆ(h}r‰h}rŠh ]r‹Xros-jade-xsens-driverrŒassh }rh}rŽh ]rjŒassuh}rh}r‘h ]r’Xros/jade/xsens_driverr“asshˆh}r”h}r•h}r–h ]r—jŒasssuX pepper_meshesr˜}r™(h}rš(h}r›h}rœh ]rXros-jade-pepper-meshesržassh }rŸh}r h ]r¡jžassuh}r¢h}r£h ]r¤Xros/jade/pepper_meshesr¥asshˆh}r¦h}r§h}r¨h ]r©jžasssuX leg_detectorrª}r«(h}r¬(h}r­h}r®h ]r¯Xros-jade-leg-detectorr°assh }r±h}r²h ]r³j°assuh}r´h}rµh ]r¶Xros/jade/peopler·asshˆh}r¸h}r¹h}rºh ]r»j°asssuXswri_string_utilr¼}r½(h}r¾(h}r¿h}rÀh ]rÁXros-jade-swri-string-utilrÂassh }rÃh}rÄh ]rÅjÂassuh}rÆh}rÇh ]rÈXros/jade/marti_commonrÉasshˆh}rÊh}rËh}rÌh ]rÍjÂasssuXpr2_mechanism_modelrÎ}rÏ(h}rÐ(h}rÑh}rÒh ]rÓXros-jade-pr2-mechanism-modelrÔassh }rÕh}rÖh ]r×jÔassuh}rØh}rÙh ]rÚXros/jade/pr2_mechanismrÛasshˆh}rÜh}rÝh}rÞh ]rßjÔasssuXrosmsgrà}rá(h}râ(h}rãh}räh ]råXros-jade-rosmsgræassh }rçh}rèh ]réjæassuh}rêh}rëh ]rìXros/jade/ros_commríasshˆh}rîh}rïh}rðh ]rñjæasssuXrviz_imu_pluginrò}ró(h}rô(h}rõh}röh ]r÷Xros-jade-rviz-imu-pluginrøassh }rùh}rúh ]rûjøassuh}rüh}rýh ]rþXros/jade/imu_toolsrÿasshˆh}rh}rh}rh ]rjøasssuX jsk_controlr}r(h}r(h}rh}rh ]r Xros-jade-jsk-controlr assh }r h}r h ]r j assuh}rh}rh ]rXros/jade/jsk_controlrasshˆh}rh}rh}rh ]rj asssuX message_to_tfr}r(h}r(h}rh}rh ]rXros-jade-message-to-tfrassh }rh}rh ]rjassuh}r h}r!h ]r"Xros/jade/hector_localizationr#asshˆh}r$h}r%h}r&h ]r'jasssuX iai_urdf_msgsr(}r)(h}r*(h}r+h}r,h ]r-Xros-jade-iai-urdf-msgsr.assh }r/h}r0h ]r1j.assuh}r2h}r3h ]r4Xros/jade/iai_common_msgsr5asshˆh}r6h}r7h}r8h ]r9j.asssuX nao_meshesr:}r;(h}r<(h}r=h}r>h ]r?Xros-jade-nao-meshesr@assh }rAh}rBh ]rCj@assuh}rDh}rEh ]rFXros/jade/nao_meshesrGasshˆh}rHh}rIh}rJh ]rKj@asssuXlaser_scan_splitterrL}rM(h}rN(h}rOh}rPh ]rQXros-jade-laser-scan-splitterrRassh }rSh}rTh ]rUjRassuh}rVh}rWh ]rXXros/jade/scan_toolsrYasshˆh}rZh}r[h}r\h ]r]jRasssuXcamera_calibration_parsersr^}r_(h}r`(h}rah}rbh ]rcX#ros-jade-camera-calibration-parsersrdassh }reh}rfh ]rgjdassuh}rhh}rih ]rjXros/jade/image_commonrkasshˆh}rlh}rmh}rnh ]rojdasssuX saphari_msgsrp}rq(h}rr(h}rsh}rth ]ruXros-jade-saphari-msgsrvassh }rwh}rxh ]ryjvassuh}rzh}r{h ]r|Xros/jade/iai_common_msgsr}asshˆh}r~h}rh}r€h ]rjvasssuXtf2_geometry_msgsr‚}rƒ(h}r„(h}r…h}r†h ]r‡Xros-jade-tf2-geometry-msgsrˆassh }r‰h}rŠh ]r‹jˆassuh}rŒh}rh ]rŽXros/jade/geometry2rasshˆh}rh}r‘h}r’h ]r“jˆasssuX!moveit_controller_manager_exampler”}r•(h}r–(h}r—h}r˜h ]r™X*ros-jade-moveit-controller-manager-exampleršassh }r›h}rœh ]rjšassuh}ržh}rŸh ]r Xros/jade/moveitr¡asshˆh}r¢h}r£h}r¤h ]r¥jšasssuX jsk_toolsr¦}r§(h}r¨(h}r©h}rªh ]r«Xros-jade-jsk-toolsr¬assh }r­h}r®h ]r¯j¬assuh}r°h}r±h ]r²Xros/jade/jsk_commonr³asshˆh}r´h}rµh}r¶h ]r·j¬asssuXvizr¸}r¹(h}rº(h}r»h}r¼h ]r½X ros-jade-vizr¾assh }r¿h}rÀh ]rÁj¾assuh}rÂh}rÃh ]rÄXros/jade/metapackagesrÅasshˆh}rÆh}rÇh}rÈh ]rÉj¾asssuXforce_torque_sensor_controllerrÊ}rË(h}rÌ(h}rÍh}rÎh ]rÏX'ros-jade-force-torque-sensor-controllerrÐassh }rÑh}rÒh ]rÓjÐassuh}rÔh}rÕh ]rÖXros/jade/ros_controllersr×asshˆh}rØh}rÙh}rÚh ]rÛjÐasssuXmoveit_ros_control_interfacerÜ}rÝ(h}rÞ(h}rßh}ràh ]ráX%ros-jade-moveit-ros-control-interfacerâassh }rãh}räh ]råjâassuh}ræh}rçh ]rèXros/jade/moveitréasshˆh}rêh}rëh}rìh ]ríjâasssuX control_msgsrî}rï(h}rð(h}rñh}ròh ]róXros-jade-control-msgsrôassh }rõh}röh ]r÷jôassuh}røh}rùh ]rúXros/jade/control_msgsrûasshˆh}rüh}rýh}rþh ]rÿjôasssuXindustrial_corer}r(h}r(h}rh}rh ]rXros-jade-industrial-corerassh }rh}rh ]r jassuh}r h}r h ]r Xros/jade/industrial_corer asshˆh}rh}rh}rh ]rjasssuXvelodyne_descriptionr}r(h}r(h}rh}rh ]rXros-jade-velodyne-descriptionrassh }rh}rh ]rjassuh}rh}rh ]rXros/jade/velodyne_simulatorrasshˆh}r h}r!h}r"h ]r#jasssuXmoveit_ros_move_groupr$}r%(h}r&(h}r'h}r(h ]r)Xros-jade-moveit-ros-move-groupr*assh }r+h}r,h ]r-j*assuh}r.h}r/h ]r0Xros/jade/moveitr1asshˆh}r2h}r3h}r4h ]r5j*asssuXwfov_camera_msgsr6}r7(h}r8(h}r9h}r:h ]r;Xros-jade-wfov-camera-msgsr<assh }r=h}r>h ]r?j<assuh}r@h}rAh ]rBX ros/jade/pointgrey_camera_driverrCasshˆh}rDh}rEh}rFh ]rGj<asssuX romeo_robotrH}rI(h}rJ(h}rKh}rLh ]rMXros-jade-romeo-robotrNassh }rOh}rPh ]rQjNassuh}rRh}rSh ]rTXros/jade/romeo_robotrUasshˆh}rVh}rWh}rXh ]rYjNasssuXmrpt_maprZ}r[(h}r\(h}r]h}r^h ]r_Xros-jade-mrpt-mapr`assh }rah}rbh ]rcj`assuh}rdh}reh ]rfXros/jade/mrpt_navigationrgasshˆh}rhh}rih}rjh ]rkj`asssuX rosboost_cfgrl}rm(h}rn(h}roh}rph ]rqXros-jade-rosboost-cfgrrassh }rsh}rth ]rujrassuh}rvh}rwh ]rxX ros/jade/rosryasshˆh}rzh}r{h}r|h ]r}jrasssuXcamera_info_managerr~}r(h}r€(h}rh}r‚h ]rƒXros-jade-camera-info-managerr„assh }r…h}r†h ]r‡j„assuh}rˆh}r‰h ]rŠXros/jade/image_commonr‹asshˆh}rŒh}rh}rŽh ]rj„asssuXrostimer}r‘(h}r’(h}r“h}r”h ]r•Xros-jade-rostimer–assh }r—h}r˜h ]r™j–assuh}ršh}r›h ]rœXros/jade/roscpp_corerasshˆh}ržh}rŸh}r h ]r¡j–asssuX moveit_msgsr¢}r£(h}r¤(h}r¥h}r¦h ]r§Xros-jade-moveit-msgsr¨assh }r©h}rªh ]r«j¨assuh}r¬h}r­h ]r®Xros/jade/moveit_msgsr¯asshˆh}r°h}r±h}r²h ]r³j¨asssuX imagezeror´}rµ(h}r¶(h}r·h}r¸h ]r¹Xros-jade-imagezerorºassh }r»h}r¼h ]r½jºassuh}r¾h}r¿h ]rÀXros/jade/imagezero_transportrÁasshˆh}rÂh}rÃh}rÄh ]rÅjºasssuX slime_wrapperrÆ}rÇ(h}rÈ(h}rÉh}rÊh ]rËXros-jade-slime-wrapperrÌassh }rÍh}rÎh ]rÏjÌassuh}rÐh}rÑh ]rÒXros/jade/ros_emacs_utilsrÓasshˆh}rÔh}rÕh}rÖh ]r×jÌasssuX unique_idrØ}rÙ(h}rÚ(h}rÛh}rÜh ]rÝXros-jade-unique-idrÞassh }rßh}ràh ]rájÞassuh}râh}rãh ]räXros/jade/unique_identifierråasshˆh}ræh}rçh}rèh ]réjÞasssuXromeo_moveit_configrê}rë(h}rì(h}ríh}rîh ]rïXros-jade-romeo-moveit-configrðassh }rñh}ròh ]rójðassuh}rôh}rõh ]röXros/jade/romeo_moveit_configr÷asshˆh}røh}rùh}rúh ]rûjðasssuXgraftrü}rý(h}rþ(h}rÿh}rh ]rXros-jade-graftrassh }rh}rh ]rjassuh}rh}rh ]rXros/jade/graftr asshˆh}r h}r h}r h ]r jasssuX naoqi_bridger}r(h}r(h}rh}rh ]rXros-jade-naoqi-bridgerassh }rh}rh ]rjassuh}rh}rh ]rXros/jade/naoqi_bridgerasshˆh}rh}rh}rh ]rjasssuXoctomapr }r!(h}r"(h}r#h}r$h ]r%Xros-jade-octomapr&assh }r'h}r(h ]r)j&assuh}r*h}r+h ]r,Xros/jade/octomapr-asshˆh}r.h}r/h}r0h ]r1j&asssuXdynpick_driverr2}r3(h}r4(h}r5h}r6h ]r7Xros-jade-dynpick-driverr8assh }r9h}r:h ]r;j8assuh}r<h}r=h ]r>Xros/jade/dynpick_driverr?asshˆh}r@h}rAh}rBh ]rCj8asssuXmavrosrD}rE(h}rF(h}rGh}rHh ]rIXros-jade-mavrosrJassh }rKh}rLh ]rMjJassuh}rNh}rOh ]rPXros/jade/mavrosrQasshˆh}rRh}rSh}rTh ]rUjJasssuXserialrV}rW(h}rX(h}rYh}rZh ]r[Xros-jade-serialr\assh }r]h}r^h ]r_j\assuh}r`h}rah ]rbXros/jade/serialrcasshˆh}rdh}reh}rfh ]rgj\asssuX libuvc_camerarh}ri(h}rj(h}rkh}rlh ]rmXros-jade-libuvc-camerarnassh }roh}rph ]rqjnassuh}rrh}rsh ]rtXros/jade/libuvc_rosruasshˆh}rvh}rwh}rxh ]ryjnasssuX rosh_robotrz}r{(h}r|(h}r}h}r~h ]rXros-jade-rosh-robotr€assh }rh}r‚h ]rƒj€assuh}r„h}r…h ]r†Xros/jade/rosh_robot_pluginsr‡asshˆh}rˆh}r‰h}rŠh ]r‹j€asssuX libsiftfastrŒ}r(h}rŽ(h}rh}rh ]r‘Xros-jade-libsiftfastr’assh }r“h}r”h ]r•j’assuh}r–h}r—h ]r˜Xros/jade/jsk_3rdpartyr™asshˆh}ršh}r›h}rœh ]rj’asssuXobject_recognition_rosrž}rŸ(h}r (h}r¡h}r¢h ]r£Xros-jade-object-recognition-rosr¤assh }r¥h}r¦h ]r§j¤assuh}r¨h}r©h ]rªXros/jade/object_recognition_rosr«asshˆh}r¬h}r­h}r®h ]r¯j¤asssuX roslaunchr°}r±(h}r²(h}r³h}r´h ]rµXros-jade-roslaunchr¶assh }r·h}r¸h ]r¹j¶assuh}rºh}r»h ]r¼Xros/jade/ros_commr½asshˆh}r¾h}r¿h}rÀh ]rÁj¶asssuXrqt_deprÂ}rÃ(h}rÄ(h}rÅh}rÆh ]rÇXros-jade-rqt-deprÈassh }rÉh}rÊh ]rËjÈassuh}rÌh}rÍh ]rÎXros/jade/rqt_deprÏasshˆh}rÐh}rÑh}rÒh ]rÓjÈasssuX image_procrÔ}rÕ(h}rÖ(h}r×h}rØh ]rÙXros-jade-image-procrÚassh }rÛh}rÜh ]rÝjÚassuh}rÞh}rßh ]ràXros/jade/image_pipelineráasshˆh}râh}rãh}räh ]råjÚasssuXjoystick_driversræ}rç(h}rè(h}réh}rêh ]rëXros-jade-joystick-driversrìassh }ríh}rîh ]rïjìassuh}rðh}rñh ]ròXros/jade/joystick_driversróasshˆh}rôh}rõh}röh ]r÷jìasssuXrqt_robot_dashboardrø}rù(h}rú(h}rûh}rüh ]rýXros-jade-rqt-robot-dashboardrþassh }rÿh}rh ]rjþassuh}rh}rh ]rXros/jade/rqt_robot_dashboardrasshˆh}rh}rh}rh ]r jþasssuX multisenser }r (h}r (h}r h}rh ]rXros-jade-multisenserassh }rh}rh ]rjassuh}rh}rh ]rXros/jade/multisense_rosrasshˆh}rh}rh}rh ]rjasssuX rqt_shellr}r(h}r(h}rh}r h ]r!Xros-jade-rqt-shellr"assh }r#h}r$h ]r%j"assuh}r&h}r'h ]r(Xros/jade/rqt_shellr)asshˆh}r*h}r+h}r,h ]r-j"asssuX leap_motionr.}r/(h}r0(h}r1h}r2h ]r3Xros-jade-leap-motionr4assh }r5h}r6h ]r7j4assuh}r8h}r9h ]r:Xros/jade/leap_motionr;asshˆh}r<h}r=h}r>h ]r?j4asssuX perceptionr@}rA(h}rB(h}rCh}rDh ]rEXros-jade-perceptionrFassh }rGh}rHh ]rIjFassuh}rJh}rKh ]rLXros/jade/metapackagesrMasshˆh}rNh}rOh}rPh ]rQjFasssuXmessage_filtersrR}rS(h}rT(h}rUh}rVh ]rWXros-jade-message-filtersrXassh }rYh}rZh ]r[jXassuh}r\h}r]h ]r^Xros/jade/ros_commr_asshˆh}r`h}rah}rbh ]rcjXasssuXecl_mathrd}re(h}rf(h}rgh}rhh ]riXros-jade-ecl-mathrjassh }rkh}rlh ]rmjjassuh}rnh}roh ]rpXros/jade/ecl_corerqasshˆh}rrh}rsh}rth ]rujjasssuXiai_common_msgsrv}rw(h}rx(h}ryh}rzh ]r{Xros-jade-iai-common-msgsr|assh }r}h}r~h ]rj|assuh}r€h}rh ]r‚Xros/jade/iai_common_msgsrƒasshˆh}r„h}r…h}r†h ]r‡j|asssuXcl_tfrˆ}r‰(h}rŠ(h}r‹h}rŒh ]rXros-jade-cl-tfrŽassh }rh}rh ]r‘jŽassuh}r’h}r“h ]r”Xros/jade/roslisp_commonr•asshˆh}r–h}r—h}r˜h ]r™jŽasssuX ecl_time_literš}r›(h}rœ(h}rh}ržh ]rŸXros-jade-ecl-time-liter assh }r¡h}r¢h ]r£j assuh}r¤h}r¥h ]r¦Xros/jade/ecl_liter§asshˆh}r¨h}r©h}rªh ]r«j asssuXdwa_local_plannerr¬}r­(h}r®(h}r¯h}r°h ]r±Xros-jade-dwa-local-plannerr²assh }r³h}r´h ]rµj²assuh}r¶h}r·h ]r¸Xros/jade/navigationr¹asshˆh}rºh}r»h}r¼h ]r½j²asssuXp2os_docr¾}r¿(h}rÀ(h}rÁh}rÂh ]rÃXros-jade-p2os-docrÄassh }rÅh}rÆh ]rÇjÄassuh}rÈh}rÉh ]rÊX ros/jade/p2osrËasshˆh}rÌh}rÍh}rÎh ]rÏjÄasssuX cv_backportsrÐ}rÑ(h}rÒ(h}rÓh}rÔh ]rÕXros-jade-cv-backportsrÖassh }r×h}rØh ]rÙjÖassuh}rÚh}rÛh ]rÜXros/jade/cv_backportsrÝasshˆh}rÞh}rßh}ràh ]rájÖasssuXtrajectory_msgsrâ}rã(h}rä(h}råh}ræh ]rçXros-jade-trajectory-msgsrèassh }réh}rêh ]rëjèassuh}rìh}ríh ]rîXros/jade/common_msgsrïasshˆh}rðh}rñh}ròh ]rójèasssuXrosh_desktop_pluginsrô}rõ(h}rö(h}r÷h}røh ]rùXros-jade-rosh-desktop-pluginsrúassh }rûh}rüh ]rýjúassuh}rþh}rÿh ]rXros/jade/rosh_desktop_pluginsrasshˆh}rh}rh}rh ]rjúasssuXrtctreer}r(h}r(h}r h}r h ]r Xros-jade-rtctreer assh }r h}rh ]rj assuh}rh}rh ]rXros/jade/rtctreerasshˆh}rh}rh}rh ]rj asssuXpr2_controllersr}r(h}r(h}rh}rh ]rXros-jade-pr2-controllersrassh }rh}r h ]r!jassuh}r"h}r#h ]r$Xros/jade/pr2_controllersr%asshˆh}r&h}r'h}r(h ]r)jasssuX assimp_develr*}r+(h}r,(h}r-h}r.h ]r/Xros-jade-assimp-develr0assh }r1h}r2h ]r3j0assuh}r4h}r5h ]r6Xros/jade/jsk_3rdpartyr7asshˆh}r8h}r9h}r:h ]r;j0asssuXaxclir<}r=(h}r>(h}r?h}r@h ]rAXros-jade-axclirBassh }rCh}rDh ]rEjBassuh}rFh}rGh ]rHXros/jade/axclirIasshˆh}rJh}rKh}rLh ]rMjBasssuX tf2_bulletrN}rO(h}rP(h}rQh}rRh ]rSXros-jade-tf2-bulletrTassh }rUh}rVh ]rWjTassuh}rXh}rYh ]rZXros/jade/geometry2r[asshˆh}r\h}r]h}r^h ]r_jTasssuX rqt_nav_viewr`}ra(h}rb(h}rch}rdh ]reXros-jade-rqt-nav-viewrfassh }rgh}rhh ]rijfassuh}rjh}rkh ]rlXros/jade/rqt_nav_viewrmasshˆh}rnh}roh}rph ]rqjfasssuXcsmrr}rs(h}rt(h}ruh}rvh ]rwX ros-jade-csmrxassh }ryh}rzh ]r{jxassuh}r|h}r}h ]r~X ros/jade/csmrasshˆh}r€h}rh}r‚h ]rƒjxasssuXinnok_heros_driverr„}r…(h}r†(h}r‡h}rˆh ]r‰Xros-jade-innok-heros-driverrŠassh }r‹h}rŒh ]rjŠassuh}rŽh}rh ]rXros/jade/innok_heros_driverr‘asshˆh}r’h}r“h}r”h ]r•jŠasssuX nmea_commsr–}r—(h}r˜(h}r™h}ršh ]r›Xros-jade-nmea-commsrœassh }rh}ržh ]rŸjœassuh}r h}r¡h ]r¢Xros/jade/nmea_commsr£asshˆh}r¤h}r¥h}r¦h ]r§jœasssuXecl_containersr¨}r©(h}rª(h}r«h}r¬h ]r­Xros-jade-ecl-containersr®assh }r¯h}r°h ]r±j®assuh}r²h}r³h ]r´Xros/jade/ecl_corerµasshˆh}r¶h}r·h}r¸h ]r¹j®asssuXopenni2_camerarº}r»(h}r¼(h}r½h}r¾h ]r¿Xros-jade-openni2-camerarÀassh }rÁh}rÂh ]rÃjÀassuh}rÄh}rÅh ]rÆXros/jade/openni2_camerarÇasshˆh}rÈh}rÉh}rÊh ]rËjÀasssuXjsk_visualizationrÌ}rÍ(h}rÎ(h}rÏh}rÐh ]rÑXros-jade-jsk-visualizationrÒassh }rÓh}rÔh ]rÕjÒassuh}rÖh}r×h ]rØXros/jade/jsk_visualizationrÙasshˆh}rÚh}rÛh}rÜh ]rÝjÒasssuXcontrol_toolboxrÞ}rß(h}rà(h}ráh}râh ]rãXros-jade-control-toolboxräassh }råh}ræh ]rçjäassuh}rèh}réh ]rêXros/jade/control_toolboxrëasshˆh}rìh}ríh}rîh ]rïjäasssuXlaser_scan_publisher_tutorialrð}rñ(h}rò(h}róh}rôh ]rõX&ros-jade-laser-scan-publisher-tutorialröassh }r÷h}røh ]rùjöassuh}rúh}rûh ]rüXros/jade/navigation_tutorialsrýasshˆh}rþh}rÿh}rh ]rjöasssuX ecl_buildr}r(h}r(h}rh}rh ]rXros-jade-ecl-buildrassh }r h}r h ]r jassuh}r h}r h ]rXros/jade/ecl_toolsrasshˆh}rh}rh}rh ]rjasssuXnao_moveit_configr}r(h}r(h}rh}rh ]rXros-jade-nao-moveit-configrassh }rh}rh ]rjassuh}rh}rh ]r Xros/jade/nao_moveit_configr!asshˆh}r"h}r#h}r$h ]r%jasssuXrobot_controllersr&}r'(h}r((h}r)h}r*h ]r+Xros-jade-robot-controllersr,assh }r-h}r.h ]r/j,assuh}r0h}r1h ]r2Xros/jade/robot_controllersr3asshˆh}r4h}r5h}r6h ]r7j,asssuXmarti_nav_msgsr8}r9(h}r:(h}r;h}r<h ]r=Xros-jade-marti-nav-msgsr>assh }r?h}r@h ]rAj>assuh}rBh}rCh ]rDXros/jade/marti_messagesrEasshˆh}rFh}rGh}rHh ]rIj>asssuXecto_image_pipelinerJ}rK(h}rL(h}rMh}rNh ]rOXros-jade-ecto-image-pipelinerPassh }rQh}rRh ]rSjPassuh}rTh}rUh ]rVXros/jade/ecto_image_pipelinerWasshˆh}rXh}rYh}rZh ]r[jPasssuXjuliusr\}r](h}r^(h}r_h}r`h ]raXros-jade-juliusrbassh }rch}rdh ]rejbassuh}rfh}rgh ]rhXros/jade/jsk_3rdpartyriasshˆh}rjh}rkh}rlh ]rmjbasssuXmrpt_ekf_slam_2drn}ro(h}rp(h}rqh}rrh ]rsXros-jade-mrpt-ekf-slam-2drtassh }ruh}rvh ]rwjtassuh}rxh}ryh ]rzXros/jade/mrpt_slamr{asshˆh}r|h}r}h}r~h ]rjtasssuXgeometry_tutorialsr€}r(h}r‚(h}rƒh}r„h ]r…Xros-jade-geometry-tutorialsr†assh }r‡h}rˆh ]r‰j†assuh}rŠh}r‹h ]rŒXros/jade/geometry_tutorialsrasshˆh}rŽh}rh}rh ]r‘j†asssuXecl_exceptionsr’}r“(h}r”(h}r•h}r–h ]r—Xros-jade-ecl-exceptionsr˜assh }r™h}ršh ]r›j˜assuh}rœh}rh ]ržXros/jade/ecl_corerŸasshˆh}r h}r¡h}r¢h ]r£j˜asssuX&object_recognition_transparent_objectsr¤}r¥(h}r¦(h}r§h}r¨h ]r©X/ros-jade-object-recognition-transparent-objectsrªassh }r«h}r¬h ]r­jªassuh}r®h}r¯h ]r°X/ros/jade/object_recognition_transparent_objectsr±asshˆh}r²h}r³h}r´h ]rµjªasssuXroshr¶}r·(h}r¸(h}r¹h}rºh ]r»X ros-jade-roshr¼assh }r½h}r¾h ]r¿j¼assuh}rÀh}rÁh ]rÂXros/jade/rosh_corerÃasshˆh}rÄh}rÅh}rÆh ]rÇj¼asssuXactionlib_msgsrÈ}rÉ(h}rÊ(h}rËh}rÌh ]rÍXros-jade-actionlib-msgsrÎassh }rÏh}rÐh ]rÑjÎassuh}rÒh}rÓh ]rÔXros/jade/common_msgsrÕasshˆh}rÖh}r×h}rØh ]rÙjÎasssuX mini_maxwellrÚ}rÛ(h}rÜ(h}rÝh}rÞh ]rßXros-jade-mini-maxwellràassh }ráh}râh ]rãjàassuh}räh}råh ]ræXros/jade/jsk_3rdpartyrçasshˆh}rèh}réh}rêh ]rëjàasssuX kdl_parserrì}rí(h}rî(h}rïh}rðh ]rñXros-jade-kdl-parserròassh }róh}rôh ]rõjòassuh}röh}r÷h ]røXros/jade/kdl_parserrùasshˆh}rúh}rûh}rüh ]rýjòasssuXconvex_decompositionrþ}rÿ(h}r(h}rh}rh ]rXros-jade-convex-decompositionrassh }rh}rh ]rjassuh}rh}r h ]r Xros/jade/convex_decompositionr asshˆh}r h}r h}rh ]rjasssuX nerian_sp1r}r(h}r(h}rh}rh ]rXros-jade-nerian-sp1rassh }rh}rh ]rjassuh}rh}rh ]rXros/jade/nerian_sp1rasshˆh}rh}rh}r h ]r!jasssuXmoveit_fake_controller_managerr"}r#(h}r$(h}r%h}r&h ]r'X'ros-jade-moveit-fake-controller-managerr(assh }r)h}r*h ]r+j(assuh}r,h}r-h ]r.Xros/jade/moveitr/asshˆh}r0h}r1h}r2h ]r3j(asssuXtwist_mux_msgsr4}r5(h}r6(h}r7h}r8h ]r9Xros-jade-twist-mux-msgsr:assh }r;h}r<h ]r=j:assuh}r>h}r?h ]r@Xros/jade/twist_mux_msgsrAasshˆh}rBh}rCh}rDh ]rEj:asssuX polled_camerarF}rG(h}rH(h}rIh}rJh ]rKXros-jade-polled-camerarLassh }rMh}rNh ]rOjLassuh}rPh}rQh ]rRXros/jade/image_commonrSasshˆh}rTh}rUh}rVh ]rWjLasssuXrobot_setup_tf_tutorialrX}rY(h}rZ(h}r[h}r\h ]r]X ros-jade-robot-setup-tf-tutorialr^assh }r_h}r`h ]raj^assuh}rbh}rch ]rdXros/jade/navigation_tutorialsreasshˆh}rfh}rgh}rhh ]rij^asssuXrosserial_windowsrj}rk(h}rl(h}rmh}rnh ]roXros-jade-rosserial-windowsrpassh }rqh}rrh ]rsjpassuh}rth}ruh ]rvXros/jade/rosserialrwasshˆh}rxh}ryh}rzh ]r{jpasssuXindustrial_deprecatedr|}r}(h}r~(h}rh}r€h ]rXros-jade-industrial-deprecatedr‚assh }rƒh}r„h ]r…j‚assuh}r†h}r‡h ]rˆXros/jade/industrial_corer‰asshˆh}rŠh}r‹h}rŒh ]rj‚asssuX alexandriarŽ}r(h}r(h}r‘h}r’h ]r“Xros-jade-alexandriar”assh }r•h}r–h ]r—j”assuh}r˜h}r™h ]ršXros/jade/cram_3rdpartyr›asshˆh}rœh}rh}ržh ]rŸj”asssuXimage_geometryr }r¡(h}r¢(h}r£h}r¤h ]r¥Xros-jade-image-geometryr¦assh }r§h}r¨h ]r©j¦assuh}rªh}r«h ]r¬Xros/jade/vision_opencvr­asshˆh}r®h}r¯h}r°h ]r±j¦asssuXuwsimr²}r³(h}r´(h}rµh}r¶h ]r·Xros-jade-uwsimr¸assh }r¹h}rºh ]r»j¸assuh}r¼h}r½h ]r¾Xros/jade/underwater_simulationr¿asshˆh}rÀh}rÁh}rÂh ]rÃj¸asssuXsrdfdomrÄ}rÅ(h}rÆ(h}rÇh}rÈh ]rÉXros-jade-srdfdomrÊassh }rËh}rÌh ]rÍjÊassuh}rÎh}rÏh ]rÐXros/jade/srdfdomrÑasshˆh}rÒh}rÓh}rÔh ]rÕjÊasssuXfetch_calibrationrÖ}r×(h}rØ(h}rÙh}rÚh ]rÛXros-jade-fetch-calibrationrÜassh }rÝh}rÞh ]rßjÜassuh}ràh}ráh ]râXros/jade/fetch_rosrãasshˆh}räh}råh}ræh ]rçjÜasssuX rosconsolerè}ré(h}rê(h}rëh}rìh ]ríXros-jade-rosconsolerîassh }rïh}rðh ]rñjîassuh}ròh}róh ]rôXros/jade/ros_commrõasshˆh}röh}r÷h}røh ]rùjîasssuXactionlib_lisprú}rû(h}rü(h}rýh}rþh ]rÿXros-jade-actionlib-lisprassh }rh}rh ]rjassuh}rh}rh ]rXros/jade/roslisp_commonrasshˆh}rh}r h}r h ]r jasssuXgrid_map_costmap_2dr }r (h}r(h}rh}rh ]rXros-jade-grid-map-costmap-2drassh }rh}rh ]rjassuh}rh}rh ]rXros/jade/grid_maprasshˆh}rh}rh}rh ]rjasssuX map_serverr}r(h}r (h}r!h}r"h ]r#Xros-jade-map-serverr$assh }r%h}r&h ]r'j$assuh}r(h}r)h ]r*Xros/jade/navigationr+asshˆh}r,h}r-h}r.h ]r/j$asssuXpepper_descriptionr0}r1(h}r2(h}r3h}r4h ]r5Xros-jade-pepper-descriptionr6assh }r7h}r8h ]r9j6assuh}r:h}r;h ]r<Xros/jade/pepper_robotr=asshˆh}r>h}r?h}r@h ]rAj6asssuXrosserial_arduinorB}rC(h}rD(h}rEh}rFh ]rGXros-jade-rosserial-arduinorHassh }rIh}rJh ]rKjHassuh}rLh}rMh ]rNXros/jade/rosserialrOasshˆh}rPh}rQh}rRh ]rSjHasssuXnodelet_topic_toolsrT}rU(h}rV(h}rWh}rXh ]rYXros-jade-nodelet-topic-toolsrZassh }r[h}r\h ]r]jZassuh}r^h}r_h ]r`Xros/jade/nodelet_coreraasshˆh}rbh}rch}rdh ]rejZasssuX qt_dotgraphrf}rg(h}rh(h}rih}rjh ]rkXros-jade-qt-dotgraphrlassh }rmh}rnh ]rojlassuh}rph}rqh ]rrXros/jade/qt_gui_corersasshˆh}rth}ruh}rvh ]rwjlasssuXrandom_numbersrx}ry(h}rz(h}r{h}r|h ]r}Xros-jade-random-numbersr~assh }rh}r€h ]rj~assuh}r‚h}rƒh ]r„Xros/jade/random_numbersr…asshˆh}r†h}r‡h}rˆh ]r‰j~asssuX rqt_topicrŠ}r‹(h}rŒ(h}rh}rŽh ]rXros-jade-rqt-topicrassh }r‘h}r’h ]r“jassuh}r”h}r•h ]r–Xros/jade/rqt_topicr—asshˆh}r˜h}r™h}ršh ]r›jasssuXbabelrœ}r(h}rž(h}rŸh}r h ]r¡Xros-jade-babelr¢assh }r£h}r¤h ]r¥j¢assuh}r¦h}r§h ]r¨Xros/jade/cram_3rdpartyr©asshˆh}rªh}r«h}r¬h ]r­j¢asssuXecl_command_liner®}r¯(h}r°(h}r±h}r²h ]r³Xros-jade-ecl-command-liner´assh }rµh}r¶h ]r·j´assuh}r¸h}r¹h ]rºXros/jade/ecl_corer»asshˆh}r¼h}r½h}r¾h ]r¿j´asssuX katana_teleoprÀ}rÁ(h}rÂ(h}rÃh}rÄh ]rÅXros-jade-katana-teleoprÆassh }rÇh}rÈh ]rÉjÆassuh}rÊh}rËh ]rÌXros/jade/katana_driverrÍasshˆh}rÎh}rÏh}rÐh ]rÑjÆasssuX sound_playrÒ}rÓ(h}rÔ(h}rÕh}rÖh ]r×Xros-jade-sound-playrØassh }rÙh}rÚh ]rÛjØassuh}rÜh}rÝh ]rÞXros/jade/audio_commonrßasshˆh}ràh}ráh}râh ]rãjØasssuXswri_yaml_utilrä}rå(h}ræ(h}rçh}rèh ]réXros-jade-swri-yaml-utilrêassh }rëh}rìh ]ríjêassuh}rîh}rïh ]rðXros/jade/marti_commonrñasshˆh}ròh}róh}rôh ]rõjêasssuX stdr_samplesrö}r÷(h}rø(h}rùh}rúh ]rûXros-jade-stdr-samplesrüassh }rýh}rþh ]rÿjüassuh}rh}rh ]rXros/jade/stdr_simulatorrasshˆh}rh}rh}rh ]rjüasssuXsocial_navigation_layersr}r (h}r (h}r h}r h ]r X!ros-jade-social-navigation-layersrassh }rh}rh ]rjassuh}rh}rh ]rXros/jade/navigation_layersrasshˆh}rh}rh}rh ]rjasssuXmoveit_kinematicsr}r(h}r(h}rh}rh ]rXros-jade-moveit-kinematicsr assh }r!h}r"h ]r#j assuh}r$h}r%h ]r&Xros/jade/moveitr'asshˆh}r(h}r)h}r*h ]r+j asssuX stdr_msgsr,}r-(h}r.(h}r/h}r0h ]r1Xros-jade-stdr-msgsr2assh }r3h}r4h ]r5j2assuh}r6h}r7h ]r8Xros/jade/stdr_simulatorr9asshˆh}r:h}r;h}r<h ]r=j2asssuXmap_msgsr>}r?(h}r@(h}rAh}rBh ]rCXros-jade-map-msgsrDassh }rEh}rFh ]rGjDassuh}rHh}rIh ]rJXros/jade/navigation_msgsrKasshˆh}rLh}rMh}rNh ]rOjDasssuX rtt_std_srvsrP}rQ(h}rR(h}rSh}rTh ]rUXros-jade-rtt-std-srvsrVassh }rWh}rXh ]rYjVassuh}rZh}r[h ]r\Xros/jade/rtt_ros_integrationr]asshˆh}r^h}r_h}r`h ]rajVasssuXmoveit_ros_benchmarksrb}rc(h}rd(h}reh}rfh ]rgXros-jade-moveit-ros-benchmarksrhassh }rih}rjh ]rkjhassuh}rlh}rmh ]rnXros/jade/moveitroasshˆh}rph}rqh}rrh ]rsjhasssuXmultimaster_fkiert}ru(h}rv(h}rwh}rxh ]ryXros-jade-multimaster-fkierzassh }r{h}r|h ]r}jzassuh}r~h}rh ]r€Xros/jade/multimaster_fkierasshˆh}r‚h}rƒh}r„h ]r…jzasssuX grid_map_corer†}r‡(h}rˆ(h}r‰h}rŠh ]r‹Xros-jade-grid-map-corerŒassh }rh}rŽh ]rjŒassuh}rh}r‘h ]r’Xros/jade/grid_mapr“asshˆh}r”h}r•h}r–h ]r—jŒasssuX rosserialr˜}r™(h}rš(h}r›h}rœh ]rXros-jade-rosserialržassh }rŸh}r h ]r¡jžassuh}r¢h}r£h ]r¤Xros/jade/rosserialr¥asshˆh}r¦h}r§h}r¨h ]r©jžasssuXjsk_recognitionrª}r«(h}r¬(h}r­h}r®h ]r¯Xros-jade-jsk-recognitionr°assh }r±h}r²h ]r³j°assuh}r´h}rµh ]r¶Xros/jade/jsk_recognitionr·asshˆh}r¸h}r¹h}rºh ]r»j°asssuXrosunitr¼}r½(h}r¾(h}r¿h}rÀh ]rÁXros-jade-rosunitrÂassh }rÃh}rÄh ]rÅjÂassuh}rÆh}rÇh ]rÈX ros/jade/rosrÉasshˆh}rÊh}rËh}rÌh ]rÍjÂasssuXsmclibrÎ}rÏ(h}rÐ(h}rÑh}rÒh ]rÓXros-jade-smclibrÔassh }rÕh}rÖh ]r×jÔassuh}rØh}rÙh ]rÚXros/jade/bond_corerÛasshˆh}rÜh}rÝh}rÞh ]rßjÔasssuXtf2_rosrà}rá(h}râ(h}rãh}räh ]råXros-jade-tf2-rosræassh }rçh}rèh ]réjæassuh}rêh}rëh ]rìXros/jade/geometry2ríasshˆh}rîh}rïh}rðh ]rñjæasssuXmessage_runtimerò}ró(h}rô(h}rõh}röh ]r÷Xros-jade-message-runtimerøassh }rùh}rúh ]rûjøassuh}rüh}rýh ]rþXros/jade/message_runtimerÿasshˆh}rh}rh}rh ]rjøasssuXtf2_web_republisherr}r(h}r(h}rh}rh ]r Xros-jade-tf2-web-republisherr assh }r h}r h ]r j assuh}rh}rh ]rXros/jade/tf2_web_republisherrasshˆh}rh}rh}rh ]rj asssuXlibuvcr}r(h}r(h}rh}rh ]rXros-jade-libuvcrassh }rh}rh ]rjassuh}r h}r!h ]r"Xros/jade/libuvcr#asshˆh}r$h}r%h}r&h ]r'jasssuXmarti_perception_msgsr(}r)(h}r*(h}r+h}r,h ]r-Xros-jade-marti-perception-msgsr.assh }r/h}r0h ]r1j.assuh}r2h}r3h ]r4Xros/jade/marti_messagesr5asshˆh}r6h}r7h}r8h ]r9j.asssuXtrivial_gray_streamsr:}r;(h}r<(h}r=h}r>h ]r?Xros-jade-trivial-gray-streamsr@assh }rAh}rBh ]rCj@assuh}rDh}rEh ]rFXros/jade/cram_3rdpartyrGasshˆh}rHh}rIh}rJh ]rKj@asssuXpluginlib_tutorialsrL}rM(h}rN(h}rOh}rPh ]rQXros-jade-pluginlib-tutorialsrRassh }rSh}rTh ]rUjRassuh}rVh}rWh ]rXXros/jade/common_tutorialsrYasshˆh}rZh}r[h}r\h ]r]jRasssuX fzi_icl_commr^}r_(h}r`(h}rah}rbh ]rcXros-jade-fzi-icl-commrdassh }reh}rfh ]rgjdassuh}rhh}rih ]rjXros/jade/fzi_icl_commrkasshˆh}rlh}rmh}rnh ]rojdasssuXrosserial_mbedrp}rq(h}rr(h}rsh}rth ]ruXros-jade-rosserial-mbedrvassh }rwh}rxh ]ryjvassuh}rzh}r{h ]r|Xros/jade/rosserialr}asshˆh}r~h}rh}r€h ]rjvasssuX roscpp_corer‚}rƒ(h}r„(h}r…h}r†h ]r‡Xros-jade-roscpp-corerˆassh }r‰h}rŠh ]r‹jˆassuh}rŒh}rh ]rŽXros/jade/roscpp_corerasshˆh}rh}r‘h}r’h ]r“jˆasssuXrosserial_clientr”}r•(h}r–(h}r—h}r˜h ]r™Xros-jade-rosserial-clientršassh }r›h}rœh ]rjšassuh}ržh}rŸh ]r Xros/jade/rosserialr¡asshˆh}r¢h}r£h}r¤h ]r¥jšasssuX parrot_arsdkr¦}r§(h}r¨(h}r©h}rªh ]r«Xros-jade-parrot-arsdkr¬assh }r­h}r®h ]r¯j¬assuh}r°h}r±h ]r²Xros/jade/parrot_arsdkr³asshˆh}r´h}rµh}r¶h ]r·j¬asssuXdepthcloud_encoderr¸}r¹(h}rº(h}r»h}r¼h ]r½Xros-jade-depthcloud-encoderr¾assh }r¿h}rÀh ]rÁj¾assuh}rÂh}rÃh ]rÄXros/jade/depthcloud_encoderrÅasshˆh}rÆh}rÇh}rÈh ]rÉj¾asssuX gl_dependencyrÊ}rË(h}rÌ(h}rÍh}rÎh ]rÏXros-jade-gl-dependencyrÐassh }rÑh}rÒh ]rÓjÐassuh}rÔh}rÕh ]rÖXros/jade/gl_dependencyr×asshˆh}rØh}rÙh}rÚh ]rÛjÐasssuX gps_commonrÜ}rÝ(h}rÞ(h}rßh}ràh ]ráXros-jade-gps-commonrâassh }rãh}räh ]råjâassuh}ræh}rçh ]rèXros/jade/gps_umdréasshˆh}rêh}rëh}rìh ]ríjâasssuXmd49_serialportrî}rï(h}rð(h}rñh}ròh ]róXros-jade-md49-serialportrôassh }rõh}röh ]r÷jôassuh}røh}rùh ]rúXros/jade/md49_base_controllerrûasshˆh}rüh}rýh}rþh ]rÿjôasssuX jsk_3rdpartyr}r(h}r(h}rh}rh ]rXros-jade-jsk-3rdpartyrassh }rh}rh ]r jassuh}r h}r h ]r Xros/jade/jsk_3rdpartyr asshˆh}rh}rh}rh ]rjasssuXrosserial_xbeer}r(h}r(h}rh}rh ]rXros-jade-rosserial-xbeerassh }rh}rh ]rjassuh}rh}rh ]rXros/jade/rosserialrasshˆh}r h}r!h}r"h ]r#jasssuXtrac_ikr$}r%(h}r&(h}r'h}r(h ]r)Xros-jade-trac-ikr*assh }r+h}r,h ]r-j*assuh}r.h}r/h ]r0Xros/jade/trac_ikr1asshˆh}r2h}r3h}r4h ]r5j*asssuX pyros_configr6}r7(h}r8(h}r9h}r:h ]r;Xros-jade-pyros-configr<assh }r=h}r>h ]r?j<assuh}r@h}rAh ]rBXros/jade/pyros_configrCasshˆh}rDh}rEh}rFh ]rGj<asssuXar_track_alvarrH}rI(h}rJ(h}rKh}rLh ]rMXros-jade-ar-track-alvarrNassh }rOh}rPh ]rQjNassuh}rRh}rSh ]rTXros/jade/ar_track_alvarrUasshˆh}rVh}rWh}rXh ]rYjNasssuXcalibration_launchrZ}r[(h}r\(h}r]h}r^h ]r_Xros-jade-calibration-launchr`assh }rah}rbh ]rcj`assuh}rdh}reh ]rfXros/jade/calibrationrgasshˆh}rhh}rih}rjh ]rkj`asssuXros_control_boilerplaterl}rm(h}rn(h}roh}rph ]rqX ros-jade-ros-control-boilerplaterrassh }rsh}rth ]rujrassuh}rvh}rwh ]rxX ros/jade/ros_control_boilerplateryasshˆh}rzh}r{h}r|h ]r}jrasssuXarbotixr~}r(h}r€(h}rh}r‚h ]rƒXros-jade-arbotixr„assh }r…h}r†h ]r‡j„assuh}rˆh}r‰h ]rŠXros/jade/arbotix_rosr‹asshˆh}rŒh}rh}rŽh ]rj„asssuXindustrial_utilsr}r‘(h}r’(h}r“h}r”h ]r•Xros-jade-industrial-utilsr–assh }r—h}r˜h ]r™j–assuh}ršh}r›h ]rœXros/jade/industrial_corerasshˆh}ržh}rŸh}r h ]r¡j–asssuX moveit_ikfastr¢}r£(h}r¤(h}r¥h}r¦h ]r§Xros-jade-moveit-ikfastr¨assh }r©h}rªh ]r«j¨assuh}r¬h}r­h ]r®Xros/jade/moveit_ikfastr¯asshˆh}r°h}r±h}r²h ]r³j¨asssuX turtlesimr´}rµ(h}r¶(h}r·h}r¸h ]r¹Xros-jade-turtlesimrºassh }r»h}r¼h ]r½jºassuh}r¾h}r¿h ]rÀXros/jade/ros_tutorialsrÁasshˆh}rÂh}rÃh}rÄh ]rÅjºasssuXrtshellrÆ}rÇ(h}rÈ(h}rÉh}rÊh ]rËXros-jade-rtshellrÌassh }rÍh}rÎh ]rÏjÌassuh}rÐh}rÑh ]rÒXros/jade/rtshellrÓasshˆh}rÔh}rÕh}rÖh ]r×jÌasssuXmoveit_ros_perceptionrØ}rÙ(h}rÚ(h}rÛh}rÜh ]rÝXros-jade-moveit-ros-perceptionrÞassh }rßh}ràh ]rájÞassuh}râh}rãh ]räXros/jade/moveitråasshˆh}ræh}rçh}rèh ]réjÞasssuXrqt_bagrê}rë(h}rì(h}ríh}rîh ]rïXros-jade-rqt-bagrðassh }rñh}ròh ]rójðassuh}rôh}rõh ]röXros/jade/rqt_bagr÷asshˆh}røh}rùh}rúh ]rûjðasssuX audio_playrü}rý(h}rþ(h}rÿh}rh ]rXros-jade-audio-playrassh }rh}rh ]rjassuh}rh}rh ]rXros/jade/audio_commonr asshˆh}r h}r h}r h ]r jasssuX visp_bridger}r(h}r(h}rh}rh ]rXros-jade-visp-bridgerassh }rh}rh ]rjassuh}rh}rh ]rXros/jade/vision_visprasshˆh}rh}rh}rh ]rjasssuXdiagnostic_msgsr }r!(h}r"(h}r#h}r$h ]r%Xros-jade-diagnostic-msgsr&assh }r'h}r(h ]r)j&assuh}r*h}r+h ]r,Xros/jade/common_msgsr-asshˆh}r.h}r/h}r0h ]r1j&asssuXdna_extraction_msgsr2}r3(h}r4(h}r5h}r6h ]r7Xros-jade-dna-extraction-msgsr8assh }r9h}r:h ]r;j8assuh}r<h}r=h ]r>Xros/jade/iai_common_msgsr?asshˆh}r@h}rAh}rBh ]rCj8asssuXjsk_common_msgsrD}rE(h}rF(h}rGh}rHh ]rIXros-jade-jsk-common-msgsrJassh }rKh}rLh ]rMjJassuh}rNh}rOh ]rPXros/jade/jsk_common_msgsrQasshˆh}rRh}rSh}rTh ]rUjJasssuXdesignator_integration_msgsrV}rW(h}rX(h}rYh}rZh ]r[X$ros-jade-designator-integration-msgsr\assh }r]h}r^h ]r_j\assuh}r`h}rah ]rbXros/jade/iai_common_msgsrcasshˆh}rdh}reh}rfh ]rgj\asssuX people_msgsrh}ri(h}rj(h}rkh}rlh ]rmXros-jade-people-msgsrnassh }roh}rph ]rqjnassuh}rrh}rsh ]rtXros/jade/peopleruasshˆh}rvh}rwh}rxh ]ryjnasssuXresized_image_transportrz}r{(h}r|(h}r}h}r~h ]rX ros-jade-resized-image-transportr€assh }rh}r‚h ]rƒj€assuh}r„h}r…h ]r†Xros/jade/jsk_recognitionr‡asshˆh}rˆh}r‰h}rŠh ]r‹j€asssuXmarti_common_msgsrŒ}r(h}rŽ(h}rh}rh ]r‘Xros-jade-marti-common-msgsr’assh }r“h}r”h ]r•j’assuh}r–h}r—h ]r˜Xros/jade/marti_messagesr™asshˆh}ršh}r›h}rœh ]rj’asssuX rosh_commonrž}rŸ(h}r (h}r¡h}r¢h ]r£Xros-jade-rosh-commonr¤assh }r¥h}r¦h ]r§j¤assuh}r¨h}r©h ]rªXros/jade/rosh_robot_pluginsr«asshˆh}r¬h}r­h}r®h ]r¯j¤asssuXpr2eus_tutorialsr°}r±(h}r²(h}r³h}r´h ]rµXros-jade-pr2eus-tutorialsr¶assh }r·h}r¸h ]r¹j¶assuh}rºh}r»h ]r¼Xros/jade/jsk_pr2eusr½asshˆh}r¾h}r¿h}rÀh ]rÁj¶asssuXroslz4rÂ}rÃ(h}rÄ(h}rÅh}rÆh ]rÇXros-jade-roslz4rÈassh }rÉh}rÊh ]rËjÈassuh}rÌh}rÍh ]rÎXros/jade/ros_commrÏasshˆh}rÐh}rÑh}rÒh ]rÓjÈasssuX ntpd_driverrÔ}rÕ(h}rÖ(h}r×h}rØh ]rÙXros-jade-ntpd-driverrÚassh }rÛh}rÜh ]rÝjÚassuh}rÞh}rßh ]ràXros/jade/ntpd_driverráasshˆh}râh}rãh}räh ]råjÚasssuX rospeex_coreræ}rç(h}rè(h}réh}rêh ]rëXros-jade-rospeex-corerìassh }ríh}rîh ]rïjìassuh}rðh}rñh ]ròXros/jade/rospeexróasshˆh}rôh}rõh}röh ]r÷jìasssuXros_type_introspectionrø}rù(h}rú(h}rûh}rüh ]rýXros-jade-ros-type-introspectionrþassh }rÿh}r h ]r jþassuh}r h}r h ]r Xros/jade/ros_type_introspectionr asshˆh}r h}r h}r h ]r jþasssuX mrpt_bridger }r (h}r (h}r h}r h ]r Xros-jade-mrpt-bridger assh }r h}r h ]r j assuh}r h}r h ]r Xros/jade/mrpt_navigationr asshˆh}r h}r h}r h ]r j asssuXum7r }r (h}r (h}r h}r h ]r! X ros-jade-um7r" assh }r# h}r$ h ]r% j" assuh}r& h}r' h ]r( X ros/jade/um7r) asshˆh}r* h}r+ h}r, h ]r- j" asssuXrviz_plugin_tutorialsr. }r/ (h}r0 (h}r1 h}r2 h ]r3 Xros-jade-rviz-plugin-tutorialsr4 assh }r5 h}r6 h ]r7 j4 assuh}r8 h}r9 h ]r: X ros/jade/visualization_tutorialsr; asshˆh}r< h}r= h}r> h ]r? j4 asssuXrosserial_testr@ }rA (h}rB (h}rC h}rD h ]rE Xros-jade-rosserial-testrF assh }rG h}rH h ]rI jF assuh}rJ h}rK h ]rL Xros/jade/rosserialrM asshˆh}rN h}rO h}rP h ]rQ jF asssuXposedetection_msgsrR }rS (h}rT (h}rU h}rV h ]rW Xros-jade-posedetection-msgsrX assh }rY h}rZ h ]r[ jX assuh}r\ h}r] h ]r^ Xros/jade/jsk_common_msgsr_ asshˆh}r` h}ra h}rb h ]rc jX asssuXnav2d_tutorialsrd }re (h}rf (h}rg h}rh h ]ri Xros-jade-nav2d-tutorialsrj assh }rk h}rl h ]rm jj assuh}rn h}ro h ]rp Xros/jade/navigation_2drq asshˆh}rr h}rs h}rt h ]ru jj asssuXrobotrv }rw (h}rx (h}ry h}rz h ]r{ Xros-jade-robotr| assh }r} h}r~ h ]r j| assuh}r€ h}r h ]r‚ Xros/jade/metapackagesrƒ asshˆh}r„ h}r… h}r† h ]r‡ j| asssuX eus_qpoasesrˆ }r‰ (h}rŠ (h}r‹ h}rŒ h ]r Xros-jade-eus-qpoasesrŽ assh }r h}r h ]r‘ jŽ assuh}r’ h}r“ h ]r” Xros/jade/jsk_controlr• asshˆh}r– h}r— h}r˜ h ]r™ jŽ asssuXnaoqi_driver_pyrš }r› (h}rœ (h}r h}rž h ]rŸ Xros-jade-naoqi-driver-pyr  assh }r¡ h}r¢ h ]r£ j  assuh}r¤ h}r¥ h ]r¦ Xros/jade/naoqi_bridger§ asshˆh}r¨ h}r© h}rª h ]r« j  asssuXgeographic_infor¬ }r­ (h}r® (h}r¯ h}r° h ]r± Xros-jade-geographic-infor² assh }r³ h}r´ h ]rµ j² assuh}r¶ h}r· h ]r¸ Xros/jade/geographic_infor¹ asshˆh}rº h}r» h}r¼ h ]r½ j² asssuXkatana_moveit_ikfast_pluginr¾ }r¿ (h}rÀ (h}rÁ h}r h ]rà X$ros-jade-katana-moveit-ikfast-pluginrÄ assh }rÅ h}rÆ h ]rÇ jÄ assuh}rÈ h}rÉ h ]rÊ Xros/jade/katana_driverrË asshˆh}rÌ h}rÍ h}rÎ h ]rÏ jÄ asssuXarbotix_controllersrÐ }rÑ (h}rÒ (h}rÓ h}rÔ h ]rÕ Xros-jade-arbotix-controllersrÖ assh }r× h}rØ h ]rÙ jÖ assuh}rÚ h}rÛ h ]rÜ Xros/jade/arbotix_rosrÝ asshˆh}rÞ h}rß h}rà h ]rá jÖ asssuX map_laserrâ }rã (h}rä (h}rå h}ræ h ]rç Xros-jade-map-laserrè assh }ré h}rê h ]rë jè assuh}rì h}rí h ]rî Xros/jade/laser_filteringrï asshˆh}rð h}rñ h}rò h ]ró jè asssuXexecutive_smach_visualizationrô }rõ (h}rö (h}r÷ h}rø h ]rù X&ros-jade-executive-smach-visualizationrú assh }rû h}rü h ]rý jú assuh}rþ h}rÿ h ]r!X&ros/jade/executive_smach_visualizationr!asshˆh}r!h}r!h}r!h ]r!jú asssuXlaser_assemblerr!}r!(h}r!(h}r !h}r !h ]r !Xros-jade-laser-assemblerr !assh }r !h}r!h ]r!j !assuh}r!h}r!h ]r!Xros/jade/laser_assemblerr!asshˆh}r!h}r!h}r!h ]r!j !asssuXgencppr!}r!(h}r!(h}r!h}r!h ]r!Xros-jade-gencppr!assh }r!h}r !h ]r!!j!assuh}r"!h}r#!h ]r$!Xros/jade/gencppr%!asshˆh}r&!h}r'!h}r(!h ]r)!j!asssuX graph_msgsr*!}r+!(h}r,!(h}r-!h}r.!h ]r/!Xros-jade-graph-msgsr0!assh }r1!h}r2!h ]r3!j0!assuh}r4!h}r5!h ]r6!Xros/jade/graph_msgsr7!asshˆh}r8!h}r9!h}r:!h ]r;!j0!asssuXhector_object_trackerr!(h}r?!h}r@!h ]rA!Xros-jade-hector-object-trackerrB!assh }rC!h}rD!h ]rE!jB!assuh}rF!h}rG!h ]rH!Xros/jade/hector_worldmodelrI!asshˆh}rJ!h}rK!h}rL!h ]rM!jB!asssuX pyros_commonrN!}rO!(h}rP!(h}rQ!h}rR!h ]rS!Xros-jade-pyros-commonrT!assh }rU!h}rV!h ]rW!jT!assuh}rX!h}rY!h ]rZ!Xros/jade/pyros_commonr[!asshˆh}r\!h}r]!h}r^!h ]r_!jT!asssuXrotate_recoveryr`!}ra!(h}rb!(h}rc!h}rd!h ]re!Xros-jade-rotate-recoveryrf!assh }rg!h}rh!h ]ri!jf!assuh}rj!h}rk!h ]rl!Xros/jade/navigationrm!asshˆh}rn!h}ro!h}rp!h ]rq!jf!asssuXpr2_hardware_interfacerr!}rs!(h}rt!(h}ru!h}rv!h ]rw!Xros-jade-pr2-hardware-interfacerx!assh }ry!h}rz!h ]r{!jx!assuh}r|!h}r}!h ]r~!Xros/jade/pr2_mechanismr!asshˆh}r€!h}r!h}r‚!h ]rƒ!jx!asssuX qt_gui_appr„!}r…!(h}r†!(h}r‡!h}rˆ!h ]r‰!Xros-jade-qt-gui-apprŠ!assh }r‹!h}rŒ!h ]r!jŠ!assuh}rŽ!h}r!h ]r!Xros/jade/qt_gui_corer‘!asshˆh}r’!h}r“!h}r”!h ]r•!jŠ!asssuXjsk_calibrationr–!}r—!(h}r˜!(h}r™!h}rš!h ]r›!Xros-jade-jsk-calibrationrœ!assh }r!h}rž!h ]rŸ!jœ!assuh}r !h}r¡!h ]r¢!Xros/jade/jsk_controlr£!asshˆh}r¤!h}r¥!h}r¦!h ]r§!jœ!asssuXecl_ipcr¨!}r©!(h}rª!(h}r«!h}r¬!h ]r­!Xros-jade-ecl-ipcr®!assh }r¯!h}r°!h ]r±!j®!assuh}r²!h}r³!h ]r´!Xros/jade/ecl_corerµ!asshˆh}r¶!h}r·!h}r¸!h ]r¹!j®!asssuXpython_qt_bindingrº!}r»!(h}r¼!(h}r½!h}r¾!h ]r¿!Xros-jade-python-qt-bindingrÀ!assh }rÁ!h}rÂ!h ]rÃ!jÀ!assuh}rÄ!h}rÅ!h ]rÆ!Xros/jade/python_qt_bindingrÇ!asshˆh}rÈ!h}rÉ!h}rÊ!h ]rË!jÀ!asssuX phidgets_imurÌ!}rÍ!(h}rÎ!(h}rÏ!h}rÐ!h ]rÑ!Xros-jade-phidgets-imurÒ!assh }rÓ!h}rÔ!h ]rÕ!jÒ!assuh}rÖ!h}r×!h ]rØ!Xros/jade/phidgets_driversrÙ!asshˆh}rÚ!h}rÛ!h}rÜ!h ]rÝ!jÒ!asssuXtile_maprÞ!}rß!(h}rà!(h}rá!h}râ!h ]rã!Xros-jade-tile-maprä!assh }rå!h}ræ!h ]rç!jä!assuh}rè!h}ré!h ]rê!Xros/jade/mapvizrë!asshˆh}rì!h}rí!h}rî!h ]rï!jä!asssuXtf2rð!}rñ!(h}rò!(h}ró!h}rô!h ]rõ!X ros-jade-tf2rö!assh }r÷!h}rø!h ]rù!jö!assuh}rú!h}rû!h ]rü!Xros/jade/geometry2rý!asshˆh}rþ!h}rÿ!h}r"h ]r"jö!asssuXcompressed_image_transportr"}r"(h}r"(h}r"h}r"h ]r"X#ros-jade-compressed-image-transportr"assh }r "h}r "h ]r "j"assuh}r "h}r "h ]r"X ros/jade/image_transport_pluginsr"asshˆh}r"h}r"h}r"h ]r"j"asssuX openrtm_toolsr"}r"(h}r"(h}r"h}r"h ]r"Xros-jade-openrtm-toolsr"assh }r"h}r"h ]r"j"assuh}r"h}r"h ]r "Xros/jade/rtmros_commonr!"asshˆh}r""h}r#"h}r$"h ]r%"j"asssuX p2os_teleopr&"}r'"(h}r("(h}r)"h}r*"h ]r+"Xros-jade-p2os-teleopr,"assh }r-"h}r."h ]r/"j,"assuh}r0"h}r1"h ]r2"X ros/jade/p2osr3"asshˆh}r4"h}r5"h}r6"h ]r7"j,"asssuXodometry_publisher_tutorialr8"}r9"(h}r:"(h}r;"h}r<"h ]r="X$ros-jade-odometry-publisher-tutorialr>"assh }r?"h}r@"h ]rA"j>"assuh}rB"h}rC"h ]rD"Xros/jade/navigation_tutorialsrE"asshˆh}rF"h}rG"h}rH"h ]rI"j>"asssuXpython_orocos_kdlrJ"}rK"(h}rL"(h}rM"h}rN"h ]rO"Xros-jade-python-orocos-kdlrP"assh }rQ"h}rR"h ]rS"jP"assuh}rT"h}rU"h ]rV"X#ros/jade/orocos_kinematics_dynamicsrW"asshˆh}rX"h}rY"h}rZ"h ]r["jP"asssuXpr2_controller_interfacer\"}r]"(h}r^"(h}r_"h}r`"h ]ra"X!ros-jade-pr2-controller-interfacerb"assh }rc"h}rd"h ]re"jb"assuh}rf"h}rg"h ]rh"Xros/jade/pr2_mechanismri"asshˆh}rj"h}rk"h}rl"h ]rm"jb"asssuX shape_msgsrn"}ro"(h}rp"(h}rq"h}rr"h ]rs"Xros-jade-shape-msgsrt"assh }ru"h}rv"h ]rw"jt"assuh}rx"h}ry"h ]rz"Xros/jade/common_msgsr{"asshˆh}r|"h}r}"h}r~"h ]r"jt"asssuXnode_manager_fkier€"}r"(h}r‚"(h}rƒ"h}r„"h ]r…"Xros-jade-node-manager-fkier†"assh }r‡"h}rˆ"h ]r‰"j†"assuh}rŠ"h}r‹"h ]rŒ"Xros/jade/multimaster_fkier"asshˆh}rŽ"h}r"h}r"h ]r‘"j†"asssuXschunk_grippersr’"}r“"(h}r”"(h}r•"h}r–"h ]r—"Xros-jade-schunk-grippersr˜"assh }r™"h}rš"h ]r›"j˜"assuh}rœ"h}r"h ]rž"Xros/jade/schunk_grippersrŸ"asshˆh}r "h}r¡"h}r¢"h ]r£"j˜"asssuX ecl_eigenr¤"}r¥"(h}r¦"(h}r§"h}r¨"h ]r©"Xros-jade-ecl-eigenrª"assh }r«"h}r¬"h ]r­"jª"assuh}r®"h}r¯"h ]r°"Xros/jade/ecl_corer±"asshˆh}r²"h}r³"h}r´"h ]rµ"jª"asssuXpr2_dashboard_aggregatorr¶"}r·"(h}r¸"(h}r¹"h}rº"h ]r»"X!ros-jade-pr2-dashboard-aggregatorr¼"assh }r½"h}r¾"h ]r¿"j¼"assuh}rÀ"h}rÁ"h ]rÂ"Xros/jade/pr2_commonrÃ"asshˆh}rÄ"h}rÅ"h}rÆ"h ]rÇ"j¼"asssuXroscpprÈ"}rÉ"(h}rÊ"(h}rË"h}rÌ"h ]rÍ"Xros-jade-roscpprÎ"assh }rÏ"h}rÐ"h ]rÑ"jÎ"assuh}rÒ"h}rÓ"h ]rÔ"Xros/jade/ros_commrÕ"asshˆh}rÖ"h}r×"h}rØ"h ]rÙ"jÎ"asssuXmultimaster_msgs_fkierÚ"}rÛ"(h}rÜ"(h}rÝ"h}rÞ"h ]rß"Xros-jade-multimaster-msgs-fkierà"assh }rá"h}râ"h ]rã"jà"assuh}rä"h}rå"h ]ræ"Xros/jade/multimaster_fkierç"asshˆh}rè"h}ré"h}rê"h ]rë"jà"asssuX hector_gazeborì"}rí"(h}rî"(h}rï"h}rð"h ]rñ"Xros-jade-hector-gazeborò"assh }ró"h}rô"h ]rõ"jò"assuh}rö"h}r÷"h ]rø"Xros/jade/hector_gazeborù"asshˆh}rú"h}rû"h}rü"h ]rý"jò"asssuX key_teleoprþ"}rÿ"(h}r#(h}r#h}r#h ]r#Xros-jade-key-teleopr#assh }r#h}r#h ]r#j#assuh}r#h}r #h ]r #Xros/jade/teleop_toolsr #asshˆh}r #h}r #h}r#h ]r#j#asssuXmultisense_descriptionr#}r#(h}r#(h}r#h}r#h ]r#Xros-jade-multisense-descriptionr#assh }r#h}r#h ]r#j#assuh}r#h}r#h ]r#Xros/jade/multisense_rosr#asshˆh}r#h}r#h}r #h ]r!#j#asssuX fetch_gazebor"#}r##(h}r$#(h}r%#h}r&#h ]r'#Xros-jade-fetch-gazebor(#assh }r)#h}r*#h ]r+#j(#assuh}r,#h}r-#h ]r.#Xros/jade/fetch_gazebor/#asshˆh}r0#h}r1#h}r2#h ]r3#j(#asssuX mongodb_logr4#}r5#(h}r6#(h}r7#h}r8#h ]r9#Xros-jade-mongodb-logr:#assh }r;#h}r<#h ]r=#j:#assuh}r>#h}r?#h ]r@#Xros/jade/mongodb_storerA#asshˆh}rB#h}rC#h}rD#h ]rE#j:#asssuXsocketcan_interfacerF#}rG#(h}rH#(h}rI#h}rJ#h ]rK#Xros-jade-socketcan-interfacerL#assh }rM#h}rN#h ]rO#jL#assuh}rP#h}rQ#h ]rR#Xros/jade/ros_canopenrS#asshˆh}rT#h}rU#h}rV#h ]rW#jL#asssuX power_msgsrX#}rY#(h}rZ#(h}r[#h}r\#h ]r]#Xros-jade-power-msgsr^#assh }r_#h}r`#h ]ra#j^#assuh}rb#h}rc#h ]rd#Xros/jade/power_msgsre#asshˆh}rf#h}rg#h}rh#h ]ri#j^#asssuXrosapirj#}rk#(h}rl#(h}rm#h}rn#h ]ro#Xros-jade-rosapirp#assh }rq#h}rr#h ]rs#jp#assuh}rt#h}ru#h ]rv#Xros/jade/rosbridge_suiterw#asshˆh}rx#h}ry#h}rz#h ]r{#jp#asssuXtf_conversionsr|#}r}#(h}r~#(h}r#h}r€#h ]r#Xros-jade-tf-conversionsr‚#assh }rƒ#h}r„#h ]r…#j‚#assuh}r†#h}r‡#h ]rˆ#Xros/jade/geometryr‰#asshˆh}rŠ#h}r‹#h}rŒ#h ]r#j‚#asssuXurdfrŽ#}r#(h}r#(h}r‘#h}r’#h ]r“#X ros-jade-urdfr”#assh }r•#h}r–#h ]r—#j”#assuh}r˜#h}r™#h ]rš#Xros/jade/robot_modelr›#asshˆh}rœ#h}r#h}rž#h ]rŸ#j”#asssuX p2os_driverr #}r¡#(h}r¢#(h}r£#h}r¤#h ]r¥#Xros-jade-p2os-driverr¦#assh }r§#h}r¨#h ]r©#j¦#assuh}rª#h}r«#h ]r¬#X ros/jade/p2osr­#asshˆh}r®#h}r¯#h}r°#h ]r±#j¦#asssuXros_corer²#}r³#(h}r´#(h}rµ#h}r¶#h ]r·#Xros-jade-ros-corer¸#assh }r¹#h}rº#h ]r»#j¸#assuh}r¼#h}r½#h ]r¾#Xros/jade/metapackagesr¿#asshˆh}rÀ#h}rÁ#h}rÂ#h ]rÃ#j¸#asssuX ecl_geometryrÄ#}rÅ#(h}rÆ#(h}rÇ#h}rÈ#h ]rÉ#Xros-jade-ecl-geometryrÊ#assh }rË#h}rÌ#h ]rÍ#jÊ#assuh}rÎ#h}rÏ#h ]rÐ#Xros/jade/ecl_corerÑ#asshˆh}rÒ#h}rÓ#h}rÔ#h ]rÕ#jÊ#asssuXopenslam_gmappingrÖ#}r×#(h}rØ#(h}rÙ#h}rÚ#h ]rÛ#Xros-jade-openslam-gmappingrÜ#assh }rÝ#h}rÞ#h ]rß#jÜ#assuh}rà#h}rá#h ]râ#Xros/jade/openslam_gmappingrã#asshˆh}rä#h}rå#h}ræ#h ]rç#jÜ#asssuXglobal_plannerrè#}ré#(h}rê#(h}rë#h}rì#h ]rí#Xros-jade-global-plannerrî#assh }rï#h}rð#h ]rñ#jî#assuh}rò#h}ró#h ]rô#Xros/jade/navigationrõ#asshˆh}rö#h}r÷#h}rø#h ]rù#jî#asssuXrail_manipulation_msgsrú#}rû#(h}rü#(h}rý#h}rþ#h ]rÿ#Xros-jade-rail-manipulation-msgsr$assh }r$h}r$h ]r$j$assuh}r$h}r$h ]r$Xros/jade/rail_manipulation_msgsr$asshˆh}r$h}r $h}r $h ]r $j$asssuXtf2_sensor_msgsr $}r $(h}r$(h}r$h}r$h ]r$Xros-jade-tf2-sensor-msgsr$assh }r$h}r$h ]r$j$assuh}r$h}r$h ]r$Xros/jade/geometry2r$asshˆh}r$h}r$h}r$h ]r$j$asssuXecl_timer$}r$(h}r $(h}r!$h}r"$h ]r#$Xros-jade-ecl-timer$$assh }r%$h}r&$h ]r'$j$$assuh}r($h}r)$h ]r*$Xros/jade/ecl_corer+$asshˆh}r,$h}r-$h}r.$h ]r/$j$$asssuXrosserial_tivacr0$}r1$(h}r2$(h}r3$h}r4$h ]r5$Xros-jade-rosserial-tivacr6$assh }r7$h}r8$h ]r9$j6$assuh}r:$h}r;$h ]r<$Xros/jade/rosserialr=$asshˆh}r>$h}r?$h}r@$h ]rA$j6$asssuX catkin_piprB$}rC$(h}rD$(h}rE$h}rF$h ]rG$Xros-jade-catkin-piprH$assh }rI$h}rJ$h ]rK$jH$assuh}rL$h}rM$h ]rN$Xros/jade/catkin_piprO$asshˆh}rP$h}rQ$h}rR$h ]rS$jH$asssuXforce_torque_toolsrT$}rU$(h}rV$(h}rW$h}rX$h ]rY$Xros-jade-force-torque-toolsrZ$assh }r[$h}r\$h ]r]$jZ$assuh}r^$h}r_$h ]r`$Xros/jade/force_torque_toolsra$asshˆh}rb$h}rc$h}rd$h ]re$jZ$asssuX pyros_testrf$}rg$(h}rh$(h}ri$h}rj$h ]rk$Xros-jade-pyros-testrl$assh }rm$h}rn$h ]ro$jl$assuh}rp$h}rq$h ]rr$Xros/jade/pyros_testrs$asshˆh}rt$h}ru$h}rv$h ]rw$jl$asssuXclear_costmap_recoveryrx$}ry$(h}rz$(h}r{$h}r|$h ]r}$Xros-jade-clear-costmap-recoveryr~$assh }r$h}r€$h ]r$j~$assuh}r‚$h}rƒ$h ]r„$Xros/jade/navigationr…$asshˆh}r†$h}r‡$h}rˆ$h ]r‰$j~$asssuX tf2_toolsrŠ$}r‹$(h}rŒ$(h}r$h}rŽ$h ]r$Xros-jade-tf2-toolsr$assh }r‘$h}r’$h ]r“$j$assuh}r”$h}r•$h ]r–$Xros/jade/geometry2r—$asshˆh}r˜$h}r™$h}rš$h ]r›$j$asssuXjoyrœ$}r$(h}rž$(h}rŸ$h}r $h ]r¡$X ros-jade-joyr¢$assh }r£$h}r¤$h ]r¥$j¢$assuh}r¦$h}r§$h ]r¨$Xros/jade/joystick_driversr©$asshˆh}rª$h}r«$h}r¬$h ]r­$j¢$asssuXjsk_interactive_markerr®$}r¯$(h}r°$(h}r±$h}r²$h ]r³$Xros-jade-jsk-interactive-markerr´$assh }rµ$h}r¶$h ]r·$j´$assuh}r¸$h}r¹$h ]rº$Xros/jade/jsk_visualizationr»$asshˆh}r¼$h}r½$h}r¾$h ]r¿$j´$asssuX slam_kartorÀ$}rÁ$(h}rÂ$(h}rÃ$h}rÄ$h ]rÅ$Xros-jade-slam-kartorÆ$assh }rÇ$h}rÈ$h ]rÉ$jÆ$assuh}rÊ$h}rË$h ]rÌ$Xros/jade/slam_kartorÍ$asshˆh}rÎ$h}rÏ$h}rÐ$h ]rÑ$jÆ$asssuXhector_nav_msgsrÒ$}rÓ$(h}rÔ$(h}rÕ$h}rÖ$h ]r×$Xros-jade-hector-nav-msgsrØ$assh }rÙ$h}rÚ$h ]rÛ$jØ$assuh}rÜ$h}rÝ$h ]rÞ$Xros/jade/hector_slamrß$asshˆh}rà$h}rá$h}râ$h ]rã$jØ$asssuXlibg2orä$}rå$(h}ræ$(h}rç$h}rè$h ]ré$Xros-jade-libg2orê$assh }rë$h}rì$h ]rí$jê$assuh}rî$h}rï$h ]rð$Xros/jade/libg2orñ$asshˆh}rò$h}ró$h}rô$h ]rõ$jê$asssuXdynamixel_msgsrö$}r÷$(h}rø$(h}rù$h}rú$h ]rû$Xros-jade-dynamixel-msgsrü$assh }rý$h}rþ$h ]rÿ$jü$assuh}r%h}r%h ]r%Xros/jade/dynamixel_motorr%asshˆh}r%h}r%h}r%h ]r%jü$asssuXecl_navigationr%}r %(h}r %(h}r %h}r %h ]r %Xros-jade-ecl-navigationr%assh }r%h}r%h ]r%j%assuh}r%h}r%h ]r%Xros/jade/ecl_navigationr%asshˆh}r%h}r%h}r%h ]r%j%asssuX ecl_streamsr%}r%(h}r%(h}r%h}r%h ]r%Xros-jade-ecl-streamsr %assh }r!%h}r"%h ]r#%j %assuh}r$%h}r%%h ]r&%Xros/jade/ecl_corer'%asshˆh}r(%h}r)%h}r*%h ]r+%j %asssuXgrid_map_filtersr,%}r-%(h}r.%(h}r/%h}r0%h ]r1%Xros-jade-grid-map-filtersr2%assh }r3%h}r4%h ]r5%j2%assuh}r6%h}r7%h ]r8%Xros/jade/grid_mapr9%asshˆh}r:%h}r;%h}r<%h ]r=%j2%asssuXhector_mappingr>%}r?%(h}r@%(h}rA%h}rB%h ]rC%Xros-jade-hector-mappingrD%assh }rE%h}rF%h ]rG%jD%assuh}rH%h}rI%h ]rJ%Xros/jade/hector_slamrK%asshˆh}rL%h}rM%h}rN%h ]rO%jD%asssuX wts_driverrP%}rQ%(h}rR%(h}rS%h}rT%h ]rU%Xros-jade-wts-driverrV%assh }rW%h}rX%h ]rY%jV%assuh}rZ%h}r[%h ]r\%Xros/jade/wts_driverr]%asshˆh}r^%h}r_%h}r`%h ]ra%jV%asssuX image_view2rb%}rc%(h}rd%(h}re%h}rf%h ]rg%Xros-jade-image-view2rh%assh }ri%h}rj%h ]rk%jh%assuh}rl%h}rm%h ]rn%Xros/jade/jsk_commonro%asshˆh}rp%h}rq%h}rr%h ]rs%jh%asssuXiai_robosherlock_actionsrt%}ru%(h}rv%(h}rw%h}rx%h ]ry%X!ros-jade-iai-robosherlock-actionsrz%assh }r{%h}r|%h ]r}%jz%assuh}r~%h}r%h ]r€%Xros/jade/iai_common_msgsr%asshˆh}r‚%h}rƒ%h}r„%h ]r…%jz%asssuXrviz_visual_toolsr†%}r‡%(h}rˆ%(h}r‰%h}rŠ%h ]r‹%Xros-jade-rviz-visual-toolsrŒ%assh }r%h}rŽ%h ]r%jŒ%assuh}r%h}r‘%h ]r’%Xros/jade/rviz_visual_toolsr“%asshˆh}r”%h}r•%h}r–%h ]r—%jŒ%asssuX stdr_parserr˜%}r™%(h}rš%(h}r›%h}rœ%h ]r%Xros-jade-stdr-parserrž%assh }rŸ%h}r %h ]r¡%jž%assuh}r¢%h}r£%h ]r¤%Xros/jade/stdr_simulatorr¥%asshˆh}r¦%h}r§%h}r¨%h ]r©%jž%asssuXmrpt_ekf_slam_3drª%}r«%(h}r¬%(h}r­%h}r®%h ]r¯%Xros-jade-mrpt-ekf-slam-3dr°%assh }r±%h}r²%h ]r³%j°%assuh}r´%h}rµ%h ]r¶%Xros/jade/mrpt_slamr·%asshˆh}r¸%h}r¹%h}rº%h ]r»%j°%asssuXm4atx_battery_monitorr¼%}r½%(h}r¾%(h}r¿%h}rÀ%h ]rÁ%Xros-jade-m4atx-battery-monitorrÂ%assh }rÃ%h}rÄ%h ]rÅ%jÂ%assuh}rÆ%h}rÇ%h ]rÈ%Xros/jade/m4atx_battery_monitorrÉ%asshˆh}rÊ%h}rË%h}rÌ%h ]rÍ%jÂ%asssuXspatial_temporal_learningrÎ%}rÏ%(h}rÐ%(h}rÑ%h}rÒ%h ]rÓ%X"ros-jade-spatial-temporal-learningrÔ%assh }rÕ%h}rÖ%h ]r×%jÔ%assuh}rØ%h}rÙ%h ]rÚ%X"ros/jade/spatial_temporal_learningrÛ%asshˆh}rÜ%h}rÝ%h}rÞ%h ]rß%jÔ%asssuX roomba_stagerà%}rá%(h}râ%(h}rã%h}rä%h ]rå%Xros-jade-roomba-stageræ%assh }rç%h}rè%h ]ré%jæ%assuh}rê%h}rë%h ]rì%Xros/jade/navigation_tutorialsrí%asshˆh}rî%h}rï%h}rð%h ]rñ%jæ%asssuXhector_geotiff_pluginsrò%}ró%(h}rô%(h}rõ%h}rö%h ]r÷%Xros-jade-hector-geotiff-pluginsrø%assh }rù%h}rú%h ]rû%jø%assuh}rü%h}rý%h ]rþ%Xros/jade/hector_slamrÿ%asshˆh}r&h}r&h}r&h ]r&jø%asssuXcamera_calibrationr&}r&(h}r&(h}r&h}r&h ]r &Xros-jade-camera-calibrationr &assh }r &h}r &h ]r &j &assuh}r&h}r&h ]r&Xros/jade/image_pipeliner&asshˆh}r&h}r&h}r&h ]r&j &asssuXrosbridge_suiter&}r&(h}r&(h}r&h}r&h ]r&Xros-jade-rosbridge-suiter&assh }r&h}r&h ]r&j&assuh}r &h}r!&h ]r"&Xros/jade/rosbridge_suiter#&asshˆh}r$&h}r%&h}r&&h ]r'&j&asssuX nao_audior(&}r)&(h}r*&(h}r+&h}r,&h ]r-&Xros-jade-nao-audior.&assh }r/&h}r0&h ]r1&j.&assuh}r2&h}r3&h ]r4&Xros/jade/nao_interactionr5&asshˆh}r6&h}r7&h}r8&h ]r9&j.&asssuXardrone_autonomyr:&}r;&(h}r<&(h}r=&h}r>&h ]r?&Xros-jade-ardrone-autonomyr@&assh }rA&h}rB&h ]rC&j@&assuh}rD&h}rE&h ]rF&Xros/jade/ardrone_autonomyrG&asshˆh}rH&h}rI&h}rJ&h ]rK&j@&asssuXecl_convertersrL&}rM&(h}rN&(h}rO&h}rP&h ]rQ&Xros-jade-ecl-convertersrR&assh }rS&h}rT&h ]rU&jR&assuh}rV&h}rW&h ]rX&Xros/jade/ecl_corerY&asshˆh}rZ&h}r[&h}r\&h ]r]&jR&asssuX libuvc_rosr^&}r_&(h}r`&(h}ra&h}rb&h ]rc&Xros-jade-libuvc-rosrd&assh }re&h}rf&h ]rg&jd&assuh}rh&h}ri&h ]rj&Xros/jade/libuvc_rosrk&asshˆh}rl&h}rm&h}rn&h ]ro&jd&asssuXrobot_web_toolsrp&}rq&(h}rr&(h}rs&h}rt&h ]ru&Xros-jade-robot-web-toolsrv&assh }rw&h}rx&h ]ry&jv&assuh}rz&h}r{&h ]r|&Xros/jade/robot_web_toolsr}&asshˆh}r~&h}r&h}r€&h ]r&jv&asssuXswri_transform_utilr‚&}rƒ&(h}r„&(h}r…&h}r†&h ]r‡&Xros-jade-swri-transform-utilrˆ&assh }r‰&h}rŠ&h ]r‹&jˆ&assuh}rŒ&h}r&h ]rŽ&Xros/jade/marti_commonr&asshˆh}r&h}r‘&h}r’&h ]r“&jˆ&asssuXrobot_controllers_interfacer”&}r•&(h}r–&(h}r—&h}r˜&h ]r™&X$ros-jade-robot-controllers-interfacerš&assh }r›&h}rœ&h ]r&jš&assuh}rž&h}rŸ&h ]r &Xros/jade/robot_controllersr¡&asshˆh}r¢&h}r£&h}r¤&h ]r¥&jš&asssuXrtt_kdl_conversionsr¦&}r§&(h}r¨&(h}r©&h}rª&h ]r«&Xros-jade-rtt-kdl-conversionsr¬&assh }r­&h}r®&h ]r¯&j¬&assuh}r°&h}r±&h ]r²&Xros/jade/rtt_ros_integrationr³&asshˆh}r´&h}rµ&h}r¶&h ]r·&j¬&asssuXrospilotr¸&}r¹&(h}rº&(h}r»&h}r¼&h ]r½&Xros-jade-rospilotr¾&assh }r¿&h}rÀ&h ]rÁ&j¾&assuh}rÂ&h}rÃ&h ]rÄ&Xros/jade/rospilotrÅ&asshˆh}rÆ&h}rÇ&h}rÈ&h ]rÉ&j¾&asssuXrosserial_pythonrÊ&}rË&(h}rÌ&(h}rÍ&h}rÎ&h ]rÏ&Xros-jade-rosserial-pythonrÐ&assh }rÑ&h}rÒ&h ]rÓ&jÐ&assuh}rÔ&h}rÕ&h ]rÖ&Xros/jade/rosserialr×&asshˆh}rØ&h}rÙ&h}rÚ&h ]rÛ&jÐ&asssuX nao_teleoprÜ&}rÝ&(h}rÞ&(h}rß&h}rà&h ]rá&Xros-jade-nao-teleoprâ&assh }rã&h}rä&h ]rå&jâ&assuh}ræ&h}rç&h ]rè&Xros/jade/nao_extrasré&asshˆh}rê&h}rë&h}rì&h ]rí&jâ&asssuXrospy_tutorialsrî&}rï&(h}rð&(h}rñ&h}rò&h ]ró&Xros-jade-rospy-tutorialsrô&assh }rõ&h}rö&h ]r÷&jô&assuh}rø&h}rù&h ]rú&Xros/jade/ros_tutorialsrû&asshˆh}rü&h}rý&h}rþ&h ]rÿ&jô&asssuXswri_prefix_toolsr'}r'(h}r'(h}r'h}r'h ]r'Xros-jade-swri-prefix-toolsr'assh }r'h}r'h ]r 'j'assuh}r 'h}r 'h ]r 'Xros/jade/marti_commonr 'asshˆh}r'h}r'h}r'h ]r'j'asssuX mouse_teleopr'}r'(h}r'(h}r'h}r'h ]r'Xros-jade-mouse-teleopr'assh }r'h}r'h ]r'j'assuh}r'h}r'h ]r'Xros/jade/teleop_toolsr'asshˆh}r 'h}r!'h}r"'h ]r#'j'asssuXjsk_tilt_laserr$'}r%'(h}r&'(h}r''h}r('h ]r)'Xros-jade-jsk-tilt-laserr*'assh }r+'h}r,'h ]r-'j*'assuh}r.'h}r/'h ]r0'Xros/jade/jsk_commonr1'asshˆh}r2'h}r3'h}r4'h ]r5'j*'asssuXrosbag_storager6'}r7'(h}r8'(h}r9'h}r:'h ]r;'Xros-jade-rosbag-storager<'assh }r='h}r>'h ]r?'j<'assuh}r@'h}rA'h ]rB'Xros/jade/ros_commrC'asshˆh}rD'h}rE'h}rF'h ]rG'j<'asssuXrqt_plotrH'}rI'(h}rJ'(h}rK'h}rL'h ]rM'Xros-jade-rqt-plotrN'assh }rO'h}rP'h ]rQ'jN'assuh}rR'h}rS'h ]rT'Xros/jade/rqt_plotrU'asshˆh}rV'h}rW'h}rX'h ]rY'jN'asssuX fzi_icl_canrZ'}r['(h}r\'(h}r]'h}r^'h ]r_'Xros-jade-fzi-icl-canr`'assh }ra'h}rb'h ]rc'j`'assuh}rd'h}re'h ]rf'Xros/jade/fzi_icl_canrg'asshˆh}rh'h}ri'h}rj'h ]rk'j`'asssuX rqt_graphrl'}rm'(h}rn'(h}ro'h}rp'h ]rq'Xros-jade-rqt-graphrr'assh }rs'h}rt'h ]ru'jr'assuh}rv'h}rw'h ]rx'Xros/jade/rqt_graphry'asshˆh}rz'h}r{'h}r|'h ]r}'jr'asssuX katana_driverr~'}r'(h}r€'(h}r'h}r‚'h ]rƒ'Xros-jade-katana-driverr„'assh }r…'h}r†'h ]r‡'j„'assuh}rˆ'h}r‰'h ]rŠ'Xros/jade/katana_driverr‹'asshˆh}rŒ'h}r'h}rŽ'h ]r'j„'asssuX rotors_commr'}r‘'(h}r’'(h}r“'h}r”'h ]r•'Xros-jade-rotors-commr–'assh }r—'h}r˜'h ]r™'j–'assuh}rš'h}r›'h ]rœ'Xros/jade/rotors_simulatorr'asshˆh}rž'h}rŸ'h}r 'h ]r¡'j–'asssuXdynamixel_controllersr¢'}r£'(h}r¤'(h}r¥'h}r¦'h ]r§'Xros-jade-dynamixel-controllersr¨'assh }r©'h}rª'h ]r«'j¨'assuh}r¬'h}r­'h ]r®'Xros/jade/dynamixel_motorr¯'asshˆh}r°'h}r±'h}r²'h ]r³'j¨'asssuXum6r´'}rµ'(h}r¶'(h}r·'h}r¸'h ]r¹'X ros-jade-um6rº'assh }r»'h}r¼'h ]r½'jº'assuh}r¾'h}r¿'h ]rÀ'X ros/jade/um6rÁ'asshˆh}rÂ'h}rÃ'h}rÄ'h ]rÅ'jº'asssuX swri_consolerÆ'}rÇ'(h}rÈ'(h}rÉ'h}rÊ'h ]rË'Xros-jade-swri-consolerÌ'assh }rÍ'h}rÎ'h ]rÏ'jÌ'assuh}rÐ'h}rÑ'h ]rÒ'Xros/jade/swri_consolerÓ'asshˆh}rÔ'h}rÕ'h}rÖ'h ]r×'jÌ'asssuXindustrial_trajectory_filtersrØ'}rÙ'(h}rÚ'(h}rÛ'h}rÜ'h ]rÝ'X&ros-jade-industrial-trajectory-filtersrÞ'assh }rß'h}rà'h ]rá'jÞ'assuh}râ'h}rã'h ]rä'Xros/jade/industrial_corerå'asshˆh}ræ'h}rç'h}rè'h ]ré'jÞ'asssuXcalibration_setup_helperrê'}rë'(h}rì'(h}rí'h}rî'h ]rï'X!ros-jade-calibration-setup-helperrð'assh }rñ'h}rò'h ]ró'jð'assuh}rô'h}rõ'h ]rö'Xros/jade/calibrationr÷'asshˆh}rø'h}rù'h}rú'h ]rû'jð'asssuXdiff_drive_controllerrü'}rý'(h}rþ'(h}rÿ'h}r(h ]r(Xros-jade-diff-drive-controllerr(assh }r(h}r(h ]r(j(assuh}r(h}r(h ]r(Xros/jade/ros_controllersr (asshˆh}r (h}r (h}r (h ]r (j(asssuXrazor_imu_9dofr(}r((h}r((h}r(h}r(h ]r(Xros-jade-razor-imu-9dofr(assh }r(h}r(h ]r(j(assuh}r(h}r(h ]r(Xros/jade/razor_imu_9dofr(asshˆh}r(h}r(h}r(h ]r(j(asssuX cl_utilitiesr (}r!((h}r"((h}r#(h}r$(h ]r%(Xros-jade-cl-utilitiesr&(assh }r'(h}r((h ]r)(j&(assuh}r*(h}r+(h ]r,(Xros/jade/cram_3rdpartyr-(asshˆh}r.(h}r/(h}r0(h ]r1(j&(asssuXkatana_descriptionr2(}r3((h}r4((h}r5(h}r6(h ]r7(Xros-jade-katana-descriptionr8(assh }r9(h}r:(h ]r;(j8(assuh}r<(h}r=(h ]r>(Xros/jade/katana_driverr?(asshˆh}r@(h}rA(h}rB(h ]rC(j8(asssuXrosserial_serverrD(}rE((h}rF((h}rG(h}rH(h ]rI(Xros-jade-rosserial-serverrJ(assh }rK(h}rL(h ]rM(jJ(assuh}rN(h}rO(h ]rP(Xros/jade/rosserialrQ(asshˆh}rR(h}rS(h}rT(h ]rU(jJ(asssuXrtt_rosgraph_msgsrV(}rW((h}rX((h}rY(h}rZ(h ]r[(Xros-jade-rtt-rosgraph-msgsr\(assh }r](h}r^(h ]r_(j\(assuh}r`(h}ra(h ]rb(Xros/jade/rtt_ros_integrationrc(asshˆh}rd(h}re(h}rf(h ]rg(j\(asssuXpoint_cloud_publisher_tutorialrh(}ri((h}rj((h}rk(h}rl(h ]rm(X'ros-jade-point-cloud-publisher-tutorialrn(assh }ro(h}rp(h ]rq(jn(assuh}rr(h}rs(h ]rt(Xros/jade/navigation_tutorialsru(asshˆh}rv(h}rw(h}rx(h ]ry(jn(asssuX rosnode_rtcrz(}r{((h}r|((h}r}(h}r~(h ]r(Xros-jade-rosnode-rtcr€(assh }r(h}r‚(h ]rƒ(j€(assuh}r„(h}r…(h ]r†(Xros/jade/rtmros_commonr‡(asshˆh}rˆ(h}r‰(h}rŠ(h ]r‹(j€(asssuXresource_retrieverrŒ(}r((h}rŽ((h}r(h}r(h ]r‘(Xros-jade-resource-retrieverr’(assh }r“(h}r”(h ]r•(j’(assuh}r–(h}r—(h ]r˜(Xros/jade/resource_retrieverr™(asshˆh}rš(h}r›(h}rœ(h ]r(j’(asssuX"hector_quadrotor_controller_gazeborž(}rŸ((h}r ((h}r¡(h}r¢(h ]r£(X+ros-jade-hector-quadrotor-controller-gazebor¤(assh }r¥(h}r¦(h ]r§(j¤(assuh}r¨(h}r©(h ]rª(Xros/jade/hector_quadrotorr«(asshˆh}r¬(h}r­(h}r®(h ]r¯(j¤(asssuXsocketcan_bridger°(}r±((h}r²((h}r³(h}r´(h ]rµ(Xros-jade-socketcan-bridger¶(assh }r·(h}r¸(h ]r¹(j¶(assuh}rº(h}r»(h ]r¼(Xros/jade/ros_canopenr½(asshˆh}r¾(h}r¿(h}rÀ(h ]rÁ(j¶(asssuXfetch_descriptionrÂ(}rÃ((h}rÄ((h}rÅ(h}rÆ(h ]rÇ(Xros-jade-fetch-descriptionrÈ(assh }rÉ(h}rÊ(h ]rË(jÈ(assuh}rÌ(h}rÍ(h ]rÎ(Xros/jade/fetch_rosrÏ(asshˆh}rÐ(h}rÑ(h}rÒ(h ]rÓ(jÈ(asssuXrqt_bag_pluginsrÔ(}rÕ((h}rÖ((h}r×(h}rØ(h ]rÙ(Xros-jade-rqt-bag-pluginsrÚ(assh }rÛ(h}rÜ(h ]rÝ(jÚ(assuh}rÞ(h}rß(h ]rà(Xros/jade/rqt_bagrá(asshˆh}râ(h}rã(h}rä(h ]rå(jÚ(asssuXrosemacsræ(}rç((h}rè((h}ré(h}rê(h ]rë(Xros-jade-rosemacsrì(assh }rí(h}rî(h ]rï(jì(assuh}rð(h}rñ(h ]rò(Xros/jade/ros_emacs_utilsró(asshˆh}rô(h}rõ(h}rö(h ]r÷(jì(asssuX rtt_rosnoderø(}rù((h}rú((h}rû(h}rü(h ]rý(Xros-jade-rtt-rosnoderþ(assh }rÿ(h}r)h ]r)jþ(assuh}r)h}r)h ]r)Xros/jade/rtt_ros_integrationr)asshˆh}r)h}r)h}r)h ]r )jþ(asssuXswri_geometry_utilr )}r )(h}r )(h}r )h}r)h ]r)Xros-jade-swri-geometry-utilr)assh }r)h}r)h ]r)j)assuh}r)h}r)h ]r)Xros/jade/marti_commonr)asshˆh}r)h}r)h}r)h ]r)j)asssuXrqt_logger_levelr)}r)(h}r)(h}r)h}r )h ]r!)Xros-jade-rqt-logger-levelr")assh }r#)h}r$)h ]r%)j")assuh}r&)h}r')h ]r()Xros/jade/rqt_logger_levelr))asshˆh}r*)h}r+)h}r,)h ]r-)j")asssuX simple_navigation_goals_tutorialr.)}r/)(h}r0)(h}r1)h}r2)h ]r3)X)ros-jade-simple-navigation-goals-tutorialr4)assh }r5)h}r6)h ]r7)j4)assuh}r8)h}r9)h ]r:)Xros/jade/navigation_tutorialsr;)asshˆh}r<)h}r=)h}r>)h ]r?)j4)asssuXbondr@)}rA)(h}rB)(h}rC)h}rD)h ]rE)X ros-jade-bondrF)assh }rG)h}rH)h ]rI)jF)assuh}rJ)h}rK)h ]rL)Xros/jade/bond_corerM)asshˆh}rN)h}rO)h}rP)h ]rQ)jF)asssuXstdr_simulatorrR)}rS)(h}rT)(h}rU)h}rV)h ]rW)Xros-jade-stdr-simulatorrX)assh }rY)h}rZ)h ]r[)jX)assuh}r\)h}r])h ]r^)Xros/jade/stdr_simulatorr_)asshˆh}r`)h}ra)h}rb)h ]rc)jX)asssuXcl_transforms_stampedrd)}re)(h}rf)(h}rg)h}rh)h ]ri)Xros-jade-cl-transforms-stampedrj)assh }rk)h}rl)h ]rm)jj)assuh}rn)h}ro)h ]rp)Xros/jade/roslisp_commonrq)asshˆh}rr)h}rs)h}rt)h ]ru)jj)asssuXrqt_service_callerrv)}rw)(h}rx)(h}ry)h}rz)h ]r{)Xros-jade-rqt-service-callerr|)assh }r})h}r~)h ]r)j|)assuh}r€)h}r)h ]r‚)Xros/jade/rqt_service_callerrƒ)asshˆh}r„)h}r…)h}r†)h ]r‡)j|)asssuXpepper_bringuprˆ)}r‰)(h}rŠ)(h}r‹)h}rŒ)h ]r)Xros-jade-pepper-bringuprŽ)assh }r)h}r)h ]r‘)jŽ)assuh}r’)h}r“)h ]r”)Xros/jade/pepper_robotr•)asshˆh}r–)h}r—)h}r˜)h ]r™)jŽ)asssuXrosh_visualizationrš)}r›)(h}rœ)(h}r)h}rž)h ]rŸ)Xros-jade-rosh-visualizationr )assh }r¡)h}r¢)h ]r£)j )assuh}r¤)h}r¥)h ]r¦)Xros/jade/rosh_desktop_pluginsr§)asshˆh}r¨)h}r©)h}rª)h ]r«)j )asssuXpr2_mechanism_msgsr¬)}r­)(h}r®)(h}r¯)h}r°)h ]r±)Xros-jade-pr2-mechanism-msgsr²)assh }r³)h}r´)h ]rµ)j²)assuh}r¶)h}r·)h ]r¸)Xros/jade/pr2_mechanism_msgsr¹)asshˆh}rº)h}r»)h}r¼)h ]r½)j²)asssuX stdr_serverr¾)}r¿)(h}rÀ)(h}rÁ)h}rÂ)h ]rÃ)Xros-jade-stdr-serverrÄ)assh }rÅ)h}rÆ)h ]rÇ)jÄ)assuh}rÈ)h}rÉ)h ]rÊ)Xros/jade/stdr_simulatorrË)asshˆh}rÌ)h}rÍ)h}rÎ)h ]rÏ)jÄ)asssuXqt_guirÐ)}rÑ)(h}rÒ)(h}rÓ)h}rÔ)h ]rÕ)Xros-jade-qt-guirÖ)assh }r×)h}rØ)h ]rÙ)jÖ)assuh}rÚ)h}rÛ)h ]rÜ)Xros/jade/qt_gui_corerÝ)asshˆh}rÞ)h}rß)h}rà)h ]rá)jÖ)asssuXrail_pick_and_placerâ)}rã)(h}rä)(h}rå)h}ræ)h ]rç)Xros-jade-rail-pick-and-placerè)assh }ré)h}rê)h ]rë)jè)assuh}rì)h}rí)h ]rî)Xros/jade/rail_pick_and_placerï)asshˆh}rð)h}rñ)h}rò)h ]ró)jè)asssuXimage_transport_pluginsrô)}rõ)(h}rö)(h}r÷)h}rø)h ]rù)X ros-jade-image-transport-pluginsrú)assh }rû)h}rü)h ]rý)jú)assuh}rþ)h}rÿ)h ]r*X ros/jade/image_transport_pluginsr*asshˆh}r*h}r*h}r*h ]r*jú)asssuX eigen_typekitr*}r*(h}r*(h}r *h}r *h ]r *Xros-jade-eigen-typekitr *assh }r *h}r*h ]r*j *assuh}r*h}r*h ]r*Xros/jade/rtt_geometryr*asshˆh}r*h}r*h}r*h ]r*j *asssuXopencv3r*}r*(h}r*(h}r*h}r*h ]r*Xros-jade-opencv3r*assh }r*h}r *h ]r!*j*assuh}r"*h}r#*h ]r$*Xros/jade/opencv3r%*asshˆh}r&*h}r'*h}r(*h ]r)*j*asssuX warehouse_rosr**}r+*(h}r,*(h}r-*h}r.*h ]r/*Xros-jade-warehouse-rosr0*assh }r1*h}r2*h ]r3*j0*assuh}r4*h}r5*h ]r6*Xros/jade/warehouse_rosr7*asshˆh}r8*h}r9*h}r:*h ]r;*j0*asssuX jsk_pr2eusr<*}r=*(h}r>*(h}r?*h}r@*h ]rA*Xros-jade-jsk-pr2eusrB*assh }rC*h}rD*h ]rE*jB*assuh}rF*h}rG*h ]rH*Xros/jade/jsk_pr2eusrI*asshˆh}rJ*h}rK*h}rL*h ]rM*jB*asssuXopenrtm_aist_pythonrN*}rO*(h}rP*(h}rQ*h}rR*h ]rS*Xros-jade-openrtm-aist-pythonrT*assh }rU*h}rV*h ]rW*jT*assuh}rX*h}rY*h ]rZ*Xros/jade/openrtm_aist_pythonr[*asshˆh}r\*h}r]*h}r^*h ]r_*jT*asssuX hector_slamr`*}ra*(h}rb*(h}rc*h}rd*h ]re*Xros-jade-hector-slamrf*assh }rg*h}rh*h ]ri*jf*assuh}rj*h}rk*h ]rl*Xros/jade/hector_slamrm*asshˆh}rn*h}ro*h}rp*h ]rq*jf*asssuXbflrr*}rs*(h}rt*(h}ru*h}rv*h ]rw*X ros-jade-bflrx*assh }ry*h}rz*h ]r{*jx*assuh}r|*h}r}*h ]r~*X ros/jade/bflr*asshˆh}r€*h}r*h}r‚*h ]rƒ*jx*asssuXfetch_navigationr„*}r…*(h}r†*(h}r‡*h}rˆ*h ]r‰*Xros-jade-fetch-navigationrŠ*assh }r‹*h}rŒ*h ]r*jŠ*assuh}rŽ*h}r*h ]r*Xros/jade/fetch_rosr‘*asshˆh}r’*h}r“*h}r”*h ]r•*jŠ*asssuX simple_voicer–*}r—*(h}r˜*(h}r™*h}rš*h ]r›*Xros-jade-simple-voicerœ*assh }r*h}rž*h ]rŸ*jœ*assuh}r *h}r¡*h ]r¢*Xros/jade/simple_voicer£*asshˆh}r¤*h}r¥*h}r¦*h ]r§*jœ*asssuX grasping_msgsr¨*}r©*(h}rª*(h}r«*h}r¬*h ]r­*Xros-jade-grasping-msgsr®*assh }r¯*h}r°*h ]r±*j®*assuh}r²*h}r³*h ]r´*Xros/jade/grasping_msgsrµ*asshˆh}r¶*h}r·*h}r¸*h ]r¹*j®*asssuXgeometry_experimentalrº*}r»*(h}r¼*(h}r½*h}r¾*h ]r¿*Xros-jade-geometry-experimentalrÀ*assh }rÁ*h}rÂ*h ]rÃ*jÀ*assuh}rÄ*h}rÅ*h ]rÆ*Xros/jade/geometry2rÇ*asshˆh}rÈ*h}rÉ*h}rÊ*h ]rË*jÀ*asssuXecl_statisticsrÌ*}rÍ*(h}rÎ*(h}rÏ*h}rÐ*h ]rÑ*Xros-jade-ecl-statisticsrÒ*assh }rÓ*h}rÔ*h ]rÕ*jÒ*assuh}rÖ*h}r×*h ]rØ*Xros/jade/ecl_corerÙ*asshˆh}rÚ*h}rÛ*h}rÜ*h ]rÝ*jÒ*asssuXimu_processorsrÞ*}rß*(h}rà*(h}rá*h}râ*h ]rã*Xros-jade-imu-processorsrä*assh }rå*h}ræ*h ]rç*jä*assuh}rè*h}ré*h ]rê*Xros/jade/imu_pipelinerë*asshˆh}rì*h}rí*h}rî*h ]rï*jä*asssuXcontroller_managerrð*}rñ*(h}rò*(h}ró*h}rô*h ]rõ*Xros-jade-controller-managerrö*assh }r÷*h}rø*h ]rù*jö*assuh}rú*h}rû*h ]rü*Xros/jade/ros_controlrý*asshˆh}rþ*h}rÿ*h}r+h ]r+jö*asssuX openni_launchr+}r+(h}r+(h}r+h}r+h ]r+Xros-jade-openni-launchr+assh }r +h}r +h ]r +j+assuh}r +h}r +h ]r+Xros/jade/openni_launchr+asshˆh}r+h}r+h}r+h ]r+j+asssuXhector_imu_toolsr+}r+(h}r+(h}r+h}r+h ]r+Xros-jade-hector-imu-toolsr+assh }r+h}r+h ]r+j+assuh}r+h}r+h ]r +Xros/jade/hector_slamr!+asshˆh}r"+h}r#+h}r$+h ]r%+j+asssuX youbot_driverr&+}r'+(h}r(+(h}r)+h}r*+h ]r++Xros-jade-youbot-driverr,+assh }r-+h}r.+h ]r/+j,+assuh}r0+h}r1+h ]r2+Xros/jade/youbot_driverr3+asshˆh}r4+h}r5+h}r6+h ]r7+j,+asssuXhector_imu_attitude_to_tfr8+}r9+(h}r:+(h}r;+h}r<+h ]r=+X"ros-jade-hector-imu-attitude-to-tfr>+assh }r?+h}r@+h ]rA+j>+assuh}rB+h}rC+h ]rD+Xros/jade/hector_slamrE+asshˆh}rF+h}rG+h}rH+h ]rI+j>+asssuXrqt_image_viewrJ+}rK+(h}rL+(h}rM+h}rN+h ]rO+Xros-jade-rqt-image-viewrP+assh }rQ+h}rR+h ]rS+jP+assuh}rT+h}rU+h ]rV+Xros/jade/rqt_image_viewrW+asshˆh}rX+h}rY+h}rZ+h ]r[+jP+asssuX libphidget21r\+}r]+(h}r^+(h}r_+h}r`+h ]ra+Xros-jade-libphidget21rb+assh }rc+h}rd+h ]re+jb+assuh}rf+h}rg+h ]rh+Xros/jade/phidgets_driversri+asshˆh}rj+h}rk+h}rl+h ]rm+jb+asssuXnav_corern+}ro+(h}rp+(h}rq+h}rr+h ]rs+Xros-jade-nav-corert+assh }ru+h}rv+h ]rw+jt+assuh}rx+h}ry+h ]rz+Xros/jade/navigationr{+asshˆh}r|+h}r}+h}r~+h ]r+jt+asssuXdesktopr€+}r+(h}r‚+(h}rƒ+h}r„+h ]r…+Xros-jade-desktopr†+assh }r‡+h}rˆ+h ]r‰+j†+assuh}rŠ+h}r‹+h ]rŒ+Xros/jade/metapackagesr+asshˆh}rŽ+h}r+h}r+h ]r‘+j†+asssuX ecl_errorsr’+}r“+(h}r”+(h}r•+h}r–+h ]r—+Xros-jade-ecl-errorsr˜+assh }r™+h}rš+h ]r›+j˜+assuh}rœ+h}r+h ]rž+Xros/jade/ecl_literŸ+asshˆh}r +h}r¡+h}r¢+h ]r£+j˜+asssuXmln_robosherlock_msgsr¤+}r¥+(h}r¦+(h}r§+h}r¨+h ]r©+Xros-jade-mln-robosherlock-msgsrª+assh }r«+h}r¬+h ]r­+jª+assuh}r®+h}r¯+h ]r°+Xros/jade/iai_common_msgsr±+asshˆh}r²+h}r³+h}r´+h ]rµ+jª+asssuX gpsd_clientr¶+}r·+(h}r¸+(h}r¹+h}rº+h ]r»+Xros-jade-gpsd-clientr¼+assh }r½+h}r¾+h ]r¿+j¼+assuh}rÀ+h}rÁ+h ]rÂ+Xros/jade/gps_umdrÃ+asshˆh}rÄ+h}rÅ+h}rÆ+h ]rÇ+j¼+asssuXpcl_conversionsrÈ+}rÉ+(h}rÊ+(h}rË+h}rÌ+h ]rÍ+Xros-jade-pcl-conversionsrÎ+assh }rÏ+h}rÐ+h ]rÑ+jÎ+assuh}rÒ+h}rÓ+h ]rÔ+Xros/jade/pcl_conversionsrÕ+asshˆh}rÖ+h}r×+h}rØ+h ]rÙ+jÎ+asssuXfetch_ikfast_pluginrÚ+}rÛ+(h}rÜ+(h}rÝ+h}rÞ+h ]rß+Xros-jade-fetch-ikfast-pluginrà+assh }rá+h}râ+h ]rã+jà+assuh}rä+h}rå+h ]ræ+Xros/jade/fetch_rosrç+asshˆh}rè+h}ré+h}rê+h ]rë+jà+asssuXhector_quadrotor_modelrì+}rí+(h}rî+(h}rï+h}rð+h ]rñ+Xros-jade-hector-quadrotor-modelrò+assh }ró+h}rô+h ]rõ+jò+assuh}rö+h}r÷+h ]rø+Xros/jade/hector_quadrotorrù+asshˆh}rú+h}rû+h}rü+h ]rý+jò+asssuX explore_literþ+}rÿ+(h}r,(h}r,h}r,h ]r,Xros-jade-explore-liter,assh }r,h}r,h ]r,j,assuh}r,h}r ,h ]r ,Xros/jade/m_explorer ,asshˆh}r ,h}r ,h}r,h ]r,j,asssuXhector_gazebo_worldsr,}r,(h}r,(h}r,h}r,h ]r,Xros-jade-hector-gazebo-worldsr,assh }r,h}r,h ]r,j,assuh}r,h}r,h ]r,Xros/jade/hector_gazebor,asshˆh}r,h}r,h}r ,h ]r!,j,asssuXasync_web_server_cppr",}r#,(h}r$,(h}r%,h}r&,h ]r',Xros-jade-async-web-server-cppr(,assh }r),h}r*,h ]r+,j(,assuh}r,,h}r-,h ]r.,Xros/jade/async_web_server_cppr/,asshˆh}r0,h}r1,h}r2,h ]r3,j(,asssuXimage_transportr4,}r5,(h}r6,(h}r7,h}r8,h ]r9,Xros-jade-image-transportr:,assh }r;,h}r<,h ]r=,j:,assuh}r>,h}r?,h ]r@,Xros/jade/image_commonrA,asshˆh}rB,h}rC,h}rD,h ]rE,j:,asssuX spacenav_noderF,}rG,(h}rH,(h}rI,h}rJ,h ]rK,Xros-jade-spacenav-noderL,assh }rM,h}rN,h ]rO,jL,assuh}rP,h}rQ,h ]rR,Xros/jade/joystick_driversrS,asshˆh}rT,h}rU,h}rV,h ]rW,jL,asssuXbackports_ssl_match_hostnamerX,}rY,(h}rZ,(h}r[,h}r\,h ]r],X%ros-jade-backports-ssl-match-hostnamer^,assh }r_,h}r`,h ]ra,j^,assuh}rb,h}rc,h ]rd,X%ros/jade/backports_ssl_match_hostnamere,asshˆh}rf,h}rg,h}rh,h ]ri,j^,asssuX p2os_urdfrj,}rk,(h}rl,(h}rm,h}rn,h ]ro,Xros-jade-p2os-urdfrp,assh }rq,h}rr,h ]rs,jp,assuh}rt,h}ru,h ]rv,X ros/jade/p2osrw,asshˆh}rx,h}ry,h}rz,h ]r{,jp,asssuXgsdr|,}r},(h}r~,(h}r,h}r€,h ]r,X ros-jade-gsdr‚,assh }rƒ,h}r„,h ]r…,j‚,assuh}r†,h}r‡,h ]rˆ,Xros/jade/cram_3rdpartyr‰,asshˆh}rŠ,h}r‹,h}rŒ,h ]r,j‚,asssuX orocos_kdlrŽ,}r,(h}r,(h}r‘,h}r’,h ]r“,Xros-jade-orocos-kdlr”,assh }r•,h}r–,h ]r—,j”,assuh}r˜,h}r™,h ]rš,X#ros/jade/orocos_kinematics_dynamicsr›,asshˆh}rœ,h}r,h}rž,h ]rŸ,j”,asssuXobject_recognition_msgsr ,}r¡,(h}r¢,(h}r£,h}r¤,h ]r¥,X ros-jade-object-recognition-msgsr¦,assh }r§,h}r¨,h ]r©,j¦,assuh}rª,h}r«,h ]r¬,X ros/jade/object_recognition_msgsr­,asshˆh}r®,h}r¯,h}r°,h ]r±,j¦,asssuX joy_teleopr²,}r³,(h}r´,(h}rµ,h}r¶,h ]r·,Xros-jade-joy-teleopr¸,assh }r¹,h}rº,h ]r»,j¸,assuh}r¼,h}r½,h ]r¾,Xros/jade/teleop_toolsr¿,asshˆh}rÀ,h}rÁ,h}rÂ,h ]rÃ,j¸,asssuXrqtrÄ,}rÅ,(h}rÆ,(h}rÇ,h}rÈ,h ]rÉ,X ros-jade-rqtrÊ,assh }rË,h}rÌ,h ]rÍ,jÊ,assuh}rÎ,h}rÏ,h ]rÐ,X ros/jade/rqtrÑ,asshˆh}rÒ,h}rÓ,h}rÔ,h ]rÕ,jÊ,asssuX openrtm_aistrÖ,}r×,(h}rØ,(h}rÙ,h}rÚ,h ]rÛ,Xros-jade-openrtm-aistrÜ,assh }rÝ,h}rÞ,h ]rß,jÜ,assuh}rà,h}rá,h ]râ,Xros/jade/openrtm_aistrã,asshˆh}rä,h}rå,h}ræ,h ]rç,jÜ,asssuX mongodb_storerè,}ré,(h}rê,(h}rë,h}rì,h ]rí,Xros-jade-mongodb-storerî,assh }rï,h}rð,h ]rñ,jî,assuh}rò,h}ró,h ]rô,Xros/jade/mongodb_storerõ,asshˆh}rö,h}r÷,h}rø,h ]rù,jî,asssuX cmake_modulesrú,}rû,(h}rü,(h}rý,h}rþ,h ]rÿ,Xros-jade-cmake-modulesr-assh }r-h}r-h ]r-j-assuh}r-h}r-h ]r-Xros/jade/cmake_modulesr-asshˆh}r-h}r -h}r -h ]r -j-asssuXrqt_msgr -}r -(h}r-(h}r-h}r-h ]r-Xros-jade-rqt-msgr-assh }r-h}r-h ]r-j-assuh}r-h}r-h ]r-Xros/jade/rqt_msgr-asshˆh}r-h}r-h}r-h ]r-j-asssuXvisp_auto_trackerr-}r-(h}r -(h}r!-h}r"-h ]r#-Xros-jade-visp-auto-trackerr$-assh }r%-h}r&-h ]r'-j$-assuh}r(-h}r)-h ]r*-Xros/jade/vision_vispr+-asshˆh}r,-h}r--h}r.-h ]r/-j$-asssuXrqt_webr0-}r1-(h}r2-(h}r3-h}r4-h ]r5-Xros-jade-rqt-webr6-assh }r7-h}r8-h ]r9-j6-assuh}r:-h}r;-h ]r<-Xros/jade/rqt_webr=-asshˆh}r>-h}r?-h}r@-h ]rA-j6-asssuX iot_bridgerB-}rC-(h}rD-(h}rE-h}rF-h ]rG-Xros-jade-iot-bridgerH-assh }rI-h}rJ-h ]rK-jH-assuh}rL-h}rM-h ]rN-Xros/jade/iot_bridgerO-asshˆh}rP-h}rQ-h}rR-h ]rS-jH-asssuX stdr_robotrT-}rU-(h}rV-(h}rW-h}rX-h ]rY-Xros-jade-stdr-robotrZ-assh }r[-h}r\-h ]r]-jZ-assuh}r^-h}r_-h ]r`-Xros/jade/stdr_simulatorra-asshˆh}rb-h}rc-h}rd-h ]re-jZ-asssuX pddl_msgsrf-}rg-(h}rh-(h}ri-h}rj-h ]rk-Xros-jade-pddl-msgsrl-assh }rm-h}rn-h ]ro-jl-assuh}rp-h}rq-h ]rr-Xros/jade/jsk_planningrs-asshˆh}rt-h}ru-h}rv-h ]rw-jl-asssuX hokuyo_noderx-}ry-(h}rz-(h}r{-h}r|-h ]r}-Xros-jade-hokuyo-noder~-assh }r-h}r€-h ]r-j~-assuh}r‚-h}rƒ-h ]r„-Xros/jade/hokuyo_noder…-asshˆh}r†-h}r‡-h}rˆ-h ]r‰-j~-asssuXfreight_calibrationrŠ-}r‹-(h}rŒ-(h}r-h}rŽ-h ]r-Xros-jade-freight-calibrationr-assh }r‘-h}r’-h ]r“-j-assuh}r”-h}r•-h ]r–-Xros/jade/fetch_rosr—-asshˆh}r˜-h}r™-h}rš-h ]r›-j-asssuXrosoutrœ-}r-(h}rž-(h}rŸ-h}r -h ]r¡-Xros-jade-rosoutr¢-assh }r£-h}r¤-h ]r¥-j¢-assuh}r¦-h}r§-h ]r¨-Xros/jade/ros_commr©-asshˆh}rª-h}r«-h}r¬-h ]r­-j¢-asssuXrobot_calibration_msgsr®-}r¯-(h}r°-(h}r±-h}r²-h ]r³-Xros-jade-robot-calibration-msgsr´-assh }rµ-h}r¶-h ]r·-j´-assuh}r¸-h}r¹-h ]rº-Xros/jade/robot_calibrationr»-asshˆh}r¼-h}r½-h}r¾-h ]r¿-j´-asssuX actionlibrÀ-}rÁ-(h}rÂ-(h}rÃ-h}rÄ-h ]rÅ-Xros-jade-actionlibrÆ-assh }rÇ-h}rÈ-h ]rÉ-jÆ-assuh}rÊ-h}rË-h ]rÌ-Xros/jade/actionlibrÍ-asshˆh}rÎ-h}rÏ-h}rÐ-h ]rÑ-jÆ-asssuXroseus_tutorialsrÒ-}rÓ-(h}rÔ-(h}rÕ-h}rÖ-h ]r×-Xros-jade-roseus-tutorialsrØ-assh }rÙ-h}rÚ-h ]rÛ-jØ-assuh}rÜ-h}rÝ-h ]rÞ-Xros/jade/jsk_roseusrß-asshˆh}rà-h}rá-h}râ-h ]rã-jØ-asssuXforward_command_controllerrä-}rå-(h}ræ-(h}rç-h}rè-h ]ré-X#ros-jade-forward-command-controllerrê-assh }rë-h}rì-h ]rí-jê-assuh}rî-h}rï-h ]rð-Xros/jade/ros_controllersrñ-asshˆh}rò-h}ró-h}rô-h ]rõ-jê-asssuXcalibration_estimationrö-}r÷-(h}rø-(h}rù-h}rú-h ]rû-Xros-jade-calibration-estimationrü-assh }rý-h}rþ-h ]rÿ-jü-assuh}r.h}r.h ]r.Xros/jade/calibrationr.asshˆh}r.h}r.h}r.h ]r.jü-asssuXrotors_controlr.}r .(h}r .(h}r .h}r .h ]r .Xros-jade-rotors-controlr.assh }r.h}r.h ]r.j.assuh}r.h}r.h ]r.Xros/jade/rotors_simulatorr.asshˆh}r.h}r.h}r.h ]r.j.asssuX cram_3rdpartyr.}r.(h}r.(h}r.h}r.h ]r.Xros-jade-cram-3rdpartyr .assh }r!.h}r".h ]r#.j .assuh}r$.h}r%.h ]r&.Xros/jade/cram_3rdpartyr'.asshˆh}r(.h}r).h}r*.h ]r+.j .asssuXeuslispr,.}r-.(h}r..(h}r/.h}r0.h ]r1.Xros-jade-euslispr2.assh }r3.h}r4.h ]r5.j2.assuh}r6.h}r7.h ]r8.Xros/jade/euslispr9.asshˆh}r:.h}r;.h}r<.h ]r=.j2.asssuXimage_pipeliner>.}r?.(h}r@.(h}rA.h}rB.h ]rC.Xros-jade-image-pipelinerD.assh }rE.h}rF.h ]rG.jD.assuh}rH.h}rI.h ]rJ.Xros/jade/image_pipelinerK.asshˆh}rL.h}rM.h}rN.h ]rO.jD.asssuXmrpt_navigationrP.}rQ.(h}rR.(h}rS.h}rT.h ]rU.Xros-jade-mrpt-navigationrV.assh }rW.h}rX.h ]rY.jV.assuh}rZ.h}r[.h ]r\.Xros/jade/mrpt_navigationr].asshˆh}r^.h}r_.h}r`.h ]ra.jV.asssuXrostestrb.}rc.(h}rd.(h}re.h}rf.h ]rg.Xros-jade-rostestrh.assh }ri.h}rj.h ]rk.jh.assuh}rl.h}rm.h ]rn.Xros/jade/ros_commro.asshˆh}rp.h}rq.h}rr.h ]rs.jh.asssuXmoveit_ros_manipulationrt.}ru.(h}rv.(h}rw.h}rx.h ]ry.X ros-jade-moveit-ros-manipulationrz.assh }r{.h}r|.h ]r}.jz.assuh}r~.h}r.h ]r€.Xros/jade/moveitr.asshˆh}r‚.h}rƒ.h}r„.h ]r….jz.asssuX roscpp_traitsr†.}r‡.(h}rˆ.(h}r‰.h}rŠ.h ]r‹.Xros-jade-roscpp-traitsrŒ.assh }r.h}rŽ.h ]r.jŒ.assuh}r.h}r‘.h ]r’.Xros/jade/roscpp_corer“.asshˆh}r”.h}r•.h}r–.h ]r—.jŒ.asssuX julius_rosr˜.}r™.(h}rš.(h}r›.h}rœ.h ]r.Xros-jade-julius-rosrž.assh }rŸ.h}r .h ]r¡.jž.assuh}r¢.h}r£.h ]r¤.Xros/jade/jsk_3rdpartyr¥.asshˆh}r¦.h}r§.h}r¨.h ]r©.jž.asssuXgenlisprª.}r«.(h}r¬.(h}r­.h}r®.h ]r¯.Xros-jade-genlispr°.assh }r±.h}r².h ]r³.j°.assuh}r´.h}rµ.h ]r¶.Xros/jade/genlispr·.asshˆh}r¸.h}r¹.h}rº.h ]r».j°.asssuXnao_descriptionr¼.}r½.(h}r¾.(h}r¿.h}rÀ.h ]rÁ.Xros-jade-nao-descriptionrÂ.assh }rÃ.h}rÄ.h ]rÅ.jÂ.assuh}rÆ.h}rÇ.h ]rÈ.Xros/jade/nao_robotrÉ.asshˆh}rÊ.h}rË.h}rÌ.h ]rÍ.jÂ.asssuXhector_geotiffrÎ.}rÏ.(h}rÐ.(h}rÑ.h}rÒ.h ]rÓ.Xros-jade-hector-geotiffrÔ.assh }rÕ.h}rÖ.h ]r×.jÔ.assuh}rØ.h}rÙ.h ]rÚ.Xros/jade/hector_slamrÛ.asshˆh}rÜ.h}rÝ.h}rÞ.h ]rß.jÔ.asssuXgeodesyrà.}rá.(h}râ.(h}rã.h}rä.h ]rå.Xros-jade-geodesyræ.assh }rç.h}rè.h ]ré.jæ.assuh}rê.h}rë.h ]rì.Xros/jade/geographic_inforí.asshˆh}rî.h}rï.h}rð.h ]rñ.jæ.asssuXhokuyo3drò.}ró.(h}rô.(h}rõ.h}rö.h ]r÷.Xros-jade-hokuyo3drø.assh }rù.h}rú.h ]rû.jø.assuh}rü.h}rý.h ]rþ.Xros/jade/hokuyo3drÿ.asshˆh}r/h}r/h}r/h ]r/jø.asssuXforce_torque_sensor_calibr/}r/(h}r/(h}r/h}r/h ]r /X"ros-jade-force-torque-sensor-calibr /assh }r /h}r /h ]r /j /assuh}r/h}r/h ]r/Xros/jade/force_torque_toolsr/asshˆh}r/h}r/h}r/h ]r/j /asssuX mrpt_slamr/}r/(h}r/(h}r/h}r/h ]r/Xros-jade-mrpt-slamr/assh }r/h}r/h ]r/j/assuh}r /h}r!/h ]r"/Xros/jade/mrpt_slamr#/asshˆh}r$/h}r%/h}r&/h ]r'/j/asssuXecl_manipulationr(/}r)/(h}r*/(h}r+/h}r,/h ]r-/Xros-jade-ecl-manipulationr./assh }r//h}r0/h ]r1/j./assuh}r2/h}r3/h ]r4/Xros/jade/ecl_manipulationr5/asshˆh}r6/h}r7/h}r8/h ]r9/j./asssuXusb_camr:/}r;/(h}r/h ]r?/Xros-jade-usb-camr@/assh }rA/h}rB/h ]rC/j@/assuh}rD/h}rE/h ]rF/Xros/jade/usb_camrG/asshˆh}rH/h}rI/h}rJ/h ]rK/j@/asssuX plotjugglerrL/}rM/(h}rN/(h}rO/h}rP/h ]rQ/Xros-jade-plotjugglerrR/assh }rS/h}rT/h ]rU/jR/assuh}rV/h}rW/h ]rX/Xros/jade/plotjugglerrY/asshˆh}rZ/h}r[/h}r\/h ]r]/jR/asssuX schunk_pg70r^/}r_/(h}r`/(h}ra/h}rb/h ]rc/Xros-jade-schunk-pg70rd/assh }re/h}rf/h ]rg/jd/assuh}rh/h}ri/h ]rj/Xros/jade/schunk_grippersrk/asshˆh}rl/h}rm/h}rn/h ]ro/jd/asssuXgeographic_msgsrp/}rq/(h}rr/(h}rs/h}rt/h ]ru/Xros-jade-geographic-msgsrv/assh }rw/h}rx/h ]ry/jv/assuh}rz/h}r{/h ]r|/Xros/jade/geographic_infor}/asshˆh}r~/h}r/h}r€/h ]r/jv/asssuXrospeex_webaudiomonitorr‚/}rƒ/(h}r„/(h}r…/h}r†/h ]r‡/X ros-jade-rospeex-webaudiomonitorrˆ/assh }r‰/h}rŠ/h ]r‹/jˆ/assuh}rŒ/h}r/h ]rŽ/Xros/jade/rospeexr/asshˆh}r/h}r‘/h}r’/h ]r“/jˆ/asssuXhector_worldmodelr”/}r•/(h}r–/(h}r—/h}r˜/h ]r™/Xros-jade-hector-worldmodelrš/assh }r›/h}rœ/h ]r/jš/assuh}rž/h}rŸ/h ]r /Xros/jade/hector_worldmodelr¡/asshˆh}r¢/h}r£/h}r¤/h ]r¥/jš/asssuXrobot_mechanism_controllersr¦/}r§/(h}r¨/(h}r©/h}rª/h ]r«/X$ros-jade-robot-mechanism-controllersr¬/assh }r­/h}r®/h ]r¯/j¬/assuh}r°/h}r±/h ]r²/Xros/jade/pr2_controllersr³/asshˆh}r´/h}rµ/h}r¶/h ]r·/j¬/asssuXmoveitr¸/}r¹/(h}rº/(h}r»/h}r¼/h ]r½/Xros-jade-moveitr¾/assh }r¿/h}rÀ/h ]rÁ/j¾/assuh}rÂ/h}rÃ/h ]rÄ/Xros/jade/moveitrÅ/asshˆh}rÆ/h}rÇ/h}rÈ/h ]rÉ/j¾/asssuX nodelet_corerÊ/}rË/(h}rÌ/(h}rÍ/h}rÎ/h ]rÏ/Xros-jade-nodelet-corerÐ/assh }rÑ/h}rÒ/h ]rÓ/jÐ/assuh}rÔ/h}rÕ/h ]rÖ/Xros/jade/nodelet_corer×/asshˆh}rØ/h}rÙ/h}rÚ/h ]rÛ/jÐ/asssuXrosh_robot_pluginsrÜ/}rÝ/(h}rÞ/(h}rß/h}rà/h ]rá/Xros-jade-rosh-robot-pluginsrâ/assh }rã/h}rä/h ]rå/jâ/assuh}ræ/h}rç/h ]rè/Xros/jade/rosh_robot_pluginsré/asshˆh}rê/h}rë/h}rì/h ]rí/jâ/asssuX mrpt_rawlogrî/}rï/(h}rð/(h}rñ/h}rò/h ]ró/Xros-jade-mrpt-rawlogrô/assh }rõ/h}rö/h ]r÷/jô/assuh}rø/h}rù/h ]rú/Xros/jade/mrpt_navigationrû/asshˆh}rü/h}rý/h}rþ/h ]rÿ/jô/asssuXrqt_ez_publisherr0}r0(h}r0(h}r0h}r0h ]r0Xros-jade-rqt-ez-publisherr0assh }r0h}r0h ]r 0j0assuh}r 0h}r 0h ]r 0Xros/jade/rqt_ez_publisherr 0asshˆh}r0h}r0h}r0h ]r0j0asssuXgsllr0}r0(h}r0(h}r0h}r0h ]r0X ros-jade-gsllr0assh }r0h}r0h ]r0j0assuh}r0h}r0h ]r0Xros/jade/cram_3rdpartyr0asshˆh}r 0h}r!0h}r"0h ]r#0j0asssuXjsk_teleop_joyr$0}r%0(h}r&0(h}r'0h}r(0h ]r)0Xros-jade-jsk-teleop-joyr*0assh }r+0h}r,0h ]r-0j*0assuh}r.0h}r/0h ]r00Xros/jade/jsk_controlr10asshˆh}r20h}r30h}r40h ]r50j*0asssuXrtt_diagnostic_msgsr60}r70(h}r80(h}r90h}r:0h ]r;0Xros-jade-rtt-diagnostic-msgsr<0assh }r=0h}r>0h ]r?0j<0assuh}r@0h}rA0h ]rB0Xros/jade/rtt_ros_integrationrC0asshˆh}rD0h}rE0h}rF0h ]rG0j<0asssuXgazebo_ros_pkgsrH0}rI0(h}rJ0(h}rK0h}rL0h ]rM0Xros-jade-gazebo-ros-pkgsrN0assh }rO0h}rP0h ]rQ0jN0assuh}rR0h}rS0h ]rT0Xros/jade/gazebo_ros_pkgsrU0asshˆh}rV0h}rW0h}rX0h ]rY0jN0asssuX rail_mapsrZ0}r[0(h}r\0(h}r]0h}r^0h ]r_0Xros-jade-rail-mapsr`0assh }ra0h}rb0h ]rc0j`0assuh}rd0h}re0h ]rf0Xros/jade/rail_mapsrg0asshˆh}rh0h}ri0h}rj0h ]rk0j`0asssuX rqt_moveitrl0}rm0(h}rn0(h}ro0h}rp0h ]rq0Xros-jade-rqt-moveitrr0assh }rs0h}rt0h ]ru0jr0assuh}rv0h}rw0h ]rx0Xros/jade/rqt_moveitry0asshˆh}rz0h}r{0h}r|0h ]r}0jr0asssuX imagezero_rosr~0}r0(h}r€0(h}r0h}r‚0h ]rƒ0Xros-jade-imagezero-rosr„0assh }r…0h}r†0h ]r‡0j„0assuh}rˆ0h}r‰0h ]rŠ0Xros/jade/imagezero_transportr‹0asshˆh}rŒ0h}r0h}rŽ0h ]r0j„0asssuX jsk_hark_msgsr0}r‘0(h}r’0(h}r“0h}r”0h ]r•0Xros-jade-jsk-hark-msgsr–0assh }r—0h}r˜0h ]r™0j–0assuh}rš0h}r›0h ]rœ0Xros/jade/jsk_common_msgsr0asshˆh}rž0h}rŸ0h}r 0h ]r¡0j–0asssuXpeople_tracking_filterr¢0}r£0(h}r¤0(h}r¥0h}r¦0h ]r§0Xros-jade-people-tracking-filterr¨0assh }r©0h}rª0h ]r«0j¨0assuh}r¬0h}r­0h ]r®0Xros/jade/peopler¯0asshˆh}r°0h}r±0h}r²0h ]r³0j¨0asssuXnao_interactionr´0}rµ0(h}r¶0(h}r·0h}r¸0h ]r¹0Xros-jade-nao-interactionrº0assh }r»0h}r¼0h ]r½0jº0assuh}r¾0h}r¿0h ]rÀ0Xros/jade/nao_interactionrÁ0asshˆh}rÂ0h}rÃ0h}rÄ0h ]rÅ0jº0asssuXlaser_scan_sparsifierrÆ0}rÇ0(h}rÈ0(h}rÉ0h}rÊ0h ]rË0Xros-jade-laser-scan-sparsifierrÌ0assh }rÍ0h}rÎ0h ]rÏ0jÌ0assuh}rÐ0h}rÑ0h ]rÒ0Xros/jade/scan_toolsrÓ0asshˆh}rÔ0h}rÕ0h}rÖ0h ]r×0jÌ0asssuXjsk_rqt_pluginsrØ0}rÙ0(h}rÚ0(h}rÛ0h}rÜ0h ]rÝ0Xros-jade-jsk-rqt-pluginsrÞ0assh }rß0h}rà0h ]rá0jÞ0assuh}râ0h}rã0h ]rä0Xros/jade/jsk_visualizationrå0asshˆh}ræ0h}rç0h}rè0h ]ré0jÞ0asssuX rtt_rosparamrê0}rë0(h}rì0(h}rí0h}rî0h ]rï0Xros-jade-rtt-rosparamrð0assh }rñ0h}rò0h ]ró0jð0assuh}rô0h}rõ0h ]rö0Xros/jade/rtt_ros_integrationr÷0asshˆh}rø0h}rù0h}rú0h ]rû0jð0asssuXindustrial_robot_clientrü0}rý0(h}rþ0(h}rÿ0h}r1h ]r1X ros-jade-industrial-robot-clientr1assh }r1h}r1h ]r1j1assuh}r1h}r1h ]r1Xros/jade/industrial_corer 1asshˆh}r 1h}r 1h}r 1h ]r 1j1asssuXsimple_graspingr1}r1(h}r1(h}r1h}r1h ]r1Xros-jade-simple-graspingr1assh }r1h}r1h ]r1j1assuh}r1h}r1h ]r1Xros/jade/simple_graspingr1asshˆh}r1h}r1h}r1h ]r1j1asssuXrospeex_launchr 1}r!1(h}r"1(h}r#1h}r$1h ]r%1Xros-jade-rospeex-launchr&1assh }r'1h}r(1h ]r)1j&1assuh}r*1h}r+1h ]r,1Xros/jade/rospeexr-1asshˆh}r.1h}r/1h}r01h ]r11j&1asssuX rosdiagnosticr21}r31(h}r41(h}r51h}r61h ]r71Xros-jade-rosdiagnosticr81assh }r91h}r:1h ]r;1j81assuh}r<1h}r=1h ]r>1Xros/jade/diagnosticsr?1asshˆh}r@1h}rA1h}rB1h ]rC1j81asssuXvelodyne_simulatorrD1}rE1(h}rF1(h}rG1h}rH1h ]rI1Xros-jade-velodyne-simulatorrJ1assh }rK1h}rL1h ]rM1jJ1assuh}rN1h}rO1h ]rP1Xros/jade/velodyne_simulatorrQ1asshˆh}rR1h}rS1h}rT1h ]rU1jJ1asssuXaudio_common_msgsrV1}rW1(h}rX1(h}rY1h}rZ1h ]r[1Xros-jade-audio-common-msgsr\1assh }r]1h}r^1h ]r_1j\1assuh}r`1h}ra1h ]rb1Xros/jade/audio_commonrc1asshˆh}rd1h}re1h}rf1h ]rg1j\1asssuX camera_umdrh1}ri1(h}rj1(h}rk1h}rl1h ]rm1Xros-jade-camera-umdrn1assh }ro1h}rp1h ]rq1jn1assuh}rr1h}rs1h ]rt1Xros/jade/camera_umdru1asshˆh}rv1h}rw1h}rx1h ]ry1jn1asssuXfetch_depth_layerrz1}r{1(h}r|1(h}r}1h}r~1h ]r1Xros-jade-fetch-depth-layerr€1assh }r1h}r‚1h ]rƒ1j€1assuh}r„1h}r…1h ]r†1Xros/jade/fetch_rosr‡1asshˆh}rˆ1h}r‰1h}rŠ1h ]r‹1j€1asssuXimage_cb_detectorrŒ1}r1(h}rŽ1(h}r1h}r1h ]r‘1Xros-jade-image-cb-detectorr’1assh }r“1h}r”1h ]r•1j’1assuh}r–1h}r—1h ]r˜1Xros/jade/calibrationr™1asshˆh}rš1h}r›1h}rœ1h ]r1j’1asssuX ecl_toolsrž1}rŸ1(h}r 1(h}r¡1h}r¢1h ]r£1Xros-jade-ecl-toolsr¤1assh }r¥1h}r¦1h ]r§1j¤1assuh}r¨1h}r©1h ]rª1Xros/jade/ecl_toolsr«1asshˆh}r¬1h}r­1h}r®1h ]r¯1j¤1asssuX rosh_desktopr°1}r±1(h}r²1(h}r³1h}r´1h ]rµ1Xros-jade-rosh-desktopr¶1assh }r·1h}r¸1h ]r¹1j¶1assuh}rº1h}r»1h ]r¼1Xros/jade/rosh_desktop_pluginsr½1asshˆh}r¾1h}r¿1h}rÀ1h ]rÁ1j¶1asssuXsbplrÂ1}rÃ1(h}rÄ1(h}rÅ1h}rÆ1h ]rÇ1X ros-jade-sbplrÈ1assh }rÉ1h}rÊ1h ]rË1jÈ1assuh}rÌ1h}rÍ1h ]rÎ1X ros/jade/sbplrÏ1asshˆh}rÐ1h}rÑ1h}rÒ1h ]rÓ1jÈ1asssuXteb_local_plannerrÔ1}rÕ1(h}rÖ1(h}r×1h}rØ1h ]rÙ1Xros-jade-teb-local-plannerrÚ1assh }rÛ1h}rÜ1h ]rÝ1jÚ1assuh}rÞ1h}rß1h ]rà1Xros/jade/teb_local_plannerrá1asshˆh}râ1h}rã1h}rä1h ]rå1jÚ1asssuX nao_robotræ1}rç1(h}rè1(h}ré1h}rê1h ]rë1Xros-jade-nao-robotrì1assh }rí1h}rî1h ]rï1jì1assuh}rð1h}rñ1h ]rò1Xros/jade/nao_robotró1asshˆh}rô1h}rõ1h}rö1h ]r÷1jì1asssuX ecl_devicesrø1}rù1(h}rú1(h}rû1h}rü1h ]rý1Xros-jade-ecl-devicesrþ1assh }rÿ1h}r2h ]r2jþ1assuh}r2h}r2h ]r2Xros/jade/ecl_corer2asshˆh}r2h}r2h}r2h ]r 2jþ1asssuX romeo_bringupr 2}r 2(h}r 2(h}r 2h}r2h ]r2Xros-jade-romeo-bringupr2assh }r2h}r2h ]r2j2assuh}r2h}r2h ]r2Xros/jade/romeo_robotr2asshˆh}r2h}r2h}r2h ]r2j2asssuXecl_corer2}r2(h}r2(h}r2h}r 2h ]r!2Xros-jade-ecl-corer"2assh }r#2h}r$2h ]r%2j"2assuh}r&2h}r'2h ]r(2Xros/jade/ecl_corer)2asshˆh}r*2h}r+2h}r,2h ]r-2j"2asssuX canopen_402r.2}r/2(h}r02(h}r12h}r22h ]r32Xros-jade-canopen-402r42assh }r52h}r62h ]r72j42assuh}r82h}r92h ]r:2Xros/jade/ros_canopenr;2asshˆh}r<2h}r=2h}r>2h ]r?2j42asssuXteleop_twist_keyboardr@2}rA2(h}rB2(h}rC2h}rD2h ]rE2Xros-jade-teleop-twist-keyboardrF2assh }rG2h}rH2h ]rI2jF2assuh}rJ2h}rK2h ]rL2Xros/jade/teleop_twist_keyboardrM2asshˆh}rN2h}rO2h}rP2h ]rQ2jF2asssuXinterval_intersectionrR2}rS2(h}rT2(h}rU2h}rV2h ]rW2Xros-jade-interval-intersectionrX2assh }rY2h}rZ2h ]r[2jX2assuh}r\2h}r]2h ]r^2Xros/jade/calibrationr_2asshˆh}r`2h}ra2h}rb2h ]rc2jX2asssuXjoint_state_publisherrd2}re2(h}rf2(h}rg2h}rh2h ]ri2Xros-jade-joint-state-publisherrj2assh }rk2h}rl2h ]rm2jj2assuh}rn2h}ro2h ]rp2Xros/jade/robot_modelrq2asshˆh}rr2h}rs2h}rt2h ]ru2jj2asssuX nao_visionrv2}rw2(h}rx2(h}ry2h}rz2h ]r{2Xros-jade-nao-visionr|2assh }r}2h}r~2h ]r2j|2assuh}r€2h}r2h ]r‚2Xros/jade/nao_interactionrƒ2asshˆh}r„2h}r…2h}r†2h ]r‡2j|2asssuX pyros_msgsrˆ2}r‰2(h}rŠ2(h}r‹2h}rŒ2h ]r2Xros-jade-pyros-msgsrŽ2assh }r2h}r2h ]r‘2jŽ2assuh}r’2h}r“2h ]r”2Xros/jade/pyros_msgsr•2asshˆh}r–2h}r—2h}r˜2h ]r™2jŽ2asssuXgscamrš2}r›2(h}rœ2(h}r2h}rž2h ]rŸ2Xros-jade-gscamr 2assh }r¡2h}r¢2h ]r£2j 2assuh}r¤2h}r¥2h ]r¦2Xros/jade/gscamr§2asshˆh}r¨2h}r©2h}rª2h ]r«2j 2asssuXunderwater_vehicle_dynamicsr¬2}r­2(h}r®2(h}r¯2h}r°2h ]r±2X$ros-jade-underwater-vehicle-dynamicsr²2assh }r³2h}r´2h ]rµ2j²2assuh}r¶2h}r·2h ]r¸2Xros/jade/underwater_simulationr¹2asshˆh}rº2h}r»2h}r¼2h ]r½2j²2asssuX cpp_commonr¾2}r¿2(h}rÀ2(h}rÁ2h}rÂ2h ]rÃ2Xros-jade-cpp-commonrÄ2assh }rÅ2h}rÆ2h ]rÇ2jÄ2assuh}rÈ2h}rÉ2h ]rÊ2Xros/jade/roscpp_corerË2asshˆh}rÌ2h}rÍ2h}rÎ2h ]rÏ2jÄ2asssuXackermann_msgsrÐ2}rÑ2(h}rÒ2(h}rÓ2h}rÔ2h ]rÕ2Xros-jade-ackermann-msgsrÖ2assh }r×2h}rØ2h ]rÙ2jÖ2assuh}rÚ2h}rÛ2h ]rÜ2Xros/jade/ackermann_msgsrÝ2asshˆh}rÞ2h}rß2h}rà2h ]rá2jÖ2asssuXhector_gazebo_thermal_camerarâ2}rã2(h}rä2(h}rå2h}ræ2h ]rç2X%ros-jade-hector-gazebo-thermal-camerarè2assh }ré2h}rê2h ]rë2jè2assuh}rì2h}rí2h ]rî2Xros/jade/hector_gazeborï2asshˆh}rð2h}rñ2h}rò2h ]ró2jè2asssuX ecl_utilitiesrô2}rõ2(h}rö2(h}r÷2h}rø2h ]rù2Xros-jade-ecl-utilitiesrú2assh }rû2h}rü2h ]rý2jú2assuh}rþ2h}rÿ2h ]r3Xros/jade/ecl_corer3asshˆh}r3h}r3h}r3h ]r3jú2asssuX settlerlibr3}r3(h}r3(h}r 3h}r 3h ]r 3Xros-jade-settlerlibr 3assh }r 3h}r3h ]r3j 3assuh}r3h}r3h ]r3Xros/jade/calibrationr3asshˆh}r3h}r3h}r3h ]r3j 3asssuXdynamic_edt_3dr3}r3(h}r3(h}r3h}r3h ]r3Xros-jade-dynamic-edt-3dr3assh }r3h}r 3h ]r!3j3assuh}r"3h}r#3h ]r$3Xros/jade/octomapr%3asshˆh}r&3h}r'3h}r(3h ]r)3j3asssuX robot_modelr*3}r+3(h}r,3(h}r-3h}r.3h ]r/3Xros-jade-robot-modelr03assh }r13h}r23h ]r33j03assuh}r43h}r53h ]r63Xros/jade/robot_modelr73asshˆh}r83h}r93h}r:3h ]r;3j03asssuX tetris_gazebor<3}r=3(h}r>3(h}r?3h}r@3h ]rA3Xros-jade-tetris-gazeborB3assh }rC3h}rD3h ]rE3jB3assuh}rF3h}rG3h ]rH3Xros/jade/hakutorI3asshˆh}rJ3h}rK3h}rL3h ]rM3jB3asssuXrfsmrN3}rO3(h}rP3(h}rQ3h}rR3h ]rS3X ros-jade-rfsmrT3assh }rU3h}rV3h ]rW3jT3assuh}rX3h}rY3h ]rZ3X ros/jade/rfsmr[3asshˆh}r\3h}r]3h}r^3h ]r_3jT3asssuXeusurdfr`3}ra3(h}rb3(h}rc3h}rd3h ]re3Xros-jade-eusurdfrf3assh }rg3h}rh3h ]ri3jf3assuh}rj3h}rk3h ]rl3Xros/jade/jsk_model_toolsrm3asshˆh}rn3h}ro3h}rp3h ]rq3jf3asssuXweb_video_serverrr3}rs3(h}rt3(h}ru3h}rv3h ]rw3Xros-jade-web-video-serverrx3assh }ry3h}rz3h ]r{3jx3assuh}r|3h}r}3h ]r~3Xros/jade/web_video_serverr3asshˆh}r€3h}r3h}r‚3h ]rƒ3jx3asssuXrobot_localizationr„3}r…3(h}r†3(h}r‡3h}rˆ3h ]r‰3Xros-jade-robot-localizationrŠ3assh }r‹3h}rŒ3h ]r3jŠ3assuh}rŽ3h}r3h ]r3Xros/jade/robot_localizationr‘3asshˆh}r’3h}r“3h}r”3h ]r•3jŠ3asssuX p2os_msgsr–3}r—3(h}r˜3(h}r™3h}rš3h ]r›3Xros-jade-p2os-msgsrœ3assh }r3h}rž3h ]rŸ3jœ3assuh}r 3h}r¡3h ]r¢3X ros/jade/p2osr£3asshˆh}r¤3h}r¥3h}r¦3h ]r§3jœ3asssuX bond_corer¨3}r©3(h}rª3(h}r«3h}r¬3h ]r­3Xros-jade-bond-corer®3assh }r¯3h}r°3h ]r±3j®3assuh}r²3h}r³3h ]r´3Xros/jade/bond_corerµ3asshˆh}r¶3h}r·3h}r¸3h ]r¹3j®3asssuXdynamixel_tutorialsrº3}r»3(h}r¼3(h}r½3h}r¾3h ]r¿3Xros-jade-dynamixel-tutorialsrÀ3assh }rÁ3h}rÂ3h ]rÃ3jÀ3assuh}rÄ3h}rÅ3h ]rÆ3Xros/jade/dynamixel_motorrÇ3asshˆh}rÈ3h}rÉ3h}rÊ3h ]rË3jÀ3asssuX rosbagliverÌ3}rÍ3(h}rÎ3(h}rÏ3h}rÐ3h ]rÑ3Xros-jade-rosbagliverÒ3assh }rÓ3h}rÔ3h ]rÕ3jÒ3assuh}rÖ3h}r×3h ]rØ3Xros/jade/wu_ros_toolsrÙ3asshˆh}rÚ3h}rÛ3h}rÜ3h ]rÝ3jÒ3asssuXrotors_descriptionrÞ3}rß3(h}rà3(h}rá3h}râ3h ]rã3Xros-jade-rotors-descriptionrä3assh }rå3h}ræ3h ]rç3jä3assuh}rè3h}ré3h ]rê3Xros/jade/rotors_simulatorrë3asshˆh}rì3h}rí3h}rî3h ]rï3jä3asssuXstdr_launchersrð3}rñ3(h}rò3(h}ró3h}rô3h ]rõ3Xros-jade-stdr-launchersrö3assh }r÷3h}rø3h ]rù3jö3assuh}rú3h}rû3h ]rü3Xros/jade/stdr_simulatorrý3asshˆh}rþ3h}rÿ3h}r4h ]r4jö3asssuXrttr4}r4(h}r4(h}r4h}r4h ]r4X ros-jade-rttr4assh }r 4h}r 4h ]r 4j4assuh}r 4h}r 4h ]r4X ros/jade/rttr4asshˆh}r4h}r4h}r4h ]r4j4asssuXbondcppr4}r4(h}r4(h}r4h}r4h ]r4Xros-jade-bondcppr4assh }r4h}r4h ]r4j4assuh}r4h}r4h ]r 4Xros/jade/bond_corer!4asshˆh}r"4h}r#4h}r$4h ]r%4j4asssuXnaoqi_bridge_msgsr&4}r'4(h}r(4(h}r)4h}r*4h ]r+4Xros-jade-naoqi-bridge-msgsr,4assh }r-4h}r.4h ]r/4j,4assuh}r04h}r14h ]r24Xros/jade/naoqi_bridge_msgsr34asshˆh}r44h}r54h}r64h ]r74j,4asssuX parameter_par84}r94(h}r:4(h}r;4h}r<4h ]r=4Xros-jade-parameter-par>4assh }r?4h}r@4h ]rA4j>4assuh}rB4h}rC4h ]rD4Xros/jade/parameter_parE4asshˆh}rF4h}rG4h}rH4h ]rI4j>4asssuX rosmasterrJ4}rK4(h}rL4(h}rM4h}rN4h ]rO4Xros-jade-rosmasterrP4assh }rQ4h}rR4h ]rS4jP4assuh}rT4h}rU4h ]rV4Xros/jade/ros_commrW4asshˆh}rX4h}rY4h}rZ4h ]r[4jP4asssuXrail_pick_and_place_msgsr\4}r]4(h}r^4(h}r_4h}r`4h ]ra4X!ros-jade-rail-pick-and-place-msgsrb4assh }rc4h}rd4h ]re4jb4assuh}rf4h}rg4h ]rh4Xros/jade/rail_pick_and_placeri4asshˆh}rj4h}rk4h}rl4h ]rm4jb4asssuX costmap_2drn4}ro4(h}rp4(h}rq4h}rr4h ]rs4Xros-jade-costmap-2drt4assh }ru4h}rv4h ]rw4jt4assuh}rx4h}ry4h ]rz4Xros/jade/navigationr{4asshˆh}r|4h}r}4h}r~4h ]r4jt4asssuX phidgets_apir€4}r4(h}r‚4(h}rƒ4h}r„4h ]r…4Xros-jade-phidgets-apir†4assh }r‡4h}rˆ4h ]r‰4j†4assuh}rŠ4h}r‹4h ]rŒ4Xros/jade/phidgets_driversr4asshˆh}rŽ4h}r4h}r4h ]r‘4j†4asssuX humanoid_msgsr’4}r“4(h}r”4(h}r•4h}r–4h ]r—4Xros-jade-humanoid-msgsr˜4assh }r™4h}rš4h ]r›4j˜4assuh}rœ4h}r4h ]rž4Xros/jade/humanoid_msgsrŸ4asshˆh}r 4h}r¡4h}r¢4h ]r£4j˜4asssuXvisualization_osgr¤4}r¥4(h}r¦4(h}r§4h}r¨4h ]r©4Xros-jade-visualization-osgrª4assh }r«4h}r¬4h ]r­4jª4assuh}r®4h}r¯4h ]r°4Xros/jade/visualization_osgr±4asshˆh}r²4h}r³4h}r´4h ]rµ4jª4asssuX rqt_actionr¶4}r·4(h}r¸4(h}r¹4h}rº4h ]r»4Xros-jade-rqt-actionr¼4assh }r½4h}r¾4h ]r¿4j¼4assuh}rÀ4h}rÁ4h ]rÂ4Xros/jade/rqt_actionrÃ4asshˆh}rÄ4h}rÅ4h}rÆ4h ]rÇ4j¼4asssuXgraspdbrÈ4}rÉ4(h}rÊ4(h}rË4h}rÌ4h ]rÍ4Xros-jade-graspdbrÎ4assh }rÏ4h}rÐ4h ]rÑ4jÎ4assuh}rÒ4h}rÓ4h ]rÔ4Xros/jade/rail_pick_and_placerÕ4asshˆh}rÖ4h}r×4h}rØ4h ]rÙ4jÎ4asssuXrtt_shape_msgsrÚ4}rÛ4(h}rÜ4(h}rÝ4h}rÞ4h ]rß4Xros-jade-rtt-shape-msgsrà4assh }rá4h}râ4h ]rã4jà4assuh}rä4h}rå4h ]ræ4Xros/jade/rtt_ros_integrationrç4asshˆh}rè4h}ré4h}rê4h ]rë4jà4asssuXobject_recognition_linemodrì4}rí4(h}rî4(h}rï4h}rð4h ]rñ4X#ros-jade-object-recognition-linemodrò4assh }ró4h}rô4h ]rõ4jò4assuh}rö4h}r÷4h ]rø4X#ros/jade/object_recognition_linemodrù4asshˆh}rú4h}rû4h}rü4h ]rý4jò4asssuX rgbd_launchrþ4}rÿ4(h}r5(h}r5h}r5h ]r5Xros-jade-rgbd-launchr5assh }r5h}r5h ]r5j5assuh}r5h}r 5h ]r 5Xros/jade/rgbd_launchr 5asshˆh}r 5h}r 5h}r5h ]r5j5asssuXpr2_controllers_msgsr5}r5(h}r5(h}r5h}r5h ]r5Xros-jade-pr2-controllers-msgsr5assh }r5h}r5h ]r5j5assuh}r5h}r5h ]r5Xros/jade/pr2_controllersr5asshˆh}r5h}r5h}r 5h ]r!5j5asssuXrosbag_migration_ruler"5}r#5(h}r$5(h}r%5h}r&5h ]r'5Xros-jade-rosbag-migration-ruler(5assh }r)5h}r*5h ]r+5j(5assuh}r,5h}r-5h ]r.5Xros/jade/rosbag_migration_ruler/5asshˆh}r05h}r15h}r25h ]r35j(5asssuXjsk_topic_toolsr45}r55(h}r65(h}r75h}r85h ]r95Xros-jade-jsk-topic-toolsr:5assh }r;5h}r<5h ]r=5j:5assuh}r>5h}r?5h ]r@5Xros/jade/jsk_commonrA5asshˆh}rB5h}rC5h}rD5h ]rE5j:5asssuXmultires_imagerF5}rG5(h}rH5(h}rI5h}rJ5h ]rK5Xros-jade-multires-imagerL5assh }rM5h}rN5h ]rO5jL5assuh}rP5h}rQ5h ]rR5Xros/jade/mapvizrS5asshˆh}rT5h}rU5h}rV5h ]rW5jL5asssuXrvizrX5}rY5(h}rZ5(h}r[5h}r\5h ]r]5X ros-jade-rvizr^5assh }r_5h}r`5h ]ra5j^5assuh}rb5h}rc5h ]rd5X ros/jade/rvizre5asshˆh}rf5h}rg5h}rh5h ]ri5j^5asssuX ecto_opennirj5}rk5(h}rl5(h}rm5h}rn5h ]ro5Xros-jade-ecto-opennirp5assh }rq5h}rr5h ]rs5jp5assuh}rt5h}ru5h ]rv5Xros/jade/ecto_opennirw5asshˆh}rx5h}ry5h}rz5h ]r{5jp5asssuX qt_gui_cppr|5}r}5(h}r~5(h}r5h}r€5h ]r5Xros-jade-qt-gui-cppr‚5assh }rƒ5h}r„5h ]r…5j‚5assuh}r†5h}r‡5h ]rˆ5Xros/jade/qt_gui_corer‰5asshˆh}rŠ5h}r‹5h}rŒ5h ]r5j‚5asssuXobject_recognition_corerŽ5}r5(h}r5(h}r‘5h}r’5h ]r“5X ros-jade-object-recognition-corer”5assh }r•5h}r–5h ]r—5j”5assuh}r˜5h}r™5h ]rš5X ros/jade/object_recognition_corer›5asshˆh}rœ5h}r5h}rž5h ]rŸ5j”5asssuX jsk_planningr 5}r¡5(h}r¢5(h}r£5h}r¤5h ]r¥5Xros-jade-jsk-planningr¦5assh }r§5h}r¨5h ]r©5j¦5assuh}rª5h}r«5h ]r¬5Xros/jade/jsk_planningr­5asshˆh}r®5h}r¯5h}r°5h ]r±5j¦5asssuXhector_components_descriptionr²5}r³5(h}r´5(h}rµ5h}r¶5h ]r·5X&ros-jade-hector-components-descriptionr¸5assh }r¹5h}rº5h ]r»5j¸5assuh}r¼5h}r½5h ]r¾5Xros/jade/hector_modelsr¿5asshˆh}rÀ5h}rÁ5h}rÂ5h ]rÃ5j¸5asssuXvrpnrÄ5}rÅ5(h}rÆ5(h}rÇ5h}rÈ5h ]rÉ5X ros-jade-vrpnrÊ5assh }rË5h}rÌ5h ]rÍ5jÊ5assuh}rÎ5h}rÏ5h ]rÐ5X ros/jade/vrpnrÑ5asshˆh}rÒ5h}rÓ5h}rÔ5h ]rÕ5jÊ5asssuX topic_toolsrÖ5}r×5(h}rØ5(h}rÙ5h}rÚ5h ]rÛ5Xros-jade-topic-toolsrÜ5assh }rÝ5h}rÞ5h ]rß5jÜ5assuh}rà5h}rá5h ]râ5Xros/jade/ros_commrã5asshˆh}rä5h}rå5h}ræ5h ]rç5jÜ5asssuXnodeletrè5}ré5(h}rê5(h}rë5h}rì5h ]rí5Xros-jade-nodeletrî5assh }rï5h}rð5h ]rñ5jî5assuh}rò5h}ró5h ]rô5Xros/jade/nodelet_corerõ5asshˆh}rö5h}r÷5h}rø5h ]rù5jî5asssuXvariantrú5}rû5(h}rü5(h}rý5h}rþ5h ]rÿ5Xros-jade-variantr6assh }r6h}r6h ]r6j6assuh}r6h}r6h ]r6Xros/jade/variantr6asshˆh}r6h}r 6h}r 6h ]r 6j6asssuXmrpt_tutorialsr 6}r 6(h}r6(h}r6h}r6h ]r6Xros-jade-mrpt-tutorialsr6assh }r6h}r6h ]r6j6assuh}r6h}r6h ]r6Xros/jade/mrpt_navigationr6asshˆh}r6h}r6h}r6h ]r6j6asssuX common_msgsr6}r6(h}r 6(h}r!6h}r"6h ]r#6Xros-jade-common-msgsr$6assh }r%6h}r&6h ]r'6j$6assuh}r(6h}r)6h ]r*6Xros/jade/common_msgsr+6asshˆh}r,6h}r-6h}r.6h ]r/6j$6asssuXlaser_scan_matcherr06}r16(h}r26(h}r36h}r46h ]r56Xros-jade-laser-scan-matcherr66assh }r76h}r86h ]r96j66assuh}r:6h}r;6h ]r<6Xros/jade/scan_toolsr=6asshˆh}r>6h}r?6h}r@6h ]rA6j66asssuXmrpt_local_obstaclesrB6}rC6(h}rD6(h}rE6h}rF6h ]rG6Xros-jade-mrpt-local-obstaclesrH6assh }rI6h}rJ6h ]rK6jH6assuh}rL6h}rM6h ]rN6Xros/jade/mrpt_navigationrO6asshˆh}rP6h}rQ6h}rR6h ]rS6jH6asssuX ecl_licenserT6}rU6(h}rV6(h}rW6h}rX6h ]rY6Xros-jade-ecl-licenserZ6assh }r[6h}r\6h ]r]6jZ6assuh}r^6h}r_6h ]r`6Xros/jade/ecl_toolsra6asshˆh}rb6h}rc6h}rd6h ]re6jZ6asssuXobject_recognition_todrf6}rg6(h}rh6(h}ri6h}rj6h ]rk6Xros-jade-object-recognition-todrl6assh }rm6h}rn6h ]ro6jl6assuh}rp6h}rq6h ]rr6Xros/jade/object_recognition_todrs6asshˆh}rt6h}ru6h}rv6h ]rw6jl6asssuXromeo_sensors_pyrx6}ry6(h}rz6(h}r{6h}r|6h ]r}6Xros-jade-romeo-sensors-pyr~6assh }r6h}r€6h ]r6j~6assuh}r‚6h}rƒ6h ]r„6Xros/jade/romeo_robotr…6asshˆh}r†6h}r‡6h}rˆ6h ]r‰6j~6asssuXecto_pclrŠ6}r‹6(h}rŒ6(h}r6h}rŽ6h ]r6Xros-jade-ecto-pclr6assh }r‘6h}r’6h ]r“6j6assuh}r”6h}r•6h ]r–6Xros/jade/ecto_pclr—6asshˆh}r˜6h}r™6h}rš6h ]r›6j6asssuXpidrœ6}r6(h}rž6(h}rŸ6h}r 6h ]r¡6X ros-jade-pidr¢6assh }r£6h}r¤6h ]r¥6j¢6assuh}r¦6h}r§6h ]r¨6X ros/jade/pidr©6asshˆh}rª6h}r«6h}r¬6h ]r­6j¢6asssuXgrizzly_navigationr®6}r¯6(h}r°6(h}r±6h}r²6h ]r³6Xros-jade-grizzly-navigationr´6assh }rµ6h}r¶6h ]r·6j´6assuh}r¸6h}r¹6h ]rº6Xros/jade/grizzlyr»6asshˆh}r¼6h}r½6h}r¾6h ]r¿6j´6asssuX rqt_pose_viewrÀ6}rÁ6(h}rÂ6(h}rÃ6h}rÄ6h ]rÅ6Xros-jade-rqt-pose-viewrÆ6assh }rÇ6h}rÈ6h ]rÉ6jÆ6assuh}rÊ6h}rË6h ]rÌ6Xros/jade/rqt_pose_viewrÍ6asshˆh}rÎ6h}rÏ6h}rÐ6h ]rÑ6jÆ6asssuX screen_grabrÒ6}rÓ6(h}rÔ6(h}rÕ6h}rÖ6h ]r×6Xros-jade-screen-grabrØ6assh }rÙ6h}rÚ6h ]rÛ6jØ6assuh}rÜ6h}rÝ6h ]rÞ6Xros/jade/screen_grabrß6asshˆh}rà6h}rá6h}râ6h ]rã6jØ6asssuX pocketsphinxrä6}rå6(h}ræ6(h}rç6h}rè6h ]ré6Xros-jade-pocketsphinxrê6assh }rë6h}rì6h ]rí6jê6assuh}rî6h}rï6h ]rð6Xros/jade/pocketsphinxrñ6asshˆh}rò6h}ró6h}rô6h ]rõ6jê6asssuXfind_object_2drö6}r÷6(h}rø6(h}rù6h}rú6h ]rû6Xros-jade-find-object-2drü6assh }rý6h}rþ6h ]rÿ6jü6assuh}r7h}r7h ]r7Xros/jade/find_object_2dr7asshˆh}r7h}r7h}r7h ]r7jü6asssuXmoveit_ros_visualizationr7}r 7(h}r 7(h}r 7h}r 7h ]r 7X!ros-jade-moveit-ros-visualizationr7assh }r7h}r7h ]r7j7assuh}r7h}r7h ]r7Xros/jade/moveitr7asshˆh}r7h}r7h}r7h ]r7j7asssuX ros_tutorialsr7}r7(h}r7(h}r7h}r7h ]r7Xros-jade-ros-tutorialsr 7assh }r!7h}r"7h ]r#7j 7assuh}r$7h}r%7h ]r&7Xros/jade/ros_tutorialsr'7asshˆh}r(7h}r)7h}r*7h ]r+7j 7asssuXpugixmlr,7}r-7(h}r.7(h}r/7h}r07h ]r17Xros-jade-pugixmlr27assh }r37h}r47h ]r57j27assuh}r67h}r77h ]r87Xros/jade/pugixmlr97asshˆh}r:7h}r;7h}r<7h ]r=7j27asssuX pyros_utilsr>7}r?7(h}r@7(h}rA7h}rB7h ]rC7Xros-jade-pyros-utilsrD7assh }rE7h}rF7h ]rG7jD7assuh}rH7h}rI7h ]rJ7Xros/jade/pyros_utilsrK7asshˆh}rL7h}rM7h}rN7h ]rO7jD7asssuXhrpsys_ros_bridgerP7}rQ7(h}rR7(h}rS7h}rT7h ]rU7Xros-jade-hrpsys-ros-bridgerV7assh }rW7h}rX7h ]rY7jV7assuh}rZ7h}r[7h ]r\7Xros/jade/rtmros_commonr]7asshˆh}r^7h}r_7h}r`7h ]ra7jV7asssuXnao_appsrb7}rc7(h}rd7(h}re7h}rf7h ]rg7Xros-jade-nao-appsrh7assh }ri7h}rj7h ]rk7jh7assuh}rl7h}rm7h ]rn7Xros/jade/nao_robotro7asshˆh}rp7h}rq7h}rr7h ]rs7jh7asssuX naoqi_driverrt7}ru7(h}rv7(h}rw7h}rx7h ]ry7Xros-jade-naoqi-driverrz7assh }r{7h}r|7h ]r}7jz7assuh}r~7h}r7h ]r€7Xros/jade/naoqi_driverr7asshˆh}r‚7h}rƒ7h}r„7h ]r…7jz7asssuX task_compilerr†7}r‡7(h}rˆ7(h}r‰7h}rŠ7h ]r‹7Xros-jade-task-compilerrŒ7assh }r7h}rŽ7h ]r7jŒ7assuh}r7h}r‘7h ]r’7Xros/jade/jsk_planningr“7asshˆh}r”7h}r•7h}r–7h ]r—7jŒ7asssuXimage_publisherr˜7}r™7(h}rš7(h}r›7h}rœ7h ]r7Xros-jade-image-publisherrž7assh }rŸ7h}r 7h ]r¡7jž7assuh}r¢7h}r£7h ]r¤7Xros/jade/image_pipeliner¥7asshˆh}r¦7h}r§7h}r¨7h ]r©7jž7asssuX diagnosticsrª7}r«7(h}r¬7(h}r­7h}r®7h ]r¯7Xros-jade-diagnosticsr°7assh }r±7h}r²7h ]r³7j°7assuh}r´7h}rµ7h ]r¶7Xros/jade/diagnosticsr·7asshˆh}r¸7h}r¹7h}rº7h ]r»7j°7asssuXkatana_tutorialsr¼7}r½7(h}r¾7(h}r¿7h}rÀ7h ]rÁ7Xros-jade-katana-tutorialsrÂ7assh }rÃ7h}rÄ7h ]rÅ7jÂ7assuh}rÆ7h}rÇ7h ]rÈ7Xros/jade/katana_driverrÉ7asshˆh}rÊ7h}rË7h}rÌ7h ]rÍ7jÂ7asssuX fetch_teleoprÎ7}rÏ7(h}rÐ7(h}rÑ7h}rÒ7h ]rÓ7Xros-jade-fetch-teleoprÔ7assh }rÕ7h}rÖ7h ]r×7jÔ7assuh}rØ7h}rÙ7h ]rÚ7Xros/jade/fetch_rosrÛ7asshˆh}rÜ7h}rÝ7h}rÞ7h ]rß7jÔ7asssuX jpeg_streamerrà7}rá7(h}râ7(h}rã7h}rä7h ]rå7Xros-jade-jpeg-streamerræ7assh }rç7h}rè7h ]ré7jæ7assuh}rê7h}rë7h ]rì7Xros/jade/camera_umdrí7asshˆh}rî7h}rï7h}rð7h ]rñ7jæ7asssuXoctovisrò7}ró7(h}rô7(h}rõ7h}rö7h ]r÷7Xros-jade-octovisrø7assh }rù7h}rú7h ]rû7jø7assuh}rü7h}rý7h ]rþ7Xros/jade/octomaprÿ7asshˆh}r8h}r8h}r8h ]r8jø7asssuXmarti_sensor_msgsr8}r8(h}r8(h}r8h}r8h ]r 8Xros-jade-marti-sensor-msgsr 8assh }r 8h}r 8h ]r 8j 8assuh}r8h}r8h ]r8Xros/jade/marti_messagesr8asshˆh}r8h}r8h}r8h ]r8j 8asssuX driver_baser8}r8(h}r8(h}r8h}r8h ]r8Xros-jade-driver-baser8assh }r8h}r8h ]r8j8assuh}r 8h}r!8h ]r"8Xros/jade/driver_commonr#8asshˆh}r$8h}r%8h}r&8h ]r'8j8asssuXtf2_msgsr(8}r)8(h}r*8(h}r+8h}r,8h ]r-8Xros-jade-tf2-msgsr.8assh }r/8h}r08h ]r18j.8assuh}r28h}r38h ]r48Xros/jade/geometry2r58asshˆh}r68h}r78h}r88h ]r98j.8asssuX octomap_msgsr:8}r;8(h}r<8(h}r=8h}r>8h ]r?8Xros-jade-octomap-msgsr@8assh }rA8h}rB8h ]rC8j@8assuh}rD8h}rE8h ]rF8Xros/jade/octomap_msgsrG8asshˆh}rH8h}rI8h}rJ8h ]rK8j@8asssuX visp_trackerrL8}rM8(h}rN8(h}rO8h}rP8h ]rQ8Xros-jade-visp-trackerrR8assh }rS8h}rT8h ]rU8jR8assuh}rV8h}rW8h ]rX8Xros/jade/vision_visprY8asshˆh}rZ8h}r[8h}r\8h ]r]8jR8asssuXroslintr^8}r_8(h}r`8(h}ra8h}rb8h ]rc8Xros-jade-roslintrd8assh }re8h}rf8h ]rg8jd8assuh}rh8h}ri8h ]rj8Xros/jade/roslintrk8asshˆh}rl8h}rm8h}rn8h ]ro8jd8asssuXcl_urdfrp8}rq8(h}rr8(h}rs8h}rt8h ]ru8Xros-jade-cl-urdfrv8assh }rw8h}rx8h ]ry8jv8assuh}rz8h}r{8h ]r|8Xros/jade/roslisp_commonr}8asshˆh}r~8h}r8h}r€8h ]r8jv8asssuXgrizzly_teleopr‚8}rƒ8(h}r„8(h}r…8h}r†8h ]r‡8Xros-jade-grizzly-teleoprˆ8assh }r‰8h}rŠ8h ]r‹8jˆ8assuh}rŒ8h}r8h ]rŽ8Xros/jade/grizzlyr8asshˆh}r8h}r‘8h}r’8h ]r“8jˆ8asssuXrosr”8}r•8(h}r–8(h}r—8h}r˜8h ]r™8X ros-jade-rosrš8assh }r›8h}rœ8h ]r8jš8assuh}rž8h}rŸ8h ]r 8X ros/jade/rosr¡8asshˆh}r¢8h}r£8h}r¤8h ]r¥8jš8asssuX romeo_controlr¦8}r§8(h}r¨8(h}r©8h}rª8h ]r«8Xros-jade-romeo-controlr¬8assh }r­8h}r®8h ]r¯8j¬8assuh}r°8h}r±8h ]r²8Xros/jade/romeo_virtualr³8asshˆh}r´8h}rµ8h}r¶8h ]r·8j¬8asssuXiai_control_msgsr¸8}r¹8(h}rº8(h}r»8h}r¼8h ]r½8Xros-jade-iai-control-msgsr¾8assh }r¿8h}rÀ8h ]rÁ8j¾8assuh}rÂ8h}rÃ8h ]rÄ8Xros/jade/iai_common_msgsrÅ8asshˆh}rÆ8h}rÇ8h}rÈ8h ]rÉ8j¾8asssuX rospeex_msgsrÊ8}rË8(h}rÌ8(h}rÍ8h}rÎ8h ]rÏ8Xros-jade-rospeex-msgsrÐ8assh }rÑ8h}rÒ8h ]rÓ8jÐ8assuh}rÔ8h}rÕ8h ]rÖ8Xros/jade/rospeexr×8asshˆh}rØ8h}rÙ8h}rÚ8h ]rÛ8jÐ8asssuXjsk_interactiverÜ8}rÝ8(h}rÞ8(h}rß8h}rà8h ]rá8Xros-jade-jsk-interactiverâ8assh }rã8h}rä8h ]rå8jâ8assuh}ræ8h}rç8h ]rè8Xros/jade/jsk_visualizationré8asshˆh}rê8h}rë8h}rì8h ]rí8jâ8asssuX mavros_msgsrî8}rï8(h}rð8(h}rñ8h}rò8h ]ró8Xros-jade-mavros-msgsrô8assh }rõ8h}rö8h ]r÷8jô8assuh}rø8h}rù8h ]rú8Xros/jade/mavrosrû8asshˆh}rü8h}rý8h}rþ8h ]rÿ8jô8asssuX grizzly_msgsr9}r9(h}r9(h}r9h}r9h ]r9Xros-jade-grizzly-msgsr9assh }r9h}r9h ]r 9j9assuh}r 9h}r 9h ]r 9Xros/jade/grizzlyr 9asshˆh}r9h}r9h}r9h ]r9j9asssuXmanifest_cleanerr9}r9(h}r9(h}r9h}r9h ]r9Xros-jade-manifest-cleanerr9assh }r9h}r9h ]r9j9assuh}r9h}r9h ]r9Xros/jade/wu_ros_toolsr9asshˆh}r 9h}r!9h}r"9h ]r#9j9asssuXvisualization_marker_tutorialsr$9}r%9(h}r&9(h}r'9h}r(9h ]r)9X'ros-jade-visualization-marker-tutorialsr*9assh }r+9h}r,9h ]r-9j*9assuh}r.9h}r/9h ]r09X ros/jade/visualization_tutorialsr19asshˆh}r29h}r39h}r49h ]r59j*9asssuXrotors_evaluationr69}r79(h}r89(h}r99h}r:9h ]r;9Xros-jade-rotors-evaluationr<9assh }r=9h}r>9h ]r?9j<9assuh}r@9h}rA9h ]rB9Xros/jade/rotors_simulatorrC9asshˆh}rD9h}rE9h}rF9h ]rG9j<9asssuXromeo_descriptionrH9}rI9(h}rJ9(h}rK9h}rL9h ]rM9Xros-jade-romeo-descriptionrN9assh }rO9h}rP9h ]rQ9jN9assuh}rR9h}rS9h ]rT9Xros/jade/romeo_robotrU9asshˆh}rV9h}rW9h}rX9h ]rY9jN9asssuX moveit_corerZ9}r[9(h}r\9(h}r]9h}r^9h ]r_9Xros-jade-moveit-corer`9assh }ra9h}rb9h ]rc9j`9assuh}rd9h}re9h ]rf9Xros/jade/moveitrg9asshˆh}rh9h}ri9h}rj9h ]rk9j`9asssuX ecl_core_appsrl9}rm9(h}rn9(h}ro9h}rp9h ]rq9Xros-jade-ecl-core-appsrr9assh }rs9h}rt9h ]ru9jr9assuh}rv9h}rw9h ]rx9Xros/jade/ecl_corery9asshˆh}rz9h}r{9h}r|9h ]r}9jr9asssuXnao_interaction_launchersr~9}r9(h}r€9(h}r9h}r‚9h ]rƒ9X"ros-jade-nao-interaction-launchersr„9assh }r…9h}r†9h ]r‡9j„9assuh}rˆ9h}r‰9h ]rŠ9Xros/jade/nao_interactionr‹9asshˆh}rŒ9h}r9h}rŽ9h ]r9j„9asssuX rtt_ros_commr9}r‘9(h}r’9(h}r“9h}r”9h ]r•9Xros-jade-rtt-ros-commr–9assh }r—9h}r˜9h ]r™9j–9assuh}rš9h}r›9h ]rœ9Xros/jade/rtt_ros_integrationr9asshˆh}rž9h}rŸ9h}r 9h ]r¡9j–9asssuXnavigation_tutorialsr¢9}r£9(h}r¤9(h}r¥9h}r¦9h ]r§9Xros-jade-navigation-tutorialsr¨9assh }r©9h}rª9h ]r«9j¨9assuh}r¬9h}r­9h ]r®9Xros/jade/navigation_tutorialsr¯9asshˆh}r°9h}r±9h}r²9h ]r³9j¨9asssuXflakyr´9}rµ9(h}r¶9(h}r·9h}r¸9h ]r¹9Xros-jade-flakyrº9assh }r»9h}r¼9h ]r½9jº9assuh}r¾9h}r¿9h ]rÀ9Xros/jade/flakyrÁ9asshˆh}rÂ9h}rÃ9h}rÄ9h ]rÅ9jº9asssuXcalibration_msgsrÆ9}rÇ9(h}rÈ9(h}rÉ9h}rÊ9h ]rË9Xros-jade-calibration-msgsrÌ9assh }rÍ9h}rÎ9h ]rÏ9jÌ9assuh}rÐ9h}rÑ9h ]rÒ9Xros/jade/calibrationrÓ9asshˆh}rÔ9h}rÕ9h}rÖ9h ]r×9jÌ9asssuXmoveit_sim_controllerrØ9}rÙ9(h}rÚ9(h}rÛ9h}rÜ9h ]rÝ9Xros-jade-moveit-sim-controllerrÞ9assh }rß9h}rà9h ]rá9jÞ9assuh}râ9h}rã9h ]rä9Xros/jade/moveit_sim_controllerrå9asshˆh}ræ9h}rç9h}rè9h ]ré9jÞ9asssuXgrizzly_descriptionrê9}rë9(h}rì9(h}rí9h}rî9h ]rï9Xros-jade-grizzly-descriptionrð9assh }rñ9h}rò9h ]ró9jð9assuh}rô9h}rõ9h ]rö9Xros/jade/grizzlyr÷9asshˆh}rø9h}rù9h}rú9h ]rû9jð9asssuX kdl_parser_pyrü9}rý9(h}rþ9(h}rÿ9h}r:h ]r:Xros-jade-kdl-parser-pyr:assh }r:h}r:h ]r:j:assuh}r:h}r:h ]r:Xros/jade/kdl_parserr :asshˆh}r :h}r :h}r :h ]r :j:asssuXrviz_python_tutorialr:}r:(h}r:(h}r:h}r:h ]r:Xros-jade-rviz-python-tutorialr:assh }r:h}r:h ]r:j:assuh}r:h}r:h ]r:X ros/jade/visualization_tutorialsr:asshˆh}r:h}r:h}r:h ]r:j:asssuX md49_messagesr :}r!:(h}r":(h}r#:h}r$:h ]r%:Xros-jade-md49-messagesr&:assh }r':h}r(:h ]r):j&:assuh}r*:h}r+:h ]r,:Xros/jade/md49_base_controllerr-:asshˆh}r.:h}r/:h}r0:h ]r1:j&:asssuXmvsimr2:}r3:(h}r4:(h}r5:h}r6:h ]r7:Xros-jade-mvsimr8:assh }r9:h}r::h ]r;:j8:assuh}r<:h}r=:h ]r>:Xros/jade/mvsimr?:asshˆh}r@:h}rA:h}rB:h ]rC:j8:asssuXnav_pcontrollerrD:}rE:(h}rF:(h}rG:h}rH:h ]rI:Xros-jade-nav-pcontrollerrJ:assh }rK:h}rL:h ]rM:jJ:assuh}rN:h}rO:h ]rP:Xros/jade/nav_pcontrollerrQ:asshˆh}rR:h}rS:h}rT:h ]rU:jJ:asssuX aruco_rosrV:}rW:(h}rX:(h}rY:h}rZ:h ]r[:Xros-jade-aruco-rosr\:assh }r]:h}r^:h ]r_:j\:assuh}r`:h}ra:h ]rb:Xros/jade/aruco_rosrc:asshˆh}rd:h}re:h}rf:h ]rg:j\:asssuXwebargsrh:}ri:(h}rj:(h}rk:h}rl:h ]rm:Xros-jade-webargsrn:assh }ro:h}rp:h ]rq:jn:assuh}rr:h}rs:h ]rt:Xros/jade/webargsru:asshˆh}rv:h}rw:h}rx:h ]ry:jn:asssuXsmart_battery_msgsrz:}r{:(h}r|:(h}r}:h}r~:h ]r:Xros-jade-smart-battery-msgsr€:assh }r:h}r‚:h ]rƒ:j€:assuh}r„:h}r…:h ]r†:Xros/jade/smart_battery_msgsr‡:asshˆh}rˆ:h}r‰:h}rŠ:h ]r‹:j€:asssuXdynamixel_motorrŒ:}r:(h}rŽ:(h}r:h}r:h ]r‘:Xros-jade-dynamixel-motorr’:assh }r“:h}r”:h ]r•:j’:assuh}r–:h}r—:h ]r˜:Xros/jade/dynamixel_motorr™:asshˆh}rš:h}r›:h}rœ:h ]r:j’:asssuXrtt_common_msgsrž:}rŸ:(h}r :(h}r¡:h}r¢:h ]r£:Xros-jade-rtt-common-msgsr¤:assh }r¥:h}r¦:h ]r§:j¤:assuh}r¨:h}r©:h ]rª:Xros/jade/rtt_ros_integrationr«:asshˆh}r¬:h}r­:h}r®:h ]r¯:j¤:asssuX rtt_rospackr°:}r±:(h}r²:(h}r³:h}r´:h ]rµ:Xros-jade-rtt-rospackr¶:assh }r·:h}r¸:h ]r¹:j¶:assuh}rº:h}r»:h ]r¼:Xros/jade/rtt_ros_integrationr½:asshˆh}r¾:h}r¿:h}rÀ:h ]rÁ:j¶:asssuX uvc_camerarÂ:}rÃ:(h}rÄ:(h}rÅ:h}rÆ:h ]rÇ:Xros-jade-uvc-camerarÈ:assh }rÉ:h}rÊ:h ]rË:jÈ:assuh}rÌ:h}rÍ:h ]rÎ:Xros/jade/camera_umdrÏ:asshˆh}rÐ:h}rÑ:h}rÒ:h ]rÓ:jÈ:asssuXcarrot_plannerrÔ:}rÕ:(h}rÖ:(h}r×:h}rØ:h ]rÙ:Xros-jade-carrot-plannerrÚ:assh }rÛ:h}rÜ:h ]rÝ:jÚ:assuh}rÞ:h}rß:h ]rà:Xros/jade/navigationrá:asshˆh}râ:h}rã:h}rä:h ]rå:jÚ:asssuXroslispræ:}rç:(h}rè:(h}ré:h}rê:h ]rë:Xros-jade-roslisprì:assh }rí:h}rî:h ]rï:jì:assuh}rð:h}rñ:h ]rò:Xros/jade/roslispró:asshˆh}rô:h}rõ:h}rö:h ]r÷:jì:asssuXhector_uav_msgsrø:}rù:(h}rú:(h}rû:h}rü:h ]rý:Xros-jade-hector-uav-msgsrþ:assh }rÿ:h}r;h ]r;jþ:assuh}r;h}r;h ]r;Xros/jade/hector_quadrotorr;asshˆh}r;h}r;h}r;h ]r ;jþ:asssuXrtt_actionlib_msgsr ;}r ;(h}r ;(h}r ;h}r;h ]r;Xros-jade-rtt-actionlib-msgsr;assh }r;h}r;h ]r;j;assuh}r;h}r;h ]r;Xros/jade/rtt_ros_integrationr;asshˆh}r;h}r;h}r;h ]r;j;asssuXrqt_launchtreer;}r;(h}r;(h}r;h}r ;h ]r!;Xros-jade-rqt-launchtreer";assh }r#;h}r$;h ]r%;j";assuh}r&;h}r';h ]r(;Xros/jade/rqt_launchtreer);asshˆh}r*;h}r+;h}r,;h ]r-;j";asssuXhector_map_toolsr.;}r/;(h}r0;(h}r1;h}r2;h ]r3;Xros-jade-hector-map-toolsr4;assh }r5;h}r6;h ]r7;j4;assuh}r8;h}r9;h ]r:;Xros/jade/hector_slamr;;asshˆh}r<;h}r=;h}r>;h ]r?;j4;asssuX cv_bridger@;}rA;(h}rB;(h}rC;h}rD;h ]rE;Xros-jade-cv-bridgerF;assh }rG;h}rH;h ]rI;jF;assuh}rJ;h}rK;h ]rL;Xros/jade/vision_opencvrM;asshˆh}rN;h}rO;h}rP;h ]rQ;jF;asssuX rospeex_ifrR;}rS;(h}rT;(h}rU;h}rV;h ]rW;Xros-jade-rospeex-ifrX;assh }rY;h}rZ;h ]r[;jX;assuh}r\;h}r];h ]r^;Xros/jade/rospeexr_;asshˆh}r`;h}ra;h}rb;h ]rc;jX;asssuXpr2_calibration_controllersrd;}re;(h}rf;(h}rg;h}rh;h ]ri;X$ros-jade-pr2-calibration-controllersrj;assh }rk;h}rl;h ]rm;jj;assuh}rn;h}ro;h ]rp;Xros/jade/pr2_controllersrq;asshˆh}rr;h}rs;h}rt;h ]ru;jj;asssuXunique_identifierrv;}rw;(h}rx;(h}ry;h}rz;h ]r{;Xros-jade-unique-identifierr|;assh }r};h}r~;h ]r;j|;assuh}r€;h}r;h ]r‚;Xros/jade/unique_identifierrƒ;asshˆh}r„;h}r…;h}r†;h ]r‡;j|;asssuXunderwater_sensor_msgsrˆ;}r‰;(h}rŠ;(h}r‹;h}rŒ;h ]r;Xros-jade-underwater-sensor-msgsrŽ;assh }r;h}r;h ]r‘;jŽ;assuh}r’;h}r“;h ]r”;Xros/jade/underwater_simulationr•;asshˆh}r–;h}r—;h}r˜;h ]r™;jŽ;asssuXpr2_gripper_actionrš;}r›;(h}rœ;(h}r;h}rž;h ]rŸ;Xros-jade-pr2-gripper-actionr ;assh }r¡;h}r¢;h ]r£;j ;assuh}r¤;h}r¥;h ]r¦;Xros/jade/pr2_controllersr§;asshˆh}r¨;h}r©;h}rª;h ]r«;j ;asssuXmoveit_plannersr¬;}r­;(h}r®;(h}r¯;h}r°;h ]r±;Xros-jade-moveit-plannersr²;assh }r³;h}r´;h ]rµ;j²;assuh}r¶;h}r·;h ]r¸;Xros/jade/moveitr¹;asshˆh}rº;h}r»;h}r¼;h ]r½;j²;asssuXgeometric_shapesr¾;}r¿;(h}rÀ;(h}rÁ;h}rÂ;h ]rÃ;Xros-jade-geometric-shapesrÄ;assh }rÅ;h}rÆ;h ]rÇ;jÄ;assuh}rÈ;h}rÉ;h ]rÊ;Xros/jade/geometric_shapesrË;asshˆh}rÌ;h}rÍ;h}rÎ;h ]rÏ;jÄ;asssuXkatana_arm_gazeborÐ;}rÑ;(h}rÒ;(h}rÓ;h}rÔ;h ]rÕ;Xros-jade-katana-arm-gazeborÖ;assh }r×;h}rØ;h ]rÙ;jÖ;assuh}rÚ;h}rÛ;h ]rÜ;Xros/jade/katana_driverrÝ;asshˆh}rÞ;h}rß;h}rà;h ]rá;jÖ;asssuXnaoqi_dcm_driverrâ;}rã;(h}rä;(h}rå;h}ræ;h ]rç;Xros-jade-naoqi-dcm-driverrè;assh }ré;h}rê;h ]rë;jè;assuh}rì;h}rí;h ]rî;Xros/jade/naoqi_dcm_driverrï;asshˆh}rð;h}rñ;h}rò;h ]ró;jè;asssuX naoqi_appsrô;}rõ;(h}rö;(h}r÷;h}rø;h ]rù;Xros-jade-naoqi-appsrú;assh }rû;h}rü;h ]rý;jú;assuh}rþ;h}rÿ;h ]r<Xros/jade/naoqi_bridger<asshˆh}r<h}r<h}r<h ]r<jú;asssuXpr2eusr<}r<(h}r<(h}r <h}r <h ]r <Xros-jade-pr2eusr <assh }r <h}r<h ]r<j <assuh}r<h}r<h ]r<Xros/jade/jsk_pr2eusr<asshˆh}r<h}r<h}r<h ]r<j <asssuXuwsim_osgoceanr<}r<(h}r<(h}r<h}r<h ]r<Xros-jade-uwsim-osgoceanr<assh }r<h}r <h ]r!<j<assuh}r"<h}r#<h ]r$<Xros/jade/uwsim_osgoceanr%<asshˆh}r&<h}r'<h}r(<h ]r)<j<asssuXstdr_resourcesr*<}r+<(h}r,<(h}r-<h}r.<h ]r/<Xros-jade-stdr-resourcesr0<assh }r1<h}r2<h ]r3<j0<assuh}r4<h}r5<h ]r6<Xros/jade/stdr_simulatorr7<asshˆh}r8<h}r9<h}r:<h ]r;<j0<asssuX rtt_ros_msgsr<<}r=<(h}r><(h}r?<h}r@<h ]rA<Xros-jade-rtt-ros-msgsrB<assh }rC<h}rD<h ]rE<jB<assuh}rF<h}rG<h ]rH<Xros/jade/rtt_ros_integrationrI<asshˆh}rJ<h}rK<h}rL<h ]rM<jB<asssuX hector_modelsrN<}rO<(h}rP<(h}rQ<h}rR<h ]rS<Xros-jade-hector-modelsrT<assh }rU<h}rV<h ]rW<jT<assuh}rX<h}rY<h ]rZ<Xros/jade/hector_modelsr[<asshˆh}r\<h}r]<h}r^<h ]r_<jT<asssuXstdr_guir`<}ra<(h}rb<(h}rc<h}rd<h ]re<Xros-jade-stdr-guirf<assh }rg<h}rh<h ]ri<jf<assuh}rj<h}rk<h ]rl<Xros/jade/stdr_simulatorrm<asshˆh}rn<h}ro<h}rp<h ]rq<jf<asssuX turtle_tfrr<}rs<(h}rt<(h}ru<h}rv<h ]rw<Xros-jade-turtle-tfrx<assh }ry<h}rz<h ]r{<jx<assuh}r|<h}r}<h ]r~<Xros/jade/geometry_tutorialsr<asshˆh}r€<h}r<h}r‚<h ]rƒ<jx<asssuX naoqi_poser„<}r…<(h}r†<(h}r‡<h}rˆ<h ]r‰<Xros-jade-naoqi-poserŠ<assh }r‹<h}rŒ<h ]r<jŠ<assuh}rŽ<h}r<h ]r<Xros/jade/naoqi_bridger‘<asshˆh}r’<h}r“<h}r”<h ]r•<jŠ<asssuXecl_formattersr–<}r—<(h}r˜<(h}r™<h}rš<h ]r›<Xros-jade-ecl-formattersrœ<assh }r<h}rž<h ]rŸ<jœ<assuh}r <h}r¡<h ]r¢<Xros/jade/ecl_corer£<asshˆh}r¤<h}r¥<h}r¦<h ]r§<jœ<asssuXmongodb_store_msgsr¨<}r©<(h}rª<(h}r«<h}r¬<h ]r­<Xros-jade-mongodb-store-msgsr®<assh }r¯<h}r°<h ]r±<j®<assuh}r²<h}r³<h ]r´<Xros/jade/mongodb_storerµ<asshˆh}r¶<h}r·<h}r¸<h ]r¹<j®<asssuXpr2_descriptionrº<}r»<(h}r¼<(h}r½<h}r¾<h ]r¿<Xros-jade-pr2-descriptionrÀ<assh }rÁ<h}rÂ<h ]rÃ<jÀ<assuh}rÄ<h}rÅ<h ]rÆ<Xros/jade/pr2_commonrÇ<asshˆh}rÈ<h}rÉ<h}rÊ<h ]rË<jÀ<asssuXpolar_scan_matcherrÌ<}rÍ<(h}rÎ<(h}rÏ<h}rÐ<h ]rÑ<Xros-jade-polar-scan-matcherrÒ<assh }rÓ<h}rÔ<h ]rÕ<jÒ<assuh}rÖ<h}r×<h ]rØ<Xros/jade/scan_toolsrÙ<asshˆh}rÚ<h}rÛ<h}rÜ<h ]rÝ<jÒ<asssuXurg_noderÞ<}rß<(h}rà<(h}rá<h}râ<h ]rã<Xros-jade-urg-noderä<assh }rå<h}ræ<h ]rç<jä<assuh}rè<h}ré<h ]rê<Xros/jade/urg_noderë<asshˆh}rì<h}rí<h}rî<h ]rï<jä<asssuXjsk_recognition_utilsrð<}rñ<(h}rò<(h}ró<h}rô<h ]rõ<Xros-jade-jsk-recognition-utilsrö<assh }r÷<h}rø<h ]rù<jö<assuh}rú<h}rû<h ]rü<Xros/jade/jsk_recognitionrý<asshˆh}rþ<h}rÿ<h}r=h ]r=jö<asssuXmav_msgsr=}r=(h}r=(h}r=h}r=h ]r=Xros-jade-mav-msgsr=assh }r =h}r =h ]r =j=assuh}r =h}r =h ]r=Xros/jade/mav_commr=asshˆh}r=h}r=h}r=h ]r=j=asssuXrqt_srvr=}r=(h}r=(h}r=h}r=h ]r=Xros-jade-rqt-srvr=assh }r=h}r=h ]r=j=assuh}r=h}r=h ]r =Xros/jade/rqt_srvr!=asshˆh}r"=h}r#=h}r$=h ]r%=j=asssuXroslisp_utilitiesr&=}r'=(h}r(=(h}r)=h}r*=h ]r+=Xros-jade-roslisp-utilitiesr,=assh }r-=h}r.=h ]r/=j,=assuh}r0=h}r1=h ]r2=Xros/jade/roslisp_commonr3=asshˆh}r4=h}r5=h}r6=h ]r7=j,=asssuX roseus_smachr8=}r9=(h}r:=(h}r;=h}r<=h ]r==Xros-jade-roseus-smachr>=assh }r?=h}r@=h ]rA=j>=assuh}rB=h}rC=h ]rD=Xros/jade/jsk_roseusrE=asshˆh}rF=h}rG=h}rH=h ]rI=j>=asssuXcatkinize_thisrJ=}rK=(h}rL=(h}rM=h}rN=h ]rO=Xros-jade-catkinize-thisrP=assh }rQ=h}rR=h ]rS=jP=assuh}rT=h}rU=h ]rV=Xros/jade/wu_ros_toolsrW=asshˆh}rX=h}rY=h}rZ=h ]r[=jP=asssuXurdf_sim_tutorialr\=}r]=(h}r^=(h}r_=h}r`=h ]ra=Xros-jade-urdf-sim-tutorialrb=assh }rc=h}rd=h ]re=jb=assuh}rf=h}rg=h ]rh=Xros/jade/urdf_tutorialri=asshˆh}rj=h}rk=h}rl=h ]rm=jb=asssuX cv_camerarn=}ro=(h}rp=(h}rq=h}rr=h ]rs=Xros-jade-cv-camerart=assh }ru=h}rv=h ]rw=jt=assuh}rx=h}ry=h ]rz=Xros/jade/cv_camerar{=asshˆh}r|=h}r}=h}r~=h ]r=jt=asssuXgrasp_stability_msgsr€=}r=(h}r‚=(h}rƒ=h}r„=h ]r…=Xros-jade-grasp-stability-msgsr†=assh }r‡=h}rˆ=h ]r‰=j†=assuh}rŠ=h}r‹=h ]rŒ=Xros/jade/iai_common_msgsr=asshˆh}rŽ=h}r=h}r=h ]r‘=j†=asssuXimu_sensor_controllerr’=}r“=(h}r”=(h}r•=h}r–=h ]r—=Xros-jade-imu-sensor-controllerr˜=assh }r™=h}rš=h ]r›=j˜=assuh}rœ=h}r=h ]rž=Xros/jade/ros_controllersrŸ=asshˆh}r =h}r¡=h}r¢=h ]r£=j˜=asssuXrtt_stereo_msgsr¤=}r¥=(h}r¦=(h}r§=h}r¨=h ]r©=Xros-jade-rtt-stereo-msgsrª=assh }r«=h}r¬=h ]r­=jª=assuh}r®=h}r¯=h ]r°=Xros/jade/rtt_ros_integrationr±=asshˆh}r²=h}r³=h}r´=h ]rµ=jª=asssuX grid_map_msgsr¶=}r·=(h}r¸=(h}r¹=h}rº=h ]r»=Xros-jade-grid-map-msgsr¼=assh }r½=h}r¾=h ]r¿=j¼=assuh}rÀ=h}rÁ=h ]rÂ=Xros/jade/grid_maprÃ=asshˆh}rÄ=h}rÅ=h}rÆ=h ]rÇ=j¼=asssuXrqt_py_consolerÈ=}rÉ=(h}rÊ=(h}rË=h}rÌ=h ]rÍ=Xros-jade-rqt-py-consolerÎ=assh }rÏ=h}rÐ=h ]rÑ=jÎ=assuh}rÒ=h}rÓ=h ]rÔ=Xros/jade/rqt_py_consolerÕ=asshˆh}rÖ=h}r×=h}rØ=h ]rÙ=jÎ=asssuXnav2d_explorationrÚ=}rÛ=(h}rÜ=(h}rÝ=h}rÞ=h ]rß=Xros-jade-nav2d-explorationrà=assh }rá=h}râ=h ]rã=jà=assuh}rä=h}rå=h ]ræ=Xros/jade/navigation_2drç=asshˆh}rè=h}ré=h}rê=h ]rë=jà=asssuXrosparam_handlerrì=}rí=(h}rî=(h}rï=h}rð=h ]rñ=Xros-jade-rosparam-handlerrò=assh }ró=h}rô=h ]rõ=jò=assuh}rö=h}r÷=h ]rø=Xros/jade/rosparam_handlerrù=asshˆh}rú=h}rû=h}rü=h ]rý=jò=asssuX aniso8601rþ=}rÿ=(h}r>(h}r>h}r>h ]r>Xros-jade-aniso8601r>assh }r>h}r>h ]r>j>assuh}r>h}r >h ]r >Xros/jade/aniso8601r >asshˆh}r >h}r >h}r>h ]r>j>asssuXpepper_controlr>}r>(h}r>(h}r>h}r>h ]r>Xros-jade-pepper-controlr>assh }r>h}r>h ]r>j>assuh}r>h}r>h ]r>Xros/jade/pepper_virtualr>asshˆh}r>h}r>h}r >h ]r!>j>asssuX uavc_v4lctlr">}r#>(h}r$>(h}r%>h}r&>h ]r'>Xros-jade-uavc-v4lctlr(>assh }r)>h}r*>h ]r+>j(>assuh}r,>h}r->h ]r.>Xros/jade/uavc_v4lctlr/>asshˆh}r0>h}r1>h}r2>h ]r3>j(>asssuXrail_collada_modelsr4>}r5>(h}r6>(h}r7>h}r8>h ]r9>Xros-jade-rail-collada-modelsr:>assh }r;>h}r<>h ]r=>j:>assuh}r>>h}r?>h ]r@>Xros/jade/rail_collada_modelsrA>asshˆh}rB>h}rC>h}rD>h ]rE>j:>asssuXmultisense_rosrF>}rG>(h}rH>(h}rI>h}rJ>h ]rK>Xros-jade-multisense-rosrL>assh }rM>h}rN>h ]rO>jL>assuh}rP>h}rQ>h ]rR>Xros/jade/multisense_rosrS>asshˆh}rT>h}rU>h}rV>h ]rW>jL>asssuXdynamixel_driverrX>}rY>(h}rZ>(h}r[>h}r\>h ]r]>Xros-jade-dynamixel-driverr^>assh }r_>h}r`>h ]ra>j^>assuh}rb>h}rc>h ]rd>Xros/jade/dynamixel_motorre>asshˆh}rf>h}rg>h}rh>h ]ri>j^>asssuXrosbridge_serverrj>}rk>(h}rl>(h}rm>h}rn>h ]ro>Xros-jade-rosbridge-serverrp>assh }rq>h}rr>h ]rs>jp>assuh}rt>h}ru>h ]rv>Xros/jade/rosbridge_suiterw>asshˆh}rx>h}ry>h}rz>h ]r{>jp>asssuXcontroller_manager_msgsr|>}r}>(h}r~>(h}r>h}r€>h ]r>X ros-jade-controller-manager-msgsr‚>assh }rƒ>h}r„>h ]r…>j‚>assuh}r†>h}r‡>h ]rˆ>Xros/jade/ros_controlr‰>asshˆh}rŠ>h}r‹>h}rŒ>h ]r>j‚>asssuXecl_type_traitsrŽ>}r>(h}r>(h}r‘>h}r’>h ]r“>Xros-jade-ecl-type-traitsr”>assh }r•>h}r–>h ]r—>j”>assuh}r˜>h}r™>h ]rš>Xros/jade/ecl_corer›>asshˆh}rœ>h}r>h}rž>h ]rŸ>j”>asssuXrotors_simulatorr >}r¡>(h}r¢>(h}r£>h}r¤>h ]r¥>Xros-jade-rotors-simulatorr¦>assh }r§>h}r¨>h ]r©>j¦>assuh}rª>h}r«>h ]r¬>Xros/jade/rotors_simulatorr­>asshˆh}r®>h}r¯>h}r°>h ]r±>j¦>asssuXswri_route_utilr²>}r³>(h}r´>(h}rµ>h}r¶>h ]r·>Xros-jade-swri-route-utilr¸>assh }r¹>h}rº>h ]r»>j¸>assuh}r¼>h}r½>h ]r¾>Xros/jade/marti_commonr¿>asshˆh}rÀ>h}rÁ>h}rÂ>h ]rÃ>j¸>asssuXfiltersrÄ>}rÅ>(h}rÆ>(h}rÇ>h}rÈ>h ]rÉ>Xros-jade-filtersrÊ>assh }rË>h}rÌ>h ]rÍ>jÊ>assuh}rÎ>h}rÏ>h ]rÐ>Xros/jade/filtersrÑ>asshˆh}rÒ>h}rÓ>h}rÔ>h ]rÕ>jÊ>asssuX stage_rosrÖ>}r×>(h}rØ>(h}rÙ>h}rÚ>h ]rÛ>Xros-jade-stage-rosrÜ>assh }rÝ>h}rÞ>h ]rß>jÜ>assuh}rà>h}rá>h ]râ>Xros/jade/stage_rosrã>asshˆh}rä>h}rå>h}ræ>h ]rç>jÜ>asssuXcanopen_masterrè>}ré>(h}rê>(h}rë>h}rì>h ]rí>Xros-jade-canopen-masterrî>assh }rï>h}rð>h ]rñ>jî>assuh}rò>h}ró>h ]rô>Xros/jade/ros_canopenrõ>asshˆh}rö>h}r÷>h}rø>h ]rù>jî>asssuX test_mavrosrú>}rû>(h}rü>(h}rý>h}rþ>h ]rÿ>Xros-jade-test-mavrosr?assh }r?h}r?h ]r?j?assuh}r?h}r?h ]r?Xros/jade/mavrosr?asshˆh}r?h}r ?h}r ?h ]r ?j?asssuX mavros_extrasr ?}r ?(h}r?(h}r?h}r?h ]r?Xros-jade-mavros-extrasr?assh }r?h}r?h ]r?j?assuh}r?h}r?h ]r?Xros/jade/mavrosr?asshˆh}r?h}r?h}r?h ]r?j?asssuXjsk_footstep_msgsr?}r?(h}r ?(h}r!?h}r"?h ]r#?Xros-jade-jsk-footstep-msgsr$?assh }r%?h}r&?h ]r'?j$?assuh}r(?h}r)?h ]r*?Xros/jade/jsk_common_msgsr+?asshˆh}r,?h}r-?h}r.?h ]r/?j$?asssuX kdl_typekitr0?}r1?(h}r2?(h}r3?h}r4?h ]r5?Xros-jade-kdl-typekitr6?assh }r7?h}r8?h ]r9?j6?assuh}r:?h}r;?h ]r?h}r??h}r@?h ]rA?j6?asssuX joy_mouserB?}rC?(h}rD?(h}rE?h}rF?h ]rG?Xros-jade-joy-mouserH?assh }rI?h}rJ?h ]rK?jH?assuh}rL?h}rM?h ]rN?Xros/jade/jsk_controlrO?asshˆh}rP?h}rQ?h}rR?h ]rS?jH?asssuXpyros_interfaces_rosrT?}rU?(h}rV?(h}rW?h}rX?h ]rY?Xros-jade-pyros-interfaces-rosrZ?assh }r[?h}r\?h ]r]?jZ?assuh}r^?h}r_?h ]r`?Xros/jade/pyros_interfaces_rosra?asshˆh}rb?h}rc?h}rd?h ]re?jZ?asssuXswri_console_utilrf?}rg?(h}rh?(h}ri?h}rj?h ]rk?Xros-jade-swri-console-utilrl?assh }rm?h}rn?h ]ro?jl?assuh}rp?h}rq?h ]rr?Xros/jade/marti_commonrs?asshˆh}rt?h}ru?h}rv?h ]rw?jl?asssuX joy_listenerrx?}ry?(h}rz?(h}r{?h}r|?h ]r}?Xros-jade-joy-listenerr~?assh }r?h}r€?h ]r?j~?assuh}r‚?h}rƒ?h ]r„?Xros/jade/wu_ros_toolsr…?asshˆh}r†?h}r‡?h}rˆ?h ]r‰?j~?asssuXjsk_footstep_controllerrŠ?}r‹?(h}rŒ?(h}r?h}rŽ?h ]r?X ros-jade-jsk-footstep-controllerr?assh }r‘?h}r’?h ]r“?j?assuh}r”?h}r•?h ]r–?Xros/jade/jsk_controlr—?asshˆh}r˜?h}r™?h}rš?h ]r›?j?asssuXrotors_gazebo_pluginsrœ?}r?(h}rž?(h}rŸ?h}r ?h ]r¡?Xros-jade-rotors-gazebo-pluginsr¢?assh }r£?h}r¤?h ]r¥?j¢?assuh}r¦?h}r§?h ]r¨?Xros/jade/rotors_simulatorr©?asshˆh}rª?h}r«?h}r¬?h ]r­?j¢?asssuXopenhrp3r®?}r¯?(h}r°?(h}r±?h}r²?h ]r³?Xros-jade-openhrp3r´?assh }rµ?h}r¶?h ]r·?j´?assuh}r¸?h}r¹?h ]rº?Xros/jade/openhrp3r»?asshˆh}r¼?h}r½?h}r¾?h ]r¿?j´?asssuXsophusrÀ?}rÁ?(h}rÂ?(h}rÃ?h}rÄ?h ]rÅ?Xros-jade-sophusrÆ?assh }rÇ?h}rÈ?h ]rÉ?jÆ?assuh}rÊ?h}rË?h ]rÌ?Xros/jade/sophusrÍ?asshˆh}rÎ?h}rÏ?h}rÐ?h ]rÑ?jÆ?asssuXfrontier_explorationrÒ?}rÓ?(h}rÔ?(h}rÕ?h}rÖ?h ]r×?Xros-jade-frontier-explorationrØ?assh }rÙ?h}rÚ?h ]rÛ?jØ?assuh}rÜ?h}rÝ?h ]rÞ?Xros/jade/frontier_explorationrß?asshˆh}rà?h}rá?h}râ?h ]rã?jØ?asssuXrqt_guirä?}rå?(h}ræ?(h}rç?h}rè?h ]ré?Xros-jade-rqt-guirê?assh }rë?h}rì?h ]rí?jê?assuh}rî?h}rï?h ]rð?X ros/jade/rqtrñ?asshˆh}rò?h}ró?h}rô?h ]rõ?jê?asssuX fzi_icl_corerö?}r÷?(h}rø?(h}rù?h}rú?h ]rû?Xros-jade-fzi-icl-corerü?assh }rý?h}rþ?h ]rÿ?jü?assuh}r@h}r@h ]r@Xros/jade/fzi_icl_corer@asshˆh}r@h}r@h}r@h ]r@jü?asssuXroboteq_driverr@}r @(h}r @(h}r @h}r @h ]r @Xros-jade-roboteq-driverr@assh }r@h}r@h ]r@j@assuh}r@h}r@h ]r@Xros/jade/roboteqr@asshˆh}r@h}r@h}r@h ]r@j@asssuXrqt_controller_managerr@}r@(h}r@(h}r@h}r@h ]r@Xros-jade-rqt-controller-managerr @assh }r!@h}r"@h ]r#@j @assuh}r$@h}r%@h ]r&@Xros/jade/ros_controlr'@asshˆh}r(@h}r)@h}r*@h ]r+@j @asssuXgentyr,@}r-@(h}r.@(h}r/@h}r0@h ]r1@Xros-jade-gentyr2@assh }r3@h}r4@h ]r5@j2@assuh}r6@h}r7@h ]r8@Xros/jade/gentyr9@asshˆh}r:@h}r;@h}r<@h ]r=@j2@asssuX jsk_ik_serverr>@}r?@(h}r@@(h}rA@h}rB@h ]rC@Xros-jade-jsk-ik-serverrD@assh }rE@h}rF@h ]rG@jD@assuh}rH@h}rI@h ]rJ@Xros/jade/jsk_controlrK@asshˆh}rL@h}rM@h}rN@h ]rO@jD@asssuXmultirobot_map_mergerP@}rQ@(h}rR@(h}rS@h}rT@h ]rU@Xros-jade-multirobot-map-mergerV@assh }rW@h}rX@h ]rY@jV@assuh}rZ@h}r[@h ]r\@Xros/jade/m_explorer]@asshˆh}r^@h}r_@h}r`@h ]ra@jV@asssuXcatkinrb@}rc@(h}rd@(h}re@h}rf@h ]rg@Xros-jade-catkinrh@assh }ri@h}rj@h ]rk@jh@assuh}rl@h}rm@h ]rn@Xros/jade/catkinro@asshˆh}rp@h}rq@h}rr@h ]rs@jh@asssuXdiagnostic_updaterrt@}ru@(h}rv@(h}rw@h}rx@h ]ry@Xros-jade-diagnostic-updaterrz@assh }r{@h}r|@h ]r}@jz@assuh}r~@h}r@h ]r€@Xros/jade/diagnosticsr@asshˆh}r‚@h}rƒ@h}r„@h ]r…@jz@asssuXgrid_map_loaderr†@}r‡@(h}rˆ@(h}r‰@h}rŠ@h ]r‹@Xros-jade-grid-map-loaderrŒ@assh }r@h}rŽ@h ]r@jŒ@assuh}r@h}r‘@h ]r’@Xros/jade/grid_mapr“@asshˆh}r”@h}r•@h}r–@h ]r—@jŒ@asssuXgrid_map_demosr˜@}r™@(h}rš@(h}r›@h}rœ@h ]r@Xros-jade-grid-map-demosrž@assh }rŸ@h}r @h ]r¡@jž@assuh}r¢@h}r£@h ]r¤@Xros/jade/grid_mapr¥@asshˆh}r¦@h}r§@h}r¨@h ]r©@jž@asssuXswri_serial_utilrª@}r«@(h}r¬@(h}r­@h}r®@h ]r¯@Xros-jade-swri-serial-utilr°@assh }r±@h}r²@h ]r³@j°@assuh}r´@h}rµ@h ]r¶@Xros/jade/marti_commonr·@asshˆh}r¸@h}r¹@h}rº@h ]r»@j°@asssuXcsapexr¼@}r½@(h}r¾@(h}r¿@h}rÀ@h ]rÁ@Xros-jade-csapexrÂ@assh }rÃ@h}rÄ@h ]rÅ@jÂ@assuh}rÆ@h}rÇ@h ]rÈ@Xros/jade/csapexrÉ@asshˆh}rÊ@h}rË@h}rÌ@h ]rÍ@jÂ@asssuX navigationrÎ@}rÏ@(h}rÐ@(h}rÑ@h}rÒ@h ]rÓ@Xros-jade-navigationrÔ@assh }rÕ@h}rÖ@h ]r×@jÔ@assuh}rØ@h}rÙ@h ]rÚ@Xros/jade/navigationrÛ@asshˆh}rÜ@h}rÝ@h}rÞ@h ]rß@jÔ@asssuXhector_marker_drawingrà@}rá@(h}râ@(h}rã@h}rä@h ]rå@Xros-jade-hector-marker-drawingræ@assh }rç@h}rè@h ]ré@jæ@assuh}rê@h}rë@h ]rì@Xros/jade/hector_slamrí@asshˆh}rî@h}rï@h}rð@h ]rñ@jæ@asssuX swri_nodeletrò@}ró@(h}rô@(h}rõ@h}rö@h ]r÷@Xros-jade-swri-nodeletrø@assh }rù@h}rú@h ]rû@jø@assuh}rü@h}rý@h ]rþ@Xros/jade/marti_commonrÿ@asshˆh}rAh}rAh}rAh ]rAjø@asssuXeffort_controllersrA}rA(h}rA(h}rAh}rAh ]r AXros-jade-effort-controllersr Aassh }r Ah}r Ah ]r Aj Aassuh}rAh}rAh ]rAXros/jade/ros_controllersrAasshˆh}rAh}rAh}rAh ]rAj AasssuXdepth_image_procrA}rA(h}rA(h}rAh}rAh ]rAXros-jade-depth-image-procrAassh }rAh}rAh ]rAjAassuh}r Ah}r!Ah ]r"AXros/jade/image_pipeliner#Aasshˆh}r$Ah}r%Ah}r&Ah ]r'AjAasssuX robot_upstartr(A}r)A(h}r*A(h}r+Ah}r,Ah ]r-AXros-jade-robot-upstartr.Aassh }r/Ah}r0Ah ]r1Aj.Aassuh}r2Ah}r3Ah ]r4AXros/jade/robot_upstartr5Aasshˆh}r6Ah}r7Ah}r8Ah ]r9Aj.AasssuXschunk_canopen_driverr:A}r;A(h}rAh ]r?AXros-jade-schunk-canopen-driverr@Aassh }rAAh}rBAh ]rCAj@Aassuh}rDAh}rEAh ]rFAXros/jade/schunk_canopen_driverrGAasshˆh}rHAh}rIAh}rJAh ]rKAj@AasssuXjsk_recognition_msgsrLA}rMA(h}rNA(h}rOAh}rPAh ]rQAXros-jade-jsk-recognition-msgsrRAassh }rSAh}rTAh ]rUAjRAassuh}rVAh}rWAh ]rXAXros/jade/jsk_recognitionrYAasshˆh}rZAh}r[Ah}r\Ah ]r]AjRAasssuXjskeusr^A}r_A(h}r`A(h}raAh}rbAh ]rcAXros-jade-jskeusrdAassh }reAh}rfAh ]rgAjdAassuh}rhAh}riAh ]rjAXros/jade/jskeusrkAasshˆh}rlAh}rmAh}rnAh ]roAjdAasssuXinteractive_marker_proxyrpA}rqA(h}rrA(h}rsAh}rtAh ]ruAX!ros-jade-interactive-marker-proxyrvAassh }rwAh}rxAh ]ryAjvAassuh}rzAh}r{Ah ]r|AX!ros/jade/interactive_marker_proxyr}Aasshˆh}r~Ah}rAh}r€Ah ]rAjvAasssuX rtt_rosclockr‚A}rƒA(h}r„A(h}r…Ah}r†Ah ]r‡AXros-jade-rtt-rosclockrˆAassh }r‰Ah}rŠAh ]r‹AjˆAassuh}rŒAh}rAh ]rŽAXros/jade/rtt_ros_integrationrAasshˆh}rAh}r‘Ah}r’Ah ]r“AjˆAasssuXindustrial_msgsr”A}r•A(h}r–A(h}r—Ah}r˜Ah ]r™AXros-jade-industrial-msgsršAassh }r›Ah}rœAh ]rAjšAassuh}ržAh}rŸAh ]r AXros/jade/industrial_corer¡Aasshˆh}r¢Ah}r£Ah}r¤Ah ]r¥AjšAasssuXtheora_image_transportr¦A}r§A(h}r¨A(h}r©Ah}rªAh ]r«AXros-jade-theora-image-transportr¬Aassh }r­Ah}r®Ah ]r¯Aj¬Aassuh}r°Ah}r±Ah ]r²AX ros/jade/image_transport_pluginsr³Aasshˆh}r´Ah}rµAh}r¶Ah ]r·Aj¬AasssuXflask_reverse_proxyr¸A}r¹A(h}rºA(h}r»Ah}r¼Ah ]r½AXros-jade-flask-reverse-proxyr¾Aassh }r¿Ah}rÀAh ]rÁAj¾Aassuh}rÂAh}rÃAh ]rÄAXros/jade/flask_reverse_proxyrÅAasshˆh}rÆAh}rÇAh}rÈAh ]rÉAj¾AasssuXswri_image_utilrÊA}rËA(h}rÌA(h}rÍAh}rÎAh ]rÏAXros-jade-swri-image-utilrÐAassh }rÑAh}rÒAh ]rÓAjÐAassuh}rÔAh}rÕAh ]rÖAXros/jade/marti_commonr×Aasshˆh}rØAh}rÙAh}rÚAh ]rÛAjÐAasssuXgenpyrÜA}rÝA(h}rÞA(h}rßAh}ràAh ]ráAXros-jade-genpyrâAassh }rãAh}räAh ]råAjâAassuh}ræAh}rçAh ]rèAXros/jade/genpyréAasshˆh}rêAh}rëAh}rìAh ]ríAjâAasssuX rqt_publisherrîA}rïA(h}rðA(h}rñAh}ròAh ]róAXros-jade-rqt-publisherrôAassh }rõAh}röAh ]r÷AjôAassuh}røAh}rùAh ]rúAXros/jade/rqt_publisherrûAasshˆh}rüAh}rýAh}rþAh ]rÿAjôAasssuXrplidar_pythonrB}rB(h}rB(h}rBh}rBh ]rBXros-jade-rplidar-pythonrBassh }rBh}rBh ]r BjBassuh}r Bh}r Bh ]r BXros/jade/rplidar_pythonr Basshˆh}rBh}rBh}rBh ]rBjBasssuXyasonrB}rB(h}rB(h}rBh}rBh ]rBXros-jade-yasonrBassh }rBh}rBh ]rBjBassuh}rBh}rBh ]rBXros/jade/cram_3rdpartyrBasshˆh}r Bh}r!Bh}r"Bh ]r#BjBasssuXarbotix_sensorsr$B}r%B(h}r&B(h}r'Bh}r(Bh ]r)BXros-jade-arbotix-sensorsr*Bassh }r+Bh}r,Bh ]r-Bj*Bassuh}r.Bh}r/Bh ]r0BXros/jade/arbotix_rosr1Basshˆh}r2Bh}r3Bh}r4Bh ]r5Bj*BasssuXkatanar6B}r7B(h}r8B(h}r9Bh}r:Bh ]r;BXros-jade-katanarBh ]r?BjCXros/jade/pr2_controllersr?Casshˆh}r@Ch}rACh}rBCh ]rCCj8CasssuXvisualization_tutorialsrDC}rEC(h}rFC(h}rGCh}rHCh ]rICX ros-jade-visualization-tutorialsrJCassh }rKCh}rLCh ]rMCjJCassuh}rNCh}rOCh ]rPCX ros/jade/visualization_tutorialsrQCasshˆh}rRCh}rSCh}rTCh ]rUCjJCasssuXmaster_discovery_fkierVC}rWC(h}rXC(h}rYCh}rZCh ]r[CXros-jade-master-discovery-fkier\Cassh }r]Ch}r^Ch ]r_Cj\Cassuh}r`Ch}raCh ]rbCXros/jade/multimaster_fkiercCasshˆh}rdCh}reCh}rfCh ]rgCj\CasssuXvelocity_controllersrhC}riC(h}rjC(h}rkCh}rlCh ]rmCXros-jade-velocity-controllersrnCassh }roCh}rpCh ]rqCjnCassuh}rrCh}rsCh ]rtCXros/jade/ros_controllersruCasshˆh}rvCh}rwCh}rxCh ]ryCjnCasssuX trac_ik_librzC}r{C(h}r|C(h}r}Ch}r~Ch ]rCXros-jade-trac-ik-libr€Cassh }rCh}r‚Ch ]rƒCj€Cassuh}r„Ch}r…Ch ]r†CXros/jade/trac_ikr‡Casshˆh}rˆCh}r‰Ch}rŠCh ]r‹Cj€CasssuXcl_storerŒC}rC(h}rŽC(h}rCh}rCh ]r‘CXros-jade-cl-storer’Cassh }r“Ch}r”Ch ]r•Cj’Cassuh}r–Ch}r—Ch ]r˜CXros/jade/cram_3rdpartyr™Casshˆh}ršCh}r›Ch}rœCh ]rCj’CasssuX rosgraph_msgsržC}rŸC(h}r C(h}r¡Ch}r¢Ch ]r£CXros-jade-rosgraph-msgsr¤Cassh }r¥Ch}r¦Ch ]r§Cj¤Cassuh}r¨Ch}r©Ch ]rªCXros/jade/ros_comm_msgsr«Casshˆh}r¬Ch}r­Ch}r®Ch ]r¯Cj¤CasssuXrospy_message_converterr°C}r±C(h}r²C(h}r³Ch}r´Ch ]rµCX ros-jade-rospy-message-converterr¶Cassh }r·Ch}r¸Ch ]r¹Cj¶Cassuh}rºCh}r»Ch ]r¼CX ros/jade/rospy_message_converterr½Casshˆh}r¾Ch}r¿Ch}rÀCh ]rÁCj¶CasssuX imu_toolsrÂC}rÃC(h}rÄC(h}rÅCh}rÆCh ]rÇCXros-jade-imu-toolsrÈCassh }rÉCh}rÊCh ]rËCjÈCassuh}rÌCh}rÍCh ]rÎCXros/jade/imu_toolsrÏCasshˆh}rÐCh}rÑCh}rÒCh ]rÓCjÈCasssuX ros_controlrÔC}rÕC(h}rÖC(h}r×Ch}rØCh ]rÙCXros-jade-ros-controlrÚCassh }rÛCh}rÜCh ]rÝCjÚCassuh}rÞCh}rßCh ]ràCXros/jade/ros_controlráCasshˆh}râCh}rãCh}räCh ]råCjÚCasssuX rqt_gui_cppræC}rçC(h}rèC(h}réCh}rêCh ]rëCXros-jade-rqt-gui-cpprìCassh }ríCh}rîCh ]rïCjìCassuh}rðCh}rñCh ]ròCX ros/jade/rqtróCasshˆh}rôCh}rõCh}röCh ]r÷CjìCasssuXimage_exposure_msgsrøC}rùC(h}rúC(h}rûCh}rüCh ]rýCXros-jade-image-exposure-msgsrþCassh }rÿCh}rDh ]rDjþCassuh}rDh}rDh ]rDX ros/jade/pointgrey_camera_driverrDasshˆh}rDh}rDh}rDh ]r DjþCasssuXurg_cr D}r D(h}r D(h}r Dh}rDh ]rDXros-jade-urg-crDassh }rDh}rDh ]rDjDassuh}rDh}rDh ]rDXros/jade/urg_crDasshˆh}rDh}rDh}rDh ]rDjDasssuXrqt_robot_pluginsrD}rD(h}rD(h}rDh}r Dh ]r!DXros-jade-rqt-robot-pluginsr"Dassh }r#Dh}r$Dh ]r%Dj"Dassuh}r&Dh}r'Dh ]r(DXros/jade/rqt_robot_pluginsr)Dasshˆh}r*Dh}r+Dh}r,Dh ]r-Dj"DasssuXpeople_velocity_trackerr.D}r/D(h}r0D(h}r1Dh}r2Dh ]r3DX ros-jade-people-velocity-trackerr4Dassh }r5Dh}r6Dh ]r7Dj4Dassuh}r8Dh}r9Dh ]r:DXros/jade/peopler;Dasshˆh}rDh ]r?Dj4DasssuX pr2_mechanismr@D}rAD(h}rBD(h}rCDh}rDDh ]rEDXros-jade-pr2-mechanismrFDassh }rGDh}rHDh ]rIDjFDassuh}rJDh}rKDh ]rLDXros/jade/pr2_mechanismrMDasshˆh}rNDh}rODh}rPDh ]rQDjFDasssuX swri_rospyrRD}rSD(h}rTD(h}rUDh}rVDh ]rWDXros-jade-swri-rospyrXDassh }rYDh}rZDh ]r[DjXDassuh}r\Dh}r]Dh ]r^DXros/jade/marti_commonr_Dasshˆh}r`Dh}raDh}rbDh ]rcDjXDasssuXmoveit_ros_robot_interactionrdD}reD(h}rfD(h}rgDh}rhDh ]riDX%ros-jade-moveit-ros-robot-interactionrjDassh }rkDh}rlDh ]rmDjjDassuh}rnDh}roDh ]rpDXros/jade/moveitrqDasshˆh}rrDh}rsDh}rtDh ]ruDjjDasssuX lisp_unitrvD}rwD(h}rxD(h}ryDh}rzDh ]r{DXros-jade-lisp-unitr|Dassh }r}Dh}r~Dh ]rDj|Dassuh}r€Dh}rDh ]r‚DXros/jade/cram_3rdpartyrƒDasshˆh}r„Dh}r…Dh}r†Dh ]r‡Dj|DasssuXcl_tf2rˆD}r‰D(h}rŠD(h}r‹Dh}rŒDh ]rDXros-jade-cl-tf2rŽDassh }rDh}rDh ]r‘DjŽDassuh}r’Dh}r“Dh ]r”DXros/jade/roslisp_commonr•Dasshˆh}r–Dh}r—Dh}r˜Dh ]r™DjŽDasssuXroslisp_commonršD}r›D(h}rœD(h}rDh}ržDh ]rŸDXros-jade-roslisp-commonr Dassh }r¡Dh}r¢Dh ]r£Dj Dassuh}r¤Dh}r¥Dh ]r¦DXros/jade/roslisp_commonr§Dasshˆh}r¨Dh}r©Dh}rªDh ]r«Dj DasssuXstereo_image_procr¬D}r­D(h}r®D(h}r¯Dh}r°Dh ]r±DXros-jade-stereo-image-procr²Dassh }r³Dh}r´Dh ]rµDj²Dassuh}r¶Dh}r·Dh ]r¸DXros/jade/image_pipeliner¹Dasshˆh}rºDh}r»Dh}r¼Dh ]r½Dj²DasssuXmapvizr¾D}r¿D(h}rÀD(h}rÁDh}rÂDh ]rÃDXros-jade-mapvizrÄDassh }rÅDh}rÆDh ]rÇDjÄDassuh}rÈDh}rÉDh ]rÊDXros/jade/mapvizrËDasshˆh}rÌDh}rÍDh}rÎDh ]rÏDjÄDasssuXmaster_sync_fkierÐD}rÑD(h}rÒD(h}rÓDh}rÔDh ]rÕDXros-jade-master-sync-fkierÖDassh }r×Dh}rØDh ]rÙDjÖDassuh}rÚDh}rÛDh ]rÜDXros/jade/multimaster_fkierÝDasshˆh}rÞDh}rßDh}ràDh ]ráDjÖDasssuX slam_gmappingrâD}rãD(h}räD(h}råDh}ræDh ]rçDXros-jade-slam-gmappingrèDassh }réDh}rêDh ]rëDjèDassuh}rìDh}ríDh ]rîDXros/jade/slam_gmappingrïDasshˆh}rðDh}rñDh}ròDh ]róDjèDasssuXhector_trajectory_serverrôD}rõD(h}röD(h}r÷Dh}røDh ]rùDX!ros-jade-hector-trajectory-serverrúDassh }rûDh}rüDh ]rýDjúDassuh}rþDh}rÿDh ]rEXros/jade/hector_slamrEasshˆh}rEh}rEh}rEh ]rEjúDasssuXteb_local_planner_tutorialsrE}rE(h}rE(h}r Eh}r Eh ]r EX$ros-jade-teb-local-planner-tutorialsr Eassh }r Eh}rEh ]rEj Eassuh}rEh}rEh ]rEX$ros/jade/teb_local_planner_tutorialsrEasshˆh}rEh}rEh}rEh ]rEj EasssuXgrid_map_rviz_pluginrE}rE(h}rE(h}rEh}rEh ]rEXros-jade-grid-map-rviz-pluginrEassh }rEh}r Eh ]r!EjEassuh}r"Eh}r#Eh ]r$EXros/jade/grid_mapr%Easshˆh}r&Eh}r'Eh}r(Eh ]r)EjEasssuX easy_markersr*E}r+E(h}r,E(h}r-Eh}r.Eh ]r/EXros-jade-easy-markersr0Eassh }r1Eh}r2Eh ]r3Ej0Eassuh}r4Eh}r5Eh ]r6EXros/jade/wu_ros_toolsr7Easshˆh}r8Eh}r9Eh}r:Eh ]r;Ej0EasssuXps3joyrE(h}r?Eh}r@Eh ]rAEXros-jade-ps3joyrBEassh }rCEh}rDEh ]rEEjBEassuh}rFEh}rGEh ]rHEXros/jade/joystick_driversrIEasshˆh}rJEh}rKEh}rLEh ]rMEjBEasssuXstatistics_msgsrNE}rOE(h}rPE(h}rQEh}rREh ]rSEXros-jade-statistics-msgsrTEassh }rUEh}rVEh ]rWEjTEassuh}rXEh}rYEh ]rZEX ros/jade/pointgrey_camera_driverr[Easshˆh}r\Eh}r]Eh}r^Eh ]r_EjTEasssuXiai_kinematics_msgsr`E}raE(h}rbE(h}rcEh}rdEh ]reEXros-jade-iai-kinematics-msgsrfEassh }rgEh}rhEh ]riEjfEassuh}rjEh}rkEh ]rlEXros/jade/iai_common_msgsrmEasshˆh}rnEh}roEh}rpEh ]rqEjfEasssuX rtabmap_rosrrE}rsE(h}rtE(h}ruEh}rvEh ]rwEXros-jade-rtabmap-rosrxEassh }ryEh}rzEh ]r{EjxEassuh}r|Eh}r}Eh ]r~EXros/jade/rtabmap_rosrEasshˆh}r€Eh}rEh}r‚Eh ]rƒEjxEasssuXmapviz_pluginsr„E}r…E(h}r†E(h}r‡Eh}rˆEh ]r‰EXros-jade-mapviz-pluginsrŠEassh }r‹Eh}rŒEh ]rEjŠEassuh}rŽEh}rEh ]rEXros/jade/mapvizr‘Easshˆh}r’Eh}r“Eh}r”Eh ]r•EjŠEasssuXmove_slow_and_clearr–E}r—E(h}r˜E(h}r™Eh}ršEh ]r›EXros-jade-move-slow-and-clearrœEassh }rEh}ržEh ]rŸEjœEassuh}r Eh}r¡Eh ]r¢EXros/jade/navigationr£Easshˆh}r¤Eh}r¥Eh}r¦Eh ]r§EjœEasssuXroseusr¨E}r©E(h}rªE(h}r«Eh}r¬Eh ]r­EXros-jade-roseusr®Eassh }r¯Eh}r°Eh ]r±Ej®Eassuh}r²Eh}r³Eh ]r´EXros/jade/jsk_roseusrµEasshˆh}r¶Eh}r·Eh}r¸Eh ]r¹Ej®EasssuXopencv_candidaterºE}r»E(h}r¼E(h}r½Eh}r¾Eh ]r¿EXros-jade-opencv-candidaterÀEassh }rÁEh}rÂEh ]rÃEjÀEassuh}rÄEh}rÅEh ]rÆEXros/jade/opencv_candidaterÇEasshˆh}rÈEh}rÉEh}rÊEh ]rËEjÀEasssuX naoqi_libqirÌE}rÍE(h}rÎE(h}rÏEh}rÐEh ]rÑEXros-jade-naoqi-libqirÒEassh }rÓEh}rÔEh ]rÕEjÒEassuh}rÖEh}r×Eh ]rØEXros/jade/naoqi_libqirÙEasshˆh}rÚEh}rÛEh}rÜEh ]rÝEjÒEasssuXpepper_dcm_bringuprÞE}rßE(h}ràE(h}ráEh}râEh ]rãEXros-jade-pepper-dcm-bringupräEassh }råEh}ræEh ]rçEjäEassuh}rèEh}réEh ]rêEXros/jade/pepper_dcm_robotrëEasshˆh}rìEh}ríEh}rîEh ]rïEjäEasssuXrtt_geometry_msgsrðE}rñE(h}ròE(h}róEh}rôEh ]rõEXros-jade-rtt-geometry-msgsröEassh }r÷Eh}røEh ]rùEjöEassuh}rúEh}rûEh ]rüEXros/jade/rtt_ros_integrationrýEasshˆh}rþEh}rÿEh}rFh ]rFjöEasssuX range_msgsrF}rF(h}rF(h}rFh}rFh ]rFXros-jade-range-msgsrFassh }r Fh}r Fh ]r FjFassuh}r Fh}r Fh ]rFXros/jade/range_msgsrFasshˆh}rFh}rFh}rFh ]rFjFasssuX rtmros_commonrF}rF(h}rF(h}rFh}rFh ]rFXros-jade-rtmros-commonrFassh }rFh}rFh ]rFjFassuh}rFh}rFh ]r FXros/jade/rtmros_commonr!Fasshˆh}r"Fh}r#Fh}r$Fh ]r%FjFasssuXrobot_state_publisherr&F}r'F(h}r(F(h}r)Fh}r*Fh ]r+FXros-jade-robot-state-publisherr,Fassh }r-Fh}r.Fh ]r/Fj,Fassuh}r0Fh}r1Fh ]r2FXros/jade/robot_state_publisherr3Fasshˆh}r4Fh}r5Fh}r6Fh ]r7Fj,FasssuX wireless_msgsr8F}r9F(h}r:F(h}r;Fh}rFassh }r?Fh}r@Fh ]rAFj>Fassuh}rBFh}rCFh ]rDFXros/jade/wirelessrEFasshˆh}rFFh}rGFh}rHFh ]rIFj>FasssuX rtsprofilerJF}rKF(h}rLF(h}rMFh}rNFh ]rOFXros-jade-rtsprofilerPFassh }rQFh}rRFh ]rSFjPFassuh}rTFh}rUFh ]rVFXros/jade/rtsprofilerWFasshˆh}rXFh}rYFh}rZFh ]r[FjPFasssuu(X roswiki_noder\F}r]F(h}r^F(h}r_Fh}r`Fh ]raFXros-jade-roswiki-noderbFassh }rcFh}rdFh ]reFjbFassuh}rfFh}rgFh ]rhFXros/jade/wu_ros_toolsriFasshˆh}rjFh}rkFh}rlFh ]rmFjbFasssuXlaser_pipelinernF}roF(h}rpF(h}rqFh}rrFh ]rsFXros-jade-laser-pipelinertFassh }ruFh}rvFh ]rwFjtFassuh}rxFh}ryFh ]rzFXros/jade/laser_pipeliner{Fasshˆh}r|Fh}r}Fh}r~Fh ]rFjtFasssuXmarti_visualization_msgsr€F}rF(h}r‚F(h}rƒFh}r„Fh ]r…FX!ros-jade-marti-visualization-msgsr†Fassh }r‡Fh}rˆFh ]r‰Fj†Fassuh}rŠFh}r‹Fh ]rŒFXros/jade/marti_messagesrFasshˆh}rŽFh}rFh}rFh ]r‘Fj†FasssuXrqt_reconfigurer’F}r“F(h}r”F(h}r•Fh}r–Fh ]r—FXros-jade-rqt-reconfigurer˜Fassh }r™Fh}ršFh ]r›Fj˜Fassuh}rœFh}rFh ]ržFXros/jade/rqt_reconfigurerŸFasshˆh}r Fh}r¡Fh}r¢Fh ]r£Fj˜FasssuXtrivial_featuresr¤F}r¥F(h}r¦F(h}r§Fh}r¨Fh ]r©FXros-jade-trivial-featuresrªFassh }r«Fh}r¬Fh ]r­FjªFassuh}r®Fh}r¯Fh ]r°FXros/jade/cram_3rdpartyr±Fasshˆh}r²Fh}r³Fh}r´Fh ]rµFjªFasssuX variant_msgsr¶F}r·F(h}r¸F(h}r¹Fh}rºFh ]r»FXros-jade-variant-msgsr¼Fassh }r½Fh}r¾Fh ]r¿Fj¼Fassuh}rÀFh}rÁFh ]rÂFXros/jade/variantrÃFasshˆh}rÄFh}rÅFh}rÆFh ]rÇFj¼FasssuXroboteq_diagnosticsrÈF}rÉF(h}rÊF(h}rËFh}rÌFh ]rÍFXros-jade-roboteq-diagnosticsrÎFassh }rÏFh}rÐFh ]rÑFjÎFassuh}rÒFh}rÓFh ]rÔFXros/jade/roboteqrÕFasshˆh}rÖFh}r×Fh}rØFh ]rÙFjÎFasssuXmoveit_ros_planningrÚF}rÛF(h}rÜF(h}rÝFh}rÞFh ]rßFXros-jade-moveit-ros-planningràFassh }ráFh}râFh ]rãFjàFassuh}räFh}råFh ]ræFXros/jade/moveitrçFasshˆh}rèFh}réFh}rêFh ]rëFjàFasssuXjoint_states_settlerrìF}ríF(h}rîF(h}rïFh}rðFh ]rñFXros-jade-joint-states-settlerròFassh }róFh}rôFh ]rõFjòFassuh}röFh}r÷Fh ]røFXros/jade/calibrationrùFasshˆh}rúFh}rûFh}rüFh ]rýFjòFasssuX rail_ceilingrþF}rÿF(h}rG(h}rGh}rGh ]rGXros-jade-rail-ceilingrGassh }rGh}rGh ]rGjGassuh}rGh}r Gh ]r GXros/jade/rail_ceilingr Gasshˆh}r Gh}r Gh}rGh ]rGjGasssuXobject_recognition_capturerG}rG(h}rG(h}rGh}rGh ]rGX#ros-jade-object-recognition-capturerGassh }rGh}rGh ]rGjGassuh}rGh}rGh ]rGX#ros/jade/object_recognition_capturerGasshˆh}rGh}rGh}r Gh ]r!GjGasssuXrqt_robot_monitorr"G}r#G(h}r$G(h}r%Gh}r&Gh ]r'GXros-jade-rqt-robot-monitorr(Gassh }r)Gh}r*Gh ]r+Gj(Gassuh}r,Gh}r-Gh ]r.GXros/jade/rqt_robot_monitorr/Gasshˆh}r0Gh}r1Gh}r2Gh ]r3Gj(GasssuXmkr4G}r5G(h}r6G(h}r7Gh}r8Gh ]r9GX ros-jade-mkr:Gassh }r;Gh}rGh}r?Gh ]r@GX ros/jade/rosrAGasshˆh}rBGh}rCGh}rDGh ]rEGj:GasssuXrostopicrFG}rGG(h}rHG(h}rIGh}rJGh ]rKGXros-jade-rostopicrLGassh }rMGh}rNGh ]rOGjLGassuh}rPGh}rQGh ]rRGXros/jade/ros_commrSGasshˆh}rTGh}rUGh}rVGh ]rWGjLGasssuXpyzmprXG}rYG(h}rZG(h}r[Gh}r\Gh ]r]GXros-jade-pyzmpr^Gassh }r_Gh}r`Gh ]raGj^Gassuh}rbGh}rcGh ]rdGXros/jade/pyzmpreGasshˆh}rfGh}rgGh}rhGh ]riGj^GasssuX moveit_pythonrjG}rkG(h}rlG(h}rmGh}rnGh ]roGXros-jade-moveit-pythonrpGassh }rqGh}rrGh ]rsGjpGassuh}rtGh}ruGh ]rvGXros/jade/moveit_pythonrwGasshˆh}rxGh}ryGh}rzGh ]r{GjpGasssuXnaoqi_dashboardr|G}r}G(h}r~G(h}rGh}r€Gh ]rGXros-jade-naoqi-dashboardr‚Gassh }rƒGh}r„Gh ]r…Gj‚Gassuh}r†Gh}r‡Gh ]rˆGXros/jade/naoqi_dashboardr‰Gasshˆh}rŠGh}r‹Gh}rŒGh ]rGj‚GasssuX shape_toolsrŽG}rG(h}rG(h}r‘Gh}r’Gh ]r“GXros-jade-shape-toolsr”Gassh }r•Gh}r–Gh ]r—Gj”Gassuh}r˜Gh}r™Gh ]ršGXros/jade/shape_toolsr›Gasshˆh}rœGh}rGh}ržGh ]rŸGj”GasssuX rosh_geometryr G}r¡G(h}r¢G(h}r£Gh}r¤Gh ]r¥GXros-jade-rosh-geometryr¦Gassh }r§Gh}r¨Gh ]r©Gj¦Gassuh}rªGh}r«Gh ]r¬GXros/jade/rosh_robot_pluginsr­Gasshˆh}r®Gh}r¯Gh}r°Gh ]r±Gj¦GasssuXbattery_monitor_rmpr²G}r³G(h}r´G(h}rµGh}r¶Gh ]r·GXros-jade-battery-monitor-rmpr¸Gassh }r¹Gh}rºGh ]r»Gj¸Gassuh}r¼Gh}r½Gh ]r¾GXros/jade/battery_monitor_rmpr¿Gasshˆh}rÀGh}rÁGh}rÂGh ]rÃGj¸GasssuX p2os_launchrÄG}rÅG(h}rÆG(h}rÇGh}rÈGh ]rÉGXros-jade-p2os-launchrÊGassh }rËGh}rÌGh ]rÍGjÊGassuh}rÎGh}rÏGh ]rÐGX ros/jade/p2osrÑGasshˆh}rÒGh}rÓGh}rÔGh ]rÕGjÊGasssuXrtt_dynamic_reconfigurerÖG}r×G(h}rØG(h}rÙGh}rÚGh ]rÛGX ros-jade-rtt-dynamic-reconfigurerÜGassh }rÝGh}rÞGh ]rßGjÜGassuh}ràGh}ráGh ]râGXros/jade/rtt_ros_integrationrãGasshˆh}räGh}råGh}ræGh ]rçGjÜGasssuX vision_opencvrèG}réG(h}rêG(h}rëGh}rìGh ]ríGXros-jade-vision-opencvrîGassh }rïGh}rðGh ]rñGjîGassuh}ròGh}róGh ]rôGXros/jade/vision_opencvrõGasshˆh}röGh}r÷Gh}røGh ]rùGjîGasssuXpeoplerúG}rûG(h}rüG(h}rýGh}rþGh ]rÿGXros-jade-peoplerHassh }rHh}rHh ]rHjHassuh}rHh}rHh ]rHXros/jade/peoplerHasshˆh}rHh}r Hh}r Hh ]r HjHasssuXorocos_kinematics_dynamicsr H}r H(h}rH(h}rHh}rHh ]rHX#ros-jade-orocos-kinematics-dynamicsrHassh }rHh}rHh ]rHjHassuh}rHh}rHh ]rHX#ros/jade/orocos_kinematics_dynamicsrHasshˆh}rHh}rHh}rHh ]rHjHasssuXtransmission_interfacerH}rH(h}r H(h}r!Hh}r"Hh ]r#HXros-jade-transmission-interfacer$Hassh }r%Hh}r&Hh ]r'Hj$Hassuh}r(Hh}r)Hh ]r*HXros/jade/ros_controlr+Hasshˆh}r,Hh}r-Hh}r.Hh ]r/Hj$HasssuXturtle_actionlibr0H}r1H(h}r2H(h}r3Hh}r4Hh ]r5HXros-jade-turtle-actionlibr6Hassh }r7Hh}r8Hh ]r9Hj6Hassuh}r:Hh}r;Hh ]rHh}r?Hh}r@Hh ]rAHj6HasssuXimu_complementary_filterrBH}rCH(h}rDH(h}rEHh}rFHh ]rGHX!ros-jade-imu-complementary-filterrHHassh }rIHh}rJHh ]rKHjHHassuh}rLHh}rMHh ]rNHXros/jade/imu_toolsrOHasshˆh}rPHh}rQHh}rRHh ]rSHjHHasssuX ecl_sigslotsrTH}rUH(h}rVH(h}rWHh}rXHh ]rYHXros-jade-ecl-sigslotsrZHassh }r[Hh}r\Hh ]r]HjZHassuh}r^Hh}r_Hh ]r`HXros/jade/ecl_coreraHasshˆh}rbHh}rcHh}rdHh ]reHjZHasssuXview_controller_msgsrfH}rgH(h}rhH(h}riHh}rjHh ]rkHXros-jade-view-controller-msgsrlHassh }rmHh}rnHh ]roHjlHassuh}rpHh}rqHh ]rrHXros/jade/view_controller_msgsrsHasshˆh}rtHh}ruHh}rvHh ]rwHjlHasssuX ecl_configrxH}ryH(h}rzH(h}r{Hh}r|Hh ]r}HXros-jade-ecl-configr~Hassh }rHh}r€Hh ]rHj~Hassuh}r‚Hh}rƒHh ]r„HXros/jade/ecl_liter…Hasshˆh}r†Hh}r‡Hh}rˆHh ]r‰Hj~HasssuXposition_controllersrŠH}r‹H(h}rŒH(h}rHh}rŽHh ]rHXros-jade-position-controllersrHassh }r‘Hh}r’Hh ]r“HjHassuh}r”Hh}r•Hh ]r–HXros/jade/ros_controllersr—Hasshˆh}r˜Hh}r™Hh}ršHh ]r›HjHasssuXstream_manipulator_3drœH}rH(h}ržH(h}rŸHh}r Hh ]r¡HXros-jade-stream-manipulator-3dr¢Hassh }r£Hh}r¤Hh ]r¥Hj¢Hassuh}r¦Hh}r§Hh ]r¨HXros/jade/stream_manipulator_3dr©Hasshˆh}rªHh}r«Hh}r¬Hh ]r­Hj¢HasssuXhector_pose_estimationr®H}r¯H(h}r°H(h}r±Hh}r²Hh ]r³HXros-jade-hector-pose-estimationr´Hassh }rµHh}r¶Hh ]r·Hj´Hassuh}r¸Hh}r¹Hh ]rºHXros/jade/hector_localizationr»Hasshˆh}r¼Hh}r½Hh}r¾Hh ]r¿Hj´HasssuXpcl_rosrÀH}rÁH(h}rÂH(h}rÃHh}rÄHh ]rÅHXros-jade-pcl-rosrÆHassh }rÇHh}rÈHh ]rÉHjÆHassuh}rÊHh}rËHh ]rÌHXros/jade/perception_pclrÍHasshˆh}rÎHh}rÏHh}rÐHh ]rÑHjÆHasssuXworld_item_searchrÒH}rÓH(h}rÔH(h}rÕHh}rÖHh ]r×HXros-jade-world-item-searchrØHassh }rÙHh}rÚHh ]rÛHjØHassuh}rÜHh}rÝHh ]rÞHX"ros/jade/spatial_temporal_learningrßHasshˆh}ràHh}ráHh}râHh ]rãHjØHasssuX twist_muxräH}råH(h}ræH(h}rçHh}rèHh ]réHXros-jade-twist-muxrêHassh }rëHh}rìHh ]ríHjêHassuh}rîHh}rïHh ]rðHXros/jade/twist_muxrñHasshˆh}ròHh}róHh}rôHh ]rõHjêHasssuXnavfnröH}r÷H(h}røH(h}rùHh}rúHh ]rûHXros-jade-navfnrüHassh }rýHh}rþHh ]rÿHjüHassuh}rIh}rIh ]rIXros/jade/navigationrIasshˆh}rIh}rIh}rIh ]rIjüHasssuXomplrI}r I(h}r I(h}r Ih}r Ih ]r IX ros-jade-omplrIassh }rIh}rIh ]rIjIassuh}rIh}rIh ]rIX ros/jade/omplrIasshˆh}rIh}rIh}rIh ]rIjIasssuX desktop_fullrI}rI(h}rI(h}rIh}rIh ]rIXros-jade-desktop-fullr Iassh }r!Ih}r"Ih ]r#Ij Iassuh}r$Ih}r%Ih ]r&IXros/jade/metapackagesr'Iasshˆh}r(Ih}r)Ih}r*Ih ]r+Ij IasssuXrospeexr,I}r-I(h}r.I(h}r/Ih}r0Ih ]r1IXros-jade-rospeexr2Iassh }r3Ih}r4Ih ]r5Ij2Iassuh}r6Ih}r7Ih ]r8IXros/jade/rospeexr9Iasshˆh}r:Ih}r;Ih}rI}r?I(h}r@I(h}rAIh}rBIh ]rCIXros-jade-moveit-commanderrDIassh }rEIh}rFIh ]rGIjDIassuh}rHIh}rIIh ]rJIXros/jade/moveitrKIasshˆh}rLIh}rMIh}rNIh ]rOIjDIasssuXperception_pclrPI}rQI(h}rRI(h}rSIh}rTIh ]rUIXros-jade-perception-pclrVIassh }rWIh}rXIh ]rYIjVIassuh}rZIh}r[Ih ]r\IXros/jade/perception_pclr]Iasshˆh}r^Ih}r_Ih}r`Ih ]raIjVIasssuX rqt_tf_treerbI}rcI(h}rdI(h}reIh}rfIh ]rgIXros-jade-rqt-tf-treerhIassh }riIh}rjIh ]rkIjhIassuh}rlIh}rmIh ]rnIXros/jade/rqt_tf_treeroIasshˆh}rpIh}rqIh}rrIh ]rsIjhIasssuXrosparam_shortcutsrtI}ruI(h}rvI(h}rwIh}rxIh ]ryIXros-jade-rosparam-shortcutsrzIassh }r{Ih}r|Ih ]r}IjzIassuh}r~Ih}rIh ]r€IXros/jade/rosparam_shortcutsrIasshˆh}r‚Ih}rƒIh}r„Ih ]r…IjzIasssuXueye_camr†I}r‡I(h}rˆI(h}r‰Ih}rŠIh ]r‹IXros-jade-ueye-camrŒIassh }rIh}rŽIh ]rIjŒIassuh}rIh}r‘Ih ]r’IXros/jade/ueye_camr“Iasshˆh}r”Ih}r•Ih}r–Ih ]r—IjŒIasssuXlog4cppr˜I}r™I(h}ršI(h}r›Ih}rœIh ]rIXros-jade-log4cppržIassh }rŸIh}r Ih ]r¡IjžIassuh}r¢Ih}r£Ih ]r¤IXros/jade/log4cppr¥Iasshˆh}r¦Ih}r§Ih}r¨Ih ]r©IjžIasssuXpython-watchdogrªI}r«I(h}r¬I(h}r­Ih}r®Ih ]r¯IXros-jade-python-watchdogr°Iassh }r±Ih}r²Ih ]r³Ij°Iassuh}r´Ih}rµIh ]r¶IXros/jade/python-watchdogr·Iasshˆh}r¸Ih}r¹Ih}rºIh ]r»Ij°IasssuXnao_dcm_bringupr¼I}r½I(h}r¾I(h}r¿Ih}rÀIh ]rÁIXros-jade-nao-dcm-bringuprÂIassh }rÃIh}rÄIh ]rÅIjÂIassuh}rÆIh}rÇIh ]rÈIXros/jade/nao_dcm_robotrÉIasshˆh}rÊIh}rËIh}rÌIh ]rÍIjÂIasssuXmarti_data_structuresrÎI}rÏI(h}rÐI(h}rÑIh}rÒIh ]rÓIXros-jade-marti-data-structuresrÔIassh }rÕIh}rÖIh ]r×IjÔIassuh}rØIh}rÙIh ]rÚIXros/jade/marti_commonrÛIasshˆh}rÜIh}rÝIh}rÞIh ]rßIjÔIasssuXkatana_gazebo_pluginsràI}ráI(h}râI(h}rãIh}räIh ]råIXros-jade-katana-gazebo-pluginsræIassh }rçIh}rèIh ]réIjæIassuh}rêIh}rëIh ]rìIXros/jade/katana_driverríIasshˆh}rîIh}rïIh}rðIh ]rñIjæIasssuXsplit_sequenceròI}róI(h}rôI(h}rõIh}röIh ]r÷IXros-jade-split-sequencerøIassh }rùIh}rúIh ]rûIjøIassuh}rüIh}rýIh ]rþIXros/jade/cram_3rdpartyrÿIasshˆh}rJh}rJh}rJh ]rJjøIasssuXrail_grasp_collectionrJ}rJ(h}rJ(h}rJh}rJh ]r JXros-jade-rail-grasp-collectionr Jassh }r Jh}r Jh ]r Jj Jassuh}rJh}rJh ]rJXros/jade/rail_pick_and_placerJasshˆh}rJh}rJh}rJh ]rJj JasssuX grid_map_cvrJ}rJ(h}rJ(h}rJh}rJh ]rJXros-jade-grid-map-cvrJassh }rJh}rJh ]rJjJassuh}r Jh}r!Jh ]r"JXros/jade/grid_mapr#Jasshˆh}r$Jh}r%Jh}r&Jh ]r'JjJasssuXcollada_urdf_jsk_patchr(J}r)J(h}r*J(h}r+Jh}r,Jh ]r-JXros-jade-collada-urdf-jsk-patchr.Jassh }r/Jh}r0Jh ]r1Jj.Jassuh}r2Jh}r3Jh ]r4JXros/jade/jsk_3rdpartyr5Jasshˆh}r6Jh}r7Jh}r8Jh ]r9Jj.JasssuX jsk_gui_msgsr:J}r;J(h}rJh ]r?JXros-jade-jsk-gui-msgsr@Jassh }rAJh}rBJh ]rCJj@Jassuh}rDJh}rEJh ]rFJXros/jade/jsk_common_msgsrGJasshˆh}rHJh}rIJh}rJJh ]rKJj@JasssuX uwsim_bulletrLJ}rMJ(h}rNJ(h}rOJh}rPJh ]rQJXros-jade-uwsim-bulletrRJassh }rSJh}rTJh ]rUJjRJassuh}rVJh}rWJh ]rXJXros/jade/uwsim_bulletrYJasshˆh}rZJh}r[Jh}r\Jh ]r]JjRJasssuX class_loaderr^J}r_J(h}r`J(h}raJh}rbJh ]rcJXros-jade-class-loaderrdJassh }reJh}rfJh ]rgJjdJassuh}rhJh}riJh ]rjJXros/jade/class_loaderrkJasshˆh}rlJh}rmJh}rnJh ]roJjdJasssuX moveit_simple_controller_managerrpJ}rqJ(h}rrJ(h}rsJh}rtJh ]ruJX)ros-jade-moveit-simple-controller-managerrvJassh }rwJh}rxJh ]ryJjvJassuh}rzJh}r{Jh ]r|JXros/jade/moveitr}Jasshˆh}r~Jh}rJh}r€Jh ]rJjvJasssuXrobot_calibrationr‚J}rƒJ(h}r„J(h}r…Jh}r†Jh ]r‡JXros-jade-robot-calibrationrˆJassh }r‰Jh}rŠJh ]r‹JjˆJassuh}rŒJh}rJh ]rŽJXros/jade/robot_calibrationrJasshˆh}rJh}r‘Jh}r’Jh ]r“JjˆJasssuX nmea_msgsr”J}r•J(h}r–J(h}r—Jh}r˜Jh ]r™JXros-jade-nmea-msgsršJassh }r›Jh}rœJh ]rJjšJassuh}ržJh}rŸJh ]r JXros/jade/nmea_msgsr¡Jasshˆh}r¢Jh}r£Jh}r¤Jh ]r¥JjšJasssuXpr2_arm_kinematicsr¦J}r§J(h}r¨J(h}r©Jh}rªJh ]r«JXros-jade-pr2-arm-kinematicsr¬Jassh }r­Jh}r®Jh ]r¯Jj¬Jassuh}r°Jh}r±Jh ]r²JXros/jade/pr2_kinematicsr³Jasshˆh}r´Jh}rµJh}r¶Jh ]r·Jj¬JasssuXjsk_network_toolsr¸J}r¹J(h}rºJ(h}r»Jh}r¼Jh ]r½JXros-jade-jsk-network-toolsr¾Jassh }r¿Jh}rÀJh ]rÁJj¾Jassuh}rÂJh}rÃJh ]rÄJXros/jade/jsk_commonrÅJasshˆh}rÆJh}rÇJh}rÈJh ]rÉJj¾JasssuXcontact_states_observerrÊJ}rËJ(h}rÌJ(h}rÍJh}rÎJh ]rÏJX ros-jade-contact-states-observerrÐJassh }rÑJh}rÒJh ]rÓJjÐJassuh}rÔJh}rÕJh ]rÖJXros/jade/jsk_controlr×Jasshˆh}rØJh}rÙJh}rÚJh ]rÛJjÐJasssuXoctomap_serverrÜJ}rÝJ(h}rÞJ(h}rßJh}ràJh ]ráJXros-jade-octomap-serverrâJassh }rãJh}räJh ]råJjâJassuh}ræJh}rçJh ]rèJXros/jade/octomap_mappingréJasshˆh}rêJh}rëJh}rìJh ]ríJjâJasssuX simulatorsrîJ}rïJ(h}rðJ(h}rñJh}ròJh ]róJXros-jade-simulatorsrôJassh }rõJh}röJh ]r÷JjôJassuh}røJh}rùJh ]rúJXros/jade/metapackagesrûJasshˆh}rüJh}rýJh}rþJh ]rÿJjôJasssuXpepper_sensors_pyrK}rK(h}rK(h}rKh}rKh ]rKXros-jade-pepper-sensors-pyrKassh }rKh}rKh ]r KjKassuh}r Kh}r Kh ]r KXros/jade/pepper_robotr Kasshˆh}rKh}rKh}rKh ]rKjKasssuX rospatliterK}rK(h}rK(h}rKh}rKh ]rKXros-jade-rospatliterKassh }rKh}rKh ]rKjKassuh}rKh}rKh ]rKXros/jade/jsk_3rdpartyrKasshˆh}r Kh}r!Kh}r"Kh ]r#KjKasssuX roshlaunchr$K}r%K(h}r&K(h}r'Kh}r(Kh ]r)KXros-jade-roshlaunchr*Kassh }r+Kh}r,Kh ]r-Kj*Kassuh}r.Kh}r/Kh ]r0KXros/jade/rosh_corer1Kasshˆh}r2Kh}r3Kh}r4Kh ]r5Kj*KasssuXrqt_rvizr6K}r7K(h}r8K(h}r9Kh}r:Kh ]r;KXros-jade-rqt-rvizrKh ]r?KjLXros/jade/mavrosr?Lasshˆh}r@Lh}rALh}rBLh ]rCLj8LasssuXvisp_camera_calibrationrDL}rEL(h}rFL(h}rGLh}rHLh ]rILX ros-jade-visp-camera-calibrationrJLassh }rKLh}rLLh ]rMLjJLassuh}rNLh}rOLh ]rPLXros/jade/vision_visprQLasshˆh}rRLh}rSLh}rTLh ]rULjJLasssuXnav2drVL}rWL(h}rXL(h}rYLh}rZLh ]r[LXros-jade-nav2dr\Lassh }r]Lh}r^Lh ]r_Lj\Lassuh}r`Lh}raLh ]rbLXros/jade/navigation_2drcLasshˆh}rdLh}reLh}rfLh ]rgLj\LasssuXlibcmtrhL}riL(h}rjL(h}rkLh}rlLh ]rmLXros-jade-libcmtrnLassh }roLh}rpLh ]rqLjnLassuh}rrLh}rsLh ]rtLXros/jade/jsk_3rdpartyruLasshˆh}rvLh}rwLh}rxLh ]ryLjnLasssuXgeometryrzL}r{L(h}r|L(h}r}Lh}r~Lh ]rLXros-jade-geometryr€Lassh }rLh}r‚Lh ]rƒLj€Lassuh}r„Lh}r…Lh ]r†LXros/jade/geometryr‡Lasshˆh}rˆLh}r‰Lh}rŠLh ]r‹Lj€LasssuXmanipulation_msgsrŒL}rL(h}rŽL(h}rLh}rLh ]r‘LXros-jade-manipulation-msgsr’Lassh }r“Lh}r”Lh ]r•Lj’Lassuh}r–Lh}r—Lh ]r˜LXros/jade/manipulation_msgsr™Lasshˆh}ršLh}r›Lh}rœLh ]rLj’LasssuXjsk_footstep_plannerržL}rŸL(h}r L(h}r¡Lh}r¢Lh ]r£LXros-jade-jsk-footstep-plannerr¤Lassh }r¥Lh}r¦Lh ]r§Lj¤Lassuh}r¨Lh}r©Lh ]rªLXros/jade/jsk_controlr«Lasshˆh}r¬Lh}r­Lh}r®Lh ]r¯Lj¤LasssuX smach_msgsr°L}r±L(h}r²L(h}r³Lh}r´Lh ]rµLXros-jade-smach-msgsr¶Lassh }r·Lh}r¸Lh ]r¹Lj¶Lassuh}rºLh}r»Lh ]r¼LXros/jade/executive_smachr½Lasshˆh}r¾Lh}r¿Lh}rÀLh ]rÁLj¶LasssuXueyerÂL}rÃL(h}rÄL(h}rÅLh}rÆLh ]rÇLX ros-jade-ueyerÈLassh }rÉLh}rÊLh ]rËLjÈLassuh}rÌLh}rÍLh ]rÎLX ros/jade/ueyerÏLasshˆh}rÐLh}rÑLh}rÒLh ]rÓLjÈLasssuX geometry_msgsrÔL}rÕL(h}rÖL(h}r×Lh}rØLh ]rÙLXros-jade-geometry-msgsrÚLassh }rÛLh}rÜLh ]rÝLjÚLassuh}rÞLh}rßLh ]ràLXros/jade/common_msgsráLasshˆh}râLh}rãLh}räLh ]råLjÚLasssuXmongo_cxx_driverræL}rçL(h}rèL(h}réLh}rêLh ]rëLXros-jade-mongo-cxx-driverrìLassh }ríLh}rîLh ]rïLjìLassuh}rðLh}rñLh ]ròLXros/jade/mongo_cxx_driverróLasshˆh}rôLh}rõLh}röLh ]r÷LjìLasssuX collada_urdfrøL}rùL(h}rúL(h}rûLh}rüLh ]rýLXros-jade-collada-urdfrþLassh }rÿLh}rMh ]rMjþLassuh}rMh}rMh ]rMXros/jade/collada_urdfrMasshˆh}rMh}rMh}rMh ]r MjþLasssuXbase_local_plannerr M}r M(h}r M(h}r Mh}rMh ]rMXros-jade-base-local-plannerrMassh }rMh}rMh ]rMjMassuh}rMh}rMh ]rMXros/jade/navigationrMasshˆh}rMh}rMh}rMh ]rMjMasssuX rqt_gaugesrM}rM(h}rM(h}rMh}r Mh ]r!MXros-jade-rqt-gaugesr"Massh }r#Mh}r$Mh ]r%Mj"Massuh}r&Mh}r'Mh ]r(MXros/jade/gaugesr)Masshˆh}r*Mh}r+Mh}r,Mh ]r-Mj"MasssuX rqt_consoler.M}r/M(h}r0M(h}r1Mh}r2Mh ]r3MXros-jade-rqt-consoler4Massh }r5Mh}r6Mh ]r7Mj4Massuh}r8Mh}r9Mh ]r:MXros/jade/rqt_consoler;Masshˆh}rMh ]r?Mj4MasssuX hypothesisr@M}rAM(h}rBM(h}rCMh}rDMh ]rEMXros-jade-hypothesisrFMassh }rGMh}rHMh ]rIMjFMassuh}rJMh}rKMh ]rLMXros/jade/hypothesisrMMasshˆh}rNMh}rOMh}rPMh ]rQMjFMasssuX geometry2rRM}rSM(h}rTM(h}rUMh}rVMh ]rWMXros-jade-geometry2rXMassh }rYMh}rZMh ]r[MjXMassuh}r\Mh}r]Mh ]r^MXros/jade/geometry2r_Masshˆh}r`Mh}raMh}rbMh ]rcMjXMasssuXsick_timrdM}reM(h}rfM(h}rgMh}rhMh ]riMXros-jade-sick-timrjMassh }rkMh}rlMh ]rmMjjMassuh}rnMh}roMh ]rpMXros/jade/sick_timrqMasshˆh}rrMh}rsMh}rtMh ]ruMjjMasssuXtest_diagnostic_aggregatorrvM}rwM(h}rxM(h}ryMh}rzMh ]r{MX#ros-jade-test-diagnostic-aggregatorr|Massh }r}Mh}r~Mh ]rMj|Massuh}r€Mh}rMh ]r‚MXros/jade/diagnosticsrƒMasshˆh}r„Mh}r…Mh}r†Mh ]r‡Mj|MasssuXtrac_ik_kinematics_pluginrˆM}r‰M(h}rŠM(h}r‹Mh}rŒMh ]rMX"ros-jade-trac-ik-kinematics-pluginrŽMassh }rMh}rMh ]r‘MjŽMassuh}r’Mh}r“Mh ]r”MXros/jade/trac_ikr•Masshˆh}r–Mh}r—Mh}r˜Mh ]r™MjŽMasssuX pddl_plannerršM}r›M(h}rœM(h}rMh}ržMh ]rŸMXros-jade-pddl-plannerr Massh }r¡Mh}r¢Mh ]r£Mj Massuh}r¤Mh}r¥Mh ]r¦MXros/jade/jsk_planningr§Masshˆh}r¨Mh}r©Mh}rªMh ]r«Mj MasssuXopenni2_launchr¬M}r­M(h}r®M(h}r¯Mh}r°Mh ]r±MXros-jade-openni2-launchr²Massh }r³Mh}r´Mh ]rµMj²Massuh}r¶Mh}r·Mh ]r¸MXros/jade/openni2_launchr¹Masshˆh}rºMh}r»Mh}r¼Mh ]r½Mj²MasssuXmultisense_bringupr¾M}r¿M(h}rÀM(h}rÁMh}rÂMh ]rÃMXros-jade-multisense-bringuprÄMassh }rÅMh}rÆMh ]rÇMjÄMassuh}rÈMh}rÉMh ]rÊMXros/jade/multisense_rosrËMasshˆh}rÌMh}rÍMh}rÎMh ]rÏMjÄMasssuX tf2_eigenrÐM}rÑM(h}rÒM(h}rÓMh}rÔMh ]rÕMXros-jade-tf2-eigenrÖMassh }r×Mh}rØMh ]rÙMjÖMassuh}rÚMh}rÛMh ]rÜMXros/jade/geometry2rÝMasshˆh}rÞMh}rßMh}ràMh ]ráMjÖMasssuXrospingrâM}rãM(h}räM(h}råMh}ræMh ]rçMXros-jade-rospingrèMassh }réMh}rêMh ]rëMjèMassuh}rìMh}ríMh ]rîMXros/jade/jsk_3rdpartyrïMasshˆh}rðMh}rñMh}ròMh ]róMjèMasssuXecl_converters_literôM}rõM(h}röM(h}r÷Mh}røMh ]rùMXros-jade-ecl-converters-literúMassh }rûMh}rüMh ]rýMjúMassuh}rþMh}rÿMh ]rNXros/jade/ecl_literNasshˆh}rNh}rNh}rNh ]rNjúMasssuXjsk_model_toolsrN}rN(h}rN(h}r Nh}r Nh ]r NXros-jade-jsk-model-toolsr Nassh }r Nh}rNh ]rNj Nassuh}rNh}rNh ]rNXros/jade/jsk_model_toolsrNasshˆh}rNh}rNh}rNh ]rNj NasssuXqwt_dependencyrN}rN(h}rN(h}rNh}rNh ]rNXros-jade-qwt-dependencyrNassh }rNh}r Nh ]r!NjNassuh}r"Nh}r#Nh ]r$NXros/jade/qwt_dependencyr%Nasshˆh}r&Nh}r'Nh}r(Nh ]r)NjNasssuXhakutor*N}r+N(h}r,N(h}r-Nh}r.Nh ]r/NXros-jade-hakutor0Nassh }r1Nh}r2Nh ]r3Nj0Nassuh}r4Nh}r5Nh ]r6NXros/jade/hakutor7Nasshˆh}r8Nh}r9Nh}r:Nh ]r;Nj0NasssuXrqt_toprN(h}r?Nh}r@Nh ]rANXros-jade-rqt-toprBNassh }rCNh}rDNh ]rENjBNassuh}rFNh}rGNh ]rHNXros/jade/rqt_toprINasshˆh}rJNh}rKNh}rLNh ]rMNjBNasssuXhector_slam_launchrNN}rON(h}rPN(h}rQNh}rRNh ]rSNXros-jade-hector-slam-launchrTNassh }rUNh}rVNh ]rWNjTNassuh}rXNh}rYNh ]rZNXros/jade/hector_slamr[Nasshˆh}r\Nh}r]Nh}r^Nh ]r_NjTNasssuXhector_quadrotor_controllerr`N}raN(h}rbN(h}rcNh}rdNh ]reNX$ros-jade-hector-quadrotor-controllerrfNassh }rgNh}rhNh ]riNjfNassuh}rjNh}rkNh ]rlNXros/jade/hector_quadrotorrmNasshˆh}rnNh}roNh}rpNh ]rqNjfNasssuXrtt_visualization_msgsrrN}rsN(h}rtN(h}ruNh}rvNh ]rwNXros-jade-rtt-visualization-msgsrxNassh }ryNh}rzNh ]r{NjxNassuh}r|Nh}r}Nh ]r~NXros/jade/rtt_ros_integrationrNasshˆh}r€Nh}rNh}r‚Nh ]rƒNjxNasssuXrotors_hil_interfacer„N}r…N(h}r†N(h}r‡Nh}rˆNh ]r‰NXros-jade-rotors-hil-interfacerŠNassh }r‹Nh}rŒNh ]rNjŠNassuh}rŽNh}rNh ]rNXros/jade/rotors_simulatorr‘Nasshˆh}r’Nh}r“Nh}r”Nh ]r•NjŠNasssuXrtt_sensor_msgsr–N}r—N(h}r˜N(h}r™Nh}ršNh ]r›NXros-jade-rtt-sensor-msgsrœNassh }rNh}ržNh ]rŸNjœNassuh}r Nh}r¡Nh ]r¢NXros/jade/rtt_ros_integrationr£Nasshˆh}r¤Nh}r¥Nh}r¦Nh ]r§NjœNasssuXrtt_ros_integrationr¨N}r©N(h}rªN(h}r«Nh}r¬Nh ]r­NXros-jade-rtt-ros-integrationr®Nassh }r¯Nh}r°Nh ]r±Nj®Nassuh}r²Nh}r³Nh ]r´NXros/jade/rtt_ros_integrationrµNasshˆh}r¶Nh}r·Nh}r¸Nh ]r¹Nj®NasssuXrosauthrºN}r»N(h}r¼N(h}r½Nh}r¾Nh ]r¿NXros-jade-rosauthrÀNassh }rÁNh}rÂNh ]rÃNjÀNassuh}rÄNh}rÅNh ]rÆNXros/jade/rosauthrÇNasshˆh}rÈNh}rÉNh}rÊNh ]rËNjÀNasssuX face_detectorrÌN}rÍN(h}rÎN(h}rÏNh}rÐNh ]rÑNXros-jade-face-detectorrÒNassh }rÓNh}rÔNh ]rÕNjÒNassuh}rÖNh}r×Nh ]rØNXros/jade/peoplerÙNasshˆh}rÚNh}rÛNh}rÜNh ]rÝNjÒNasssuXdiagnostic_aggregatorrÞN}rßN(h}ràN(h}ráNh}râNh ]rãNXros-jade-diagnostic-aggregatorräNassh }råNh}ræNh ]rçNjäNassuh}rèNh}réNh ]rêNXros/jade/diagnosticsrëNasshˆh}rìNh}ríNh}rîNh ]rïNjäNasssuXroscpp_tutorialsrðN}rñN(h}ròN(h}róNh}rôNh ]rõNXros-jade-roscpp-tutorialsröNassh }r÷Nh}røNh ]rùNjöNassuh}rúNh}rûNh ]rüNXros/jade/ros_tutorialsrýNasshˆh}rþNh}rÿNh}rOh ]rOjöNasssuX lpg_plannerrO}rO(h}rO(h}rOh}rOh ]rOXros-jade-lpg-plannerrOassh }r Oh}r Oh ]r OjOassuh}r Oh}r Oh ]rOXros/jade/jsk_3rdpartyrOasshˆh}rOh}rOh}rOh ]rOjOasssuXlibrmsrO}rO(h}rO(h}rOh}rOh ]rOXros-jade-librmsrOassh }rOh}rOh ]rOjOassuh}rOh}rOh ]r OXros/jade/librmsr!Oasshˆh}r"Oh}r#Oh}r$Oh ]r%OjOasssuX roseus_mongor&O}r'O(h}r(O(h}r)Oh}r*Oh ]r+OXros-jade-roseus-mongor,Oassh }r-Oh}r.Oh ]r/Oj,Oassuh}r0Oh}r1Oh ]r2OXros/jade/jsk_roseusr3Oasshˆh}r4Oh}r5Oh}r6Oh ]r7Oj,OasssuXmarti_can_msgsr8O}r9O(h}r:O(h}r;Oh}rOassh }r?Oh}r@Oh ]rAOj>Oassuh}rBOh}rCOh ]rDOXros/jade/marti_messagesrEOasshˆh}rFOh}rGOh}rHOh ]rIOj>OasssuX self_testrJO}rKO(h}rLO(h}rMOh}rNOh ]rOOXros-jade-self-testrPOassh }rQOh}rROh ]rSOjPOassuh}rTOh}rUOh ]rVOXros/jade/diagnosticsrWOasshˆh}rXOh}rYOh}rZOh ]r[OjPOasssuX lyap_controlr\O}r]O(h}r^O(h}r_Oh}r`Oh ]raOXros-jade-lyap-controlrbOassh }rcOh}rdOh ]reOjbOassuh}rfOh}rgOh ]rhOXros/jade/lyap_controlriOasshˆh}rjOh}rkOh}rlOh ]rmOjbOasssuXarbotix_pythonrnO}roO(h}rpO(h}rqOh}rrOh ]rsOXros-jade-arbotix-pythonrtOassh }ruOh}rvOh ]rwOjtOassuh}rxOh}ryOh ]rzOXros/jade/arbotix_rosr{Oasshˆh}r|Oh}r}Oh}r~Oh ]rOjtOasssuXuwsim_osgbulletr€O}rO(h}r‚O(h}rƒOh}r„Oh ]r…OXros-jade-uwsim-osgbulletr†Oassh }r‡Oh}rˆOh ]r‰Oj†Oassuh}rŠOh}r‹Oh ]rŒOXros/jade/uwsim_osgbulletrOasshˆh}rŽOh}rOh}rOh ]r‘Oj†OasssuXmoveit_visual_toolsr’O}r“O(h}r”O(h}r•Oh}r–Oh ]r—OXros-jade-moveit-visual-toolsr˜Oassh }r™Oh}ršOh ]r›Oj˜Oassuh}rœOh}rOh ]ržOXros/jade/moveit_visual_toolsrŸOasshˆh}r Oh}r¡Oh}r¢Oh ]r£Oj˜OasssuX aruco_msgsr¤O}r¥O(h}r¦O(h}r§Oh}r¨Oh ]r©OXros-jade-aruco-msgsrªOassh }r«Oh}r¬Oh ]r­OjªOassuh}r®Oh}r¯Oh ]r°OXros/jade/aruco_rosr±Oasshˆh}r²Oh}r³Oh}r´Oh ]rµOjªOasssuXauv_msgsr¶O}r·O(h}r¸O(h}r¹Oh}rºOh ]r»OXros-jade-auv-msgsr¼Oassh }r½Oh}r¾Oh ]r¿Oj¼Oassuh}rÀOh}rÁOh ]rÂOXros/jade/auv_msgsrÃOasshˆh}rÄOh}rÅOh}rÆOh ]rÇOj¼OasssuXeigen_stl_containersrÈO}rÉO(h}rÊO(h}rËOh}rÌOh ]rÍOXros-jade-eigen-stl-containersrÎOassh }rÏOh}rÐOh ]rÑOjÎOassuh}rÒOh}rÓOh ]rÔOXros/jade/eigen_stl_containersrÕOasshˆh}rÖOh}r×Oh}rØOh ]rÙOjÎOasssuXrqt_joint_trajectory_controllerrÚO}rÛO(h}rÜO(h}rÝOh}rÞOh ]rßOX(ros-jade-rqt-joint-trajectory-controllerràOassh }ráOh}râOh ]rãOjàOassuh}räOh}råOh ]ræOXros/jade/ros_controllersrçOasshˆh}rèOh}réOh}rêOh ]rëOjàOasssuXpointcloud_to_laserscanrìO}ríO(h}rîO(h}rïOh}rðOh ]rñOX ros-jade-pointcloud-to-laserscanròOassh }róOh}rôOh ]rõOjòOassuh}röOh}r÷Oh ]røOX ros/jade/pointcloud_to_laserscanrùOasshˆh}rúOh}rûOh}rüOh ]rýOjòOasssuXrtt_rosdeploymentrþO}rÿO(h}rP(h}rPh}rPh ]rPXros-jade-rtt-rosdeploymentrPassh }rPh}rPh ]rPjPassuh}rPh}r Ph ]r PXros/jade/rtt_ros_integrationr Passhˆh}r Ph}r Ph}rPh ]rPjPasssuXecto_rosrP}rP(h}rP(h}rPh}rPh ]rPXros-jade-ecto-rosrPassh }rPh}rPh ]rPjPassuh}rPh}rPh ]rPXros/jade/ecto_rosrPasshˆh}rPh}rPh}r Ph ]r!PjPasssuX audio_capturer"P}r#P(h}r$P(h}r%Ph}r&Ph ]r'PXros-jade-audio-capturer(Passh }r)Ph}r*Ph ]r+Pj(Passuh}r,Ph}r-Ph ]r.PXros/jade/audio_commonr/Passhˆh}r0Ph}r1Ph}r2Ph ]r3Pj(PasssuX ros_canopenr4P}r5P(h}r6P(h}r7Ph}r8Ph ]r9PXros-jade-ros-canopenr:Passh }r;Ph}rPh}r?Ph ]r@PXros/jade/ros_canopenrAPasshˆh}rBPh}rCPh}rDPh ]rEPj:PasssuXrtt_trajectory_msgsrFP}rGP(h}rHP(h}rIPh}rJPh ]rKPXros-jade-rtt-trajectory-msgsrLPassh }rMPh}rNPh ]rOPjLPassuh}rPPh}rQPh ]rRPXros/jade/rtt_ros_integrationrSPasshˆh}rTPh}rUPh}rVPh ]rWPjLPasssuX rosh_corerXP}rYP(h}rZP(h}r[Ph}r\Ph ]r]PXros-jade-rosh-corer^Passh }r_Ph}r`Ph ]raPj^Passuh}rbPh}rcPh ]rdPXros/jade/rosh_corerePasshˆh}rfPh}rgPh}rhPh ]riPj^PasssuX pepper_robotrjP}rkP(h}rlP(h}rmPh}rnPh ]roPXros-jade-pepper-robotrpPassh }rqPh}rrPh ]rsPjpPassuh}rtPh}ruPh ]rvPXros/jade/pepper_robotrwPasshˆh}rxPh}ryPh}rzPh ]r{PjpPasssuX nao_controlr|P}r}P(h}r~P(h}rPh}r€Ph ]rPXros-jade-nao-controlr‚Passh }rƒPh}r„Ph ]r…Pj‚Passuh}r†Ph}r‡Ph ]rˆPXros/jade/nao_virtualr‰Passhˆh}rŠPh}r‹Ph}rŒPh ]rPj‚PasssuX flask_corsrŽP}rP(h}rP(h}r‘Ph}r’Ph ]r“PXros-jade-flask-corsr”Passh }r•Ph}r–Ph ]r—Pj”Passuh}r˜Ph}r™Ph ]ršPXros/jade/flask_corsr›Passhˆh}rœPh}rPh}ržPh ]rŸPj”PasssuX rqt_launchr P}r¡P(h}r¢P(h}r£Ph}r¤Ph ]r¥PXros-jade-rqt-launchr¦Passh }r§Ph}r¨Ph ]r©Pj¦Passuh}rªPh}r«Ph ]r¬PXros/jade/rqt_launchr­Passhˆh}r®Ph}r¯Ph}r°Ph ]r±Pj¦PasssuXhector_sensors_descriptionr²P}r³P(h}r´P(h}rµPh}r¶Ph ]r·PX#ros-jade-hector-sensors-descriptionr¸Passh }r¹Ph}rºPh ]r»Pj¸Passuh}r¼Ph}r½Ph ]r¾PXros/jade/hector_modelsr¿Passhˆh}rÀPh}rÁPh}rÂPh ]rÃPj¸PasssuXeclrÄP}rÅP(h}rÆP(h}rÇPh}rÈPh ]rÉPX ros-jade-eclrÊPassh }rËPh}rÌPh ]rÍPjÊPassuh}rÎPh}rÏPh ]rÐPXros/jade/ecl_manipulationrÑPasshˆh}rÒPh}rÓPh}rÔPh ]rÕPjÊPasssuXrobot_controllers_msgsrÖP}r×P(h}rØP(h}rÙPh}rÚPh ]rÛPXros-jade-robot-controllers-msgsrÜPassh }rÝPh}rÞPh ]rßPjÜPassuh}ràPh}ráPh ]râPXros/jade/robot_controllersrãPasshˆh}räPh}råPh}ræPh ]rçPjÜPasssuXmessage_generationrèP}réP(h}rêP(h}rëPh}rìPh ]ríPXros-jade-message-generationrîPassh }rïPh}rðPh ]rñPjîPassuh}ròPh}róPh ]rôPXros/jade/message_generationrõPasshˆh}röPh}r÷Ph}røPh ]rùPjîPasssuXworldlibrúP}rûP(h}rüP(h}rýPh}rþPh ]rÿPXros-jade-worldlibrQassh }rQh}rQh ]rQjQassuh}rQh}rQh ]rQX"ros/jade/spatial_temporal_learningrQasshˆh}rQh}r Qh}r Qh ]r QjQasssuXvariant_topic_toolsr Q}r Q(h}rQ(h}rQh}rQh ]rQXros-jade-variant-topic-toolsrQassh }rQh}rQh ]rQjQassuh}rQh}rQh ]rQXros/jade/variantrQasshˆh}rQh}rQh}rQh ]rQjQasssuXamclrQ}rQ(h}r Q(h}r!Qh}r"Qh ]r#QX ros-jade-amclr$Qassh }r%Qh}r&Qh ]r'Qj$Qassuh}r(Qh}r)Qh ]r*QXros/jade/navigationr+Qasshˆh}r,Qh}r-Qh}r.Qh ]r/Qj$QasssuXscan_to_cloud_converterr0Q}r1Q(h}r2Q(h}r3Qh}r4Qh ]r5QX ros-jade-scan-to-cloud-converterr6Qassh }r7Qh}r8Qh ]r9Qj6Qassuh}r:Qh}r;Qh ]rQh}r?Qh}r@Qh ]rAQj6QasssuXjoint_trajectory_controllerrBQ}rCQ(h}rDQ(h}rEQh}rFQh ]rGQX$ros-jade-joint-trajectory-controllerrHQassh }rIQh}rJQh ]rKQjHQassuh}rLQh}rMQh ]rNQXros/jade/ros_controllersrOQasshˆh}rPQh}rQQh}rRQh ]rSQjHQasssuXecl_mobile_robotrTQ}rUQ(h}rVQ(h}rWQh}rXQh ]rYQXros-jade-ecl-mobile-robotrZQassh }r[Qh}r\Qh ]r]QjZQassuh}r^Qh}r_Qh ]r`QXros/jade/ecl_navigationraQasshˆh}rbQh}rcQh}rdQh ]reQjZQasssuXlms1xxrfQ}rgQ(h}rhQ(h}riQh}rjQh ]rkQXros-jade-lms1xxrlQassh }rmQh}rnQh ]roQjlQassuh}rpQh}rqQh ]rrQXros/jade/lms1xxrsQasshˆh}rtQh}ruQh}rvQh ]rwQjlQasssuX grid_map_rosrxQ}ryQ(h}rzQ(h}r{Qh}r|Qh ]r}QXros-jade-grid-map-rosr~Qassh }rQh}r€Qh ]rQj~Qassuh}r‚Qh}rƒQh ]r„QXros/jade/grid_mapr…Qasshˆh}r†Qh}r‡Qh}rˆQh ]r‰Qj~QasssuXnovatel_gps_driverrŠQ}r‹Q(h}rŒQ(h}rQh}rŽQh ]rQXros-jade-novatel-gps-driverrQassh }r‘Qh}r’Qh ]r“QjQassuh}r”Qh}r•Qh ]r–QXros/jade/novatel_gps_driverr—Qasshˆh}r˜Qh}r™Qh}ršQh ]r›QjQasssuX urdf_tutorialrœQ}rQ(h}ržQ(h}rŸQh}r Qh ]r¡QXros-jade-urdf-tutorialr¢Qassh }r£Qh}r¤Qh ]r¥Qj¢Qassuh}r¦Qh}r§Qh ]r¨QXros/jade/urdf_tutorialr©Qasshˆh}rªQh}r«Qh}r¬Qh ]r­Qj¢QasssuXmulti_map_serverr®Q}r¯Q(h}r°Q(h}r±Qh}r²Qh ]r³QXros-jade-multi-map-serverr´Qassh }rµQh}r¶Qh ]r·Qj´Qassuh}r¸Qh}r¹Qh ]rºQXros/jade/jsk_commonr»Qasshˆh}r¼Qh}r½Qh}r¾Qh ]r¿Qj´QasssuXrosbashrÀQ}rÁQ(h}rÂQ(h}rÃQh}rÄQh ]rÅQXros-jade-rosbashrÆQassh }rÇQh}rÈQh ]rÉQjÆQassuh}rÊQh}rËQh ]rÌQX ros/jade/rosrÍQasshˆh}rÎQh}rÏQh}rÐQh ]rÑQjÆQasssuXhector_map_serverrÒQ}rÓQ(h}rÔQ(h}rÕQh}rÖQh ]r×QXros-jade-hector-map-serverrØQassh }rÙQh}rÚQh ]rÛQjØQassuh}rÜQh}rÝQh ]rÞQXros/jade/hector_slamrßQasshˆh}ràQh}ráQh}râQh ]rãQjØQasssuXsparse_bundle_adjustmenträQ}råQ(h}ræQ(h}rçQh}rèQh ]réQX!ros-jade-sparse-bundle-adjustmentrêQassh }rëQh}rìQh ]ríQjêQassuh}rîQh}rïQh ]rðQX!ros/jade/sparse_bundle_adjustmentrñQasshˆh}ròQh}róQh}rôQh ]rõQjêQasssuXimu_filter_madgwickröQ}r÷Q(h}røQ(h}rùQh}rúQh ]rûQXros-jade-imu-filter-madgwickrüQassh }rýQh}rþQh ]rÿQjüQassuh}rRh}rRh ]rRXros/jade/imu_toolsrRasshˆh}rRh}rRh}rRh ]rRjüQasssuXgenmsgrR}r R(h}r R(h}r Rh}r Rh ]r RXros-jade-genmsgrRassh }rRh}rRh ]rRjRassuh}rRh}rRh ]rRXros/jade/genmsgrRasshˆh}rRh}rRh}rRh ]rRjRasssuXcamera_info_manager_pyrR}rR(h}rR(h}rRh}rRh ]rRXros-jade-camera-info-manager-pyr Rassh }r!Rh}r"Rh ]r#Rj Rassuh}r$Rh}r%Rh ]r&RXros/jade/camera_info_manager_pyr'Rasshˆh}r(Rh}r)Rh}r*Rh ]r+Rj RasssuXmd49_base_controllerr,R}r-R(h}r.R(h}r/Rh}r0Rh ]r1RXros-jade-md49-base-controllerr2Rassh }r3Rh}r4Rh ]r5Rj2Rassuh}r6Rh}r7Rh ]r8RXros/jade/md49_base_controllerr9Rasshˆh}r:Rh}r;Rh}rR}r?R(h}r@R(h}rARh}rBRh ]rCRXros-jade-jsk-rviz-pluginsrDRassh }rERh}rFRh ]rGRjDRassuh}rHRh}rIRh ]rJRXros/jade/jsk_visualizationrKRasshˆh}rLRh}rMRh}rNRh ]rORjDRasssuXwebkit_dependencyrPR}rQR(h}rRR(h}rSRh}rTRh ]rURXros-jade-webkit-dependencyrVRassh }rWRh}rXRh ]rYRjVRassuh}rZRh}r[Rh ]r\RXros/jade/webkit_dependencyr]Rasshˆh}r^Rh}r_Rh}r`Rh ]raRjVRasssuXfetch_moveit_configrbR}rcR(h}rdR(h}reRh}rfRh ]rgRXros-jade-fetch-moveit-configrhRassh }riRh}rjRh ]rkRjhRassuh}rlRh}rmRh ]rnRXros/jade/fetch_rosroRasshˆh}rpRh}rqRh}rrRh ]rsRjhRasssuX rotors_gazebortR}ruR(h}rvR(h}rwRh}rxRh ]ryRXros-jade-rotors-gazeborzRassh }r{Rh}r|Rh ]r}RjzRassuh}r~Rh}rRh ]r€RXros/jade/rotors_simulatorrRasshˆh}r‚Rh}rƒRh}r„Rh ]r…RjzRasssuX rtt_nav_msgsr†R}r‡R(h}rˆR(h}r‰Rh}rŠRh ]r‹RXros-jade-rtt-nav-msgsrŒRassh }rRh}rŽRh ]rRjŒRassuh}rRh}r‘Rh ]r’RXros/jade/rtt_ros_integrationr“Rasshˆh}r”Rh}r•Rh}r–Rh ]r—RjŒRasssuXcontroller_manager_testsr˜R}r™R(h}ršR(h}r›Rh}rœRh ]rRX!ros-jade-controller-manager-testsržRassh }rŸRh}r Rh ]r¡RjžRassuh}r¢Rh}r£Rh ]r¤RXros/jade/ros_controlr¥Rasshˆh}r¦Rh}r§Rh}r¨Rh ]r©RjžRasssuXdynamic_reconfigurerªR}r«R(h}r¬R(h}r­Rh}r®Rh ]r¯RXros-jade-dynamic-reconfigurer°Rassh }r±Rh}r²Rh ]r³Rj°Rassuh}r´Rh}rµRh ]r¶RXros/jade/dynamic_reconfigurer·Rasshˆh}r¸Rh}r¹Rh}rºRh ]r»Rj°RasssuXvirtual_force_publisherr¼R}r½R(h}r¾R(h}r¿Rh}rÀRh ]rÁRX ros-jade-virtual-force-publisherrÂRassh }rÃRh}rÄRh ]rÅRjÂRassuh}rÆRh}rÇRh ]rÈRXros/jade/jsk_commonrÉRasshˆh}rÊRh}rËRh}rÌRh ]rÍRjÂRasssuXswri_system_utilrÎR}rÏR(h}rÐR(h}rÑRh}rÒRh ]rÓRXros-jade-swri-system-utilrÔRassh }rÕRh}rÖRh ]r×RjÔRassuh}rØRh}rÙRh ]rÚRXros/jade/marti_commonrÛRasshˆh}rÜRh}rÝRh}rÞRh ]rßRjÔRasssuXecl_linear_algebraràR}ráR(h}râR(h}rãRh}räRh ]råRXros-jade-ecl-linear-algebraræRassh }rçRh}rèRh ]réRjæRassuh}rêRh}rëRh ]rìRXros/jade/ecl_coreríRasshˆh}rîRh}rïRh}rðRh ]rñRjæRasssuX!object_recognition_reconstructionròR}róR(h}rôR(h}rõRh}röRh ]r÷RX*ros-jade-object-recognition-reconstructionrøRassh }rùRh}rúRh ]rûRjøRassuh}rüRh}rýRh ]rþRX*ros/jade/object_recognition_reconstructionrÿRasshˆh}rSh}rSh}rSh ]rSjøRasssuX person_msgsrS}rS(h}rS(h}rSh}rSh ]r SXros-jade-person-msgsr Sassh }r Sh}r Sh ]r Sj Sassuh}rSh}rSh ]rSXros/jade/iai_common_msgsrSasshˆh}rSh}rSh}rSh ]rSj SasssuX opencv_appsrS}rS(h}rS(h}rSh}rSh ]rSXros-jade-opencv-appsrSassh }rSh}rSh ]rSjSassuh}r Sh}r!Sh ]r"SXros/jade/opencv_appsr#Sasshˆh}r$Sh}r%Sh}r&Sh ]r'SjSasssuXxacror(S}r)S(h}r*S(h}r+Sh}r,Sh ]r-SXros-jade-xacror.Sassh }r/Sh}r0Sh ]r1Sj.Sassuh}r2Sh}r3Sh ]r4SXros/jade/xacror5Sasshˆh}r6Sh}r7Sh}r8Sh ]r9Sj.SasssuXdownwardr:S}r;S(h}rSh ]r?SXros-jade-downwardr@Sassh }rASh}rBSh ]rCSj@Sassuh}rDSh}rESh ]rFSXros/jade/jsk_3rdpartyrGSasshˆh}rHSh}rISh}rJSh ]rKSj@SasssuXqt_gui_py_commonrLS}rMS(h}rNS(h}rOSh}rPSh ]rQSXros-jade-qt-gui-py-commonrRSassh }rSSh}rTSh ]rUSjRSassuh}rVSh}rWSh ]rXSXros/jade/qt_gui_corerYSasshˆh}rZSh}r[Sh}r\Sh ]r]SjRSasssuXmove_base_msgsr^S}r_S(h}r`S(h}raSh}rbSh ]rcSXros-jade-move-base-msgsrdSassh }reSh}rfSh ]rgSjdSassuh}rhSh}riSh ]rjSXros/jade/navigation_msgsrkSasshˆh}rlSh}rmSh}rnSh ]roSjdSasssuX pr2_machinerpS}rqS(h}rrS(h}rsSh}rtSh ]ruSXros-jade-pr2-machinervSassh }rwSh}rxSh ]rySjvSassuh}rzSh}r{Sh ]r|SXros/jade/pr2_commonr}Sasshˆh}r~Sh}rSh}r€Sh ]rSjvSasssuXpr2_head_actionr‚S}rƒS(h}r„S(h}r…Sh}r†Sh ]r‡SXros-jade-pr2-head-actionrˆSassh }r‰Sh}rŠSh ]r‹SjˆSassuh}rŒSh}rSh ]rŽSXros/jade/pr2_controllersrSasshˆh}rSh}r‘Sh}r’Sh ]r“SjˆSasssuX jsk_commonr”S}r•S(h}r–S(h}r—Sh}r˜Sh ]r™SXros-jade-jsk-commonršSassh }r›Sh}rœSh ]rSjšSassuh}ržSh}rŸSh ]r SXros/jade/jsk_commonr¡Sasshˆh}r¢Sh}r£Sh}r¤Sh ]r¥SjšSasssuX vision_vispr¦S}r§S(h}r¨S(h}r©Sh}rªSh ]r«SXros-jade-vision-vispr¬Sassh }r­Sh}r®Sh ]r¯Sj¬Sassuh}r°Sh}r±Sh ]r²SXros/jade/vision_vispr³Sasshˆh}r´Sh}rµSh}r¶Sh ]r·Sj¬SasssuX ros_numpyr¸S}r¹S(h}rºS(h}r»Sh}r¼Sh ]r½SXros-jade-ros-numpyr¾Sassh }r¿Sh}rÀSh ]rÁSj¾Sassuh}rÂSh}rÃSh ]rÄSXros/jade/ros_numpyrÅSasshˆh}rÆSh}rÇSh}rÈSh ]rÉSj¾SasssuX rqt_rotorsrÊS}rËS(h}rÌS(h}rÍSh}rÎSh ]rÏSXros-jade-rqt-rotorsrÐSassh }rÑSh}rÒSh ]rÓSjÐSassuh}rÔSh}rÕSh ]rÖSXros/jade/rotors_simulatorr×Sasshˆh}rØSh}rÙSh}rÚSh ]rÛSjÐSasssuX ecto_opencvrÜS}rÝS(h}rÞS(h}rßSh}ràSh ]ráSXros-jade-ecto-opencvrâSassh }rãSh}räSh ]råSjâSassuh}ræSh}rçSh ]rèSXros/jade/ecto_opencvréSasshˆh}rêSh}rëSh}rìSh ]ríSjâSasssuXrosbagrîS}rïS(h}rðS(h}rñSh}ròSh ]róSXros-jade-rosbagrôSassh }rõSh}röSh ]r÷SjôSassuh}røSh}rùSh ]rúSXros/jade/ros_commrûSasshˆh}rüSh}rýSh}rþSh ]rÿSjôSasssuXarbotix_firmwarerT}rT(h}rT(h}rTh}rTh ]rTXros-jade-arbotix-firmwarerTassh }rTh}rTh ]r TjTassuh}r Th}r Th ]r TXros/jade/arbotix_rosr Tasshˆh}rTh}rTh}rTh ]rTjTasssuXrosserial_embeddedlinuxrT}rT(h}rT(h}rTh}rTh ]rTX ros-jade-rosserial-embeddedlinuxrTassh }rTh}rTh ]rTjTassuh}rTh}rTh ]rTXros/jade/rosserialrTasshˆh}r Th}r!Th}r"Th ]r#TjTasssuXhector_sensors_gazebor$T}r%T(h}r&T(h}r'Th}r(Th ]r)TXros-jade-hector-sensors-gazebor*Tassh }r+Th}r,Th ]r-Tj*Tassuh}r.Th}r/Th ]r0TXros/jade/hector_gazebor1Tasshˆh}r2Th}r3Th}r4Th ]r5Tj*TasssuXspeech_recognition_msgsr6T}r7T(h}r8T(h}r9Th}r:Th ]r;TX ros-jade-speech-recognition-msgsrTh ]r?TjUXros/jade/jsk_model_toolsr?Uasshˆh}r@Uh}rAUh}rBUh ]rCUj8UasssuX arbotix_msgsrDU}rEU(h}rFU(h}rGUh}rHUh ]rIUXros-jade-arbotix-msgsrJUassh }rKUh}rLUh ]rMUjJUassuh}rNUh}rOUh ]rPUXros/jade/arbotix_rosrQUasshˆh}rRUh}rSUh}rTUh ]rUUjJUasssuX slime_rosrVU}rWU(h}rXU(h}rYUh}rZUh ]r[UXros-jade-slime-rosr\Uassh }r]Uh}r^Uh ]r_Uj\Uassuh}r`Uh}raUh ]rbUXros/jade/ros_emacs_utilsrcUasshˆh}rdUh}reUh}rfUh ]rgUj\UasssuXgrid_map_octomaprhU}riU(h}rjU(h}rkUh}rlUh ]rmUXros-jade-grid-map-octomaprnUassh }roUh}rpUh ]rqUjnUassuh}rrUh}rsUh ]rtUXros/jade/grid_mapruUasshˆh}rvUh}rwUh}rxUh ]ryUjnUasssuXrange_sensor_layerrzU}r{U(h}r|U(h}r}Uh}r~Uh ]rUXros-jade-range-sensor-layerr€Uassh }rUh}r‚Uh ]rƒUj€Uassuh}r„Uh}r…Uh ]r†UXros/jade/navigation_layersr‡Uasshˆh}rˆUh}r‰Uh}rŠUh ]r‹Uj€UasssuX hector_quadrotor_pose_estimationrŒU}rU(h}rŽU(h}rUh}rUh ]r‘UX)ros-jade-hector-quadrotor-pose-estimationr’Uassh }r“Uh}r”Uh ]r•Uj’Uassuh}r–Uh}r—Uh ]r˜UXros/jade/hector_quadrotorr™Uasshˆh}ršUh}r›Uh}rœUh ]rUj’UasssuXmrpt_reactivenav2držU}rŸU(h}r U(h}r¡Uh}r¢Uh ]r£UXros-jade-mrpt-reactivenav2dr¤Uassh }r¥Uh}r¦Uh ]r§Uj¤Uassuh}r¨Uh}r©Uh ]rªUXros/jade/mrpt_navigationr«Uasshˆh}r¬Uh}r­Uh}r®Uh ]r¯Uj¤UasssuX scan_toolsr°U}r±U(h}r²U(h}r³Uh}r´Uh ]rµUXros-jade-scan-toolsr¶Uassh }r·Uh}r¸Uh ]r¹Uj¶Uassuh}rºUh}r»Uh ]r¼UXros/jade/scan_toolsr½Uasshˆh}r¾Uh}r¿Uh}rÀUh ]rÁUj¶UasssuXanglesrÂU}rÃU(h}rÄU(h}rÅUh}rÆUh ]rÇUXros-jade-anglesrÈUassh }rÉUh}rÊUh ]rËUjÈUassuh}rÌUh}rÍUh ]rÎUXros/jade/anglesrÏUasshˆh}rÐUh}rÑUh}rÒUh ]rÓUjÈUasssuXcanopen_motor_noderÔU}rÕU(h}rÖU(h}r×Uh}rØUh ]rÙUXros-jade-canopen-motor-noderÚUassh }rÛUh}rÜUh ]rÝUjÚUassuh}rÞUh}rßUh ]ràUXros/jade/ros_canopenráUasshˆh}râUh}rãUh}räUh ]råUjÚUasssuXmrpt_graphslam_2dræU}rçU(h}rèU(h}réUh}rêUh ]rëUXros-jade-mrpt-graphslam-2drìUassh }ríUh}rîUh ]rïUjìUassuh}rðUh}rñUh ]ròUXros/jade/mrpt_slamróUasshˆh}rôUh}rõUh}röUh ]r÷UjìUasssuXrail_user_queue_managerrøU}rùU(h}rúU(h}rûUh}rüUh ]rýUX ros-jade-rail-user-queue-managerrþUassh }rÿUh}rVh ]rVjþUassuh}rVh}rVh ]rVX ros/jade/rail_user_queue_managerrVasshˆh}rVh}rVh}rVh ]r VjþUasssuXrail_recognitionr V}r V(h}r V(h}r Vh}rVh ]rVXros-jade-rail-recognitionrVassh }rVh}rVh ]rVjVassuh}rVh}rVh ]rVXros/jade/rail_pick_and_placerVasshˆh}rVh}rVh}rVh ]rVjVasssuXroslangrV}rV(h}rV(h}rVh}r Vh ]r!VXros-jade-roslangr"Vassh }r#Vh}r$Vh ]r%Vj"Vassuh}r&Vh}r'Vh ]r(VX ros/jade/rosr)Vasshˆh}r*Vh}r+Vh}r,Vh ]r-Vj"Vasssuu.rosdep-0.21.0/test/gem/000077500000000000000000000000001406544147500146275ustar00rootroot00000000000000rosdep-0.21.0/test/gem/list_output000066400000000000000000000000711406544147500171430ustar00rootroot00000000000000json (1.7.5) nokogiri (1.5.5) rake (0.9.2.2) rdoc (3.12) rosdep-0.21.0/test/main/000077500000000000000000000000001406544147500150035ustar00rootroot00000000000000rosdep-0.21.0/test/main/invalid_package_version/000077500000000000000000000000001406544147500216515ustar00rootroot00000000000000rosdep-0.21.0/test/main/invalid_package_version/package.xml000066400000000000000000000003271406544147500237700ustar00rootroot00000000000000 foo :{version} Package Foo BSD Foo Bar rosdep-0.21.0/test/npm/000077500000000000000000000000001406544147500146515ustar00rootroot00000000000000rosdep-0.21.0/test/npm/list_output000066400000000000000000000030731406544147500171720ustar00rootroot00000000000000/home/ws/rosdep/test /home/ws/rosdep/test/node_modules/rosnodejs /home/ws/rosdep/test/node_modules/argparse /home/ws/rosdep/test/node_modules/sprintf-js /home/ws/rosdep/test/node_modules/async /home/ws/rosdep/test/node_modules/lodash /home/ws/rosdep/test/node_modules/bn.js /home/ws/rosdep/test/node_modules/bunyan /home/ws/rosdep/test/node_modules/dtrace-provider /home/ws/rosdep/test/node_modules/nan /home/ws/rosdep/test/node_modules/mv /home/ws/rosdep/test/node_modules/mkdirp /home/ws/rosdep/test/node_modules/minimist /home/ws/rosdep/test/node_modules/ncp /home/ws/rosdep/test/node_modules/rimraf /home/ws/rosdep/test/node_modules/glob /home/ws/rosdep/test/node_modules/inflight /home/ws/rosdep/test/node_modules/wrappy /home/ws/rosdep/test/node_modules/inherits /home/ws/rosdep/test/node_modules/minimatch /home/ws/rosdep/test/node_modules/brace-expansion /home/ws/rosdep/test/node_modules/balanced-match /home/ws/rosdep/test/node_modules/concat-map /home/ws/rosdep/test/node_modules/once /home/ws/rosdep/test/node_modules/path-is-absolute /home/ws/rosdep/test/node_modules/safe-json-stringify /home/ws/rosdep/test/node_modules/md5 /home/ws/rosdep/test/node_modules/charenc /home/ws/rosdep/test/node_modules/crypt /home/ws/rosdep/test/node_modules/is-buffer /home/ws/rosdep/test/node_modules/moment /home/ws/rosdep/test/node_modules/ultron /home/ws/rosdep/test/node_modules/walker /home/ws/rosdep/test/node_modules/makeerror /home/ws/rosdep/test/node_modules/tmpl /home/ws/rosdep/test/node_modules/xmlrpc /home/ws/rosdep/test/node_modules/sax /home/ws/rosdep/test/node_modules/xmlbuilder rosdep-0.21.0/test/osx/000077500000000000000000000000001406544147500146705ustar00rootroot00000000000000rosdep-0.21.0/test/osx/brew-info-output000066400000000000000000000022071406544147500200420ustar00rootroot00000000000000subversion:[{"name":"subversion","homepage":"http://subversion.apache.org/","versions":{"stable":"1.8.8","bottle":true,"devel":null,"head":null},"revision":0,"installed":[{"version":"1.8.8","used_options":[],"built_as_bottle":null,"poured_from_bottle":true}],"linked_keg":"1.8.8","keg_only":false,"dependencies":["pkg-config","autoconf","automake","libtool","sqlite","scons","openssl"],"conflicts_with":[],"caveats":"svntools have been installed to:\n /usr/local/opt/subversion/libexec\n","options":[{"option":"--universal","description":"Build a universal binary"},{"option":"--java","description":"Build Java bindings"},{"option":"--perl","description":"Build Perl bindings"},{"option":"--ruby","description":"Build Ruby bindings"},{"option":"--with-python","description":"Build with python support"}]}] bazaar:[{"name":"bazaar","homepage":"http://bazaar-vcs.org/","versions":{"stable":"2.6.0","bottle":false,"devel":null,"head":null},"revision":0,"installed":[{"version":"2.6.0","used_options":[],"built_as_bottle":null,"poured_from_bottle":false}],"linked_keg":"2.6.0","keg_only":false,"dependencies":[],"conflicts_with":[],"caveats":null,"options":[]}] rosdep-0.21.0/test/osx/brew-list-output000066400000000000000000000001461406544147500200620ustar00rootroot00000000000000bazaar boost cmake doxygen git jpeg libyaml little-cms log4cxx mr neon pil pkg-config subversion wget rosdep-0.21.0/test/pip/000077500000000000000000000000001406544147500146475ustar00rootroot00000000000000rosdep-0.21.0/test/pip/freeze_output000066400000000000000000000032111406544147500174670ustar00rootroot00000000000000Brlapi==0.5.4 ClientForm==0.2.10 CouchDB==0.6 GnuPGInterface==0.3.2 Jinja2==2.6 Mako==0.2.5 Numeric==24.2 PAM==0.4.2 PIL==1.1.7 PyBluez==0.18 PyChecker==0.8.18 PyOpenGL==3.0.0 PyYAML==3.09 Pygments==1.4 Pymacs==0.23 Pyste==0.9.10 ScientificPython==2.8 Sphinx==1.0.7 Twisted-Core==10.0.0 Twisted-Names==10.0.0 Twisted-Web==10.0.0 adium-theme-ubuntu==0.1 apturl==0.4.1ubuntu4.1 bzr==2.1.4 command-not-found==0.1 configglue==0.2dev configobj==4.7.1 coverage==3.5 cups==1.0 distribute==0.6.10 docutils==0.8 epydoc==3.0.1 fstab==1.4 gnome-app-install==0.4.2ubuntu2 hgview==1.1.3 httplib2==0.6.0 ipython==0.10 jockey==0.5.8 launchpadlib==1.6.0 lazr.restfulclient==0.9.11 lazr.uri==1.0.2 louis==1.7.0 lxml==2.2.4 matplotlib==0.99.1.1 mechanize==0.1.11 mercurial==1.4.3 mock==0.7.2 mod-python==3.3.1 nose==1.1.2 numpy==1.3.0 nvidia-common==0.0.0 oauth==1.0a onboard==0.93.0 papyon==0.4.8 paramiko==1.7.6 pexpect==2.3 protobuf==2.2.0 psycopg2==2.0.13 pyOpenSSL==0.10 pycrypto==2.0.1 pycurl==7.19.0 pygame==1.9.1release pygraphviz==0.99 pyinotify==0.8.9 pylibpcap==0.6.2 pyparsing==1.5.2 pyserial==2.3 python-apt==0.7.94.2ubuntu6.2 python-dateutil==1.4.1 python-debian==0.1.14ubuntu2 python-jenkins==0.2 pytz==2010b pyusb==0.4.2 pyxdg==0.18 rdflib==2.4.2 rosdep==0.1.0 rosinstall==0.5.21 rospkg==0.2.0 scapy==2.0.1 scipy==0.7.0 screen-resolution-extra==0.0.0 simplejson==2.0.9 smbc==1.0 speechd==0.3 speechd-config==0.0 system-service==0.1.6 ubuntuone-storage-protocol==1.2.0 ufw==0.30pre1-0ubuntu2 unattended-upgrades==0.1 usb-creator==0.2.22 vcstools==0.1.0 virtkey==0.01 wadllib==1.1.4 wsgiref==0.1.2 wxPython==2.8.10.1 wxPython-common==2.8.10.1 xkit==0.0.0 zope.interface==3.5.3 rosdep-0.21.0/test/redhat/000077500000000000000000000000001406544147500153265ustar00rootroot00000000000000rosdep-0.21.0/test/redhat/rpm-E-fedora000066400000000000000000000000031406544147500174600ustar00rootroot0000000000000027 rosdep-0.21.0/test/redhat/rpm-q-rpm000066400000000000000000000000341406544147500170760ustar00rootroot00000000000000config(rpm) rpm rpm(x86-64) rosdep-0.21.0/test/redhat/rpm-q-tinyxml-dev000066400000000000000000000000401406544147500205550ustar00rootroot00000000000000no package provides tinyxml-dev rosdep-0.21.0/test/ros_home/000077500000000000000000000000001406544147500156725ustar00rootroot00000000000000rosdep-0.21.0/test/ros_home/rosdep.yaml000066400000000000000000000074541406544147500200640ustar00rootroot00000000000000testassimp: ubuntu: apt: packages: [assimp-dev] debian: source: uri: 'https://kforge.ros.org/rosrelease/viewvc/sourcedeps/assimp/assimp-2.0.86-1.rdmanifest' md5sum: d5137302d8f00241ee10e623b97f9d22 osx: source: uri: 'https://kforge.ros.org/rosrelease/viewvc/sourcedeps/assimp/assimp-2.0.86-1.rdmanifest' md5sum: d5137302d8f00241ee10e623b97f9d22 testeigen: ubuntu: lucid: apt: packages: [libeigen3-dev=3.0.1-1+ros4~lucid] maverick: apt: packages: [libeigen3-dev=3.0.1-1+ros4~maverick] natty: apt: packages: [libeigen3-dev=3.0.1-1+ros4~natty] debian: source: uri: 'https://kforge.ros.org/rosrelease/viewvc/sourcedeps/eigen/eigen-3.0.1-1.rdmanifest' md5sum: 941db2fbb09d80c28426d335022fad95 osx: source: uri: 'https://kforge.ros.org/rosrelease/viewvc/sourcedeps/eigen/eigen-3.0.1-1.rdmanifest' md5sum: 941db2fbb09d80c28426d335022fad95 testyaml-cpp: ubuntu: apt: packages: [ yaml-cpp0.2.6-dev ] debian: source: uri: 'https://kforge.ros.org/rosrelease/viewvc/sourcedeps/yaml-cpp/yaml-cpp-0.2.5.rdmanifest' md5sum: f7fb81fd4a2fbd5022daa7686e816359 osx: source: uri: 'https://kforge.ros.org/rosrelease/viewvc/sourcedeps/yaml-cpp/yaml-cpp-cmake-0.2.5.rdmanifest' md5sum: 863fb3b7e5b5f1e22ff1365de6e66b34 testcheckinstall: ubuntu: apt: packages: [checkinstall] debian: apt: packages: [checkinstall] testcurl: ubuntu: libcurl4-openssl-dev debian: libcurl4-openssl-dev opensuse: libcurl-devel fedora: libcurl-devel arch: curl macports: curl gentoo: net-misc/curl freebsd: curl testlibxml2: ubuntu: libxml2-dev debian: libxml2-dev arch: libxml2 opensuse: libxml2-devel fedora: libxml2-devel macports: libxml2 gentoo: dev-libs/libxml2 freebsd: libxml2 fedora: libxml2-devel testcppunit: ubuntu: libcppunit-dev debian: libcppunit-dev opensuse: libcppunit-devel fedora: cppunit-devel rhel: cppunit-devel arch: cppunit macports: cppunit gentoo: dev-util/cppunit freebsd: cppunit testscons: ubuntu: scons debian: scons arch: scons opensuse: scons fedora: scons macports: scons gentoo: dev-util/scons freebsd: scons testlibxext: ubuntu: libxext-dev debian: libxext-dev opensuse: xorg-x11-libXext-devel fedora: libXext-devel rhel: libXext-devel macports: xorg-libXext arch: libxext gentoo: x11-libs/libXext freebsd: libXext testzziplib: ubuntu: libzzip-0-13 libzzip-dev debian: libzzip-0-13 libzzip-dev opensuse: zziplib-devel fedora: zziplib-devel rhel: zziplib-devel macports: libzzip arch: zziplib gentoo: dev-libs/zziplib freebsd: zziplib testlibxaw: ubuntu: libxaw7-dev debian: libxaw7-dev opensuse: xorg-x11-devel fedora: libXaw-devel rhel: libXaw-devel macports: xorg-libXaw arch: libxaw gentoo: x11-libs/libXaw freebsd: libXaw testopengl: ubuntu: libgl1-mesa-dev libglu1-mesa-dev debian: libgl1-mesa-dev libglu1-mesa-dev opensuse: Mesa-devel fedora: mesa-libGL-devel mesa-libGLU-devel rhel: mesa-libGL-devel mesa-libGLU-devel macports: mesa arch: mesa gentoo: media-libs/mesa freebsd: mesagl-mangled testlibxxf86vm: ubuntu: libxxf86vm-dev debian: libxxf86vm-dev opensuse: xorg-x11-devel fedora: libXxf86vm-devel rhel: libXxf86vm-devel macports: xorg-libXxf86vm arch: libxxf86vm gentoo: x11-libs/libXxf86vm freebsd: libXxf86vm testatlas: ubuntu: libatlas-base-dev debian: libatlas-base-dev fedora: atlas-devel arch: | macports: atlas gentoo: atlas testpython-sip4: ubuntu: python-sip4-dev sip4 debian: python-sip4-dev sip4 macports: py25-sip gentoo: dev-python/sip arch: sip testfestival: ubuntu: festival festvox-kallpc16k debian: festival festvox-kallpc16k arch: festival festival-kallpc16k rosdep-0.21.0/test/rosdistro/000077500000000000000000000000001406544147500161075ustar00rootroot00000000000000rosdep-0.21.0/test/rosdistro/index.yaml000066400000000000000000000002531406544147500201020ustar00rootroot00000000000000%YAML 1.1 # index file # this file describes the available ROS distributions # see REP 137: http://ros.org/reps/rep-0137.html --- type: index version: 2 distributions: [] rosdep-0.21.0/test/source/000077500000000000000000000000001406544147500153575ustar00rootroot00000000000000rosdep-0.21.0/test/source/foo.tar.gz000066400000000000000000000001741406544147500172730ustar00rootroot00000000000000‹•POíÎ1 „0„á%'÷â39,ºÅ‚‰èñ‹µVZý_30L1ã45e+îIRE³#5ÅP3¨uòïON5•k¯jmç¼<úê´äÒÏÞ»ßú¹Ü­ß%s~ãwv½®Ÿ4(rosdep-0.21.0/test/source/noop-installed.rdmanifest000066400000000000000000000003541406544147500223670ustar00rootroot00000000000000uri: 'http://download.ros.org/downloads/yaml-cpp-0.2.5.tar.gz' md5sum: b17dc36055cd2259c88b2602601415d9 install-script: | #!/bin/bash echo "noop" check-presence-script: | #!/bin/bash exit 0 exec-path: yaml-cpp-0.2.5 depends: [] rosdep-0.21.0/test/source/noop-not-installed.rdmanifest000066400000000000000000000003541406544147500231650ustar00rootroot00000000000000uri: 'http://download.ros.org/downloads/yaml-cpp-0.2.5.tar.gz' md5sum: b17dc36055cd2259c88b2602601415d9 install-script: | #!/bin/bash echo "noop" check-presence-script: | #!/bin/bash exit 1 exec-path: yaml-cpp-0.2.5 depends: [] rosdep-0.21.0/test/source/rep112-example.rdmanifest000066400000000000000000000011071406544147500220770ustar00rootroot00000000000000uri: 'http://download.ros.org/downloads/yaml-cpp-0.2.5.tar.gz' md5sum: b17dc36055cd2259c88b2602601415d9 install-script: | #!/bin/bash set -o errexit mkdir -p build cd build cmake .. make echo "About to run checkinstall make install" sudo checkinstall -y --nodoc --pkgname=yaml-cpp-sourcedep make install check-presence-script: | #!/bin/bash dpkg-query -W -f='${Package} ${Status}\n' yaml-cpp-sourcedep | awk '{\ if ($4 =="installed") exit 0 else print "yaml-cpp-sourcedep not installed" exit 1}' exec-path: yaml-cpp-0.2.5 depends: [checkinstall ] rosdep-0.21.0/test/sources.list.d/000077500000000000000000000000001406544147500167365ustar00rootroot00000000000000rosdep-0.21.0/test/sources.list.d/20-default.list000066400000000000000000000003111406544147500214710ustar00rootroot00000000000000yaml https://github.com/ros/rosdistro/raw/master/rosdep/base.yaml # for test data, give this a tag so we can validate matcher yaml https://github.com/ros/rosdistro/raw/master/rosdep/python.yaml python rosdep-0.21.0/test/sources.list.d/30-nonexistent.list000066400000000000000000000000751406544147500224330ustar00rootroot00000000000000yaml https://badhostname.willowgarage.com/rosdep.yaml ubuntu rosdep-0.21.0/test/sources_cache/000077500000000000000000000000001406544147500166655ustar00rootroot00000000000000rosdep-0.21.0/test/sources_cache/0a12d6e7b0d47be9b76e7726720e4cb79528cbaa000066400000000000000000000057571406544147500243470ustar00rootroot00000000000000testboost: arch: boost cygwin: libboost-devel libboost1.40 debian: {lenny: "if [ ! -f /opt/ros/lib/libboost_date_time-gcc43-mt*-1_37.a ] ;\ \ then\n mkdir -p ~/ros/ros-deps\n cd ~/ros/ros-deps\n wget --tries=10 http://pr.willowgarage.com/downloads/boost_1_37_0.tar.gz\n\ \ tar xzf boost_1_37_0.tar.gz\n cd boost_1_37_0\n ./configure --prefix=/opt/ros\n\ \ make\n sudo make install\nfi\n", squeeze: libboost1.42-all-dev} fedora: boost-devel freebsd: boost-python-libs gentoo: dev-libs/boost macports: boost opensuse: boost-devel osxbrew: homebrew: packages: [boost] rhel: boost-devel ubuntu: lucid: apt: packages: [libboost1.40-all-dev] maverick: apt: packages: [libboost1.42-all-dev] natty: apt: packages: [libboost1.42-all-dev] oneiric: apt: packages: [libboost1.46-all-dev] bzip2: arch: bzip2 cygwin: bzip2 debian: libbz2-dev fedora: bzip2-devel freebsd: bzip2 gentoo: app-arch/bzip2 macports: bzip2 opensuse: libbz2-devel osxbrew: homebrew: {packages: ''} rhel: bzip2-devel ubuntu: libbz2-dev checkinstall: debian: apt: packages: [checkinstall] osxbrew: homebrew: {packages: ''} ubuntu: apt: packages: [checkinstall] cmake: {ubuntu: cmake} cppunit: arch: cppunit debian: libcppunit-dev fedora: cppunit-devel freebsd: cppunit gentoo: dev-util/cppunit macports: cppunit opensuse: libcppunit-devel osxbrew: homebrew: args: [--universal] packages: [cppunit] rhel: cppunit-devel ubuntu: libcppunit-dev curl: arch: curl debian: libcurl4-openssl-dev fedora: libcurl-devel freebsd: curl gentoo: net-misc/curl macports: curl opensuse: libcurl-devel osxbrew: homebrew: {packages: ''} ubuntu: libcurl4-openssl-dev eigen: debian: source: {md5sum: 941db2fbb09d80c28426d335022fad95, uri: 'https://kforge.ros.org/rosrelease/viewvc/sourcedeps/eigen/eigen-3.0.1-1.rdmanifest'} gentoo: '>=dev-cpp/eigen-3' osxbrew: homebrew: packages: [eigen] ubuntu: apt: packages: [libeigen3-dev] epydoc: debian: python-epydoc fedora: epydoc freebsd: epydoc gentoo: dev-python/epydoc macports: py26-epydoc osxbrew: lion: pip: packages: [epydoc] ubuntu: python-epydoc festival: {arch: festival festival-kallpc16k, debian: festival festvox-kallpc16k, ubuntu: festival festvox-kallpc16k} testlibtool: arch: libtool debian: {lenny: libtool libltdl3-dev, squeeze: libtool libltdl-dev} fedora: libtool libtool-ltdl-devel freebsd: libtool gentoo: sys-devel/libtool macports: libtool opensuse: libtool libltdl3 osxbrew: homebrew: {packages: ''} rhel: libtool libtool-ltdl-devel ubuntu: apt: packages: [libtool, libltdl-dev] testtinyxml: debian: libtinyxml-dev fedora: tinyxml-devel osxbrew: homebrew: formula_uri: https://kforge.ros.org/rososx/homebrew/file/tip/electric/tinyxml.rb packages: [tinyxml] ubuntu: libtinyxml-dev rosdep-0.21.0/test/sources_cache/82cbc7008b5117bcc6ce794832659e4f7763d2db000066400000000000000000000062701406544147500242120ustar00rootroot00000000000000actionlib: ubuntu: lucid: apt: packages: [ros-fuerte-actionlib] oneiric: apt: packages: [ros-fuerte-actionlib] catkin: ubuntu: lucid: apt: packages: [ros-fuerte-catkin] oneiric: apt: packages: [ros-fuerte-catkin] common_msgs: ubuntu: lucid: apt: packages: [ros-fuerte-common-msgs] oneiric: apt: packages: [ros-fuerte-common-msgs] flann: ubuntu: lucid: apt: packages: [ros-fuerte-flann] oneiric: apt: packages: [ros-fuerte-flann] gencpp: ubuntu: lucid: apt: packages: [ros-fuerte-gencpp] oneiric: apt: packages: [ros-fuerte-gencpp] genlisp: ubuntu: lucid: apt: packages: [ros-fuerte-genlisp] oneiric: apt: packages: [ros-fuerte-genlisp] genmsg: ubuntu: lucid: apt: packages: [ros-fuerte-genmsg] oneiric: apt: packages: [ros-fuerte-genmsg] genpy: ubuntu: lucid: apt: packages: [ros-fuerte-genpy] oneiric: apt: packages: [ros-fuerte-genpy] langs: ubuntu: lucid: apt: packages: [ros-fuerte-langs] oneiric: apt: packages: [ros-fuerte-langs] octomap: ubuntu: lucid: apt: packages: [ros-fuerte-octomap] oneiric: apt: packages: [ros-fuerte-octomap] ompl: ubuntu: lucid: apt: packages: [ros-fuerte-ompl] oneiric: apt: packages: [ros-fuerte-ompl] opencv2: ubuntu: lucid: apt: packages: [ros-fuerte-opencv2] oneiric: apt: packages: [ros-fuerte-opencv2] pcl: ubuntu: lucid: apt: packages: [ros-fuerte-pcl] oneiric: apt: packages: [ros-fuerte-pcl] ros: ubuntu: lucid: apt: packages: [ros-fuerte-ros] oneiric: apt: packages: [ros-fuerte-ros] ros_comm: ubuntu: lucid: apt: packages: [ros-fuerte-ros-comm] oneiric: apt: packages: [ros-fuerte-ros-comm] ros_tutorials: ubuntu: lucid: apt: packages: [ros-fuerte-ros-tutorials] oneiric: apt: packages: [ros-fuerte-ros-tutorials] roscpp_core: ubuntu: lucid: apt: packages: [ros-fuerte-roscpp-core] oneiric: apt: packages: [ros-fuerte-roscpp-core] rospack: ubuntu: lucid: apt: packages: [ros-fuerte-rospack] oneiric: apt: packages: [ros-fuerte-rospack] rospkg: ubuntu: lucid: apt: packages: [ros-fuerte-rospkg] oneiric: apt: packages: [ros-fuerte-rospkg] rx: ubuntu: lucid: apt: packages: [ros-fuerte-rx] oneiric: apt: packages: [ros-fuerte-rx] sbpl: ubuntu: lucid: apt: packages: [ros-fuerte-sbpl] oneiric: apt: packages: [ros-fuerte-sbpl] std_msgs: ubuntu: lucid: apt: packages: [ros-fuerte-std-msgs] oneiric: apt: packages: [ros-fuerte-std-msgs] swig-wx: ubuntu: lucid: apt: packages: [ros-fuerte-swig-wx] oneiric: apt: packages: [ros-fuerte-swig-wx] rosdep-0.21.0/test/sources_cache/f6f4ef95664e373cd4754501337fa217f5b55d91000066400000000000000000000023401406544147500240530ustar00rootroot00000000000000paramiko: arch: python-paramiko debian: python-paramiko fedora: python-paramiko freebsd: py27-paramiko gentoo: dev-python/paramiko macports: py26-paramiko opensuse: python-paramiko ubuntu: python-paramiko slackware: paramiko testpython: arch: python cygwin: python debian: python-dev fedora: python-devel freebsd: python gentoo: python opensuse: python-devel rhel: python-devel slackware: python ubuntu: python-dev osx: homebrew: packages: [] python-empy: {ubuntu: python-empy} python-gtk2: arch: pygtk debian: python-gtk2 fedora: pygtk2 freebsd: py-gtk2 gentoo: =dev-python/pygtk-2* opensuse: python-gtk pip: pygtk rhel: pygtk2 slackware: pygtk ubuntu: python-gtk2 python-imaging: arch: python-imaging debian: python-imaging fedora: python-imaging freebsd: py27-imaging gentoo: dev-python/imaging opensuse: python-imaging rhel: python-imaging slackware: python-pillow ubuntu: python-imaging python-matplotlib: arch: python-matplotlib debian: python-matplotlib fedora: python-matplotlib freebsd: py27-matplotlib gentoo: dev-python/matplotlib opensuse: python-matplotlib rhel: python-matplotlib slackware: matplotlib ubuntu: python-matplotlib rosdep-0.21.0/test/sources_cache/index000066400000000000000000000004301406544147500177140ustar00rootroot00000000000000#autogenerated by rosdep, do not edit. use 'rosdep update' instead yaml https://github.com/ros/rosdistro/raw/master/rosdep/base.yaml yaml https://github.com/ros/rosdistro/raw/master/rosdep/python.yaml yaml https://github.com/ros/rosdistro/raw/master/releases/fuerte.yaml fuerte rosdep-0.21.0/test/test_flake8.py000066400000000000000000000042071406544147500166450ustar00rootroot00000000000000# Copyright 2018 Open Source Robotics Foundation, Inc. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. from __future__ import print_function import os import sys from flake8.api.legacy import get_style_guide def test_flake8(): style_guide = get_style_guide( exclude=['conf.py'], ignore=[ 'C402', # ignore presence of unnecessary generators 'C405', # ignore presence of unnecessary literals 'C407', # ignore presence of unnecessary comprehensions 'C408', # ignore presence of unnecessary tuple/list/dict 'D', # ignore documentation related warnings 'F401', # ignore presence of unused imports 'F841', # ignore presence of unused variables 'I', # ignore import order related warnings 'N802', # ignore presence of upper case in function names 'W504', # ignore line breaks after binary operator (new rule added in 2018) ], max_line_length=200, max_complexity=10, show_source=True, ) stdout = sys.stdout sys.stdout = sys.stderr # implicitly calls report_errors() report = style_guide.check_files([ os.path.dirname(os.path.dirname(__file__)), ]) sys.stdout = stdout if report.total_errors: # output summary with per-category counts print() report._application.formatter.show_statistics(report._stats) print( 'flake8 reported {report.total_errors} errors' .format(**locals()), file=sys.stderr) assert not report.total_errors, \ 'flake8 reported {report.total_errors} errors'.format(**locals()) rosdep-0.21.0/test/test_metadata.py000066400000000000000000000066571406544147500172660ustar00rootroot00000000000000# Copyright (c) 2019, Open Source Robotics Foundation, Inc. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # # * Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # * Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # * Neither the name of the Willow Garage, Inc. nor the names of its # contributors may be used to endorse or promote products derived from # this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. from __future__ import print_function import os import sys try: from tempfile import TemporaryDirectory except ImportError: import tempfile import shutil class TemporaryDirectory(object): """Python 2 compatible class.""" def __init__(self): self.name = None def __enter__(self): self.name = tempfile.mkdtemp() return self.name def __exit__(self, t, v, tb): shutil.rmtree(self.name) from rosdep2.meta import MetaDatabase def test_metadatabase_set_get(): with TemporaryDirectory() as tmpdir: db = MetaDatabase(cache_dir=tmpdir) db.set('fruit', 'tomato') assert 'tomato' == db.get('fruit') def test_metadatabase_get_none(): with TemporaryDirectory() as tmpdir: db = MetaDatabase(cache_dir=tmpdir) assert db.get('fruit') is None def test_metadatabase_get_default(): with TemporaryDirectory() as tmpdir: db = MetaDatabase(cache_dir=tmpdir) assert db.get('fruit', default='foo') == 'foo' db.set('fruit', 'tomato') assert db.get('fruit', default='foo') != 'foo' def test_metadatabase_get_mutate_get(): with TemporaryDirectory() as tmpdir: db = MetaDatabase(cache_dir=tmpdir) mutable = [1, 2, 3] db.set('category', mutable) mutable.append(4) assert [1, 2, 3] == db.get('category') def test_metadatabase_set_set_get(): with TemporaryDirectory() as tmpdir: db = MetaDatabase(cache_dir=tmpdir) db.set('fruit', 'tomato') db.set('fruit', 'orange') assert 'orange' == db.get('fruit') def test_metadatabase_set_load_from_disk_get(): with TemporaryDirectory() as tmpdir: db1 = MetaDatabase(cache_dir=tmpdir) db1.set('fruit', 'apple') db2 = MetaDatabase(cache_dir=tmpdir) assert 'apple' == db2.get('fruit') rosdep-0.21.0/test/test_rosdep.py000066400000000000000000000044351406544147500167720ustar00rootroot00000000000000# Copyright (c) 2011, Willow Garage, Inc. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # # * Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # * Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # * Neither the name of the Willow Garage, Inc. nor the names of its # contributors may be used to endorse or promote products derived from # this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. from __future__ import print_function import os import sys def test_create_default_installer_context(): import rosdep2 # test both constructors for context in [rosdep2.create_default_installer_context(), rosdep2.create_default_installer_context(verbose=True)]: assert context is not None assert isinstance(context, rosdep2.InstallerContext) # this is just tripwire as we actual value will change over time from rospkg.os_detect import OS_UBUNTU, OsDetect assert OS_UBUNTU in context.get_os_keys() assert context.get_installer('apt') is not None assert 'apt' in context.get_os_installer_keys(OS_UBUNTU) assert OsDetect.get_codename == context.get_os_version_type(OS_UBUNTU) rosdep-0.21.0/test/test_rosdep_alpine.py000066400000000000000000000074001406544147500203150ustar00rootroot00000000000000# Copyright (c) 2018, SEQSENSE, Inc. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # # * Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # * Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # * Neither the name of the Willow Garage, Inc. nor the names of its # contributors may be used to endorse or promote products derived from # this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. # Author Atsushi Watanabe/atsushi.w@ieee.org import os import traceback from mock import Mock, patch import rospkg.os_detect def get_test_dir(): # not used yet return os.path.abspath(os.path.join(os.path.dirname(__file__), 'alpine')) def test_apk_detect(): from rosdep2.platforms.alpine import apk_detect m = Mock(return_value='') expected = [] val = apk_detect([], exec_fn=m) assert val == expected, 'Result was: %s' % val m.assert_not_called() m = Mock(return_value='') expected = [] val = apk_detect(['a'], exec_fn=m) assert val == expected, 'Result was: %s' % val m.assert_called_with(['apk', 'info', '--installed', 'a']) m = Mock(return_value='\n'.join(['a', 'b'])) expected = ['a', 'b'] val = apk_detect(['a', 'b'], exec_fn=m) assert val == expected, 'Result was: %s' % val m.assert_called_with(['apk', 'info', '--installed', 'a', 'b']) def test_ApkInstaller(): from rosdep2.platforms.alpine import ApkInstaller @patch.object(ApkInstaller, 'get_packages_to_install') def test(expected_prefix, mock_method): installer = ApkInstaller() mock_method.return_value = [] assert [] == installer.get_install_command(['nonexistingfakepackage']) mock_method.return_value = ['a-dev', 'b-dev'] expected = [expected_prefix + ['apk', 'add', 'a-dev', 'b-dev']] val = installer.get_install_command(['notused'], interactive=False, quiet=False) assert val == expected, 'Result was: %s' % val expected = [expected_prefix + ['apk', 'add', '--interactive', 'a-dev', 'b-dev']] val = installer.get_install_command(['notused'], interactive=True, quiet=False) assert val == expected, 'Result was: %s' % val expected = [expected_prefix + ['apk', 'add', '--quiet', 'a-dev', 'b-dev']] val = installer.get_install_command(['notused'], interactive=False, quiet=True) assert val == expected, 'Result was: %s' % val try: with patch('rosdep2.installers.os.geteuid', return_value=1): test(['sudo', '-H']) with patch('rosdep2.installers.os.geteuid', return_value=0): test([]) except AssertionError: traceback.print_exc() raise rosdep-0.21.0/test/test_rosdep_arch.py000066400000000000000000000055061406544147500177670ustar00rootroot00000000000000# Copyright (c) 2011, Willow Garage, Inc. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # # * Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # * Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # * Neither the name of the Willow Garage, Inc. nor the names of its # contributors may be used to endorse or promote products derived from # this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. # Author Ken Conley/kwc@willowgarage.com import os import traceback from mock import Mock, patch def get_test_dir(): # not used yet return os.path.abspath(os.path.join(os.path.dirname(__file__), 'arch')) def test_PacmanInstaller(): from rosdep2.platforms.arch import PacmanInstaller @patch.object(PacmanInstaller, 'get_packages_to_install') def test(expected_prefix, mock_method): installer = PacmanInstaller() mock_method.return_value = [] assert [] == installer.get_install_command(['fake']) # no interactive option implemented yet mock_method.return_value = ['a', 'b'] expected = [expected_prefix + ['pacman', '-S', '--noconfirm', '--needed', 'a', 'b']] val = installer.get_install_command(['whatever'], interactive=False) assert val == expected, val expected = [expected_prefix + ['pacman', '-S', '--needed', 'a', 'b']] val = installer.get_install_command(['whatever'], interactive=True) assert val == expected, val try: with patch('rosdep2.installers.os.geteuid', return_value=1): test(['sudo', '-H']) with patch('rosdep2.installers.os.geteuid', return_value=0): test([]) except AssertionError: traceback.print_exc() raise rosdep-0.21.0/test/test_rosdep_catkin_packages.py000066400000000000000000000020731406544147500221550ustar00rootroot00000000000000import contextlib import os import tempfile from rosdep2.catkin_packages import find_catkin_packages_in @contextlib.contextmanager def directory(path): cwd = os.getcwd() os.chdir(path) yield os.chdir(cwd) def create_package_xml(path, version='0.1.0'): path = os.path.abspath(path) os.makedirs(path) template = """\ {0} {1} Package {0} BSD Foo Bar """.format(path.split('/')[-1], version) with open(os.path.join(path, 'package.xml'), 'w+') as f: f.write(template) def test_find_catkin_packages_in(): tmp_dir = tempfile.mkdtemp() with directory(tmp_dir): create_package_xml('src/foo', '0.2.0') create_package_xml('src/bar', '0.3.0') create_package_xml('src/baz', '0.2.0') pkgs = find_catkin_packages_in('src') assert sorted(pkgs) == sorted(['foo', 'bar', 'baz']), \ 'actually: ' + str(sorted(pkgs)) rosdep-0.21.0/test/test_rosdep_catkin_support.py000066400000000000000000000012071406544147500221110ustar00rootroot00000000000000from rosdep2.catkin_support import get_installer, get_catkin_view, ValidationFailed, resolve_for_os from rosdep2.platforms.debian import APT_INSTALLER def test_workflow(): try: installer = get_installer(APT_INSTALLER) view = get_catkin_view('fuerte', 'ubuntu', 'lucid') resolved = resolve_for_os('cmake', view, installer, 'ubuntu', 'lucid') assert ['cmake'] == resolved resolved = resolve_for_os('python', view, installer, 'ubuntu', 'lucid') assert resolved == ['python-dev'] except ValidationFailed: # tests fail on the server because 'rosdep init' has not been run pass rosdep-0.21.0/test/test_rosdep_core.py000066400000000000000000000041341406544147500177760ustar00rootroot00000000000000# Copyright (c) 2011, Willow Garage, Inc. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # # * Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # * Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # * Neither the name of the Willow Garage, Inc. nor the names of its # contributors may be used to endorse or promote products derived from # this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. import os def test_RosdepInternalError(): from rosdep2.core import RosdepInternalError try: raise Exception('foo') except Exception as e: ex = RosdepInternalError(e) assert e == ex.error def test_rd_debug(): # just tripwire/coverage from rosdep2.core import rd_debug rd_debug('foo') os.environ['ROSDEP_DEBUG'] = '1' rd_debug('foo') def test_InvalidData(): from rosdep2.core import InvalidData try: raise InvalidData('hi') except InvalidData as ex: assert 'hi' in str(ex) rosdep-0.21.0/test/test_rosdep_cygwin.py000066400000000000000000000052371406544147500203530ustar00rootroot00000000000000# Copyright (c) 2011, Willow Garage, Inc. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # # * Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # * Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # * Neither the name of the Willow Garage, Inc. nor the names of its # contributors may be used to endorse or promote products derived from # this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. # Author Ken Conley/kwc@willowgarage.com import os import traceback from mock import patch def get_test_dir(): # not used yet return os.path.abspath(os.path.join(os.path.dirname(__file__), 'cygwin')) def test_AptCygInstaller(): from rosdep2.platforms.cygwin import AptCygInstaller @patch.object(AptCygInstaller, 'get_packages_to_install') def test(mock_method): installer = AptCygInstaller() mock_method.return_value = [] assert [] == installer.get_install_command(['fake']) # no interactive option implemented yet mock_method.return_value = ['a', 'b'] expected = [['apt-cyg', '-m', 'ftp://sourceware.org/pub/cygwinports', 'install', 'a', 'b']] val = installer.get_install_command(['whatever'], interactive=False) assert val == expected, val expected = [['apt-cyg', '-m', 'ftp://sourceware.org/pub/cygwinports', 'install', 'a', 'b']] val = installer.get_install_command(['whatever'], interactive=True) assert val == expected, val try: test() except AssertionError: traceback.print_exc() raise rosdep-0.21.0/test/test_rosdep_debian.py000066400000000000000000000144351406544147500202750ustar00rootroot00000000000000# Copyright (c) 2011, Willow Garage, Inc. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # # * Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # * Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # * Neither the name of the Willow Garage, Inc. nor the names of its # contributors may be used to endorse or promote products derived from # this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. # Author Ken Conley/kwc@willowgarage.com import os import traceback from mock import Mock, patch, call def get_test_dir(): return os.path.abspath(os.path.join(os.path.dirname(__file__), 'debian')) def test_dpkg_detect(): from rosdep2.platforms.debian import dpkg_detect with patch('rosdep2.platforms.debian.read_stdout') as mock_read_stdout: mock_read_stdout.side_effect = [('', ''), ''] val = dpkg_detect([]) assert val == [], val assert mock_read_stdout.call_count == 2 assert mock_read_stdout.call_args_list[0] == call(['dpkg-query', '-W', "-f='${Package} ${Status}\n'"], True) assert mock_read_stdout.call_args_list[1] == call(['apt-cache', 'showpkg']) with patch('rosdep2.platforms.debian.read_stdout') as mock_read_stdout: mock_read_stdout.side_effect = [('', ''), ''] val = dpkg_detect(['tinyxml-dev']) assert val == [], val assert mock_read_stdout.call_count == 2 assert mock_read_stdout.call_args_list[0] == call(['dpkg-query', '-W', "-f='${Package} ${Status}\n'", 'tinyxml-dev'], True) assert mock_read_stdout.call_args_list[1] == call(['apt-cache', 'showpkg', 'tinyxml-dev']) with open(os.path.join(get_test_dir(), 'dpkg-python-apt'), 'r') as f: dpkg_python_apt_test_content = f.read() with patch('rosdep2.platforms.debian.read_stdout') as mock_read_stdout: mock_read_stdout.side_effect = [(dpkg_python_apt_test_content, ''), ''] val = dpkg_detect(['apt', 'tinyxml-dev', 'python']) assert val == ['apt', 'python'], val assert mock_read_stdout.call_count == 2 print(mock_read_stdout.call_args_list[0]) assert mock_read_stdout.call_args_list[1] == call(['apt-cache', 'showpkg', 'tinyxml-dev']) # test version lock code (should be filtered out w/o validation) with patch('rosdep2.platforms.debian.read_stdout') as mock_read_stdout: mock_read_stdout.side_effect = [(dpkg_python_apt_test_content, ''), ''] val = dpkg_detect(['apt=1.8', 'tinyxml-dev', 'python=2.7']) assert val == ['apt=1.8', 'python=2.7'], val assert mock_read_stdout.call_count == 2 assert mock_read_stdout.call_args_list[1] == call(['apt-cache', 'showpkg', 'tinyxml-dev']) def test_read_apt_cache_showpkg(): from rosdep2.platforms.debian import _read_apt_cache_showpkg m = Mock() with open(os.path.join(get_test_dir(), 'showpkg-curl-wget-libcurl-dev'), 'r') as f: m.return_value = f.read() pkgs = ['curl', 'wget', '_not_existing', 'libcurl-dev', 'ros-kinetic-rc-genicam-api'] results = list(_read_apt_cache_showpkg(pkgs, exec_fn=m)) assert len(results) == len(pkgs), results package, virtual, providers = results[0] assert package == 'curl', package assert not virtual assert providers is None, providers package, virtual, providers = results[1] assert package == 'wget', package assert not virtual assert providers is None, providers package, virtual, providers = results[2] assert package == '_not_existing', package assert not virtual assert providers is None, providers package, virtual, providers = results[3] assert package == 'libcurl-dev', package assert virtual, providers package, virtual, providers = results[4] assert package == 'ros-kinetic-rc-genicam-api', package assert not virtual assert providers is None, providers def test_AptInstaller(): from rosdep2.platforms.debian import AptInstaller @patch('rosdep2.platforms.debian.read_stdout') @patch.object(AptInstaller, 'get_packages_to_install') def test(expected_prefix, mock_get_packages_to_install, mock_read_stdout): installer = AptInstaller() mock_get_packages_to_install.return_value = [] mock_read_stdout.return_value = '' assert [] == installer.get_install_command(['fake']) mock_get_packages_to_install.return_value = ['a', 'b'] expected = [expected_prefix + ['apt-get', 'install', '-y', 'a'], expected_prefix + ['apt-get', 'install', '-y', 'b']] val = installer.get_install_command(['whatever'], interactive=False) print('VAL', val) assert val == expected, val expected = [expected_prefix + ['apt-get', 'install', 'a'], expected_prefix + ['apt-get', 'install', 'b']] val = installer.get_install_command(['whatever'], interactive=True) assert val == expected, val try: with patch('rosdep2.installers.os.geteuid', return_value=1): test(['sudo', '-H']) with patch('rosdep2.installers.os.geteuid', return_value=0): test([]) except AssertionError: traceback.print_exc() raise rosdep-0.21.0/test/test_rosdep_dependency_graph.py000066400000000000000000000203001406544147500223360ustar00rootroot00000000000000# Copyright (c) 2012, Willow Garage, Inc. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # # * Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # * Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # * Neither the name of the Willow Garage, Inc. nor the names of its # contributors may be used to endorse or promote products derived from # this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. # Author William Woodall/wjwwood@gmail.com def test_DependencyGraph_Linear(): from rosdep2.dependency_graph import DependencyGraph # Normal A-B-C dg = DependencyGraph() dg['A']['installer_key'] = 'a_installer' dg['A']['install_keys'] = ['a'] dg['A']['dependencies'] = ['B'] dg['B']['installer_key'] = 'b_installer' dg['B']['install_keys'] = ['b'] dg['B']['dependencies'] = ['C'] dg['C']['installer_key'] = 'c_installer' dg['C']['install_keys'] = ['c'] dg['C']['dependencies'] = [] result = dg.get_ordered_dependency_list() expected = [('c_installer', ['c']), ('b_installer', ['b']), ('a_installer', ['a'])] assert result == expected, 'Results did not match expectations: %s == %s' % (str(result), str(expected)) def test_DependencyGraph_Cycle(): from rosdep2.dependency_graph import DependencyGraph # Full Loop A-B-C-A-... dg = DependencyGraph() dg['A']['installer_key'] = 'a_installer' dg['A']['install_keys'] = ['a'] dg['A']['dependencies'] = ['B'] dg['B']['installer_key'] = 'b_installer' dg['B']['install_keys'] = ['b'] dg['B']['dependencies'] = ['C'] dg['C']['installer_key'] = 'c_installer' dg['C']['install_keys'] = ['c'] dg['C']['dependencies'] = ['A'] try: result = dg.get_ordered_dependency_list() assert False, "Doesn't fail, it should fail with an AssertionError because of the cycle." except AssertionError as e: if not str(e).startswith('A cycle in the dependency graph occurred with key'): assert False, 'Throws AssertionError, but with the wrong message. Error was: %s: %s' % (type(e), str(e)) except Exception as e: assert False, 'Throws and Exception, but not an AssertionError. Error was: %s: %s' % (type(e), str(e)) def test_DependencyGraph_Short_Cycle(): from rosdep2.dependency_graph import DependencyGraph # Short cycle A-B-C-D-B-C-D-... dg = DependencyGraph() dg['A']['installer_key'] = 'a_installer' dg['A']['install_keys'] = ['a'] dg['A']['dependencies'] = ['B'] dg['B']['installer_key'] = 'b_installer' dg['B']['install_keys'] = ['b'] dg['B']['dependencies'] = ['C'] dg['C']['installer_key'] = 'c_installer' dg['C']['install_keys'] = ['c'] dg['C']['dependencies'] = ['D'] dg['D']['installer_key'] = 'd_installer' dg['D']['install_keys'] = ['d'] dg['D']['dependencies'] = ['B'] try: result = dg.get_ordered_dependency_list() assert False, "Doesn't fail, it should fail with an AssertionError because of the cycle." except AssertionError as e: if not str(e).startswith('A cycle in the dependency graph occurred with key'): assert False, 'Throws AssertionError, but with the wrong message. Error was: %s: %s' % (type(e), str(e)) except Exception as e: assert False, 'Throws and Exception, but not an AssertionError. Error was: %s: %s' % (type(e), str(e)) def test_DependencyGraph_Invalid_Key(): from rosdep2.dependency_graph import DependencyGraph # Invalid graph A-B-C where C doesn't exist dg = DependencyGraph() dg['A']['installer_key'] = 'a_installer' dg['A']['install_keys'] = ['a'] dg['A']['dependencies'] = ['B'] dg['B']['installer_key'] = 'b_installer' dg['B']['install_keys'] = ['b'] dg['B']['dependencies'] = ['C'] try: result = dg.get_ordered_dependency_list() assert False, "Doesn't fail, it should fail with an KeyError because of the invalid rosdep key." except KeyError as e: if not str(e).endswith("does not exist in the dictionary of resolutions.'"): assert False, 'Throws KeyError, but with the wrong message. Error was: %s: %s' % (type(e), str(e)) except Exception as e: assert False, 'Throws and Exception, but not an KeyError. Error was: %s: %s' % (type(e), str(e)) def test_DependencyGraph_Invalid_Key2(): from rosdep2.dependency_graph import DependencyGraph # Invalid graph A-B-C where B doesn't exist dg = DependencyGraph() dg['A']['installer_key'] = 'a_installer' dg['A']['install_keys'] = ['a'] dg['A']['dependencies'] = ['B'] dg['C']['installer_key'] = 'c_installer' dg['C']['install_keys'] = ['c'] dg['C']['dependencies'] = [] try: result = dg.get_ordered_dependency_list() assert False, "Doesn't fail, it should fail with an KeyError because of the invalid rosdep key." except KeyError as e: if not str(e).endswith("does not exist in the dictionary of resolutions.'"): assert False, 'Throws KeyError, but with the wrong message. Error was: %s: %s' % (type(e), str(e)) except Exception as e: assert False, 'Throws and Exception, but not an KeyError. Error was: %s: %s' % (type(e), str(e)) def test_DependencyGraph_Multi_Root(): from rosdep2.dependency_graph import DependencyGraph # Multi root, shared dependency: A-B-C, D-C dg = DependencyGraph() dg['A']['installer_key'] = 'a_installer' dg['A']['install_keys'] = ['a'] dg['A']['dependencies'] = ['B'] dg['B']['installer_key'] = 'b_installer' dg['B']['install_keys'] = ['b'] dg['B']['dependencies'] = ['C'] dg['C']['installer_key'] = 'c_installer' dg['C']['install_keys'] = ['c'] dg['C']['dependencies'] = [] dg['D']['installer_key'] = 'd_installer' dg['D']['install_keys'] = ['d'] dg['D']['dependencies'] = ['C'] result = dg.get_ordered_dependency_list() # TODO: The expected might also have a different order, for example it might be: # [('c_installer', ['c']), ('d_installer', ['d']), ('b_installer', ['b']), ('a_installer', ['a'])] # But that wont invalidate the order from a dependency graph stand point expected = [ [('c_installer', ['c']), ('b_installer', ['b']), ('a_installer', ['a']), ('d_installer', ['d'])], [('c_installer', ['c']), ('d_installer', ['d']), ('b_installer', ['b']), ('a_installer', ['a'])], ] assert result in expected, 'Results did not match expectations: %s == %s' % (str(result), str(expected)) def test_DependencyGraph_Realworld(): from rosdep2.dependency_graph import DependencyGraph # Real world example dg = DependencyGraph() dg['python-matplotlib']['installer_key'] = 'pip' dg['python-matplotlib']['install_keys'] = ['matplotlib'] dg['python-matplotlib']['dependencies'] = ['pkg-config'] dg['pkg-config']['installer_key'] = 'homebrew' dg['pkg-config']['install_keys'] = ['pkg-config'] dg['pkg-config']['dependencies'] = [] result = dg.get_ordered_dependency_list() expected = [('homebrew', ['pkg-config']), ('pip', ['matplotlib'])] assert result == expected, 'Results did not match expectations: %s == %s' % (str(result), str(expected)) rosdep-0.21.0/test/test_rosdep_freebsd.py000066400000000000000000000062231406544147500204610ustar00rootroot00000000000000# Copyright (c) 2011, Willow Garage, Inc. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # # * Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # * Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # * Neither the name of the Willow Garage, Inc. nor the names of its # contributors may be used to endorse or promote products derived from # this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. # Copied from test_rosdep_suse.py by Author Ken Conley/kwc@willowgarage.com # Converted to FreeBSD by Trenton Schulz/trentonw@ifi.uio.no import os import traceback from mock import patch, Mock def get_test_dir(): # not used yet return os.path.abspath(os.path.join(os.path.dirname(__file__), 'freebsd')) def test_pkg_detect(): from rosdep2.platforms.freebsd import pkg_detect m = Mock() m.return_value = '' val = pkg_detect([], exec_fn=m) assert val == [], val val = pkg_detect(['tinyxml'], exec_fn=m) assert val == [], val def test_PkgInstaller(): from rosdep2.platforms.freebsd import PkgInstaller @patch.object(PkgInstaller, 'get_packages_to_install') def test(expected_prefix, mock_method): installer = PkgInstaller() mock_method.return_value = [] assert [] == installer.get_install_command(['fake']) # no interactive option with YUM mock_method.return_value = ['a', 'b'] expected = [expected_prefix + ['/usr/sbin/pkg', 'install', '-y', 'a', 'b']] val = installer.get_install_command(['whatever'], interactive=False) assert val == expected, val expected = [expected_prefix + ['/usr/sbin/pkg', 'install', '-y', 'a', 'b']] val = installer.get_install_command(['whatever'], interactive=True) assert val == expected, val try: with patch('rosdep2.installers.os.geteuid', return_value=1): test(['sudo', '-H']) with patch('rosdep2.installers.os.geteuid', return_value=0): test([]) except AssertionError: traceback.print_exc() raise rosdep-0.21.0/test/test_rosdep_gbpdistro_support.py000066400000000000000000000212001406544147500226300ustar00rootroot00000000000000# Copyright (c) 2012, Willow Garage, Inc. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # # * Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # * Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # * Neither the name of the Willow Garage, Inc. nor the names of its # contributors may be used to endorse or promote products derived from # this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. import os try: from urllib.request import urlopen except ImportError: from urllib2 import urlopen def get_test_dir(): return os.path.abspath(os.path.join(os.path.dirname(__file__), 'sources.list.d')) def test_url_constants(): from rosdep2.gbpdistro_support import FUERTE_GBPDISTRO_URL for url_name, url in [ ('FUERTE_GBPDISTRO_URL', FUERTE_GBPDISTRO_URL)]: try: f = urlopen(url) f.read() f.close() except Exception: assert False, 'URL [%s][%s] failed to download' % (url_name, url) def test_get_gbprepo_as_rosdep_data(): from rosdep2.rosdistrohelper import get_index from rosdep2.gbpdistro_support import get_gbprepo_as_rosdep_data distro = sorted( name for name, info in get_index().distributions.items() if info.get('distribution_type') == 'ros1')[0] data = get_gbprepo_as_rosdep_data(distro) for k in ['ros', 'catkin', 'genmsg']: assert k in data, data assert data['ros']['ubuntu'] try: get_gbprepo_as_rosdep_data('fooNonExistantDistro') assert False, 'should have raised' except RuntimeError: pass def test_download_gbpdistro_as_rosdep_data(): from rosdep2.gbpdistro_support import download_gbpdistro_as_rosdep_data from rosdep2.gbpdistro_support import FUERTE_GBPDISTRO_URL from rosdep2.rep3 import REP3_TARGETS_URL from rosdep2 import DownloadFailure data = download_gbpdistro_as_rosdep_data(FUERTE_GBPDISTRO_URL) # don't go beyond this, this test is just making sure the download # plumbing is correct, not the loader. for k in ['ros', 'catkin', 'genmsg']: assert k in data, data assert data['ros']['ubuntu'] # try with bad url to trigger exception handling try: # override targets URL with bad URL download_gbpdistro_as_rosdep_data( FUERTE_GBPDISTRO_URL, targets_url='http://bad.ros.org/foo.yaml') assert False, 'should have raised' except DownloadFailure: pass try: # use targets URL, which should have a bad format download_gbpdistro_as_rosdep_data(REP3_TARGETS_URL) assert False, 'should have raised' except DownloadFailure: pass def test_gbprepo_to_rosdep_data_on_bad_inputs(): from rosdep2.gbpdistro_support import gbprepo_to_rosdep_data from rosdep2 import InvalidData simple_gbpdistro = {'release-name': 'foorte', 'repositories': {}, 'type': 'gbp'} targets = {'foorte': ['lucid', 'oneiric']} # test bad data try: gbprepo_to_rosdep_data(simple_gbpdistro, [targets]) assert False, 'should have raised' except InvalidData: pass try: gbprepo_to_rosdep_data({ 'targets': 1, 'repositories': [], 'type': 'gbp'}, targets) assert False, 'should have raised' except InvalidData: pass try: gbprepo_to_rosdep_data([], targets) assert False, 'should have raised' except InvalidData: pass # release-name must be in targets try: gbprepo_to_rosdep_data({ 'release-name': 'barte', 'repositories': [], 'type': 'gbp'}, targets) assert False, 'should have raised' except InvalidData: pass # gbp-distros must be list of dicts try: gbprepo_to_rosdep_data({ 'release-name': 'foorte', 'repositories': [1], 'type': 'gbp'}, targets) assert False, 'should have raised' except InvalidData: pass # gbp-distro target must be 'all' or a list of strings try: bad_example = {'name': 'common', 'target': [1], 'url': 'git://github.com/wg-debs/common_msgs.git'} gbprepo_to_rosdep_data({ 'release-name': 'foorte', 'repositories': [bad_example], 'type': 'gbp'}, targets) assert False, 'should have raised' except InvalidData: pass def test_gbprepo_to_rosdep_data_on_ok_input(): from rosdep2.gbpdistro_support import gbprepo_to_rosdep_data simple_gbpdistro = {'release-name': 'foorte', 'repositories': {}, 'type': 'gbp'} targets = {'foorte': ['lucid', 'oneiric']} # make sure our sample files work for the above checks before # proceeding to real data rosdep_data = gbprepo_to_rosdep_data(simple_gbpdistro, targets) assert rosdep_data is not None assert {} == rosdep_data gbpdistro_data = { 'release-name': 'foorte', 'repositories': { 'common_msgs': dict( target='all', url='git://github.com/wg-debs/common_msgs.git', packages={'foo': 'subdir/foo', 'bar': 'subdir/bar'}), 'gazebo': dict( target=['lucid', 'natty'], url='git://github.com/wg-debs/gazebo.git'), 'foo-bar': dict( target=['precise'], url='git://github.com/wg-debs/gazebo.git', packages={'foo-bar': None}), }, 'type': 'gbp', } rosdep_data = gbprepo_to_rosdep_data(gbpdistro_data, targets) for k in ['foo', 'bar', 'gazebo', 'foo-bar']: assert k in rosdep_data, k # all targets and name transform # These are from the 'common_msgs' repo above. pkgs = ['foo', 'bar'] v = 'ros-foorte-%s' for pkg in pkgs: for p in ['lucid', 'oneiric']: rule = rosdep_data[pkg]['ubuntu'][p] assert rule['apt']['packages'] == [v % pkg], rule['apt']['packages'] for p in ['maverick', 'natty']: assert p not in rosdep_data[k]['ubuntu'] # target overrides pkg = 'gazebo' v = 'ros-foorte-gazebo' for p in ['lucid', 'natty']: rule = rosdep_data[pkg]['ubuntu'][p] assert rule['apt']['packages'] == [v], rule['apt']['packages'] for p in ['oneiric', 'precise']: assert p not in rosdep_data[pkg]['ubuntu'] # target overrides # These are from the 'foo-bar' repo above. v = 'ros-foorte-foo-bar' for pkg in ['foo-bar']: for p in ['precise']: rule = rosdep_data[pkg]['ubuntu'][p] assert rule['apt']['packages'] == [v], rule['apt']['packages'] for p in ['oneiric', 'natty', 'lucid']: assert p not in rosdep_data[pkg]['ubuntu'] def test_get_owner_name_homebrew(): from rosdep2.gbpdistro_support import get_owner_name empty_url = '' assert get_owner_name(empty_url) == 'ros', 'url: ' + empty_url https_test_url = 'https://github.com/' \ 'ros/rosdistro/raw/master/releases/fuerte.yaml' assert get_owner_name(https_test_url) == 'ros', 'url: ' + https_test_url user_test_url = 'https://github.com/' \ 'zklapow/rosdistro/raw/master/releases/fuerte.yaml' assert get_owner_name(user_test_url) == 'zklapow', 'url: ' + user_test_url non_github_url = 'https://ros.org/files/releases/fuerte.yaml' assert get_owner_name(non_github_url) == 'ros', 'url: ' + non_github_url rosdep-0.21.0/test/test_rosdep_gem.py000066400000000000000000000104241406544147500176150ustar00rootroot00000000000000# Copyright (c) 2011, Willow Garage, Inc. # Copyright (c) 2012, Intermodalics, BVBA # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # # * Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # * Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # * Neither the name of the Willow Garage, Inc. nor the names of its # contributors may be used to endorse or promote products derived from # this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. # Author Ken Conley/kwc@willowgarage.com # Author Ruben Smits/ruben.smits@intermodalics.eu import os import traceback from mock import Mock, patch def get_test_dir(): return os.path.abspath(os.path.join(os.path.dirname(__file__), 'gem')) def test_gem_detect(): from rosdep2.platforms.gem import gem_detect m = Mock() # test behavior with empty freeze m.return_value = '' val = gem_detect([], exec_fn=m) assert val == [], val val = gem_detect(['rdoc'], exec_fn=m) assert val == [], val # read list output into mock exec_fn with open(os.path.join(get_test_dir(), 'list_output'), 'r') as f: m.return_value = f.read() val = gem_detect(['rdoc'], exec_fn=m) assert val == ['rdoc'], val val = gem_detect(['rdoc', 'fakito', 'rake'], exec_fn=m) assert val == ['rake', 'rdoc'], val def test_GemInstaller_get_depends(): # make sure GemInstaller supports depends from rosdep2.platforms.gem import GemInstaller installer = GemInstaller() assert ['foo'] == installer.get_depends(dict(depends=['foo'])) def test_GemInstaller(): from rosdep2 import InstallFailed from rosdep2.platforms.gem import GemInstaller @patch('rosdep2.platforms.gem.is_gem_installed') def test_no_gem(mock_method): mock_method.return_value = False try: installer = GemInstaller() installer.get_install_command(['whatever']) assert False, 'should have raised' except InstallFailed: pass test_no_gem() @patch('rosdep2.platforms.gem.is_gem_installed') @patch.object(GemInstaller, 'get_packages_to_install') def test(expected_prefix, mock_method, mock_is_gem_installed): mock_is_gem_installed.return_value = True installer = GemInstaller() mock_method.return_value = [] assert [] == installer.get_install_command(['fake']) # no interactive option with GEM mock_method.return_value = ['a', 'b'] expected = [expected_prefix + ['gem', 'install', 'a'], expected_prefix + ['gem', 'install', 'b']] val = installer.get_install_command(['whatever'], interactive=False) assert val == expected, val expected = [expected_prefix + ['gem', 'install', 'a'], expected_prefix + ['gem', 'install', 'b']] val = installer.get_install_command(['whatever'], interactive=True) assert val == expected, val try: with patch('rosdep2.installers.os.geteuid', return_value=1): test(['sudo', '-H']) with patch('rosdep2.installers.os.geteuid', return_value=0): test([]) except AssertionError: traceback.print_exc() raise rosdep-0.21.0/test/test_rosdep_gentoo.py000066400000000000000000000163751406544147500203530ustar00rootroot00000000000000# Copyright (c) 2011, Willow Garage, Inc. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # # * Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # * Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # * Neither the name of the Willow Garage, Inc. nor the names of its # contributors may be used to endorse or promote products derived from # this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. # Author Ken Conley/kwc@willowgarage.com, Murph Finnicum/murph@murph.cc import os import traceback from mock import Mock, patch import rospkg.os_detect def is_gentoo(): return rospkg.os_detect.Gentoo().is_os() def get_test_dir(): # not used yet return os.path.abspath(os.path.join(os.path.dirname(__file__), 'gentoo')) # Requires 2.7 @unittest.skipIf(not rospkg.os_detect.Gentoo().is_os(), "not running Gentoo") def test_portage_available(): if not is_gentoo(): print('Skipping not Gentoo') return from rosdep2.platforms.gentoo import portage_available original_exists = os.path.exists path_overrides = {} def mock_path(path): if path in path_overrides: return path_overrides[path] else: return original_exists(path) m = Mock(side_effect=mock_path) os.path.exists = m # Test with portageq missing m.reset_mock() path_overrides = {} path_overrides['/usr/bin/portageq'] = False path_overrides['/usr/bin/emerge'] = True val = portage_available() assert not val, 'Portage should not be available without portageq' # Test with emerge missing m.reset_mock() path_overrides = {} path_overrides['/usr/bin/portageq'] = True path_overrides['/usr/bin/emerge'] = False val = portage_available() assert not val, 'Portage should not be available without emerge' # Test with nothing missing m.reset_mock() path_overrides = {} path_overrides['/usr/bin/portageq'] = True path_overrides['/usr/bin/emerge'] = True val = portage_available() assert val, 'Portage should be available' os.path.exists = original_exists # This actually tests portage_detect_single and portage_detect def test_portage_detect(): if not is_gentoo(): print('Skipping not Gentoo') return from rosdep2.platforms.gentoo import portage_detect m = Mock() m.return_value = [] val = portage_detect([], exec_fn=m) assert val == [], val # Test checking for a package that we do not have installed m = Mock(return_value=[]) val = portage_detect(['tinyxml[stl]'], exec_fn=m) assert val == [], 'Result was actually: %s' % val m.assert_called_with(['portageq', 'match', '/', 'tinyxml[stl]']) # Test checking for a package that we do have installed m = Mock(return_value=['dev-libs/tinyxml-2.6.2-r1']) val = portage_detect(['tinyxml[stl]'], exec_fn=m) assert val == ['tinyxml[stl]'], 'Result was actually: %s' % val m.assert_called_with(['portageq', 'match', '/', 'tinyxml[stl]']) # Test checking for two packages that we have installed m = Mock(side_effect=[['sys-devel/gcc-4.5.3-r2'], ['dev-libs/tinyxml-2.6.2-r1']]) val = portage_detect(['tinyxml[stl]', 'gcc'], exec_fn=m) assert val == ['gcc', 'tinyxml[stl]'], 'Result was actually: %s' % val m.assert_any_call(['portageq', 'match', '/', 'tinyxml[stl]']) m.assert_any_call(['portageq', 'match', '/', 'gcc']) # Test checking for two missing packages m = Mock(side_effect=[[], []]) val = portage_detect(['tinyxml[stl]', 'gcc'], exec_fn=m) assert val == [], 'Result was actually: %s' % val m.assert_any_call(['portageq', 'match', '/', 'tinyxml[stl]']) m.assert_any_call(['portageq', 'match', '/', 'gcc']) # Test checking for one missing, one installed package m = Mock(side_effect=[['sys-devel/gcc-4.5.3-r2'], []]) val = portage_detect(['tinyxml[stl]', 'gcc'], exec_fn=m) assert val == ['gcc'], 'Result was actually: %s' % val m.assert_any_call(['portageq', 'match', '/', 'tinyxml[stl]']) m.assert_any_call(['portageq', 'match', '/', 'gcc']) # Test checking for one installed, one missing package (reverse order) m = Mock(side_effect=[[], ['dev-libs/tinyxml-2.6.2-r1']]) val = portage_detect(['tinyxml[stl]', 'gcc'], exec_fn=m) assert val == ['tinyxml[stl]'], 'Result was actually: %s' % val m.assert_any_call(['portageq', 'match', '/', 'tinyxml[stl]']) m.assert_any_call(['portageq', 'match', '/', 'gcc']) # Test duplicates (requesting the same package twice) # TODO what's the desired behavior here m = Mock(side_effect=[['dev-libs/tinyxml-2.6.2-r1'], ['dev-libs/tinyxml-2.6.2-r1']]) val = portage_detect(['tinyxml[stl]', 'tinyxml[stl]'], exec_fn=m) assert val == ['tinyxml[stl]', 'tinyxml[stl]'], 'Result was actually: %s' % val m.assert_any_call(['portageq', 'match', '/', 'tinyxml[stl]']) # and a second of the same, but any_call won't show that. # Test packages with multiple slot m = Mock(side_effect=[['dev-lang/python-2.7.2-r3', 'dev-lang/python-3.2.2']]) val = portage_detect(['python'], exec_fn=m) assert val == ['python'], 'Result was actually: %s' % val m.assert_any_call(['portageq', 'match', '/', 'python']) def test_PortageInstaller(): if not is_gentoo(): print('Skipping not Gentoo') return from rosdep2.platforms.gentoo import PortageInstaller @patch.object(PortageInstaller, 'get_packages_to_install') def test(mock_method): installer = PortageInstaller() mock_method.return_value = [] assert [] == installer.get_install_command(['fake']) mock_method.return_value = ['a', 'b'] expected = [['sudo', '-H', 'emerge', 'a'], ['sudo', '-H', 'emerge', 'b']] val = installer.get_install_command(['whatever'], interactive=False) assert val == expected, val expected = [['sudo', '-H', 'emerge', '-a', 'a'], ['sudo', '-H', 'emerge', '-a', 'b']] val = installer.get_install_command(['whatever'], interactive=True) assert val == expected, val try: test() except AssertionError: traceback.print_exc() raise rosdep-0.21.0/test/test_rosdep_installers.py000066400000000000000000000545551406544147500212420ustar00rootroot00000000000000# Copyright (c) 2011, Willow Garage, Inc. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # # * Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # * Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # * Neither the name of the Willow Garage, Inc. nor the names of its # contributors may be used to endorse or promote products derived from # this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. from __future__ import print_function from contextlib import contextmanager from mock import patch import os import sys try: from cStringIO import StringIO except ImportError: from io import StringIO from rospkg import RosPack, RosStack def get_test_dir(): return os.path.abspath(os.path.dirname(__file__)) def get_cache_dir(): p = os.path.join(get_test_dir(), 'sources_cache') assert os.path.isdir(p) return p def create_test_SourcesListLoader(): from rosdep2.sources_list import SourcesListLoader return SourcesListLoader.create_default(sources_cache_dir=get_cache_dir(), verbose=True) def get_test_tree_dir(): return os.path.abspath(os.path.join(os.path.dirname(__file__), 'tree')) def get_test_rospkgs(): test_dir = get_test_tree_dir() ros_root = os.path.join(test_dir, 'ros') ros_package_path = os.path.join(test_dir, 'stacks') ros_paths = [ros_root, ros_package_path] rospack = RosPack(ros_paths=ros_paths) rosstack = RosStack(ros_paths=ros_paths) return rospack, rosstack def test_InstallerContext_ctor(): from rosdep2.installers import InstallerContext from rospkg.os_detect import OsDetect context = InstallerContext() assert context.get_os_detect() is not None assert isinstance(context.get_os_detect(), OsDetect) detect = OsDetect() context = InstallerContext(detect) assert context.get_os_detect() == detect assert len(context.get_installer_keys()) == 0 assert len(context.get_os_keys()) == 0 context.verbose = True assert context.get_os_detect() == detect assert len(context.get_installer_keys()) == 0 assert len(context.get_os_keys()) == 0 def test_InstallerContext_get_os_version_type(): from rospkg.os_detect import OS_UBUNTU, OsDetect from rosdep2.installers import InstallerContext context = InstallerContext() try: context.set_os_version_type(OS_UBUNTU, 'bad') assert False, 'should check type' except ValueError: pass assert OsDetect.get_version == context.get_os_version_type(OS_UBUNTU) context.set_os_version_type(OS_UBUNTU, OsDetect.get_codename) assert OsDetect.get_codename == context.get_os_version_type(OS_UBUNTU) def test_InstallerContext_os_version_and_name(): from rospkg.os_detect import OsDetect from rosdep2.installers import InstallerContext context = InstallerContext() context.set_verbose(True) os_name, os_version = context.get_os_name_and_version() assert os_name is not None assert os_version is not None val = ('fakeos', 'blah') context.set_os_override(*val) assert val == context.get_os_name_and_version() from mock import Mock os_detect_mock = Mock(spec=OsDetect) os_detect_mock.get_name.return_value = 'fakeos' os_detect_mock.get_version.return_value = 'fakeos-version' os_detect_mock.get_codename.return_value = 'fakeos-codename' context = InstallerContext(os_detect_mock) context.set_os_version_type('fakeos', os_detect_mock.get_codename) os_name, os_version = context.get_os_name_and_version() assert os_name == 'fakeos', os_name assert os_version == 'fakeos-codename', os_version context.set_os_version_type('fakeos', os_detect_mock.get_version) os_name, os_version = context.get_os_name_and_version() assert os_name == 'fakeos', os_name assert os_version == 'fakeos-version', os_version def test_InstallerContext_installers(): from rosdep2.installers import InstallerContext, Installer from rospkg.os_detect import OsDetect detect = OsDetect() context = InstallerContext(detect) context.verbose = True key = 'fake-apt' try: installer = context.get_installer(key) assert False, 'should have raised: %s' % (installer) except KeyError: pass class Foo: pass class FakeInstaller(Installer): pass class FakeInstaller2(Installer): pass # test TypeError on set_installer try: context.set_installer(key, 1) assert False, 'should have raised' except TypeError: pass try: context.set_installer(key, Foo()) assert False, 'should have raised' except TypeError: pass try: # must be instantiated context.set_installer(key, FakeInstaller) assert False, 'should have raised' except TypeError: pass installer = FakeInstaller() installer2 = FakeInstaller2() context.set_installer(key, installer) assert context.get_installer(key) == installer assert list(context.get_installer_keys()) == [key] # repeat with same args context.set_installer(key, installer) assert context.get_installer(key) == installer assert list(context.get_installer_keys()) == [key] # repeat with new installer context.set_installer(key, installer2) assert context.get_installer(key) == installer2 assert list(context.get_installer_keys()) == [key] # repeat with new key key2 = 'fake-port' context.set_installer(key2, installer2) assert context.get_installer(key2) == installer2 assert set(context.get_installer_keys()) == set([key, key2]) # test installer deletion key3 = 'fake3' context.set_installer(key3, installer2) assert context.get_installer(key3) == installer2 assert set(context.get_installer_keys()) == set([key, key2, key3]) context.set_installer(key3, None) try: context.get_installer(key3) assert False except KeyError: pass assert set(context.get_installer_keys()) == set([key, key2]) def test_InstallerContext_os_installers(): from rosdep2.installers import InstallerContext, Installer from rospkg.os_detect import OsDetect detect = OsDetect() context = InstallerContext(detect) context.verbose = True os_key = 'ubuntu' try: context.get_os_installer_keys(os_key) assert False, 'should have raised' except KeyError: pass try: context.get_default_os_installer_key(os_key) assert False, 'should have raised' except KeyError: pass try: context.add_os_installer_key(os_key, 'fake-key') assert False, 'should have raised' except KeyError: pass try: context.set_default_os_installer_key(os_key, 'non-method') assert False, 'should have raised' except KeyError: pass try: context.set_default_os_installer_key(os_key, lambda self: 'fake-key') assert False, 'should have raised' except KeyError: pass try: context.get_default_os_installer_key('bad-os') assert False, 'should have raised' except KeyError: pass installer_key1 = 'fake1' installer_key2 = 'fake2' class FakeInstaller(Installer): pass class FakeInstaller2(Installer): pass # configure our context with two valid installers context.set_installer(installer_key1, FakeInstaller()) context.set_installer(installer_key2, FakeInstaller2()) # start adding installers for os_key context.add_os_installer_key(os_key, installer_key1) assert context.get_os_installer_keys(os_key) == [installer_key1] # retest set_default_os_installer_key, now with installer_key not configured on os try: context.set_default_os_installer_key(os_key, lambda self: installer_key2) assert False, 'should have raised' except KeyError as e: assert 'add_os_installer' in str(e), e # now properly add in key2 context.add_os_installer_key(os_key, installer_key2) assert set(context.get_os_installer_keys(os_key)) == set([installer_key1, installer_key2]) # test default assert context.get_default_os_installer_key(os_key) is None context.set_default_os_installer_key(os_key, lambda self: installer_key1) assert installer_key1 == context.get_default_os_installer_key(os_key) context.set_default_os_installer_key(os_key, lambda self: installer_key2) assert installer_key2 == context.get_default_os_installer_key(os_key) # retest set_default_os_installer_key, now with invalid os try: context.set_default_os_installer_key('bad-os', lambda self: installer_key1) assert False, 'should have raised' except KeyError: pass def test_Installer_tripwire(): from rosdep2.installers import Installer try: Installer().is_installed('foo') assert False except NotImplementedError: pass try: Installer().get_install_command('foo') assert False except NotImplementedError: pass try: Installer().resolve({}) assert False except NotImplementedError: pass try: Installer().unique([]) assert False except NotImplementedError: pass assert Installer().get_depends({}) == [] def detect_fn_empty(packages): return [] def detect_fn_all(packages): return packages # return any packages that are string length 1 def detect_fn_single(packages): return [p for p in packages if len(p) == 1] def test_PackageManagerInstaller(): from rosdep2.installers import PackageManagerInstaller try: PackageManagerInstaller(detect_fn_all).get_install_command(['foo']) assert False except NotImplementedError: pass def test_PackageManagerInstaller_resolve(): from rosdep2 import InvalidData from rosdep2.installers import PackageManagerInstaller installer = PackageManagerInstaller(detect_fn_all) assert ['baz'] == installer.resolve(dict(depends=['foo', 'bar'], packages=['baz'])) assert ['baz', 'bar'] == installer.resolve(dict(packages=['baz', 'bar'])) # test string logic assert ['baz'] == installer.resolve(dict(depends=['foo', 'bar'], packages='baz')) assert ['baz', 'bar'] == installer.resolve(dict(packages='baz bar')) assert ['baz'] == installer.resolve('baz') assert ['baz', 'bar'] == installer.resolve('baz bar') # test list logic assert ['baz'] == installer.resolve(['baz']) assert ['baz', 'bar'] == installer.resolve(['baz', 'bar']) # test invalid data try: installer.resolve(0) assert False, 'should have raised' except InvalidData: pass def test_PackageManagerInstaller_depends(): from rosdep2.installers import PackageManagerInstaller installer = PackageManagerInstaller(detect_fn_all, supports_depends=True) assert ['foo', 'bar'] == installer.get_depends(dict(depends=['foo', 'bar'], packages=['baz'])) installer = PackageManagerInstaller(detect_fn_all, supports_depends=False) assert [] == installer.get_depends(dict(depends=['foo', 'bar'], packages=['baz'])) def test_PackageManagerInstaller_unique(): from rosdep2.installers import PackageManagerInstaller installer = PackageManagerInstaller(detect_fn_all) assert [] == installer.unique() assert [] == installer.unique([]) assert [] == installer.unique([], []) assert ['a'] == installer.unique([], [], ['a']) assert ['a'] == installer.unique(['a'], [], ['a']) assert set(['a', 'b', 'c']) == set(installer.unique(['a', 'b', 'c'], ['a', 'b', 'c'])) assert set(['a', 'b', 'c']) == set(installer.unique(['a'], ['b'], ['c'])) assert set(['a', 'b', 'c']) == set(installer.unique(['a', 'b'], ['c'])) assert set(['a', 'b', 'c']) == set(installer.unique(['a', 'b'], ['c', 'a'])) def test_PackageManagerInstaller_is_installed(): from rosdep2.installers import PackageManagerInstaller installer = PackageManagerInstaller(detect_fn_all) for r in ['a', 'b', 'c']: assert installer.is_installed(r), installer.is_installed(r) installer = PackageManagerInstaller(detect_fn_empty) for r in ['a', 'b', 'c']: assert not installer.is_installed(r), installer.is_installed(r) def test_PackageManagerInstaller_get_packages_to_install(): from rosdep2.installers import PackageManagerInstaller installer = PackageManagerInstaller(detect_fn_all) assert [] == installer.get_packages_to_install([]) assert [] == installer.get_packages_to_install(['a', 'b', 'c']) assert set(['a', 'b', 'c']) == set(installer.get_packages_to_install(['a', 'b', 'c'], reinstall=True)) installer = PackageManagerInstaller(detect_fn_empty) assert set(['a', 'b', 'c']) == set(installer.get_packages_to_install(['a', 'b', 'c'])) assert set(['a', 'b', 'c']) == set(installer.get_packages_to_install(['a', 'b', 'c'], reinstall=True)) installer = PackageManagerInstaller(detect_fn_single) assert set(['baba', 'cada']) == set(installer.get_packages_to_install(['a', 'baba', 'b', 'cada', 'c'])) def test_RosdepInstaller_ctor(): # tripwire/coverage from rosdep2 import create_default_installer_context from rosdep2.lookup import RosdepLookup from rosdep2.installers import RosdepInstaller lookup = RosdepLookup.create_from_rospkg() context = create_default_installer_context() installer = RosdepInstaller(context, lookup) assert lookup == installer.lookup assert context == installer.installer_context def test_RosdepInstaller_get_uninstalled(): from rosdep2 import create_default_installer_context from rosdep2.lookup import RosdepLookup from rosdep2.installers import RosdepInstaller from rosdep2.platforms.debian import APT_INSTALLER rospack, rosstack = get_test_rospkgs() # create our test fixture. use most of the default toolchain, but # replace the apt installer with one that we can have more fun # with. we will do all tests with ubuntu lucid keys -- other # tests should cover different resolution cases. sources_loader = create_test_SourcesListLoader() lookup = RosdepLookup.create_from_rospkg(rospack=rospack, rosstack=rosstack, sources_loader=sources_loader) context = create_default_installer_context() context.set_os_override('ubuntu', 'lucid') installer = RosdepInstaller(context, lookup) # in this first test, detect_fn detects everything as installed fake_apt = get_fake_apt(lambda x: x) context.set_installer(APT_INSTALLER, fake_apt) for verbose in [True, False]: tests = [['roscpp_fake'], ['roscpp_fake', 'rospack_fake'], ['empty_package'], ['roscpp_fake', 'rospack_fake', 'empty_package'], ['roscpp_fake', 'rospack_fake'], ] for test in tests: uninstalled, errors = installer.get_uninstalled(test, verbose) assert not uninstalled, uninstalled assert not errors, errors # in this second test, detect_fn detects nothing as installed fake_apt = get_fake_apt(lambda x: []) context.set_installer(APT_INSTALLER, fake_apt) for verbose in [True, False]: uninstalled, errors = installer.get_uninstalled(['empty'], verbose) assert not uninstalled, uninstalled assert not errors expected = set(['libltdl-dev', 'libboost1.40-all-dev', 'libtool']) uninstalled, errors = installer.get_uninstalled(['roscpp_fake'], verbose) keys, values = zip(*uninstalled) apt_uninstalled = [] for k, v in uninstalled: if k == APT_INSTALLER: apt_uninstalled.extend(v) assert list(set(keys)) == [APT_INSTALLER] assert set(apt_uninstalled) == expected assert not errors expected = ['libtinyxml-dev'] uninstalled, errors = installer.get_uninstalled(['rospack_fake'], verbose) keys, values = zip(*uninstalled) apt_uninstalled = [] for k, v in uninstalled: if k == APT_INSTALLER: apt_uninstalled.extend(v) assert list(set(keys)) == [APT_INSTALLER] assert apt_uninstalled == expected, uninstalled assert not errors def get_fake_apt(detect_fn): # mainly did this to keep coverage results from rosdep2.installers import PackageManagerInstaller class FakeAptInstaller(PackageManagerInstaller): """ An implementation of the Installer for use on debian style systems. """ def __init__(self): super(FakeAptInstaller, self).__init__(detect_fn) def get_install_command(self, resolved, interactive=True, reinstall=False): return [[resolved, interactive, reinstall]] return FakeAptInstaller() def test_RosdepInstaller_get_uninstalled_unconfigured(): from rosdep2 import create_default_installer_context, RosdepInternalError from rosdep2.lookup import RosdepLookup, ResolutionError from rosdep2.installers import RosdepInstaller, PackageManagerInstaller from rosdep2.platforms.debian import APT_INSTALLER rospack, rosstack = get_test_rospkgs() sources_loader = create_test_SourcesListLoader() # create our test fixture. we want to setup a fixture that cannot resolve the rosdep data in order to test error conditions lookup = RosdepLookup.create_from_rospkg(rospack=rospack, rosstack=rosstack, sources_loader=sources_loader) context = create_default_installer_context() context.set_os_override('ubuntu', 'lucid') installer = RosdepInstaller(context, lookup) # - delete the apt installer context.set_installer(APT_INSTALLER, None) for verbose in [True, False]: uninstalled, errors = installer.get_uninstalled(['empty'], verbose) assert not uninstalled, uninstalled assert not errors # make sure there is an error when we lookup something that resolves to an apt depend uninstalled, errors = installer.get_uninstalled(['roscpp_fake'], verbose) assert not uninstalled, uninstalled assert list(errors.keys()) == ['roscpp_fake'] uninstalled, errors = installer.get_uninstalled(['roscpp_fake', 'stack1_p1'], verbose) assert not uninstalled, uninstalled assert set(errors.keys()) == set(['roscpp_fake', 'stack1_p1']) print(errors) assert isinstance(errors['roscpp_fake'], ResolutionError), errors['roscpp_fake'][0] # fake/bad installer to test that we re-cast general installer issues class BadInstaller(PackageManagerInstaller): def __init__(self): super(BadInstaller, self).__init__(lambda x: x) def get_packages_to_install(*args): raise Exception('deadbeef') context.set_installer(APT_INSTALLER, BadInstaller()) try: installer.get_uninstalled(['roscpp_fake']) assert False, 'should have raised' except RosdepInternalError as e: assert 'apt' in str(e) # annoying mock to test generally impossible error condition from mock import Mock lookup = Mock(spec=RosdepLookup) lookup.resolve_all.return_value = ([('bad-key', ['stuff'])], []) installer = RosdepInstaller(context, lookup) try: installer.get_uninstalled(['roscpp_fake']) assert False, 'should have raised' except RosdepInternalError: pass @contextmanager def fakeout(): realstdout = sys.stdout realstderr = sys.stderr fakestdout = StringIO() fakestderr = StringIO() sys.stdout = fakestdout sys.stderr = fakestderr yield fakestdout, fakestderr sys.stdout = realstdout sys.stderr = realstderr @patch('rosdep2.installers.os.geteuid', return_value=1) def test_RosdepInstaller_install_resolved(mock_geteuid): from rosdep2 import create_default_installer_context from rosdep2.lookup import RosdepLookup from rosdep2.installers import RosdepInstaller from rosdep2.platforms.debian import APT_INSTALLER rospack, rosstack = get_test_rospkgs() # create our test fixture. use most of the default toolchain, but # replace the apt installer with one that we can have more fun # with. we will do all tests with ubuntu lucid keys -- other # tests should cover different resolution cases. sources_loader = create_test_SourcesListLoader() lookup = RosdepLookup.create_from_rospkg(rospack=rospack, rosstack=rosstack, sources_loader=sources_loader) context = create_default_installer_context() context.set_os_override('ubuntu', 'lucid') installer = RosdepInstaller(context, lookup) with fakeout() as (stdout, stderr): installer.install_resolved(APT_INSTALLER, [], simulate=True, verbose=False) with fakeout() as (stdout, stderr): installer.install_resolved(APT_INSTALLER, [], simulate=True, verbose=True) assert stdout.getvalue().strip() == '#No packages to install' with fakeout() as (stdout, stderr): try: installer.install_resolved(APT_INSTALLER, ['rosdep-fake1', 'rosdep-fake2'], simulate=True, verbose=True) except OSError as e: if str(e).count('[Errno 2] No such file or directory') == 0: raise return True stdout_lines = [x.strip() for x in stdout.getvalue().split('\n') if x.strip()] assert len(stdout_lines) == 3 assert stdout_lines[0] == '#[apt] Installation commands:' assert 'sudo -H apt-get install rosdep-fake1' in stdout_lines, 'stdout_lines: %s' % stdout_lines assert 'sudo -H apt-get install rosdep-fake2' in stdout_lines, 'stdout_lines: %s' % stdout_lines rosdep-0.21.0/test/test_rosdep_issue30.py000066400000000000000000000044161406544147500203440ustar00rootroot00000000000000import os import subprocess as sp import tempfile import unittest from rosdep2 import main as rdmain class Issue30TestCase(unittest.TestCase): def testIssue30(self): return True d = make_temp_dir() try: cd(d) script = """#!/bin/bash mkdir ws mkdir ws/src mkdir ws/build cd ws/src catkin_init_workspace > /dev/null cd .. cd build cmake ../src > /dev/null cd ../src git clone -b groovy-devel git://github.com/ros-drivers/joystick_drivers.git > /dev/null """ run_script('commands.bash', script) source('ws/build/devel/setup.sh') lookup = make_lookup() keys = rdmain.get_keys(lookup, ['spacenav_node'], recursive=True) expected = """ geometry_msgs libspnav-dev libx11-dev roscpp sensor_msgs spacenavd """.split() self.assertEqual(expected, sorted(keys)) finally: sp.call(['rm', '-rf', d]) def make_temp_dir(): return tempfile.mkdtemp() def cd(d): os.chdir(d) def write_file(filename, contents): with open(filename, 'w') as f: f.write(contents) def run_script(filename, contents): """ Creates a script with the given filename and contents, runs it and returns the output. """ write_file(filename, contents) os.chmod(filename, 0x755) p = sp.Popen([os.path.join('.', filename)], stdout=sp.PIPE) p.wait() return p.stdout.read() # http://pythonwise.blogspot.com/2010/04/sourcing-shell-script.html def source(script): """ Sources a shell script at a given path, updating the environment. """ pipe = sp.Popen('. %s; env' % script, stdout=sp.PIPE, shell=True) data = pipe.communicate()[0] env = dict((line.split('=', 1) for line in data.splitlines())) os.environ.update(env) def make_lookup(): """ Creates a RosdepLookup object. """ import rosdep2.sources_list as sl import rosdep2.lookup as rdl sources_loader = sl.SourcesListLoader.create_default( sources_cache_dir=sl.get_sources_cache_dir(), verbose=True) return rdl.RosdepLookup.create_from_rospkg(sources_loader=sources_loader) if __name__ == '__main__': unittest.main() rosdep-0.21.0/test/test_rosdep_loader.py000066400000000000000000000047061406544147500203210ustar00rootroot00000000000000# Copyright (c) 2011, Willow Garage, Inc. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # # * Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # * Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # * Neither the name of the Willow Garage, Inc. nor the names of its # contributors may be used to endorse or promote products derived from # this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. from mock import Mock def test_RosdepLoader(): # tripwire tests from rosdep2.loader import RosdepLoader loader = RosdepLoader() try: loader.load_view('foo', Mock()) assert False, 'should have raised NotImplemented' except NotImplementedError: pass try: loader.get_loadable_resources() assert False, 'should have raised NotImplementedError' except NotImplementedError: pass try: loader.get_loadable_views() assert False, 'should have raised NotImplementedError' except NotImplementedError: pass try: loader.get_view_key('foo') assert False, 'should have raised NotImplementedError' except NotImplementedError: pass try: loader.get_rosdeps('foo', implicit=False) assert False, 'should have raised NotImplementedError' except NotImplementedError: pass rosdep-0.21.0/test/test_rosdep_lookup.py000066400000000000000000000624341406544147500203660ustar00rootroot00000000000000# Copyright (c) 2011, Willow Garage, Inc. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # # * Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # * Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # * Neither the name of the Willow Garage, Inc. nor the names of its # contributors may be used to endorse or promote products derived from # this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. from __future__ import print_function import os import yaml from rospkg import RosPack, RosStack, ResourceNotFound BASE_URL = 'https://github.com/ros/rosdistro/raw/master/rosdep/base.yaml' PYTHON_URL = 'https://github.com/ros/rosdistro/raw/master/rosdep/python.yaml' def get_test_dir(): return os.path.abspath(os.path.dirname(__file__)) def get_test_tree_dir(): return os.path.abspath(os.path.join(os.path.dirname(__file__), 'tree')) def get_cache_dir(): p = os.path.join(get_test_dir(), 'sources_cache') assert os.path.isdir(p) return p def create_test_SourcesListLoader(): from rosdep2.sources_list import SourcesListLoader return SourcesListLoader.create_default(sources_cache_dir=get_cache_dir(), verbose=True) def get_cache_raw(): cache_rosdep_path = os.path.join(get_cache_dir(), '0a12d6e7b0d47be9b76e7726720e4cb79528cbaa') with open(cache_rosdep_path) as f: cache_raw = yaml.safe_load(f.read()) return cache_raw def get_cache_raw_python(): cache_rosdep_path = os.path.join(get_cache_dir(), 'f6f4ef95664e373cd4754501337fa217f5b55d91') with open(cache_rosdep_path) as f: cache_raw = yaml.safe_load(f.read()) return cache_raw def get_test_rospkgs(): test_dir = get_test_tree_dir() ros_root = os.path.join(test_dir, 'ros') ros_package_path = os.path.join(test_dir, 'stacks') catkin_package_path = os.path.join(test_dir, 'catkin') ros_paths = [ros_root, ros_package_path, catkin_package_path] rospack = RosPack(ros_paths=ros_paths) rosstack = RosStack(ros_paths=ros_paths) return rospack, rosstack FAKE_TINYXML_RULE = """testtinyxml: ubuntu: lucid: apt: packages: libtinyxml-dev debian: libtinyxml-dev osx: source: uri: 'http://kforge.ros.org/rosrelease/viewvc/sourcedeps/tinyxml/tinyxml-2.6.2-1.rdmanifest' md5sum: 13760e61e08c9004493c302a16966c42 fedora: yum: packages: tinyxml-devel""" def test_RosdepDefinition(): from rosdep2.lookup import RosdepDefinition, ResolutionError, InvalidData d = dict(a=1, b=2, c=3) def1 = RosdepDefinition('d', d) assert def1.rosdep_key == 'd' assert def1.data == d def2 = RosdepDefinition('d', d, 'file1.txt') assert def2.rosdep_key == 'd' assert def2.data == d assert def2.origin == 'file1.txt' # test get_rule_for_platform # - test w/invalid data try: RosdepDefinition('dbad', 'foo', 'bad.txt').get_rule_for_platform('ubuntu', 'hardy', ['apt'], 'apt') assert False, 'should have failed' except InvalidData: pass try: RosdepDefinition('dbad', {'ubuntu': 1}, 'bad2.txt').get_rule_for_platform('ubuntu', 'hardy', ['apt'], 'apt') assert False, 'should have failed' except InvalidData: pass try: RosdepDefinition('dbad', {'ubuntu': {'hardy': 1}}, 'bad2.txt').get_rule_for_platform('ubuntu', 'hardy', ['apt'], 'apt') assert False, 'should have failed' except InvalidData: pass # - test w/valid data d2 = yaml.safe_load(FAKE_TINYXML_RULE)['testtinyxml'] definition = RosdepDefinition('d2', d2, 'file2.txt') # - tripwire str(definition) val = definition.get_rule_for_platform('fedora', 'fake-version', ['yum', 'source', 'pip'], 'yum') assert val == ('yum', dict(packages='tinyxml-devel')), val val = definition.get_rule_for_platform('debian', 'sid', ['apt', 'source', 'pip'], 'apt') assert val == ('apt', 'libtinyxml-dev') val = definition.get_rule_for_platform('ubuntu', 'lucid', ['apt', 'source', 'pip'], 'apt') assert val == ('apt', dict(packages='libtinyxml-dev')), val val = definition.get_rule_for_platform('osx', 'snow', ['macports', 'source', 'pip'], 'macports') assert val == ('source', dict(md5sum='13760e61e08c9004493c302a16966c42', uri='http://kforge.ros.org/rosrelease/viewvc/sourcedeps/tinyxml/tinyxml-2.6.2-1.rdmanifest')), val # test bad resolutions try: val = definition.get_rule_for_platform('ubuntu', 'hardy', ['apt', 'source', 'pip'], 'apt') assert False, 'should have raised: %s' % (str(val)) except ResolutionError as e: assert e.rosdep_key == 'd2' assert e.rosdep_data == d2 assert e.os_name == 'ubuntu' assert e.os_version == 'hardy' # tripwire str(e) try: val = definition.get_rule_for_platform('fakeos', 'fakeversion', ['apt', 'source', 'pip'], 'apt') assert False, 'should have raised: %s' % (str(val)) except ResolutionError as e: assert e.rosdep_key == 'd2' assert e.rosdep_data == d2 assert e.os_name == 'fakeos' assert e.os_version == 'fakeversion' # tripwire str(e) definition = RosdepDefinition('testtinyxml', {'ubuntu': {'lucid': None, 'precise': ['libtinyxml-dev'], '*': ['libtinyxml2-dev']}}, 'wildcard.txt') try: val = definition.get_rule_for_platform('ubuntu', 'lucid', ['apt', 'source', 'pip'], 'apt') assert False, 'should have raised: %s' % (str(val)) except ResolutionError as e: assert e.rosdep_key == 'testtinyxml' assert e.os_name == 'ubuntu' assert e.os_version == 'lucid' # tripwire str(e) val = definition.get_rule_for_platform('ubuntu', 'precise', ['apt', 'source', 'pip'], 'apt') assert val == ('apt', ['libtinyxml-dev']), val val = definition.get_rule_for_platform('ubuntu', 'trusty', ['apt', 'source', 'pip'], 'apt') assert val == ('apt', ['libtinyxml2-dev']), val definition = RosdepDefinition('trusty_only_key', {'ubuntu': {'*': None, 'trusty': ['trusty_only_pkg']}, 'debian': None}, 'wildcard.txt') try: val = definition.get_rule_for_platform('ubuntu', 'lucid', ['apt', 'source', 'pip'], 'apt') assert False, 'should have raised: %s' % (str(val)) except ResolutionError as e: assert e.rosdep_key == 'trusty_only_key' assert e.os_name == 'ubuntu' assert e.os_version == '*' # tripwire str(e) try: val = definition.get_rule_for_platform('debian', 'stretch', ['apt', 'source', 'pip'], 'apt') assert False, 'should have raised: %s' % (str(val)) except ResolutionError as e: assert e.rosdep_key == 'trusty_only_key' assert e.os_name == 'debian' assert e.os_version == 'stretch' # tripwire str(e) # test reverse merging OS things (first is default) definition = RosdepDefinition('test', {'debian': 'libtest-dev'}, 'fake-1.txt') # rule should work as expected before reverse-merge val = definition.get_rule_for_platform('debian', 'sid', ['apt', 'source', 'pip'], 'apt') assert val == ('apt', 'libtest-dev'), val try: val = definition.get_rule_for_platform('ubuntu', 'precise', ['apt', 'source', 'pip'], 'apt') assert False, 'should have failed' except ResolutionError as e: assert e.rosdep_key == 'test' assert e.os_name == 'ubuntu' assert e.os_version == 'precise' # tripwire? str(e) definition.reverse_merge({'ubuntu': {'precise': {'apt': 'ros-fuerte-test'}}}, 'fake-gbp.yaml') val = definition.get_rule_for_platform('ubuntu', 'precise', ['apt', 'source', 'pip'], 'apt') assert val == ('apt', 'ros-fuerte-test'), val val = definition.get_rule_for_platform('debian', 'sid', ['apt', 'source', 'pip'], 'apt') assert val == ('apt', 'libtest-dev'), val def test_RosdepView_merge(): from rosdep2.model import RosdepDatabaseEntry from rosdep2.lookup import RosdepView # rosdep data must be dictionary of dictionaries data = dict(a=dict(x=1), b=dict(y=2), c=dict(z=3)) # create empty view and test view = RosdepView('common') assert len(view.keys()) == 0 # - tripwire str(view) # make sure lookups fail if not found try: view.lookup('notfound') assert False, 'should have raised KeyError' except KeyError as e: assert 'notfound' in str(e) # merge into empty view d = RosdepDatabaseEntry(data, [], 'origin') view.merge(d) assert set(view.keys()) == set(data.keys()) for k, v in data.items(): assert view.lookup(k).data == v, '%s vs. %s' % (view.lookup(k), v) # merge exact same data d2 = RosdepDatabaseEntry(data, [], 'origin2') view.merge(d2) assert set(view.keys()) == set(data.keys()) for k, v in data.items(): assert view.lookup(k).data == v # merge new for 'd', 'e' d3 = RosdepDatabaseEntry(dict(d=dict(o=4), e=dict(p=5)), [], 'origin3') view.merge(d3) assert set(view.keys()) == set(list(data.keys()) + ['d', 'e']) for k, v in data.items(): assert view.lookup(k).data == v assert view.lookup('d').data == dict(o=4) assert view.lookup('e').data == dict(p=5) # merge different data for 'a' d4 = RosdepDatabaseEntry(dict(a=dict(x=2)), [], 'origin4') # - first w/o override, should not bump view.merge(d4, override=False) assert view.lookup('a').data == dict(x=1), view.lookup('a').data assert view.lookup('b').data == dict(y=2) assert view.lookup('c').data == dict(z=3) assert view.lookup('d').data == dict(o=4) assert view.lookup('e').data == dict(p=5) # - now w/ override view.merge(d4, override=True) assert view.lookup('a').data == dict(x=2) assert view.lookup('b').data == dict(y=2) assert view.lookup('c').data == dict(z=3) assert view.lookup('d').data == dict(o=4) assert view.lookup('e').data == dict(p=5) # - tripwire str(view) def test_RosdepLookup_get_rosdeps(): from rosdep2.loader import RosdepLoader from rosdep2.lookup import RosdepLookup rospack, rosstack = get_test_rospkgs() sources_loader = create_test_SourcesListLoader() lookup = RosdepLookup.create_from_rospkg(rospack=rospack, rosstack=rosstack, sources_loader=sources_loader) assert lookup.get_loader() is not None assert isinstance(lookup.get_loader(), RosdepLoader) print(lookup.get_rosdeps('empty_package')) assert lookup.get_rosdeps('empty_package') == [] try: assert lookup.get_rosdeps('not a resource') == [] assert False, 'should have raised' except ResourceNotFound: pass print(lookup.get_rosdeps('stack1_p1')) assert set(lookup.get_rosdeps('stack1_p1')) == set(['stack1_dep1', 'stack1_p1_dep1', 'stack1_p1_dep2']) assert set(lookup.get_rosdeps('stack1_p1', implicit=False)) == set(['stack1_dep1', 'stack1_p1_dep1', 'stack1_p1_dep2']) print(lookup.get_rosdeps('stack1_p2')) assert set(lookup.get_rosdeps('stack1_p2', implicit=False)) == set(['stack1_dep1', 'stack1_dep2', 'stack1_p2_dep1']), set(lookup.get_rosdeps('stack1_p2')) assert set(lookup.get_rosdeps('stack1_p2', implicit=True)) == set(['stack1_dep1', 'stack1_dep2', 'stack1_p1_dep1', 'stack1_p1_dep2', 'stack1_p2_dep1']), set(lookup.get_rosdeps('stack1_p2')) # catkin print(lookup.get_rosdeps('simple_catkin_package')) assert set(lookup.get_rosdeps('simple_catkin_package')) == set(['catkin', 'testboost']) assert set(lookup.get_rosdeps('simple_catkin_package', implicit=False)) == set(['catkin', 'testboost']) print(lookup.get_rosdeps('another_catkin_package')) assert set(lookup.get_rosdeps('another_catkin_package')) == set(['catkin', 'simple_catkin_package']) # implicit deps won't get included assert set(lookup.get_rosdeps('another_catkin_package', implicit=False)) == set(['catkin', 'simple_catkin_package']) print(lookup.get_rosdeps('metapackage_with_deps')) assert set(lookup.get_rosdeps('metapackage_with_deps')) == set(['catkin', 'simple_catkin_package', 'another_catkin_package']) # implicit deps won't get included assert set(lookup.get_rosdeps('metapackage_with_deps', implicit=False)) == set(['catkin', 'simple_catkin_package', 'another_catkin_package']) def test_RosdepLookup_dependency_types(): from rosdep2.loader import RosdepLoader from rosdep2.lookup import RosdepLookup rospack, rosstack = get_test_rospkgs() sources_loader = create_test_SourcesListLoader() default_lookup = RosdepLookup.create_from_rospkg(rospack=rospack, rosstack=rosstack, sources_loader=sources_loader) buildtool_lookup = RosdepLookup.create_from_rospkg(rospack=rospack, rosstack=rosstack, sources_loader=sources_loader, dependency_types=['buildtool']) build_lookup = RosdepLookup.create_from_rospkg(rospack=rospack, rosstack=rosstack, sources_loader=sources_loader, dependency_types=['build']) build_export_lookup = RosdepLookup.create_from_rospkg(rospack=rospack, rosstack=rosstack, sources_loader=sources_loader, dependency_types=['build_export']) exec_lookup = RosdepLookup.create_from_rospkg(rospack=rospack, rosstack=rosstack, sources_loader=sources_loader, dependency_types=['exec']) test_lookup = RosdepLookup.create_from_rospkg(rospack=rospack, rosstack=rosstack, sources_loader=sources_loader, dependency_types=['test']) doc_lookup = RosdepLookup.create_from_rospkg(rospack=rospack, rosstack=rosstack, sources_loader=sources_loader, dependency_types=['doc']) mix_lookup = RosdepLookup.create_from_rospkg(rospack=rospack, rosstack=rosstack, sources_loader=sources_loader, dependency_types=['build', 'build_export']) buildtool_deps = ['catkin'] build_deps = ['testboost', 'eigen'] build_export_deps = ['eigen', 'testtinyxml'] exec_deps = ['eigen', 'testlibtool'] test_deps = ['curl'] doc_deps = ['epydoc'] default_deps = buildtool_deps + build_deps + build_export_deps + exec_deps + test_deps assert set(buildtool_lookup.get_rosdeps('multi_dep_type_catkin_package')) == set(buildtool_deps) assert set(build_lookup.get_rosdeps('multi_dep_type_catkin_package')) == set(build_deps) assert set(build_export_lookup.get_rosdeps('multi_dep_type_catkin_package')) == set(build_export_deps) assert set(exec_lookup.get_rosdeps('multi_dep_type_catkin_package')) == set(exec_deps) assert set(test_lookup.get_rosdeps('multi_dep_type_catkin_package')) == set(test_deps) assert set(mix_lookup.get_rosdeps('multi_dep_type_catkin_package')) == set(build_deps + build_export_deps) assert set(default_lookup.get_rosdeps('multi_dep_type_catkin_package')) == set(default_deps) assert set(doc_lookup.get_rosdeps('multi_dep_type_catkin_package')) == set(doc_deps) def test_RosdepLookup_get_resources_that_need(): from rosdep2.lookup import RosdepLookup rospack, rosstack = get_test_rospkgs() sources_loader = create_test_SourcesListLoader() lookup = RosdepLookup.create_from_rospkg(rospack=rospack, rosstack=rosstack, sources_loader=sources_loader) assert lookup.get_resources_that_need('fake') == [] assert set(lookup.get_resources_that_need('stack1_dep1')) == set(['stack1_p1', 'stack1_p2']) assert lookup.get_resources_that_need('stack1_dep2') == ['stack1_p2'] assert lookup.get_resources_that_need('stack1_p1_dep1') == ['stack1_p1'] def test_RosdepLookup_create_from_rospkg(): from rosdep2.lookup import RosdepLookup rospack, rosstack = get_test_rospkgs() # these are just tripwire, can't actually test as it depends on external env lookup = RosdepLookup.create_from_rospkg() lookup = RosdepLookup.create_from_rospkg(rospack=rospack) assert rospack == lookup.loader._rospack lookup = RosdepLookup.create_from_rospkg(rospack=rospack, rosstack=rosstack) assert rospack == lookup.loader._rospack assert rosstack == lookup.loader._rosstack def test_RosdepLookup_get_rosdep_view_for_resource(): from rosdep2.lookup import RosdepLookup from rosdep2.rospkg_loader import DEFAULT_VIEW_KEY, RosPkgLoader rospack, rosstack = get_test_rospkgs() sources_loader = create_test_SourcesListLoader() lookup = RosdepLookup.create_from_rospkg(rospack=rospack, rosstack=rosstack, sources_loader=sources_loader) # assumption of our tests assert isinstance(lookup.loader, RosPkgLoader) # depends on nothing cache_raw = get_cache_raw() py_cache_raw = get_cache_raw_python() # - first pass: no cache ros_view = lookup.get_rosdep_view_for_resource('roscpp_fake') libtool = ros_view.lookup('testlibtool') assert BASE_URL == libtool.origin assert cache_raw['testlibtool'] == libtool.data python = ros_view.lookup('testpython') assert PYTHON_URL == python.origin assert py_cache_raw['testpython'] == python.data # package not in stack, should return assert lookup.get_rosdep_view_for_resource('just_a_package').name is DEFAULT_VIEW_KEY # meta-packages should return default view as well assert lookup.get_rosdep_view_for_resource('metapackage_with_deps').name is DEFAULT_VIEW_KEY def test_RosdepLookup_get_rosdep_view(): from rosdep2.lookup import RosdepLookup rospack, rosstack = get_test_rospkgs() sources_loader = create_test_SourcesListLoader() lookup = RosdepLookup.create_from_rospkg(rospack=rospack, rosstack=rosstack, sources_loader=sources_loader) # depends on nothing cache_raw = get_cache_raw() py_cache_raw = get_cache_raw_python() # - first pass: no cache ros_view = lookup.get_rosdep_view('ros') libtool = ros_view.lookup('testlibtool') assert BASE_URL == libtool.origin assert cache_raw['testlibtool'] == libtool.data python = ros_view.lookup('testpython') assert PYTHON_URL == python.origin assert py_cache_raw['testpython'] == python.data, python.data # - second pass: with cache ros_view = lookup.get_rosdep_view('ros') libtool = ros_view.lookup('testlibtool') assert BASE_URL == libtool.origin assert cache_raw['testlibtool'] == libtool.data # depends on ros stack1_view = lookup.get_rosdep_view('stack1') stack1_rosdep_path = os.path.join(rosstack.get_path('stack1'), 'rosdep.yaml') # - make sure ros data is available libtool = stack1_view.lookup('testlibtool') assert BASE_URL == libtool.origin assert cache_raw['testlibtool'] == libtool.data python = stack1_view.lookup('testpython') assert PYTHON_URL == python.origin assert py_cache_raw['testpython'] == python.data def test_RosdepLookup_get_errors(): from rosdep2.lookup import RosdepLookup rospack, rosstack = get_test_rospkgs() tree_dir = get_test_tree_dir() sources_loader = create_test_SourcesListLoader() lookup = RosdepLookup.create_from_rospkg(rospack=rospack, rosstack=rosstack, sources_loader=sources_loader) # shouldn't be any errors (yet) assert lookup.get_errors() == [] # force errors lookup._load_all_views(lookup.loader) # TODO: force errors. Previous tests relied on bad stack views. # Now we need a bad sources cache. def test_RosdepLookup_get_views_that_define(): from rosdep2.lookup import RosdepLookup rospack, rosstack = get_test_rospkgs() tree_dir = get_test_tree_dir() sources_loader = create_test_SourcesListLoader() lookup = RosdepLookup.create_from_rospkg(rospack=rospack, rosstack=rosstack, sources_loader=sources_loader) val = lookup.get_views_that_define('testboost') assert len(val) == 1 entry = val[0] assert entry == (BASE_URL, BASE_URL), entry val = lookup.get_views_that_define('testpython') assert len(val) == 1 entry = val[0] assert entry == (PYTHON_URL, PYTHON_URL), entry def test_RosdepLookup_resolve_all_errors(): from rosdep2.installers import InstallerContext from rosdep2.lookup import RosdepLookup, ResolutionError rospack, rosstack = get_test_rospkgs() sources_loader = create_test_SourcesListLoader() lookup = RosdepLookup.create_from_rospkg(rospack=rospack, rosstack=rosstack, sources_loader=sources_loader) # the installer context has nothing in it, lookups will fail installer_context = InstallerContext() installer_context.set_os_override('ubuntu', 'lucid') resolutions, errors = lookup.resolve_all(['rospack_fake'], installer_context) assert 'rospack_fake' in errors resolutions, errors = lookup.resolve_all(['not_a_resource'], installer_context) assert 'not_a_resource' in errors, errors def test_RosdepLookup_resolve_errors(): from rosdep2.installers import InstallerContext from rosdep2.lookup import RosdepLookup, ResolutionError rospack, rosstack = get_test_rospkgs() sources_loader = create_test_SourcesListLoader() lookup = RosdepLookup.create_from_rospkg(rospack=rospack, rosstack=rosstack, sources_loader=sources_loader) # the installer context has nothing in it, lookups will fail installer_context = InstallerContext() installer_context.set_os_override('ubuntu', 'lucid') try: lookup.resolve('testtinyxml', 'rospack_fake', installer_context) assert False, 'should have raised' except ResolutionError as e: assert 'Unsupported OS' in str(e), str(e) try: lookup.resolve('fakedep', 'rospack_fake', installer_context) assert False, 'should have raised' except ResolutionError as e: assert 'Cannot locate rosdep definition' in str(e), str(e) def test_RosdepLookup_resolve(): from rosdep2 import create_default_installer_context from rosdep2.lookup import RosdepLookup rospack, rosstack = get_test_rospkgs() sources_loader = create_test_SourcesListLoader() lookup = RosdepLookup.create_from_rospkg(rospack=rospack, rosstack=rosstack, sources_loader=sources_loader) installer_context = create_default_installer_context() installer_context.set_os_override('ubuntu', 'lucid') # repeat for caching for count in range(0, 2): installer_key, resolution, dependencies = lookup.resolve('testtinyxml', 'rospack_fake', installer_context) assert 'apt' == installer_key assert ['libtinyxml-dev'] == resolution assert [] == dependencies installer_key, resolution, dependencies = lookup.resolve('testboost', 'roscpp_fake', installer_context) assert 'apt' == installer_key assert ['libboost1.40-all-dev'] == resolution assert [] == dependencies installer_key, resolution, dependencies = lookup.resolve('testlibtool', 'roscpp_fake', installer_context) assert 'apt' == installer_key assert set(['libtool', 'libltdl-dev']) == set(resolution) assert [] == dependencies def test_RosdepLookup_resolve_all(): from rosdep2 import create_default_installer_context from rosdep2.lookup import RosdepLookup rospack, rosstack = get_test_rospkgs() sources_loader = create_test_SourcesListLoader() lookup = RosdepLookup.create_from_rospkg(rospack=rospack, rosstack=rosstack, sources_loader=sources_loader) installer_context = create_default_installer_context() installer_context.set_os_override('ubuntu', 'lucid') # repeat for caching lookup.verbose = True for count in range(0, 2): resolutions, errors = lookup.resolve_all(['rospack_fake', 'roscpp_fake'], installer_context) assert not errors, errors installer_keys, resolveds = zip(*resolutions) assert 'apt' in installer_keys apt_resolutions = [] for k, v in resolutions: if k == 'apt': apt_resolutions.extend(v) assert set(apt_resolutions) == set(['libtinyxml-dev', 'libboost1.40-all-dev', 'libtool', 'libltdl-dev']), set(apt_resolutions) rosdep-0.21.0/test/test_rosdep_main.py000066400000000000000000000317751406544147500200050ustar00rootroot00000000000000# Copyright (c) 2012, Willow Garage, Inc. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # # * Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # * Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # * Neither the name of the Willow Garage, Inc. nor the names of its # contributors may be used to endorse or promote products derived from # this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. from contextlib import contextmanager import os import sys try: from cStringIO import StringIO except ImportError: from io import StringIO import rospkg import rospkg.os_detect import unittest from mock import patch from mock import DEFAULT from rosdep2 import main from rosdep2.ament_packages import AMENT_PREFIX_PATH_ENV_VAR from rosdep2.main import rosdep_main from rosdep2.main import setup_proxy_opener GITHUB_BASE_URL = 'https://github.com/ros/rosdistro/raw/master/rosdep/base.yaml' GITHUB_PYTHON_URL = 'https://github.com/ros/rosdistro/raw/master/rosdep/python.yaml' def get_test_dir(): return os.path.abspath(os.path.dirname(__file__)) def get_test_tree_dir(): return os.path.abspath(os.path.join(get_test_dir(), 'tree')) def get_test_catkin_tree_dir(): return os.path.abspath(os.path.join(get_test_tree_dir(), 'catkin')) def get_cache_dir(): p = os.path.join(get_test_dir(), 'sources_cache') assert os.path.isdir(p) return p @contextmanager def fakeout(): realstdout = sys.stdout realstderr = sys.stderr fakestdout = StringIO() fakestderr = StringIO() sys.stdout = fakestdout sys.stderr = fakestderr yield fakestdout, fakestderr sys.stdout = realstdout sys.stderr = realstderr # the goal of these tests is only to test that we are wired into the # APIs. More exhaustive tests are at the unit level. class TestRosdepMain(unittest.TestCase): def setUp(self): if 'ROSDEP_DEBUG' in os.environ: del os.environ['ROSDEP_DEBUG'] self.old_rr = rospkg.get_ros_root() self.old_rpp = rospkg.get_ros_package_path() self.old_app = os.getenv(AMENT_PREFIX_PATH_ENV_VAR, None) if 'ROS_ROOT' in os.environ: del os.environ['ROS_ROOT'] os.environ['ROS_PACKAGE_PATH'] = os.path.join(get_test_tree_dir()) os.environ[AMENT_PREFIX_PATH_ENV_VAR] = os.path.join(get_test_tree_dir(), 'ament') if 'ROS_PYTHON_VERSION' not in os.environ: # avoid `test_check` failure due to warning on stderr os.environ['ROS_PYTHON_VERSION'] = sys.version[0] def tearDown(self): if self.old_rr is not None: os.environ['ROS_ROOT'] = self.old_rr if self.old_rpp is not None: os.environ['ROS_PACKAGE_PATH'] = self.old_rpp if self.old_app is not None: os.environ[AMENT_PREFIX_PATH_ENV_VAR] = self.old_app def test_bad_commands(self): sources_cache = get_cache_dir() cmd_extras = ['-c', sources_cache] for commands in [[], ['fake', 'something'], ['check'], ['install', '-a', 'rospack_fake'], ['check', 'rospack_fake', '--os', 'ubuntulucid'], ]: try: rosdep_main(commands + cmd_extras) assert False, 'system exit should have occurred' except SystemExit: pass def test_check(self): sources_cache = get_cache_dir() cmd_extras = ['-c', sources_cache] with fakeout() as b: try: rosdep_main(['check', 'python_dep'] + cmd_extras) except SystemExit: assert False, 'system exit occurred: %s\n%s' % (b[0].getvalue(), b[1].getvalue()) stdout, stderr = b assert stdout.getvalue().strip() == 'All system dependencies have been satisfied', stdout.getvalue() assert not stderr.getvalue(), stderr.getvalue() try: osd = rospkg.os_detect.OsDetect() override = '%s:%s' % (osd.get_name(), osd.get_codename()) with fakeout() as b: rosdep_main(['check', 'python_dep', '--os', override] + cmd_extras) stdout, stderr = b assert stdout.getvalue().strip() == 'All system dependencies have been satisfied' assert not stderr.getvalue(), stderr.getvalue() except SystemExit: assert False, 'system exit occurred' # this used to abort, but now rosdep assumes validity for even empty stack args try: with fakeout() as b: rosdep_main(['check', 'packageless'] + cmd_extras) stdout, stderr = b assert stdout.getvalue().strip() == 'All system dependencies have been satisfied' assert not stderr.getvalue(), stderr.getvalue() except SystemExit: assert False, 'system exit occurred' try: rosdep_main(['check', 'nonexistent'] + cmd_extras) assert False, 'system exit should have occurred' except SystemExit: pass @patch('rosdep2.platforms.debian.read_stdout') @patch('rosdep2.installers.os.geteuid', return_value=1) def test_install(self, mock_geteuid, mock_read_stdout): sources_cache = get_cache_dir() cmd_extras = ['-c', sources_cache] catkin_tree = get_test_catkin_tree_dir() def read_stdout(cmd, capture_stderr=False): if cmd[0] == 'apt-cache' and cmd[1] == 'showpkg': result = '' elif cmd[0] == 'dpkg-query': if cmd[-1] == 'python-dev': result = '\'python-dev install ok installed\n\'' else: result = '\n'.join(["dpkg-query: no packages found matching %s" % f for f in cmd[3:]]) if capture_stderr: return result, '' return result try: mock_read_stdout.side_effect = read_stdout # python must have already been installed with fakeout() as b: rosdep_main(['install', 'python_dep'] + cmd_extras) stdout, stderr = b assert 'All required rosdeps installed' in stdout.getvalue(), stdout.getvalue() assert not stderr.getvalue(), stderr.getvalue() with fakeout() as b: rosdep_main(['install', 'python_dep', '-r'] + cmd_extras) stdout, stderr = b assert 'All required rosdeps installed' in stdout.getvalue(), stdout.getvalue() assert not stderr.getvalue(), stderr.getvalue() with fakeout() as b: rosdep_main([ 'install', '-s', '-i', '--os', 'ubuntu:lucid', '--rosdistro', 'fuerte', '--from-paths', catkin_tree ] + cmd_extras) stdout, stderr = b expected = [ '#[apt] Installation commands:', ' sudo -H apt-get install ros-fuerte-catkin', ' sudo -H apt-get install libboost1.40-all-dev', ' sudo -H apt-get install libeigen3-dev', ' sudo -H apt-get install libtinyxml-dev', ' sudo -H apt-get install libltdl-dev', ' sudo -H apt-get install libtool', ' sudo -H apt-get install libcurl4-openssl-dev', ] lines = stdout.getvalue().splitlines() assert set(lines) == set(expected), lines assert not stderr.getvalue(), stderr.getvalue() except SystemExit: assert False, 'system exit occurred: ' + b[1].getvalue() try: rosdep_main(['install', 'nonexistent']) assert False, 'system exit should have occurred' except SystemExit: pass def test_where_defined(self): try: sources_cache = get_cache_dir() expected = GITHUB_PYTHON_URL for command in (['where_defined', 'testpython'], ['where_defined', 'testpython']): with fakeout() as b: # set os to ubuntu so this test works on different platforms rosdep_main(command + ['-c', sources_cache, '--os=ubuntu:lucid']) stdout, stderr = b output = stdout.getvalue().strip() assert output == expected, output except SystemExit: assert False, 'system exit occurred' def test_what_needs(self): try: sources_cache = get_cache_dir() cmd_extras = ['-c', sources_cache] expected = ['python_dep'] with fakeout() as b: rosdep_main(['what-needs', 'testpython'] + cmd_extras) stdout, stderr = b output = stdout.getvalue().strip() assert output.split('\n') == expected expected = ['python_dep'] with fakeout() as b: rosdep_main(['what_needs', 'testpython', '--os', 'ubuntu:lucid', '--verbose'] + cmd_extras) stdout, stderr = b output = stdout.getvalue().strip() assert output.split('\n') == expected except SystemExit: assert False, 'system exit occurred' def test_keys(self): sources_cache = get_cache_dir() cmd_extras = ['-c', sources_cache] try: with fakeout() as b: rosdep_main(['keys', 'rospack_fake'] + cmd_extras) stdout, stderr = b assert stdout.getvalue().strip() == 'testtinyxml', stdout.getvalue() assert not stderr.getvalue(), stderr.getvalue() with fakeout() as b: rosdep_main(['keys', 'rospack_fake', '--os', 'ubuntu:lucid', '--verbose'] + cmd_extras) stdout, stderr = b assert stdout.getvalue().strip() == 'testtinyxml', stdout.getvalue() with fakeout() as b: rosdep_main(['keys', 'another_catkin_package'] + cmd_extras + ['-i']) stdout, stderr = b assert stdout.getvalue().strip() == 'catkin', stdout.getvalue() with fakeout() as b: rosdep_main(['keys', 'multi_dep_type_catkin_package', '-t', 'test', '-t', 'doc'] + cmd_extras) stdout, stderr = b output_keys = set(stdout.getvalue().split()) expected_keys = set(['curl', 'epydoc']) assert output_keys == expected_keys, stdout.getvalue() except SystemExit: assert False, 'system exit occurred' try: rosdep_main(['keys', 'nonexistent'] + cmd_extras) assert False, 'system exit should have occurred' except SystemExit: pass @patch('rosdep2.main.install_opener') @patch('rosdep2.main.build_opener') @patch('rosdep2.main.HTTPBasicAuthHandler') @patch('rosdep2.main.ProxyHandler') def test_proxy_detection(self, proxy, bah, build, install): with patch.dict('os.environ', {'http_proxy': 'something'}, clear=True): setup_proxy_opener() proxy.assert_called_with({'http': 'something'}) with patch.dict('os.environ', {'https_proxy': 'somethings'}, clear=True): setup_proxy_opener() proxy.assert_called_with({'https': 'somethings'}) def test_invalid_package_message(self): with fakeout() as b: test_package_dir = os.path.abspath(os.path.join(get_test_dir(), 'main', 'invalid_package_version')) with patch('rosdep2.main.sys.exit') as exit_mock: rosdep_main(['install', '--from-path', test_package_dir]) exit_mock.assert_called_with(1) stdout, stderr = b output = stdout.getvalue().splitlines() assert len(output) == 2 assert test_package_dir in output[0] assert 'Package version ":{version}" does not follow version conventions' in output[1] rosdep-0.21.0/test/test_rosdep_model.py000066400000000000000000000071011406544147500201430ustar00rootroot00000000000000# Copyright (c) 2011, Willow Garage, Inc. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # # * Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # * Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # * Neither the name of the Willow Garage, Inc. nor the names of its # contributors may be used to endorse or promote products derived from # this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. def test_RosdepDatabaseEntry(): # not muich to test with container from rosdep2.model import RosdepDatabaseEntry d = RosdepDatabaseEntry({'a': 1}, [], 'foo') assert d.rosdep_data == {'a': 1} assert d.view_dependencies == [] assert d.origin == 'foo' def test_RosdepDatabase(): from rosdep2.model import RosdepDatabase db = RosdepDatabase() assert not db.is_loaded('foo') data = {'a': 1} db.set_view_data('foo', data, [], 'origin1') assert db.is_loaded('foo') entry = db.get_view_data('foo') assert entry.rosdep_data == data assert entry.origin == 'origin1' assert entry.view_dependencies == [] # make sure data is copy data['a'] = 2 assert entry.rosdep_data != data data = {'b': 2} db.set_view_data('bar', data, ['foo'], 'origin2') assert db.is_loaded('bar') entry = db.get_view_data('bar') assert entry.rosdep_data == data assert entry.origin == 'origin2' assert entry.view_dependencies == ['foo'] # override entry for bar data = {'b': 3} assert db.is_loaded('bar') db.set_view_data('bar', data, ['baz', 'blah'], 'origin3') assert db.is_loaded('bar') entry = db.get_view_data('bar') assert entry.rosdep_data == data assert entry.origin == 'origin3' assert set(entry.view_dependencies) == set(['baz', 'blah']) def test_RosdepDatabase_get_view_dependencies(): from rosdep2.model import RosdepDatabase data = {'a': 1} db = RosdepDatabase() db.set_view_data('foo', data, [], 'origin') assert [] == db.get_view_dependencies('foo') db.set_view_data('bar', data, ['foo'], 'origin') assert ['foo'] == db.get_view_dependencies('bar') db.set_view_data('baz', data, ['bar'], 'origin') assert ['foo', 'bar'] == db.get_view_dependencies('baz') db.set_view_data('rad', data, [], 'origin') db.set_view_data('fad', data, ['baz', 'rad'], 'origin') retval = db.get_view_dependencies('fad') assert set(['baz', 'rad', 'foo', 'bar']) == set(retval), retval assert len(retval) == 4 rosdep-0.21.0/test/test_rosdep_npm.py000066400000000000000000000112151406544147500176360ustar00rootroot00000000000000# Copyright (c) 2011, Willow Garage, Inc. # Copyright (c) 2019, Kei Okada # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # # * Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # * Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # * Neither the name of the Willow Garage, Inc. nor the names of its # contributors may be used to endorse or promote products derived from # this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. # Author Ken Conley/kwc@willowgarage.com # Author Kei Okada/kei.okada@gmail.com import os import traceback from mock import Mock, patch def get_test_dir(): return os.path.abspath(os.path.join(os.path.dirname(__file__), 'npm')) def test_npm_detect(): from rosdep2.platforms.npm import NpmInstaller installer = NpmInstaller() npm_detect = installer.npm_detect m = Mock() # test behavior with empty freeze m.return_value = '' val = npm_detect([], exec_fn=m) assert val == [], val val = npm_detect(['rosnodejs'], exec_fn=m) assert val == [], val # read list output into mock exec_fn with open(os.path.join(get_test_dir(), 'list_output'), 'r') as f: m.return_value = f.read() val = npm_detect(['rosnodejs'], exec_fn=m) assert val == ['rosnodejs'], val val = npm_detect(['argparse', 'fakito', 'rosnodejs'], exec_fn=m) assert val == ['rosnodejs', 'argparse'], val def test_NpmInstaller_get_depends(): # make sure NpmInstaller supports depends from rosdep2.platforms.npm import NpmInstaller installer = NpmInstaller() assert ['foo'] == installer.get_depends(dict(depends=['foo'])) def test_NpmInstaller(): from rosdep2 import InstallFailed from rosdep2.platforms.npm import NpmInstaller @patch('rosdep2.platforms.npm.is_npm_installed') def test_no_npm(mock_method): mock_method.return_value = False try: installer = NpmInstaller() installer.get_install_command(['whatever']) assert False, 'should have raised' except InstallFailed: pass test_no_npm() @patch('rosdep2.platforms.npm.is_npm_installed') @patch.object(NpmInstaller, 'get_packages_to_install') def test(mock_method, mock_is_npm_installed): mock_is_npm_installed.return_value = True installer = NpmInstaller() mock_method.return_value = [] assert [] == installer.get_install_command(['fake']) # no interactive option with NPM mock_method.return_value = ['a', 'b'] expected = [['sudo', '-H', 'npm', 'install', '-g', 'a'], ['sudo', '-H', 'npm', 'install', '-g', 'b']] val = installer.get_install_command(['whatever'], interactive=False) assert val == expected, val expected = [['sudo', '-H', 'npm', 'install', '-g', 'a'], ['sudo', '-H', 'npm', 'install', '-g', 'b']] val = installer.get_install_command(['whatever'], interactive=True) assert val == expected, val # unset as_root option with NPM installer.as_root = False expected = [['npm', 'install', 'a'], ['npm', 'install', 'b']] val = installer.get_install_command(['whatever'], interactive=False) assert val == expected, val expected = [['npm', 'install', 'a'], ['npm', 'install', 'b']] val = installer.get_install_command(['whatever'], interactive=True) assert val == expected, val try: test() except AssertionError: traceback.print_exc() raise rosdep-0.21.0/test/test_rosdep_opensuse.py000066400000000000000000000054531406544147500207140ustar00rootroot00000000000000# Copyright (c) 2011, Willow Garage, Inc. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # # * Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # * Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # * Neither the name of the Willow Garage, Inc. nor the names of its # contributors may be used to endorse or promote products derived from # this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. # Author Ken Conley/kwc@willowgarage.com import os import traceback from mock import patch def get_test_dir(): # not used yet return os.path.abspath(os.path.join(os.path.dirname(__file__), 'opensuse')) def test_ZypperInstaller(): from rosdep2.platforms.opensuse import ZypperInstaller @patch.object(ZypperInstaller, 'get_packages_to_install') def test(expected_prefix, mock_method): installer = ZypperInstaller() mock_method.return_value = [] assert [] == installer.get_install_command(['fake']) mock_method.return_value = ['a', 'b'] # no interactive option with YUM expected = [expected_prefix + ['zypper', 'install', '-yl', 'a', 'b']] val = installer.get_install_command(['whatever'], interactive=False) assert val == expected, val expected = [expected_prefix + ['zypper', 'install', 'a', 'b']] val = installer.get_install_command(['whatever'], interactive=True) assert val == expected, val try: with patch('rosdep2.installers.os.geteuid', return_value=1): test(['sudo', '-H']) with patch('rosdep2.installers.os.geteuid', return_value=0): test([]) except AssertionError: traceback.print_exc() raise rosdep-0.21.0/test/test_rosdep_osx.py000066400000000000000000000157771406544147500176760ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright (c) 2011, Willow Garage, Inc. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # # * Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # * Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # * Neither the name of the Willow Garage, Inc. nor the names of its # contributors may be used to endorse or promote products derived from # this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. # Author Ken Conley/kwc@willowgarage.com import os import traceback from mock import call from mock import Mock from mock import patch def get_test_dir(): return os.path.abspath(os.path.join(os.path.dirname(__file__), 'osx')) def is_port_installed_tripwire(): # don't know the correct answer, but make sure this does not throw from rosdep2.platforms.osx import is_port_installed assert is_port_installed() in [True, False] def is_brew_installed_tripwire(): # don't know the correct answer, but make sure this does not throw from rosdep2.platforms.osx import is_brew_installed assert is_brew_installed() in [True, False] def make_resolutions(package_list): from rosdep2.platforms.osx import HomebrewResolution return list(map(lambda pkg: HomebrewResolution(pkg, [], []), package_list)) def make_resolutions_options(package_list): from rosdep2.platforms.osx import HomebrewResolution return list(map(lambda pkg: HomebrewResolution(pkg[0], pkg[1], pkg[2]), package_list)) def brew_command(command): if command[1] == 'list': with open(os.path.join(get_test_dir(), 'brew-list-output'), 'r') as f: return f.read() elif command[1] == 'info': pkg = command[2] with open(os.path.join(get_test_dir(), 'brew-info-output'), 'r') as f: output = f.readlines() for line in output: res = line.split(':', 1) if res[0] == pkg: return res[1] return '' def test_brew_detect(): from rosdep2.platforms.osx import brew_detect m = Mock() m.return_value = '' val = brew_detect([], exec_fn=m) assert val == [], val m = Mock() m.return_value = '' val = brew_detect(make_resolutions(['tinyxml']), exec_fn=m) assert val == [], val # make sure our test harness is based on the same implementation m.assert_called_with(['brew', 'list']) assert m.call_args_list == [call(['brew', 'list'])], m.call_args_list m = Mock() m.side_effect = brew_command val = brew_detect(make_resolutions(['apt', 'subversion', 'python', 'bazaar']), exec_fn=m) # make sure it preserves order expected = make_resolutions(['subversion', 'bazaar']) assert set(val) == set(expected), val assert val == expected, val assert len(val) == len(set(val)), val def test_HomebrewInstaller(): from rosdep2.platforms.osx import HomebrewInstaller @patch('rosdep2.platforms.osx.is_brew_installed') @patch.object(HomebrewInstaller, 'remove_duplicate_dependencies') @patch.object(HomebrewInstaller, 'get_packages_to_install') def test(mock_get_packages_to_install, mock_remove_duplicate_dependencies, mock_brew_installed): mock_brew_installed.return_value = True installer = HomebrewInstaller() mock_get_packages_to_install.return_value = [] mock_remove_duplicate_dependencies.return_value = mock_get_packages_to_install.return_value assert [] == installer.get_install_command(make_resolutions(['fake'])) mock_get_packages_to_install.return_value = make_resolutions(['subversion', 'bazaar']) mock_remove_duplicate_dependencies.return_value = mock_get_packages_to_install.return_value expected = [['brew', 'install', 'subversion'], ['brew', 'install', 'bazaar']] # brew is always non-interactive for interactive in [True, False]: val = installer.get_install_command(['whatever'], interactive=interactive) assert val == expected, val expected = [['brew', 'uninstall', '--force', 'subversion'], ['brew', 'install', 'subversion'], ['brew', 'uninstall', '--force', 'bazaar'], ['brew', 'install', 'bazaar']] val = installer.get_install_command(['whatever'], reinstall=True) assert val == expected, val mock_get_packages_to_install.return_value = make_resolutions_options( [('subversion', ['foo', 'bar'], ['baz']), ('bazaar', [], ['--with-quux'])]) mock_remove_duplicate_dependencies.return_value = mock_get_packages_to_install.return_value expected = [['brew', 'install', 'subversion', 'foo', 'bar', 'baz'], ['brew', 'install', 'bazaar', '--with-quux']] val = installer.get_install_command(['whatever']) assert val == expected, val try: mock_get_packages_to_install.return_value = eval("make_resolutions_options([('subversion', [u'f´´ßß', u'öäö'], []), (u'bazaar', [], [u'tüü'])])") except SyntaxError: # Python 3.2, u'...' is not allowed, but string literals are unicode mock_get_packages_to_install.return_value = make_resolutions_options( [('subversion', ['f´´ßß', 'öäö'], []), ('bazaar', [], ['tüü'])]) mock_remove_duplicate_dependencies.return_value = mock_get_packages_to_install.return_value try: expected = eval("[['brew', 'install', 'subversion', u'f´´ßß', u'öäö'], ['brew', 'install', 'bazaar', u'tüü']]") except SyntaxError: # Python 3.2, u'...' is not allowed, but string literals are unicode expected = [['brew', 'install', 'subversion', 'f´´ßß', 'öäö'], ['brew', 'install', 'bazaar', 'tüü']] val = installer.get_install_command(['whatever']) assert val == expected, val try: test() except AssertionError: traceback.print_exc() raise rosdep-0.21.0/test/test_rosdep_pip.py000066400000000000000000000132041406544147500176340ustar00rootroot00000000000000# Copyright (c) 2011, Willow Garage, Inc. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # # * Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # * Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # * Neither the name of the Willow Garage, Inc. nor the names of its # contributors may be used to endorse or promote products derived from # this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. # Author Ken Conley/kwc@willowgarage.com import os import sys import traceback from mock import Mock, patch def get_test_dir(): return os.path.abspath(os.path.join(os.path.dirname(__file__), 'pip')) def test_pip_detect(): from rosdep2.platforms.pip import pip_detect m = Mock() # test behavior with empty freeze m.return_value = '' val = pip_detect([], exec_fn=m) assert val == [], val val = pip_detect(['paramiko'], exec_fn=m) assert val == [], val # read freeze output into mock exec_fn with open(os.path.join(get_test_dir(), 'freeze_output'), 'r') as f: m.return_value = f.read() val = pip_detect(['paramiko'], exec_fn=m) assert val == ['paramiko'], val val = pip_detect(['paramiko', 'fakito', 'pycrypto'], exec_fn=m) assert val == ['paramiko', 'pycrypto'], val def test_PipInstaller_get_depends(): # make sure PipInstaller supports depends from rosdep2.platforms.pip import PipInstaller installer = PipInstaller() assert ['foo'] == installer.get_depends(dict(depends=['foo'])) def test_PipInstaller(): from rosdep2 import InstallFailed from rosdep2.platforms.pip import PipInstaller @patch('rosdep2.platforms.pip.get_pip_command') def test_no_pip(mock_method): mock_method.return_value = None try: installer = PipInstaller() installer.get_install_command(['whatever']) assert False, 'should have raised' except InstallFailed: pass test_no_pip() @patch('rosdep2.platforms.pip.get_pip_command') @patch.object(PipInstaller, 'get_packages_to_install') def test(expected_prefix, mock_method, mock_get_pip_command): mock_get_pip_command.return_value = ['mock-pip'] installer = PipInstaller() mock_method.return_value = [] assert [] == installer.get_install_command(['fake']) # no interactive option with PIP mock_method.return_value = ['a', 'b'] expected = [expected_prefix + ['mock-pip', 'install', '-U', 'a'], expected_prefix + ['mock-pip', 'install', '-U', 'b']] val = installer.get_install_command(['whatever'], interactive=False) assert val == expected, val expected = [expected_prefix + ['mock-pip', 'install', '-U', 'a'], expected_prefix + ['mock-pip', 'install', '-U', 'b']] val = installer.get_install_command(['whatever'], interactive=True) assert val == expected, val try: with patch('rosdep2.installers.os.geteuid', return_value=1): test(['sudo', '-H']) with patch('rosdep2.installers.os.geteuid', return_value=0): test([]) except AssertionError: traceback.print_exc() raise def test_get_pip_command(): from rosdep2.platforms.pip import get_pip_command # pip2 or pip3 @patch('rosdep2.platforms.pip.is_cmd_available') def test_pip2_or_pip3(mock_is_cmd_available): mock_is_cmd_available.return_value = True with patch.dict(os.environ, {'ROS_PYTHON_VERSION': '2'}): assert ['pip2'] == get_pip_command() with patch.dict(os.environ, {'ROS_PYTHON_VERSION': '3'}): assert ['pip3'] == get_pip_command() # sys.executable (assumes pip is installed) @patch('rosdep2.platforms.pip.is_cmd_available') def test_sys_executable(mock_is_cmd_available): mock_is_cmd_available.return_value = False with patch.dict(os.environ, {'ROS_PYTHON_VERSION': str(sys.version[0])}): assert [sys.executable, '-m', 'pip'] == get_pip_command() # python2 or python3 def fake_is_cmd_available(cmd): if cmd[0] in ['pip2', 'pip3']: return False return True @patch('rosdep2.platforms.pip.is_cmd_available', new=fake_is_cmd_available) def test_python2_or_python3(mock_is_cmd_available): with patch.dict(os.environ, {'ROS_PYTHON_VERSION': '2'}): assert ['python2', '-m', 'pip'] == get_pip_command() with patch.dict(os.environ, {'ROS_PYTHON_VERSION': '3'}): assert ['python3', '-m', 'pip'] == get_pip_command() rosdep-0.21.0/test/test_rosdep_redhat.py000066400000000000000000000205301406544147500203130ustar00rootroot00000000000000# Copyright (c) 2011, Willow Garage, Inc. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # # * Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # * Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # * Neither the name of the Willow Garage, Inc. nor the names of its # contributors may be used to endorse or promote products derived from # this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. # Author Ken Conley/kwc@willowgarage.com import os import traceback from mock import patch, Mock def get_test_dir(): # not used yet return os.path.abspath(os.path.join(os.path.dirname(__file__), 'redhat')) def test_rpm_expand_cmd(): from rosdep2.platforms.redhat import rpm_expand_cmd m = Mock() m.return_value = '' # Non-macro test, should return the string unmodified val = rpm_expand_cmd('test-string', exec_fn=m) assert val == 'test-string', val # Macro test, should return expanded rpm tag with open(os.path.join(get_test_dir(), 'rpm-E-fedora'), 'r') as f: m.return_value = f.read() val = rpm_expand_cmd('%fedora', exec_fn=m) assert val == '27', val def test_rpm_detect(): from rosdep2.platforms.redhat import rpm_detect m = Mock() m.return_value = '' val = rpm_detect([], exec_fn=m) assert val == [], val # Negitive case test. rpms use devel, rather than dev with open(os.path.join(get_test_dir(), 'rpm-q-tinyxml-dev'), 'r') as f: m.return_value = f.read() val = rpm_detect(['tinyxml-dev'], exec_fn=m) assert val == [], val # Positive case test. rpm should always be installed if you're attempting to detect rpms with open(os.path.join(get_test_dir(), 'rpm-q-rpm'), 'r') as f: m.return_value = f.read() val = rpm_detect(['rpm'], exec_fn=m) assert val == ['rpm'], val def test_DnfInstaller(): from rosdep2.platforms.redhat import DnfInstaller @patch.object(DnfInstaller, 'get_packages_to_install') def test(expected_prefix, mock_method): installer = DnfInstaller() mock_method.return_value = [] assert [] == installer.get_install_command(['fake']) # no interactive option with YUM mock_method.return_value = ['a', 'b'] expected = [expected_prefix + ['dnf', '--assumeyes', '--quiet', '--setopt=strict=0', 'install', 'a', 'b']] val = installer.get_install_command(['whatever'], interactive=False, quiet=True) assert val == expected, val + expected expected = [expected_prefix + ['dnf', '--quiet', '--setopt=strict=0', 'install', 'a', 'b']] val = installer.get_install_command(['whatever'], interactive=True, quiet=True) assert val == expected, val + expected expected = [expected_prefix + ['dnf', '--assumeyes', '--setopt=strict=0', 'install', 'a', 'b']] val = installer.get_install_command(['whatever'], interactive=False, quiet=False) assert val == expected, val + expected expected = [expected_prefix + ['dnf', '--setopt=strict=0', 'install', 'a', 'b']] val = installer.get_install_command(['whatever'], interactive=True, quiet=False) assert val == expected, val + expected try: with patch('rosdep2.installers.os.geteuid', return_value=1): test(['sudo', '-H']) with patch('rosdep2.installers.os.geteuid', return_value=0): test([]) except AssertionError: traceback.print_exc() raise def test_YumInstaller(): from rosdep2.platforms.redhat import YumInstaller @patch.object(YumInstaller, 'get_packages_to_install') def test(expected_prefix, mock_method): installer = YumInstaller() mock_method.return_value = [] assert [] == installer.get_install_command(['fake']) # no interactive option with YUM mock_method.return_value = ['a', 'b'] expected = [expected_prefix + ['yum', '--assumeyes', '--quiet', '--skip-broken', 'install', 'a', 'b']] val = installer.get_install_command(['whatever'], interactive=False, quiet=True) assert val == expected, val + expected expected = [expected_prefix + ['yum', '--quiet', '--skip-broken', 'install', 'a', 'b']] val = installer.get_install_command(['whatever'], interactive=True, quiet=True) assert val == expected, val + expected expected = [expected_prefix + ['yum', '--assumeyes', '--skip-broken', 'install', 'a', 'b']] val = installer.get_install_command(['whatever'], interactive=False, quiet=False) assert val == expected, val + expected expected = [expected_prefix + ['yum', '--skip-broken', 'install', 'a', 'b']] val = installer.get_install_command(['whatever'], interactive=True, quiet=False) assert val == expected, val + expected try: with patch('rosdep2.installers.os.geteuid', return_value=1): test(['sudo', '-H']) with patch('rosdep2.installers.os.geteuid', return_value=0): test([]) except AssertionError: traceback.print_exc() raise def test_Fedora_variable_installer_key(): from rosdep2 import InstallerContext from rosdep2.platforms import pip, redhat, source from rosdep2.platforms.redhat import DNF_INSTALLER, YUM_INSTALLER from rospkg.os_detect import OsDetect, OS_FEDORA os_detect_mock = Mock(spec=OsDetect) os_detect_mock.get_name.return_value = 'fedora' os_detect_mock.get_codename.return_value = 'twenty' os_detect_mock.get_version.return_value = '21' # create our test fixture. use most of the default toolchain, but # replace the apt installer with one that we can have more fun # with. we will do all tests with ubuntu lucid keys -- other # tests should cover different resolution cases. context = InstallerContext(os_detect_mock) pip.register_installers(context) redhat.register_installers(context) source.register_installers(context) redhat.register_platforms(context) assert YUM_INSTALLER == context.get_default_os_installer_key(OS_FEDORA) os_detect_mock.get_version.return_value = '22' assert DNF_INSTALLER == context.get_default_os_installer_key(OS_FEDORA) def test_Fedora_variable_lookup_key(): from rosdep2 import InstallerContext from rosdep2.platforms import pip, redhat, source from rosdep2.platforms.redhat import DNF_INSTALLER, YUM_INSTALLER from rospkg.os_detect import OsDetect, OS_FEDORA os_detect_mock = Mock(spec=OsDetect) os_detect_mock.get_name.return_value = 'fedora' os_detect_mock.get_codename.return_value = 'heisenbug' os_detect_mock.get_version.return_value = '20' # create our test fixture. use most of the default toolchain, but # replace the apt installer with one that we can have more fun # with. we will do all tests with ubuntu lucid keys -- other # tests should cover different resolution cases. context = InstallerContext(os_detect_mock) pip.register_installers(context) redhat.register_installers(context) source.register_installers(context) redhat.register_platforms(context) assert ('fedora', 'heisenbug') == context.get_os_name_and_version() os_detect_mock.get_codename.return_value = 'twenty' os_detect_mock.get_version.return_value = '21' assert (OS_FEDORA, '21') == context.get_os_name_and_version() rosdep-0.21.0/test/test_rosdep_rep3.py000066400000000000000000000051661406544147500177250ustar00rootroot00000000000000# Copyright (c) 2012, Willow Garage, Inc. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # # * Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # * Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # * Neither the name of the Willow Garage, Inc. nor the names of its # contributors may be used to endorse or promote products derived from # this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. import os try: from urllib.request import urlopen except ImportError: from urllib2 import urlopen def get_test_dir(): return os.path.abspath(os.path.join(os.path.dirname(__file__), 'sources.list.d')) def test_url_constants(): from rosdep2.rep3 import REP3_TARGETS_URL for url_name, url in [('REP3_TARGETS_URL', REP3_TARGETS_URL), ]: try: f = urlopen(url) f.read() f.close() except Exception: assert False, 'URL [%s][%s] failed to download' % (url_name, url) def test_download_targets_data(): from rosdep2.rep3 import download_targets_data, REP3_TARGETS_URL from rosdep2 import DownloadFailure data = download_targets_data(REP3_TARGETS_URL) assert type(data) is dict assert 'electric' in data assert 'fuerte' in data assert 'lucid' in data['fuerte'] assert 'oneiric' in data['fuerte'] try: download_targets_data(targets_url='http://bad.ros.org/foo.yaml') assert False, 'should have raised' except DownloadFailure: pass rosdep-0.21.0/test/test_rosdep_rospkg_loader.py000066400000000000000000000146361406544147500217110ustar00rootroot00000000000000# Copyright (c) 2011, Willow Garage, Inc. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # # * Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # * Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # * Neither the name of the Willow Garage, Inc. nor the names of its # contributors may be used to endorse or promote products derived from # this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. # Author Ken Conley/kwc@willowgarage.com import os import yaml from mock import Mock from rospkg import RosPack, RosStack def get_test_dir(): return os.path.abspath(os.path.join(os.path.dirname(__file__), 'tree')) def get_rospkg(): # configure inside of the test tree test_dir = get_test_dir() ros_root = os.path.join(test_dir, 'ros') ros_package_path = os.path.join(test_dir, 'stacks') ros_paths = [ros_root, ros_package_path] rospack = RosPack(ros_paths=ros_paths) rosstack = RosStack(ros_paths=ros_paths) return rospack, rosstack def test_RosPkgLoader(): from rospkg import ResourceNotFound from rosdep2.model import RosdepDatabase from rosdep2.rospkg_loader import RosPkgLoader, DEFAULT_VIEW_KEY from rosdep2.loader import InvalidData # Due to rosdep 2/REP 125 changes, this test is a bit overbuilt. # All stacks return the same. # tripwire loader = RosPkgLoader() assert loader._rospack is not None assert loader._rosstack is not None # configure inside of the test tree rospack, rosstack = get_rospkg() ros_root = rosstack.get_path('ros') loader = RosPkgLoader(rospack, rosstack) assert loader._rospack == rospack assert loader._rosstack == rosstack # test with mock db rosdep_db = Mock(spec=RosdepDatabase) rosdep_db.is_loaded.return_value = False # test with no rosdep.yaml stack loader.load_view('empty', rosdep_db) rosdep_db.is_loaded.assert_called_with('empty') rosdep_db.set_view_data.assert_called_with('empty', {}, [], '') # test invalid stack try: loader.load_view('does not exist', rosdep_db) assert False, 'should have raised' except ResourceNotFound as e: pass # Test with default view key loader.load_view(DEFAULT_VIEW_KEY, rosdep_db) rosdep_db.set_view_data.assert_called_with(DEFAULT_VIEW_KEY, {}, [], '') # test with complicated ros stack. loader.load_view('ros', rosdep_db) rosdep_db.is_loaded.assert_called_with('ros') rosdep_db.set_view_data.assert_called_with('ros', {}, [], '') # test call on db that is already loaded rosdep_db.reset_mock() rosdep_db.is_loaded.return_value = True loader.load_view('ros', rosdep_db) rosdep_db.is_loaded.assert_called_with('ros') assert rosdep_db.set_view_data.call_args_list == [] # test get_view_key, always the same return value assert loader.get_view_key('stack1_p1') == DEFAULT_VIEW_KEY assert loader.get_view_key('stackless') == DEFAULT_VIEW_KEY try: loader.get_view_key('fake') assert False, 'should error' except ResourceNotFound: pass def test_RosPkgLoader_with_underlay_key(): from rospkg import ResourceNotFound from rosdep2.model import RosdepDatabase from rosdep2.rospkg_loader import RosPkgLoader, DEFAULT_VIEW_KEY from rosdep2.loader import InvalidData # configure inside of the test tree rospack, rosstack = get_rospkg() ros_root = rosstack.get_path('ros') loader = RosPkgLoader(rospack, rosstack, underlay_key='underlay-key') assert loader._rospack == rospack assert loader._rosstack == rosstack # test with mock db rosdep_db = Mock(spec=RosdepDatabase) rosdep_db.is_loaded.return_value = False # test with no rosdep.yaml stack loader.load_view('empty', rosdep_db) rosdep_db.is_loaded.assert_called_with('empty') rosdep_db.set_view_data.assert_called_with('empty', {}, ['underlay-key'], '') # test invalid stack try: loader.load_view('does not exist', rosdep_db) assert False, 'should have raised' except ResourceNotFound as e: pass # test with complicated ros stack. loader.load_view('ros', rosdep_db) rosdep_db.is_loaded.assert_called_with('ros') rosdep_db.set_view_data.assert_called_with('ros', {}, ['underlay-key'], '') # test call on db that is already loaded rosdep_db.reset_mock() rosdep_db.is_loaded.return_value = True loader.load_view('ros', rosdep_db) rosdep_db.is_loaded.assert_called_with('ros') assert rosdep_db.set_view_data.call_args_list == [] # test get_view_key assert loader.get_view_key('stack1_p1') == DEFAULT_VIEW_KEY assert loader.get_view_key('stackless') == DEFAULT_VIEW_KEY try: loader.get_view_key('fake') assert False, 'should error' except ResourceNotFound: pass def test_RosPkgLoader_get_loadable(): from rosdep2.rospkg_loader import RosPkgLoader rospack, rosstack = get_rospkg() loader = RosPkgLoader(rospack, rosstack) assert loader._rospack == rospack assert loader._rosstack == rosstack keys = loader.get_loadable_resources() for p in ['stack1_p1', 'stack1_p2', 'stack1_p3']: assert p in keys keys = loader.get_loadable_views() for s in ['ros', 'empty', 'invalid', 'stack1']: assert s in keys rosdep-0.21.0/test/test_rosdep_shell_utils.py000066400000000000000000000040471406544147500214000ustar00rootroot00000000000000# Copyright (c) 2011, Willow Garage, Inc. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # # * Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # * Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # * Neither the name of the Willow Garage, Inc. nor the names of its # contributors may be used to endorse or promote products derived from # this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. def test_create_tempfile_from_string_and_execute(): # not sure how to test this just yet, for now just a tripwire from rosdep2.shell_utils import create_tempfile_from_string_and_execute assert create_tempfile_from_string_and_execute('#!/bin/sh\necho "hello"'), 'ls command failed' assert not create_tempfile_from_string_and_execute('bad'), 'bad command did not fail' def test_read_stdout(): from rosdep2.shell_utils import read_stdout assert 'foo' in read_stdout(['echo', 'foo']) rosdep-0.21.0/test/test_rosdep_slackware.py000066400000000000000000000140671406544147500210300ustar00rootroot00000000000000# Copyright (c) 2011, Willow Garage, Inc. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # # * Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # * Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # * Neither the name of the Willow Garage, Inc. nor the names of its # contributors may be used to endorse or promote products derived from # this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. # Author Nikolay Nikolov/niko.b.nikolov@gmail.com import os import traceback from mock import Mock, patch import rospkg.os_detect def is_slackware(): return rospkg.os_detect.Slackware().is_os() def get_test_dir(): # not used yet return os.path.abspath(os.path.join(os.path.dirname(__file__), 'slackware')) def test_sbotools_available(): if not is_slackware(): print('Skipping not Slackware') return from rosdep2.platforms.slackware import sbotools_available original_exists = os.path.exists path_overrides = {} def mock_path(path): if path in path_overrides: return path_overrides[path] else: return original_exists(path) m = Mock(side_effect=mock_path) os.path.exists = m # Test with sbotools missing m.reset_mock() path_overrides = {} path_overrides['/usr/sbin/sboinstall'] = False val = sbotools_available() assert not val, 'Sbotools should not be available' # Test with sbotools installed m.reset_mock() path_overrides = {} path_overrides['/usr/sbin/sboinstall'] = True val = sbotools_available() assert val, 'Sbotools should be available' os.path.exists = original_exists def test_SbotoolsInstaller(): if not is_slackware(): print('Skipping not Slackware') return from rosdep2.platforms.slackware import SbotoolsInstaller @patch.object(SbotoolsInstaller, 'get_packages_to_install') def test(expected_prefix, mock_method): installer = SbotoolsInstaller() mock_method.return_value = [] assert [] == installer.get_install_command(['fake']) mock_method.return_value = ['a', 'b'] expected = [expected_prefix + ['sboinstall', '-r', 'a'], expected_prefix + ['sboinstall', '-r', 'b']] val = installer.get_install_command(['whatever'], interactive=False) assert val == expected, val expected = [expected_prefix + ['sboinstall', 'a'], expected_prefix + ['sboinstall', 'b']] val = installer.get_install_command(['whatever'], interactive=True) assert val == expected, val try: with patch('rosdep2.installers.os.geteuid', return_value=1): test(['sudo', '-H']) with patch('rosdep2.installers.os.geteuid', return_value=0): test([]) except AssertionError: traceback.print_exc() raise def test_slackpkg_available(): if not is_slackware(): print('Skipping not Slackware') return from rosdep2.platforms.slackware import slackpkg_available original_exists = os.path.exists path_overrides = {} def mock_path(path): if path in path_overrides: return path_overrides[path] else: return original_exists(path) m = Mock(side_effect=mock_path) os.path.exists = m # Test with sbotools missing m.reset_mock() path_overrides = {} path_overrides['/usr/sbin/slackpkg'] = False val = slackpkg_available() assert not val, 'Slackpkg should not be available' # Test with sbotools installed m.reset_mock() path_overrides = {} path_overrides['/usr/sbin/slackpkg'] = True val = slackpkg_available() assert val, 'Slackpkg should be available' os.path.exists = original_exists def test_SlackpkgInstaller(): if not is_slackware(): print('Skipping not Slackware') return from rosdep2.platforms.slackware import SlackpkgInstaller @patch.object(SlackpkgInstaller, 'get_packages_to_install') def test(expected_prefix, mock_method): installer = SlackpkgInstaller() mock_method.return_value = [] assert [] == installer.get_install_command(['fake']) mock_method.return_value = ['a', 'b'] expected = [expected_prefix + ['slackpkg', 'install', 'a'], expected_prefix + ['slackpkg', 'install', 'b']] val = installer.get_install_command(['whatever'], interactive=False) assert val == expected, val expected = [expected_prefix + ['slackpkg', 'install', 'a'], expected_prefix + ['slackpkg', 'install', 'b']] val = installer.get_install_command(['whatever'], interactive=True) assert val == expected, val try: with patch('rosdep2.installers.os.geteuid', return_value=1): test(['sudo', '-H']) with patch('rosdep2.installers.os.geteuid', return_value=0): test([]) except AssertionError: traceback.print_exc() raise rosdep-0.21.0/test/test_rosdep_source.py000066400000000000000000000255631406544147500203570ustar00rootroot00000000000000# Copyright (c) 2011, Willow Garage, Inc. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # # * Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # * Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # * Neither the name of the Willow Garage, Inc. nor the names of its # contributors may be used to endorse or promote products derived from # this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. # Author Ken Conley/kwc@willowgarage.com import os import yaml rep122_install_command = """#!/bin/bash set -o errexit mkdir -p build cd build cmake .. make echo "About to run checkinstall make install" sudo checkinstall -y --nodoc --pkgname=yaml-cpp-sourcedep make install """ rep122_check_presence_command = """#!/bin/bash dpkg-query -W -f='${Package} ${Status}\\n' yaml-cpp-sourcedep | awk '{\\ if ($4 =="installed") exit 0 else print "yaml-cpp-sourcedep not installed" exit 1}' """ REP112_MD5SUM = '57cb9faf930e9c4f0822be8b27798248' def get_test_dir(): return os.path.abspath(os.path.join(os.path.dirname(__file__), 'source')) def _subtest_rep112_rdmanifest(resolved): test_dir = get_test_dir() path = os.path.join(test_dir, 'rep112-example.rdmanifest') manifest = yaml.safe_load(open(path)) assert resolved.manifest == manifest assert resolved.manifest_url == path assert resolved.install_command == rep122_install_command assert resolved.check_presence_command == rep122_check_presence_command assert len(resolved.check_presence_command) == len(rep122_check_presence_command), '%s %s' % (len(resolved.check_presence_command), len(rep122_check_presence_command)) assert resolved.exec_path == 'yaml-cpp-0.2.5' assert resolved.tarball == 'http://download.ros.org/downloads/yaml-cpp-0.2.5.tar.gz' assert resolved.alternate_tarball is None assert resolved.tarball_md5sum == 'b17dc36055cd2259c88b2602601415d9' def test_SourceInstall(): from rosdep2.platforms.source import InvalidRdmanifest, SourceInstall # tripwire SourceInstall() # test unpacking of dict manifest = { 'md5sum': 'fake-md5', 'exec-path': '/path', 'install-script': 'echo hello', 'check-presence-script': 'hello there', 'uri': 'http://ros.org/', 'alternate-uri': 'http://turtlebot.com/', 'depends': ['foo', 'bar'], } resolved = SourceInstall.from_manifest(manifest, 'fake-url') assert resolved.manifest == manifest assert resolved.manifest_url == 'fake-url' assert resolved.install_command == 'echo hello' assert resolved.check_presence_command == 'hello there' assert resolved.exec_path == '/path' assert resolved.tarball == 'http://ros.org/' assert resolved.alternate_tarball == 'http://turtlebot.com/' assert resolved.tarball_md5sum == 'fake-md5' test_dir = get_test_dir() path = os.path.join(test_dir, 'rep112-example.rdmanifest') manifest = yaml.safe_load(open(path)) resolved = SourceInstall.from_manifest(manifest, path) _subtest_rep112_rdmanifest(resolved) # TODO: test depends # test with bad dicts manifest = { 'md5sum': 'fake-md5', 'exec-path': '/path', 'install-script': 'echo hello', 'check-presence-script': 'hello there', 'alternate-uri': 'http://turtlebot.com/', 'depends': ['foo', 'bar'], } # uri is required try: SourceInstall.from_manifest(manifest, 'foo') assert False, 'should have raised' except InvalidRdmanifest as e: pass # test defaults manifest = dict(uri='http://ros.org/') resolved = SourceInstall.from_manifest(manifest, 'foo') assert resolved.exec_path == '.' assert resolved.install_command == '' assert resolved.check_presence_command == '' assert resolved.alternate_tarball is None assert resolved.tarball_md5sum is None def test_is_installed(): from rosdep2.platforms.source import SourceInstaller, SourceInstall resolved = SourceInstall() resolved.check_presence_command = """#!/bin/bash exit 0 """ installer = SourceInstaller() assert installer.is_installed(resolved) def test_source_detect(): from rosdep2.platforms.source import source_detect, SourceInstall resolved = SourceInstall() resolved.check_presence_command = """#!/bin/bash exit 0 """ assert [] == source_detect([]) assert [resolved] == source_detect([resolved]) def yes(*args, **kwds): return 0 def no(*args, **kwds): return 1 resolved = [SourceInstall(), SourceInstall(), SourceInstall(), SourceInstall()] for r in resolved: r.check_presence_command = '' retval = source_detect(resolved, exec_fn=yes) assert resolved == retval, retval assert [] == source_detect(resolved, exec_fn=no) def test_SourceInstaller_get_install_command(): from rosdep2.platforms.source import SourceInstaller, SourceInstall installer = SourceInstaller() resolved = SourceInstall() resolved.manifest_url = 'http://fake/foo' resolved.check_presence_command = """#!/bin/bash exit 1 """ commands = installer.get_install_command([resolved]) assert len(commands) == 1 assert commands[0] == ['rosdep-source', 'install', 'http://fake/foo'] resolved = SourceInstall() resolved.manifest_url = 'http://fake/foo' resolved.check_presence_command = """#!/bin/bash exit 0 """ commands = installer.get_install_command([resolved]) assert not(commands) def test_SourceInstaller_resolve(): from rosdep2.platforms.source import SourceInstaller, InvalidData test_dir = get_test_dir() url = 'file://%s' % os.path.join(test_dir, 'rep112-example.rdmanifest') md5sum_good = REP112_MD5SUM md5sum_bad = 'fake' installer = SourceInstaller() try: installer.resolve({}) assert False, 'should have raised' except InvalidData: pass try: installer.resolve(dict(uri=url, md5sum=md5sum_bad)) assert False, 'should have raised' except InvalidData: pass resolved = installer.resolve(dict(uri=url, md5sum=md5sum_good)) assert type(resolved) == list assert len(resolved) == 1 # test for reinstall (to check the depends in rdmanifest) dependencies = installer.get_depends(dict(uri=url, md5sum=md5sum_good)) assert dependencies == ['checkinstall'], 'Dependencies should resolve to checkinstall listed in the rdmanifest.' resolved = resolved[0] assert resolved.install_command == rep122_install_command assert resolved.check_presence_command == rep122_check_presence_command # test again to activate caching resolved = installer.resolve(dict(uri=url, md5sum=md5sum_good)) assert type(resolved) == list, 'Cache should also return a list' assert len(resolved) == 1 resolved = resolved[0] assert resolved.install_command == rep122_install_command assert resolved.check_presence_command == rep122_check_presence_command def test_load_rdmanifest(): from rosdep2.platforms.source import load_rdmanifest, InvalidRdmanifest # load_rdmanifest is just a YAML unmarshaller with an exception change assert 'str' == load_rdmanifest('str') assert {'a': 'b'} == load_rdmanifest('{a: b}') try: load_rdmanifest(';lkajsdf;klj ;l: a;kljdf;: asdf\n ;asdfl;kj') assert False, 'should have raised' except InvalidRdmanifest as e: pass def test_get_file_hash(): from rosdep2.platforms.source import get_file_hash path = os.path.join(get_test_dir(), 'rep112-example.rdmanifest') assert REP112_MD5SUM == get_file_hash(path) def test_fetch_file(): test_dir = get_test_dir() with open(os.path.join(test_dir, 'rep112-example.rdmanifest')) as f: expected = f.read() from rosdep2.platforms.source import fetch_file url = 'file://%s' % os.path.join(test_dir, 'rep112-example.rdmanifest') contents, error = fetch_file(url, REP112_MD5SUM) assert not error assert contents == expected contents, error = fetch_file(url, 'badmd5') assert bool(error), 'should have errored' assert not contents contents, error = fetch_file('http://badhostname.willowgarage.com', 'md5sum') assert not contents assert bool(error), 'should have errored' def test_download_rdmanifest(): test_dir = get_test_dir() with open(os.path.join(test_dir, 'rep112-example.rdmanifest')) as f: expected = yaml.safe_load(f) from rosdep2.platforms.source import download_rdmanifest, DownloadFailed url = 'file://%s' % os.path.join(test_dir, 'rep112-example.rdmanifest') contents, download_url = download_rdmanifest(url, REP112_MD5SUM) assert contents == expected assert download_url == url # test alt_url contents, download_url = download_rdmanifest('http://badhostname.willowgarage.com/', REP112_MD5SUM, alt_url=url) assert contents == expected assert download_url == url # test md5sum validate try: contents, error = download_rdmanifest(url, 'badmd5') assert False, 'should have errored' except DownloadFailed: pass # test download verify try: contents, error = download_rdmanifest('http://badhostname.willowgarage.com', 'fakemd5') assert False, 'should have errored' except DownloadFailed: pass def test_install_from_file(): from rosdep2.platforms.source import install_from_file f = os.path.join(get_test_dir(), 'noop-not-installed.rdmanifest') install_from_file(f) def test_install_source(): from rosdep2.platforms.source import install_source, SourceInstall resolved = SourceInstall() resolved.tarball = 'https://github.com/ros-infrastructure/rosdep/raw/master/test/source/foo.tar.gz' resolved.tarball_md5sum = 'fd34dc39f8f192b97fcc191fe0a6befc' resolved.install_command = """#!/bin/sh exit 0 """ resolved.exec_path = '' install_source(resolved) rosdep-0.21.0/test/test_rosdep_sources_list.py000066400000000000000000000456521406544147500215760ustar00rootroot00000000000000# Copyright (c) 2012, Willow Garage, Inc. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # # * Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # * Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # * Neither the name of the Willow Garage, Inc. nor the names of its # contributors may be used to endorse or promote products derived from # this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. import os import tempfile import yaml try: from urllib.request import urlopen from urllib.error import URLError except ImportError: from urllib2 import urlopen from urllib2 import URLError import rospkg.distro import rosdep2.sources_list GITHUB_BASE_URL = 'https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/base.yaml' def get_test_dir(): return os.path.abspath(os.path.join(os.path.dirname(__file__), 'sources.list.d')) def test_get_sources_list_dir(): assert rosdep2.sources_list.get_sources_list_dir() def test_get_sources_cache_dir(): assert rosdep2.sources_list.get_sources_cache_dir() def test_url_constants(): from rosdep2.sources_list import DEFAULT_SOURCES_LIST_URL for url_name, url in [('DEFAULT_SOURCES_LIST_URL', DEFAULT_SOURCES_LIST_URL)]: try: f = urlopen(url) f.read() f.close() except Exception: assert False, 'URL [%s][%s] failed to download' % (url_name, url) def test_download_default_sources_list(): from rosdep2.sources_list import download_default_sources_list data = download_default_sources_list() assert 'http' in data, data # sanity check, all sources files have urls try: download_default_sources_list(url='http://bad.ros.org/foo.yaml') assert False, 'should not have succeeded/valdiated' except URLError: pass def test_CachedDataSource(): from rosdep2.sources_list import CachedDataSource, DataSource, TYPE_GBPDISTRO, TYPE_YAML type_ = TYPE_GBPDISTRO url = 'http://fake.willowgarage.com/foo' tags = ['tag1'] rosdep_data = {'key': {}} origin = '/tmp/bar' cds = CachedDataSource(type_, url, tags, rosdep_data, origin=origin) assert cds == CachedDataSource(type_, url, tags, rosdep_data, origin=origin) assert cds != CachedDataSource(type_, url, tags, rosdep_data, origin=None) assert cds != CachedDataSource(type_, url, tags, {}, origin=origin) assert cds != CachedDataSource(TYPE_YAML, url, tags, rosdep_data, origin=origin) assert cds != CachedDataSource(type_, 'http://ros.org/foo.yaml', tags, rosdep_data, origin=origin) assert cds != DataSource(type_, url, tags, origin=origin) assert DataSource(type_, url, tags, origin=origin) != cds assert cds.type == type_ assert cds.url == url assert cds.origin == origin assert cds.rosdep_data == rosdep_data assert type_ in str(cds) assert type_ in repr(cds) assert url in str(cds) assert url in repr(cds) assert tags[0] in str(cds) assert tags[0] in repr(cds) assert 'key' in str(cds) assert 'key' in repr(cds) def test_DataSource(): from rosdep2.sources_list import DataSource data_source = DataSource('yaml', 'http://fake/url', ['tag1', 'tag2']) assert data_source == rosdep2.sources_list.DataSource('yaml', 'http://fake/url', ['tag1', 'tag2']) assert 'yaml' == data_source.type assert 'http://fake/url' == data_source.url assert ['tag1', 'tag2'] == data_source.tags assert 'yaml http://fake/url tag1 tag2' == str(data_source) data_source_foo = DataSource('yaml', 'http://fake/url', ['tag1', 'tag2'], origin='foo') assert data_source_foo != data_source assert data_source_foo.origin == 'foo' assert '[foo]:\nyaml http://fake/url tag1 tag2' == str(data_source_foo), str(data_source_foo) assert repr(data_source) try: rosdep2.sources_list.DataSource('yaml', 'http://fake/url', 'tag1', origin='foo') assert False, 'should have raised' except ValueError: pass try: rosdep2.sources_list.DataSource('yaml', 'non url', ['tag1'], origin='foo') assert False, 'should have raised' except ValueError: pass try: rosdep2.sources_list.DataSource('bad', 'http://fake/url', ['tag1'], origin='foo') assert False, 'should have raised' except ValueError: pass try: rosdep2.sources_list.DataSource('yaml', 'http://host.no.path/', ['tag1'], origin='foo') assert False, 'should have raised' except ValueError: pass def test_parse_sources_file(): from rosdep2.sources_list import parse_sources_file from rosdep2 import InvalidData for f in ['20-default.list', '30-nonexistent.list']: path = os.path.join(get_test_dir(), f) sources = parse_sources_file(path) assert sources[0].type == 'yaml' assert sources[0].origin == path, sources[0].origin try: sources = parse_sources_file('bad') except InvalidData: pass def test_parse_sources_list(): from rosdep2.sources_list import parse_sources_list from rosdep2 import InvalidData # test with non-existent dir, should return with empty list as # directory is not required to exist. assert [] == parse_sources_list(sources_list_dir='/not/a/real/path') # test with real dir path = get_test_dir() sources_list = parse_sources_list(sources_list_dir=get_test_dir()) # at time test was written, at least two sources files assert len(sources_list) > 1 # make sure files got loaded in intended order assert sources_list[0].origin.endswith('20-default.list') assert sources_list[1].origin.endswith('20-default.list') assert sources_list[2].origin.endswith('30-nonexistent.list') # tripwire -- we don't know what the actual return value is, but # should not error on a correctly configured test system. parse_sources_list() def test_write_cache_file(): from rosdep2.sources_list import write_cache_file, compute_filename_hash, PICKLE_CACHE_EXT try: import cPickle as pickle except ImportError: import pickle tempdir = tempfile.mkdtemp() filepath = write_cache_file(tempdir, 'foo', {'data': 1}) + PICKLE_CACHE_EXT computed_path = os.path.join(tempdir, compute_filename_hash('foo')) + PICKLE_CACHE_EXT assert os.path.samefile(filepath, computed_path) with open(filepath, 'rb') as f: assert {'data': 1} == pickle.loads(f.read()) def test_update_sources_list(): from rosdep2.sources_list import update_sources_list, InvalidData, compute_filename_hash, PICKLE_CACHE_EXT try: import cPickle as pickle except ImportError: import pickle try: from urllib.request import pathname2url except ImportError: from urllib import pathname2url sources_list_dir = get_test_dir() index_path = os.path.abspath(os.path.join(os.path.dirname(__file__), 'rosdistro', 'index.yaml')) index_url = 'file://' + pathname2url(index_path) os.environ['ROSDISTRO_INDEX_URL'] = index_url tempdir = tempfile.mkdtemp() # use a subdirectory of test dir to make sure rosdep creates the necessary substructure tempdir = os.path.join(tempdir, 'newdir') errors = [] def error_handler(loc, e): errors.append((loc, e)) retval = update_sources_list(sources_list_dir=sources_list_dir, sources_cache_dir=tempdir, error_handler=error_handler) assert retval assert len(retval) == 2, retval # one of our sources is intentionally bad, this should be a softfail assert len(errors) == 1, errors assert errors[0][0].url == 'https://badhostname.willowgarage.com/rosdep.yaml' source0, path0 = retval[0] assert source0.origin.endswith('20-default.list'), source0 hash1 = compute_filename_hash(GITHUB_URL) hash2 = compute_filename_hash(BADHOSTNAME_URL) filepath = os.path.join(tempdir, hash1) assert filepath == path0, '%s vs %s' % (filepath, path0) with open(filepath + PICKLE_CACHE_EXT, 'rb') as f: data = pickle.loads(f.read()) assert 'cmake' in data # verify that cache index exists. contract specifies that even # failed downloads are specified in the index, just in case old # download data is present. with open(os.path.join(tempdir, 'index'), 'r') as f: index = f.read().strip() expected = "#autogenerated by rosdep, do not edit. use 'rosdep update' instead\n"\ 'yaml %s \n'\ 'yaml %s python\n'\ 'yaml %s ubuntu' % (GITHUB_URL, GITHUB_PYTHON_URL, BADHOSTNAME_URL) assert expected == index, '\n[%s]\nvs\n[%s]' % (expected, index) def test_load_cached_sources_list(): from rosdep2.sources_list import load_cached_sources_list, update_sources_list tempdir = tempfile.mkdtemp() # test behavior on empty cache assert [] == load_cached_sources_list(sources_cache_dir=tempdir) # pull in cache data sources_list_dir = get_test_dir() retval = update_sources_list(sources_list_dir=sources_list_dir, sources_cache_dir=tempdir, error_handler=None) assert retval # now test with cached data retval = load_cached_sources_list(sources_cache_dir=tempdir) assert len(retval) == 3, 'len(%s) != 3' % retval source0 = retval[0] source1 = retval[1] source2 = retval[2] # this should be the 'default' source assert 'python' in source1.rosdep_data assert not source0.tags # this should be the 'non-existent' source assert source2.rosdep_data == {} assert source2.tags == ['ubuntu'] def test_DataSourceMatcher(): empty_data_source = rosdep2.sources_list.DataSource('yaml', 'http://fake/url', []) assert empty_data_source == rosdep2.sources_list.DataSource('yaml', 'http://fake/url', []) # matcher must match 'all' tags data_source = rosdep2.sources_list.DataSource('yaml', 'http://fake/url', ['tag1', 'tag2']) partial_data_source = rosdep2.sources_list.DataSource('yaml', 'http://fake/url', ['tag1']) # same tags as test data source matcher = rosdep2.sources_list.DataSourceMatcher(['tag1', 'tag2']) assert matcher.matches(data_source) assert matcher.matches(partial_data_source) assert matcher.matches(empty_data_source) # alter one tag matcher = rosdep2.sources_list.DataSourceMatcher(['tag1', 'tag3']) assert not matcher.matches(data_source) assert matcher.matches(empty_data_source) matcher = rosdep2.sources_list.DataSourceMatcher(['tag1']) assert not matcher.matches(data_source) def test_download_rosdep_data(): from rosdep2.sources_list import download_rosdep_data from rosdep2 import DownloadFailure url = GITHUB_BASE_URL data = download_rosdep_data(url) assert 'boost' in data # sanity check # try with a bad URL try: data = download_rosdep_data('http://badhost.willowgarage.com/rosdep.yaml') assert False, 'should have raised' except DownloadFailure as e: pass # try to trigger both non-dict clause and YAMLError clause for url in [ 'https://code.ros.org/svn/release/trunk/distros/', 'https://code.ros.org/svn/release/trunk/distros/manifest.xml', ]: try: data = download_rosdep_data(url) assert False, 'should have raised' except DownloadFailure as e: pass BADHOSTNAME_URL = 'https://badhostname.willowgarage.com/rosdep.yaml' GITHUB_URL = 'https://github.com/ros/rosdistro/raw/master/rosdep/base.yaml' GITHUB_PYTHON_URL = 'https://github.com/ros/rosdistro/raw/master/rosdep/python.yaml' GITHUB_FUERTE_URL = 'https://raw.githubusercontent.com/ros-infrastructure/rosdep_rules/master/rosdep_fuerte.yaml' EXAMPLE_SOURCES_DATA_BAD_TYPE = 'YAML %s' % (GITHUB_URL) EXAMPLE_SOURCES_DATA_BAD_URL = 'yaml not-a-url tag1 tag2' EXAMPLE_SOURCES_DATA_BAD_LEN = 'yaml' EXAMPLE_SOURCES_DATA_NO_TAGS = 'yaml %s' % (GITHUB_URL) EXAMPLE_SOURCES_DATA = 'yaml %s fuerte ubuntu' % (GITHUB_URL) EXAMPLE_SOURCES_DATA_MULTILINE = """ # this is a comment, above and below are empty lines yaml %s yaml %s fuerte ubuntu """ % (GITHUB_URL, GITHUB_FUERTE_URL) def test_parse_sources_data(): from rosdep2.sources_list import parse_sources_data, TYPE_YAML, InvalidData retval = parse_sources_data(EXAMPLE_SOURCES_DATA, origin='foo') assert len(retval) == 1 sd = retval[0] assert sd.type == TYPE_YAML, sd.type assert sd.url == GITHUB_URL assert sd.tags == ['fuerte', 'ubuntu'] assert sd.origin == 'foo' retval = parse_sources_data(EXAMPLE_SOURCES_DATA_NO_TAGS) assert len(retval) == 1 sd = retval[0] assert sd.type == TYPE_YAML assert sd.url == GITHUB_URL assert sd.tags == [] assert sd.origin == '' retval = parse_sources_data(EXAMPLE_SOURCES_DATA_MULTILINE) assert len(retval) == 2 sd = retval[0] assert sd.type == TYPE_YAML assert sd.url == GITHUB_URL assert sd.tags == [] sd = retval[1] assert sd.type == TYPE_YAML assert sd.url == GITHUB_FUERTE_URL assert sd.tags == ['fuerte', 'ubuntu'] for bad in [EXAMPLE_SOURCES_DATA_BAD_URL, EXAMPLE_SOURCES_DATA_BAD_TYPE, EXAMPLE_SOURCES_DATA_BAD_LEN]: try: parse_sources_data(bad) assert False, 'should have raised: %s' % (bad) except InvalidData as e: pass def test_DataSourceMatcher_create_default(): distro_name = rospkg.distro.current_distro_codename() os_detect = rospkg.os_detect.OsDetect() os_name, os_version, os_codename = os_detect.detect_os() matcher = rosdep2.sources_list.DataSourceMatcher.create_default() # matches full os_data_source = rosdep2.sources_list.DataSource('yaml', 'http://fake/url', [distro_name, os_name, os_codename]) assert matcher.matches(os_data_source) # matches against current os os_data_source = rosdep2.sources_list.DataSource('yaml', 'http://fake/url', [os_name, os_codename]) assert matcher.matches(os_data_source) # matches against current distro distro_data_source = rosdep2.sources_list.DataSource('yaml', 'http://fake/url', [distro_name]) assert matcher.matches(distro_data_source) # test matcher with os override matcher = rosdep2.sources_list.DataSourceMatcher.create_default(os_override=('fubuntu', 'flucid')) assert not matcher.matches(os_data_source) data_source = rosdep2.sources_list.DataSource('yaml', 'http://fake/url', ['fubuntu']) assert matcher.matches(data_source) data_source = rosdep2.sources_list.DataSource('yaml', 'http://fake/url', ['flucid']) assert matcher.matches(data_source) data_source = rosdep2.sources_list.DataSource('yaml', 'http://fake/url', ['flucid', 'fubuntu']) assert matcher.matches(data_source) data_source = rosdep2.sources_list.DataSource('yaml', 'http://fake/url', ['kubuntu', 'lucid']) assert not matcher.matches(data_source) def test_SourcesListLoader_create_default(): from rosdep2.sources_list import update_sources_list, SourcesListLoader, DataSourceMatcher # create temp dir for holding sources cache tempdir = tempfile.mkdtemp() # pull in cache data sources_list_dir = get_test_dir() retval = update_sources_list(sources_list_dir=sources_list_dir, sources_cache_dir=tempdir, error_handler=None) assert retval # now test with cached data matcher = rosdep2.sources_list.DataSourceMatcher(['ubuntu', 'lucid']) loader = SourcesListLoader.create_default(matcher, sources_cache_dir=tempdir) assert loader.sources sources0 = loader.sources assert not any([s for s in loader.sources if not matcher.matches(s)]) loader = SourcesListLoader.create_default(matcher, sources_cache_dir=tempdir) assert sources0 == loader.sources # now test with different matcher matcher2 = rosdep2.sources_list.DataSourceMatcher(['python']) loader2 = SourcesListLoader.create_default(matcher2, sources_cache_dir=tempdir) assert loader2.sources # - should have filtered down to python-only assert sources0 != loader2.sources assert not any([s for s in loader2.sources if not matcher2.matches(s)]) # test API # very simple, always raises RNF try: loader.get_rosdeps('foo') except rospkg.ResourceNotFound: pass try: loader.get_view_key('foo') except rospkg.ResourceNotFound: pass assert [] == loader.get_loadable_resources() all_sources = [x.url for x in loader.sources] assert all_sources == loader.get_loadable_views() # test get_source early to make sure model matches expected try: loader.get_source('foo') assert False, 'should have raised' except rospkg.ResourceNotFound: pass s = loader.get_source(GITHUB_URL) assert s.url == GITHUB_URL # get_view_dependencies # - loader doesn't new view name, so assume everything assert all_sources == loader.get_view_dependencies('foo') # - actual views don't depend on anything assert [] == loader.get_view_dependencies(GITHUB_URL) # load_view from rosdep2.model import RosdepDatabase for verbose in [True, False]: rosdep_db = RosdepDatabase() loader.load_view(GITHUB_URL, rosdep_db, verbose=verbose) assert rosdep_db.is_loaded(GITHUB_URL) assert [] == rosdep_db.get_view_dependencies(GITHUB_URL) entry = rosdep_db.get_view_data(GITHUB_URL) assert 'cmake' in entry.rosdep_data assert GITHUB_URL == entry.origin # - coverage, repeat loader, should noop loader.load_view(GITHUB_URL, rosdep_db) def test_unpickle_same_results(): try: import cPickle as pickle except ImportError: import pickle with open(os.path.join('test', 'fixtures', 'python2cache.pickle'), 'rb') as py2_cache: py2_result = pickle.loads(py2_cache.read()) with open(os.path.join('test', 'fixtures', 'python3cache.pickle'), 'rb') as py3_cache: py3_result = pickle.loads(py3_cache.read()) assert py2_result == py3_result rosdep-0.21.0/test/tree/000077500000000000000000000000001406544147500150165ustar00rootroot00000000000000rosdep-0.21.0/test/tree/ament/000077500000000000000000000000001406544147500161225ustar00rootroot00000000000000rosdep-0.21.0/test/tree/ament/share/000077500000000000000000000000001406544147500172245ustar00rootroot00000000000000rosdep-0.21.0/test/tree/ament/share/ament_index/000077500000000000000000000000001406544147500215175ustar00rootroot00000000000000rosdep-0.21.0/test/tree/ament/share/ament_index/resource_index/000077500000000000000000000000001406544147500245355ustar00rootroot00000000000000rosdep-0.21.0/test/tree/ament/share/ament_index/resource_index/packages/000077500000000000000000000000001406544147500263135ustar00rootroot00000000000000rosdep-0.21.0/test/tree/ament/share/ament_index/resource_index/packages/.baz000066400000000000000000000000001406544147500270560ustar00rootroot00000000000000rosdep-0.21.0/test/tree/ament/share/ament_index/resource_index/packages/bar000066400000000000000000000000001406544147500267700ustar00rootroot00000000000000rosdep-0.21.0/test/tree/ament/share/ament_index/resource_index/packages/foo000066400000000000000000000000001406544147500270070ustar00rootroot00000000000000rosdep-0.21.0/test/tree/ament/share/ament_index/resource_index/packages/metapackage_with_deps000066400000000000000000000000001406544147500325340ustar00rootroot00000000000000rosdep-0.21.0/test/tree/ament/share/ament_index/resource_index/packages/spam/000077500000000000000000000000001406544147500272535ustar00rootroot00000000000000rosdep-0.21.0/test/tree/ament/share/ament_index/resource_index/packages/spam/spam000066400000000000000000000000001406544147500301240ustar00rootroot00000000000000rosdep-0.21.0/test/tree/catkin/000077500000000000000000000000001406544147500162675ustar00rootroot00000000000000rosdep-0.21.0/test/tree/catkin/another_catkin_package/000077500000000000000000000000001406544147500227335ustar00rootroot00000000000000rosdep-0.21.0/test/tree/catkin/another_catkin_package/package.xml000066400000000000000000000005201406544147500250450ustar00rootroot00000000000000 another_catkin_package 0.0.0 This is a another package Nobody BSD catkin simple_catkin_package rosdep-0.21.0/test/tree/catkin/fake_catkin_package/000077500000000000000000000000001406544147500222015ustar00rootroot00000000000000rosdep-0.21.0/test/tree/catkin/fake_catkin_package/package.xml000066400000000000000000000006221406544147500243160ustar00rootroot00000000000000 fake_catkin_package 0.0.0 This is a simple package Nobody BSD catkin bar foo metapackage_with_deps rosdep-0.21.0/test/tree/catkin/metapackage_with_deps/000077500000000000000000000000001406544147500225775ustar00rootroot00000000000000rosdep-0.21.0/test/tree/catkin/metapackage_with_deps/package.xml000066400000000000000000000006701406544147500247170ustar00rootroot00000000000000 metapackage_with_deps 0.0.0 This is a meta-package with depencencies Nobody BSD catkin simple_catkin_package another_catkin_package rosdep-0.21.0/test/tree/catkin/multi_dep_type_catkin_package/000077500000000000000000000000001406544147500243165ustar00rootroot00000000000000rosdep-0.21.0/test/tree/catkin/multi_dep_type_catkin_package/package.xml000066400000000000000000000010621406544147500264320ustar00rootroot00000000000000 multi_dep_type_catkin_package 0.0.0 This is a package with depencencies of multiple types Nobody BSD catkin eigen testboost testtinyxml testlibtool curl epydoc rosdep-0.21.0/test/tree/catkin/simple_catkin_package/000077500000000000000000000000001406544147500225645ustar00rootroot00000000000000rosdep-0.21.0/test/tree/catkin/simple_catkin_package/package.xml000066400000000000000000000005021406544147500246760ustar00rootroot00000000000000 simple_catkin_package 0.0.0 This is a simple package Nobody BSD catkin testboost rosdep-0.21.0/test/tree/ros/000077500000000000000000000000001406544147500156215ustar00rootroot00000000000000rosdep-0.21.0/test/tree/ros/python_dep/000077500000000000000000000000001406544147500177725ustar00rootroot00000000000000rosdep-0.21.0/test/tree/ros/python_dep/manifest.xml000066400000000000000000000004011406544147500223150ustar00rootroot00000000000000 needs python Ken Conley BSD http://ros.org/wiki/ rosdep-0.21.0/test/tree/ros/roscpp_fake/000077500000000000000000000000001406544147500201155ustar00rootroot00000000000000rosdep-0.21.0/test/tree/ros/roscpp_fake/manifest.xml000066400000000000000000000004341406544147500224460ustar00rootroot00000000000000 roscpp Ken Conley BSD http://ros.org/wiki/roscpp rosdep-0.21.0/test/tree/ros/rosdep.yaml000066400000000000000000000144471406544147500200130ustar00rootroot00000000000000testtinyxml: ubuntu: libtinyxml-dev debian: libtinyxml-dev osx: source: uri: 'http://kforge.ros.org/rosrelease/viewvc/sourcedeps/tinyxml/tinyxml-2.6.2-1.rdmanifest' md5sum: 13760e61e08c9004493c302a16966c42 testpython: ubuntu: python-dev debian: python-dev arch: python opensuse: python-devel fedora: python-devel rhel: python-devel macports: python26 python_select gentoo: python cygwin: python freebsd: python testpython-yaml: ubuntu: python-yaml debian: python-yaml opensuse: python-yaml fedora: PyYAML rhel: PyYAML centos: PyYAML arch: python-yaml macports: py26-yaml gentoo: pyyaml cygwin: | if [ ! -d /usr/lib/python2.5/site-packages/yaml/ ] ; then mkdir -p ~/ros/ros-deps cd ~/ros/ros-deps wget --tries=10 http://pyyaml.org/download/pyyaml/PyYAML-3.09.tar.gz tar xzf PyYAML-3.09.tar.gz cd PyYAML-3.09 python setup.py install fi freebsd: py27-yaml testpython-gtk2: ubuntu: python-gtk2 arch: pygtk debian: python-gtk2 macports: py26-gtk opensuse: python-gtk fedora: pygtk2 rhel: pygtk2 gentoo: "=dev-python/pygtk-2*" freebsd: py-gtk2 testpython-scipy: ubuntu: python-scipy debian: python-scipy arch: python-scipy opensuse: python-scipy fedora: scipy macports: py26-scipy gentoo: dev-libs/scipy freebsd: py-scipy testbzip2: ubuntu: libbz2-dev debian: libbz2-dev opensuse: libbz2-devel fedora: bzip2-devel rhel: bzip2-devel arch: bzip2 macports: bzip2 gentoo: app-arch/bzip2 cygwin: bzip2 freebsd: bzip2 testboost: ubuntu: lucid: apt: packages: [libboost1.40-all-dev] maverick: apt: packages: [libboost1.42-all-dev] natty: apt: packages: [libboost1.42-all-dev] debian: squeeze: libboost1.42-all-dev lenny: | if [ ! -f /opt/ros/lib/libboost_date_time-gcc43-mt*-1_37.a ] ; then mkdir -p ~/ros/ros-deps cd ~/ros/ros-deps wget --tries=10 http://pr.willowgarage.com/downloads/boost_1_37_0.tar.gz tar xzf boost_1_37_0.tar.gz cd boost_1_37_0 ./configure --prefix=/opt/ros make sudo make install fi 3.1: | if [ ! -f /opt/ros/lib/libboost_date_time-gcc33-mt*-1_37.a ] ; then mkdir -p ~/ros/ros-deps cd ~/ros/ros-deps wget --tries=10 http://pr.willowgarage.com/downloads/boost_1_37_0.tar.gz tar xzf boost_1_37_0.tar.gz cd boost_1_37_0 ./configure --prefix=/opt/ros make sudo make install fi opensuse: boost-devel fedora: boost-devel rhel: boost-devel arch: boost macports: boost gentoo: dev-libs/boost cygwin: libboost-devel libboost1.40 freebsd: boost-python-libs testzlib: ubuntu: zlib1g-dev debian: zlib1g-dev opensuse: zlib-devel fedora: zlib-devel rhel: zlib-devel arch: zlib macports: zlib gentoo: sys-libs/zlib cygwin: zlib freebsd: builtin testgraphviz: ubuntu: graphviz debian: graphviz opensuse: graphviz fedora: graphviz rhel: graphviz arch: graphviz macports: graphviz gentoo: media-gfx/graphviz freebsd: graphviz testwxwidgets: ubuntu: libwxgtk2.8-dev debian: libwxgtk2.8-dev opensuse: wxGTK-devel fedora: wxGTK-devel rhel: wxGTK-devel macports: wxWidgets-python arch: wxgtk gentoo: x11-libs/wxGTK freebsd: wxgtk2 testwxpython: ubuntu: python-wxgtk2.8 arch: wxpython opensuse: python-wxGTK fedora: wxPython-devel rhel: wxPython-devel centos: wxPython-devel debian: python-wxgtk2.8 macports: py26-wxpython py26-gobject py26-gtk py26-cairo gentoo: dev-python/wxpython freebsd: py27-wxPython testgtk2: ubuntu: libgtk2.0-dev debian: libgtk2.0-dev opensuse: gtk2-devel fedora: gtk2-devel rhel: gtk2-devel macports: gtk2 arch: gtk2 gentoo: x11-libs/gtk+ freebsd: gtk20 testpkg-config: ubuntu: pkg-config debian: pkg-config opensuse: pkg-config fedora: pkgconfig rhel: pkgconfig arch: pkg-config macports: pkgconfig gentoo: dev-util/pkgconfig cygwin: pkg-config freebsd: pkg-config testqt4: ubuntu: libqt4-dev qt4-dev-tools debian: libqt4-dev qt4-dev-tools arch: qt opensuse: libqt4-devel fedora: qt-devel macports: qt4-mac gentoo: ">=x11-libs/qt-core-4" freebsd: qt4-corelib testlibstdc++5: ubuntu: libstdc++5 debian: libstdc++5 opensuse: libstdc++33 freebsd: builtin testintltool: ubuntu: intltool opensuse: intltool fedora: intltool gentoo: dev-util/intltool freebsd: intltool testunzip: ubuntu: unzip debian: unzip arch: unzip opensuse: unzip fedora: unzip rhel: unzip macports: unzip gentoo: app-arch/unzip freebsd: unzip testfltk: ubuntu: libfltk1.1-dev debian: libfltk1.1-dev opensuse: fltk-devel fedora: fltk-devel arch: fltk macports: fltk gentoo: "=x11-libs/fltk-1*" freebsd: fltk testbazaar: ubuntu: bzr debian: bzr opensuse: bzr fedora: bazaar macports: bazaar gentoo: dev-vcs/bzr freebsd: bazaar testgit: ubuntu: git-core debian: git-core opensuse: git-core fedora: git macports: git-core gentoo: dev-vcs/git freebsd: git testsubversion: ubuntu: subversion debian: subversion opensuse: subversion fedora: subversion macports: subversion gentoo: dev-vcs/subversion freebsd: subversion testmercurial: ubuntu: mercurial debian: mercurial opensuse: mercurial fedora: mercurial macports: mercurial gentoo: dev-vcs/mercurial freebsd: mercurial testgtest: ubuntu: libgtest-dev debian: libgtest-dev opensuse: gtest-devel fedora: gtest-devel macports: google-test gentoo: dev-util/gtest freebsd: googletest testautoconf: ubuntu: autoconf debian: autoconf opensuse: autoconf fedora: autoconf rhel: autoconf arch: autoconf macports: autoconf gentoo: sys-devel/autoconf freebsd: autoconf213 autoconf268 testautomake: ubuntu: automake debian: automake opensuse: automake fedora: automake rhel: automake arch: automake macports: automake gentoo: sys-devel/automake freebsd: automake14 automake111 testlibtool: ubuntu: apt: packages: [libtool, libltdl-dev] debian: squeeze: libtool libltdl-dev lenny: libtool libltdl3-dev opensuse: libtool libltdl3 fedora: libtool libtool-ltdl-devel rhel: libtool libtool-ltdl-devel macports: libtool arch: libtool gentoo: sys-devel/libtool freebsd: libtool rosdep-0.21.0/test/tree/ros/rospack_fake/000077500000000000000000000000001406544147500202515ustar00rootroot00000000000000rosdep-0.21.0/test/tree/ros/rospack_fake/manifest.xml000066400000000000000000000004011406544147500225740ustar00rootroot00000000000000 rospack Ken Conley BSD http://ros.org/wiki/rospack rosdep-0.21.0/test/tree/ros/stack.xml000066400000000000000000000003211406544147500174440ustar00rootroot00000000000000 ros Maintained by Ken Conley http://ros.org/wiki/ros rosdep-0.21.0/test/tree/stacks/000077500000000000000000000000001406544147500163065ustar00rootroot00000000000000rosdep-0.21.0/test/tree/stacks/empty/000077500000000000000000000000001406544147500174445ustar00rootroot00000000000000rosdep-0.21.0/test/tree/stacks/empty/empty_package/000077500000000000000000000000001406544147500222555ustar00rootroot00000000000000rosdep-0.21.0/test/tree/stacks/empty/empty_package/manifest.xml000066400000000000000000000003631406544147500246070ustar00rootroot00000000000000 empty_package Ken Conley BSD http://ros.org/wiki/empty_package rosdep-0.21.0/test/tree/stacks/empty/stack.xml000066400000000000000000000003601406544147500212720ustar00rootroot00000000000000 empty Maintained by Ken Conley http://ros.org/wiki/empty rosdep-0.21.0/test/tree/stacks/invalid/000077500000000000000000000000001406544147500177345ustar00rootroot00000000000000rosdep-0.21.0/test/tree/stacks/invalid/rosdep.yaml000066400000000000000000000001311406544147500221070ustar00rootroot00000000000000;lkajsdf ;iaj df; p9v8 uzoxijcv;ljzdj ; a;sdkf a;ldsfk ; : asdflkj a l;ajsdf : asdf rosdep-0.21.0/test/tree/stacks/invalid/stack.xml000066400000000000000000000003721406544147500215650ustar00rootroot00000000000000 invalid Maintained by Kenneth Conley http://ros.org/wiki/invalid rosdep-0.21.0/test/tree/stacks/just_a_package/000077500000000000000000000000001406544147500212465ustar00rootroot00000000000000rosdep-0.21.0/test/tree/stacks/just_a_package/manifest.xml000066400000000000000000000003661406544147500236030ustar00rootroot00000000000000 just_a_package Ken Conley BSD http://ros.org/wiki/just_a_package rosdep-0.21.0/test/tree/stacks/packageless/000077500000000000000000000000001406544147500205705ustar00rootroot00000000000000rosdep-0.21.0/test/tree/stacks/packageless/stack.xml000066400000000000000000000004021406544147500224130ustar00rootroot00000000000000 packageless Maintained by Ken Conley http://ros.org/wiki/packageless rosdep-0.21.0/test/tree/stacks/stack1/000077500000000000000000000000001406544147500174745ustar00rootroot00000000000000rosdep-0.21.0/test/tree/stacks/stack1/rosdep.yaml000066400000000000000000000004621406544147500216560ustar00rootroot00000000000000stack1_dep1: ubuntu: dep1-ubuntu debian: dep1-debian stack1_dep2: ubuntu: dep2-ubuntu debian: dep2-debian stack1_p1_dep1: ubuntu: p1dep1-ubuntu debian: p1dep1-debian stack1_p1_dep2: ubuntu: p1dep2-ubuntu debian: p1dep2-debian stack1_p2_dep1: ubuntu: p2dep1-ubuntu debian: p2dep1-debian rosdep-0.21.0/test/tree/stacks/stack1/stack.xml000066400000000000000000000003721406544147500213250ustar00rootroot00000000000000 stack1 Maintained by Kenneth Conley BSD http://ros.org/wiki/stack1 rosdep-0.21.0/test/tree/stacks/stack1/stack1_p1/000077500000000000000000000000001406544147500212625ustar00rootroot00000000000000rosdep-0.21.0/test/tree/stacks/stack1/stack1_p1/manifest.xml000066400000000000000000000005231406544147500236120ustar00rootroot00000000000000 stack1_p1 Kenneth Conley BSD http://ros.org/wiki/stack1_p1 rosdep-0.21.0/test/tree/stacks/stack1/stack1_p2/000077500000000000000000000000001406544147500212635ustar00rootroot00000000000000rosdep-0.21.0/test/tree/stacks/stack1/stack1_p2/manifest.xml000066400000000000000000000005611406544147500236150ustar00rootroot00000000000000 stack1_p2 Kenneth Conley BSD http://ros.org/wiki/stack1_p2 rosdep-0.21.0/test/tree/stacks/stack1/stack1_p3/000077500000000000000000000000001406544147500212645ustar00rootroot00000000000000rosdep-0.21.0/test/tree/stacks/stack1/stack1_p3/manifest.xml000066400000000000000000000004141406544147500236130ustar00rootroot00000000000000 stack1_p3 Kenneth Conley BSD http://ros.org/wiki/stack1_p3 rosdep-0.21.0/test/tree/stacks/stackless/000077500000000000000000000000001406544147500203025ustar00rootroot00000000000000rosdep-0.21.0/test/tree/stacks/stackless/manifest.xml000066400000000000000000000003471406544147500226360ustar00rootroot00000000000000 stackless Ken Conley BSD http://ros.org/wiki/stackless rosdep-0.21.0/test/tree/stacks/twin1/000077500000000000000000000000001406544147500173505ustar00rootroot00000000000000rosdep-0.21.0/test/tree/stacks/twin1/manifest.xml000066400000000000000000000004001406544147500216720ustar00rootroot00000000000000 twin1_pkg Ken Conley BSD http://ros.org/wiki/twin1_pkg rosdep-0.21.0/test/tree/stacks/twin1/rosdep.yaml000066400000000000000000000000531406544147500215260ustar00rootroot00000000000000twin: ubuntu: apt: twin1-value rosdep-0.21.0/test/tree/stacks/twin1/stack.xml000066400000000000000000000003701406544147500211770ustar00rootroot00000000000000 twin1 Maintained by Kenneth Conley BSD http://ros.org/wiki/stack1 rosdep-0.21.0/test/tree/stacks/twin2/000077500000000000000000000000001406544147500173515ustar00rootroot00000000000000rosdep-0.21.0/test/tree/stacks/twin2/manifest.xml000066400000000000000000000004001406544147500216730ustar00rootroot00000000000000 twin1_pkg Ken Conley BSD http://ros.org/wiki/twin1_pkg rosdep-0.21.0/test/tree/stacks/twin2/rosdep.yaml000066400000000000000000000000531406544147500215270ustar00rootroot00000000000000twin: ubuntu: apt: twin2-value rosdep-0.21.0/test/tree/stacks/twin2/stack.xml000066400000000000000000000003701406544147500212000ustar00rootroot00000000000000 twin2 Maintained by Kenneth Conley BSD http://ros.org/wiki/stack1