ros wstool .rosinstall rosinstall_generator rosdep

查看ROS的默认空间:

使用以下命令可以查看ROS默认使用的工作空间:

$ echo $ROS_PACKAGE_PATH

1.wstool

用于从多个版本控制系统维护项目工作空间的命令行工具。wstool是一个操作ROS工作区的命令。 wstool取代了它的前身rosws。wstool提供了基于单个工作空间定义文件(.rosinstall)管理多个本地SCM存储库(支持git,mercurial,subversion,bazaar)的命令。wstool不是重写。它旨在重用大部分的rosws工具代码,从而生成与rosws使用的.rosinstall文件兼容的.rosinstall文件。wstool依赖于vcstools包,并且在过渡期间它还将依赖于rosinstall包(稍后将依赖于该依赖关系)。

1.1.安装

$ sudo apt-get install python-wstool
$ sudo pip install -U wstool

1.2.从rosws和rosbuild的变化

rosbuild和rosws使用ROS_WORKSPACE环境变量来确定您正在使用的工作空间.

catkin从当前工作目录中确定这一点。 使用-t参数指定wstool的工作空间,wstool工作空间的根目录是catkin源目录的根目录:

~/ros_catkin_ws/      <-- Invoke catkin_make from here
├── src/              <-- Use this path for wstool -t
│   ├── repository1/
│   │   ├── .git/
│   │   └── my_files
│   ├── repository2/
│   │   ├── .git/
│   │   └── my_other_files
│   └── .rosinstall
├── devel/
└── build/

rosws生成setup。* sh文件在使用命令“init”或“regenerate”调用时,而CMakeLists.txt则在传递选项“--catkin”时生成。 两者都对ROS生态系统具有隐含的依赖性。 wstool避免了这些依赖关系,并将其留给用户或其他工具(例如catkin)来创建这样的环境设置文件。同样,工作区覆盖由catkin而不是wstool管理。 这意味着您不应将工作区底层放在rosinstall文件中,或使用参考底图初始化工作区。

1.3.使用 wstool

1>在没有rosinstall文件的情况下初始化工作区

这将初始化一个空工作区。如果您有一个想要基于工作区的rosinstall文件,请跳过下面的rosinstall文件初始化工作区
$ wstool init src
如果要将rosinstall文件添加到工作区,请继续下面的“合并其他rosinstall文件”。

2>从rosinstall文件初始化工作区

如果您已初始化工作区,请跳过此步骤。如果要将rosinstall文件添加到工作区,请继续下面的“合并其他rosinstall文件”
$ wstool init src PATH_TO_ROSINSTALL_FILE.rosinstall
如果要将rosinstall文件添加到工作区,请继续下面的“合并其他rosinstall文件”

3>合并其他rosinstall文件

对于要添加到工作区的每个rosinstall文件,请运行此命令
$ wstool merge -t src PATH_TO_ROSINSTALL_FILE.rosinstall

4>跟新工空间

创建工作区并添加存储库后,应更新它以下载最新版本。
$ wstool update -t src

1.4.wstool 命令

官方用法: 

  • wstool CMD [ARGS] [OPTIONS]  wstool将尝试从上下文推断安装路径
  • help 帮助提供命令帮助
  • init 将目录设置为工作空间
  • set 从工作区配置中添加或更改一个条目
  • merge 将您的工作区与另一个配置集合并
  • remove(rm)从工作区配置中删除条目,而不删除文件
  • scrape 以交互方式将所有找到的非托管VCS子文件夹添加到工作区
  • update (up)  更新(更新)更新或检查一些配置元素
  • info  一些条目的概述
  • status(st)  打印某些SCM控制条目中文件的更改状态
  • diff(di)在一些SCM控制的条目上打印差异
  • foreach  在给定条目中运行shell命令

2.rosinstall

  • 使用rosinstall,你可以紧使用一个命令跟新各种SCM(SVN,Mercurial,git,Bazaar)多个文件夹
  • rosinstall包提供了一个Python API,用于与源代码工作区以及一组命令行工具进行交互。 Rosinstall利用vcstools包进行源代码控制,并将其状态存储在.rosinstall文件中。
  • rosinstall是为了帮助ROS软件而开发的,但它没有ROS的安装依赖性。 它为ROS环境提供支持,因此在运行时对ROS进行了一些假设,但这些假设很容易被删除,即使没有安装ROS,rosws也能提供所有服务。
  • 目标是大部分rosinstall有一天成为ROS不可知的工具。
rosinstall执行以下操作:
  1.将所有URI合并到PATH中的新的或现有的.rosinstall文件中
  2.检出或更新所有版本控制的URI
  3.如果从源安装了ros堆栈,请在结帐或更新后调用rosmake。
  4.生成/覆盖更新的安装文件

如果使用--catkin模式运行:

  1.将所有URI合并到PATH中的新的或现有的.rosinstall文件中
  2.检出或更新所有版本控制的URI
  4.生成/覆盖更新的安装文件,并在根目录下创建CMakeLists.txt
URI可以是远程.rosinstall文件的网址,本地.rosinstall文件,git,svn,bzr,hg URI
或其他(本地目录)以后的URI将影响早期URI的包。

2.1.安装

sudo apt-get install python-rosinstall
pip install -U rosinstall
pip install -U rosinstall_shellcompletion

2.2.Rosinstall文件格式

1.下面是一个示例rosinstall语法,其中包含大多数可能排列的示例:

- svn: {local-name: some/local/path2, uri: /some/local/uri}
- hg: {local-name: some/local/path3, uri: http://some/uri, version: 123}
- git: {local-name: /some/local/aboslute/path, uri: http://some/uri, version: 123}
- bzr: {local-name: some/local/path4, uri: http://some/uri, version: 123}
- setup-file:
    local-name: /opt/ros/fuerte/setup.sh
- other:
    local-name: /opt/ros/fuerte/share/ros

2.4.wstool 命令

  •   -h, -  help  显示此帮助消息并退出
  •   -c, -  catkin  声明这是一个catkin 编译。
  •   --cmake-prefix-path=CATKINPP  在这里设置CMAKE_PREFIX_PATH,意味着--catkin
  •   --version  显示版本信息
  •   --verbose  显示更多信息
  •   -n, --nobuild  跳过ROS堆栈的编译步骤
  •   --rosdep-yes  通过--rosdep-yes到rosmake
  •   --continue-on-error 持续检测错误
  •   --delete-changed-uris   在更改之前删除目录的本地URI副本
  •   --abort-changed-uris  如果检测到uri,则中止
  •   --backup-changed-uris=BACKUP_CHANGED
  •                         在更改之前备份目录的本地副本uri到这个目录。
  •   --diff  显示所有SCM条目的组合差异
  •   --status  显示所有SCM条目的组合状态命令
  •   --status-untracked  显示所有SCM条目的组合状态命令,还显示未跟踪的文件
  •   -j JOBS, --parallel=JOBS   用于安装的并行线程数
  •   --generate-versioned-rosinstall=GENERATE_VERSIONED 生成版本化的rosinstall文件

2.5.文档说明

背景
rosinstall工具[1]维护一组已排序的文件夹,基于.rosinstall文件,该文件指出所有本地文件夹,以及每个可能用于该文件夹的版本控制系统(vcs)和远程仓库的uri。

电气中这样的.rosinstall文件的示例如下所示:

# .rosinstall in ros env
- other: {local-name: /opt/ros/electric/ros}
- other: {local-name: /opt/ros/electric/stacks}
- svn: {local-name: some/local/path, uri: some/uri, version: 123}

rosinstall还为shell初始化生成一组文件,定义了一个工作环境。 这些是setup.sh,setup.bash,setup.zsh。 必不可少的是setup.sh,在电气中看起来像这样:

# setup.sh in ros env
# distro-dependent lines
export ROS_ROOT=/opt/ros/electric/ros
export PATH=$ROS_ROOT/bin:$PATH
export PYTHONPATH=$ROS_ROOT/core/roslib/src:$PYTHONPATH
if [ ! "$ROS_MASTER_URI" ] ; then export ROS_MASTER_URI=http://localhost:11311 ; fi
# lines depending on all of .rosinstall
export ROS_PACKAGE_PATH=some/local/path:/opt/ros/electric/stacks

rosinstall永远不会读取setup.sh,每次rosinstall成功运行时都会覆盖它,因此到目前为止它不能在rosinstall的运行之间存储信息。rosinstall的工作方式如下:如果有的话,它会读取给定的.rosinstall,将其与任何提供的命令行参数合并,然后写入新的.rosinstall和新的setup.sh文件。当前的rosinstall命令行界面(CLI)语法如下:

  • $ rosinstall [OPTIONS] INSTALL_PATH [ROSINSTALL FILES OR DIRECTORIES]*

这与设置新环境以及更新或更改环境相同。[ROSINSTALL FILES或DIRECTORIES] *参数都可以

  • 本地文件
  • 包含.rosinstall文件的本地目录
  • 一个远程文件uri
  1. 首次在INSTALL_PATH中调用rosinstall时,其中一个参数必须包含ros安装的路径,否则rosinstall将失败并显示错误。
  2. 请注意,参数的顺序是它们将附加到ROS_PACKAGE_PATH的相反顺序,对于覆盖包,这意味着后面参数的位置中的包将覆盖先前参数的位置中的包。
  3. rosinstall的一个重要用例是用户可以处理几个ROS发行版,并经常在发行版和环境之间切换。 rosinstall生成的设置文件旨在通过获取给定的setup.sh来实现环境(和发行版)之间的快速转换。

规范

通过默认fuerte将在 /opt/ros/fuerte中创建一个.rosinstall文件,其内容类似于:

- setup-file:
    local-name: /opt/ros/fuerte/setup.sh
- other:
    local-name: /opt/ros/fuerte/share/ros
  ...

然后,用户可以使用以下命令创建本地ros环境:

  • $ rosinstall ~/fuerte foo /opt/ros/fuerte bar

因此,生成的本地.rosinstall将如下所示:

- other: {local-name: bar}
- other: {local-name: /opt/ros/fuerte/share/ros}
- setup-file: {local-name: /opt/ros/fuerte/setup.sh}
  ...
- other: {local-name: foo}

本地setup.sh将如下所示:

. /opt/ros/fuerte/setup.sh
export ROS_PACKAGE_PATH=bar:...:/opt/ros/fuerte/share/ros:foo

动机

  • 对fuerte中ROS构建系统的更改导致当前的rosinstall方法失败[2]。
  • 上面提到的setup.sh是一个自包含的脚本。 这导致了fuerte中的几个问题,其中更多的环境变量必须由/opt/ros/fuerte/etc/catkin/profile.d中默认维护的几个脚本来设置,但是可以放在不同的位置,并且rosinstall应该 不可知论者。
  •       更好的方法似乎是让rosinstall只修改ROS_PACKAGE_PATH变量,同时让ros的安装过程生成并维护一个setup.sh,它设置这个发行版的变量。
  •       然后,一个rosinstall环境的.rosinstall需要指向发行版的setup.sh,这样生成的本地setup.sh可以先找到那个,然后修改ROS_PACKAGE_PATH。

在fuerte的rosinstall环境中生成的setup.sh理想情况应如下所示:

# setup.sh in ros env
. <path/to/distro/setup.sh>
# lines depending on all of .rosinstall
export ROS_PACKAGE_PATH=some/local/path:/opt/ros/electric/stacks
  • 从上面的电气中的setup.sh可以看出,依赖于发行版的部分现在可以通过发布发行版的setup.sh来取代。
  • 现在出现的问题是通常识别要包含的发行版setup.sh所在的位置。 rosinstall目前仅在其.rosinstall中存储信息,目前仅限于将路径存储到一组本地文件夹,所有这些文件夹当前都插入到ROS_PACKAGE_PATH中。
  • 相对于.rosinstall中包含的任何文件夹,发行版setup.sh也不一致。因此,目前没有办法与当前的rosinstall功能一致,以收集和存储发行版的setup.sh的位置。因此,REP声明对rosinstall的必要修改,以获取和存储发行版setup.sh文件的位置,以用于生成环境setup.sh文件。

合理

export ROS_ROOT=/opt/ros/electric/ros
export PATH=$ROS_ROOT/bin:$PATH
export PYTHONPATH=$ROS_ROOT/core/roslib/src:$PYTHONPATH
if [ ! "$ROS_MASTER_URI" ] ; then export ROS_MASTER_URI=http://localhost:11311 ; fi
export PATH=$ROS_ROOT/bin:$PATH
export PYTHONPATH=$ROS_ROOT/core/roslib/src:$PYTHONPATH

非官方文件格式 柳树车库构建系统依赖于rosinstall文件格式的这两个扩展。基本元素类型包括'tar',并且可以附加元属性。 例:

- svn:
  local-name: rosorg
  meta:
    repo-name: ros-docs
  uri: https://code.ros.org/svn/ros/stacks/rosorg/trunk
- tar:
  local-name: foo.tar.bvz2
  version: foo-1.2.0

meta元素没有进一步的rosinstall语义,它只是通过。 tar元素是vcstools不支持但必需的特性,具有特殊的语义,'version'必须引用tar根目录中的文件夹。

3.rosinstall_generator

rosinstall_generator生成rosinstall文件,其中包含有关ROS包/堆栈的存储库的信息。

3.1.安装

sudo apt-get update
sudo apt-get install python-rosinstall-generator
sudo pip install rosinstall-generator

3.2.用法

命令行程序由以下方式调用:

  • rosinstall_generator PKGNAME [PKGNAME ...]

您可以传递包名称,干栈名称以及变体(仅在调用的包下面)。 变量被分解为一组包和/或堆栈。

默认情况下,它会将为rosinstall格式化的存储库信息输出到控制台。 通常,您希望将结果通过管道传输到.rosinstall文件中。

通过命令行选项,您可以自定义提供rosinstall信息的包:

--deps  包括递归依赖项的所有存储库。
--deps-up-to PKGNAME [PKGNAME ...]   在传递的包和最多包之间包含存储库(请参阅下面的示例)。

--deps-only`  排除在命令行上传入的包仅返回依赖项。

此外,您可以限制结果集:

--exclude PKGNAME [PKGNAME ...]  排除特定包(在使用--deps *选项时也排除它们的依赖关系)。

--wet-only  紧包含wet包。
--dry-only   仅包括干堆。

在可以指定包名称的任何地方,您还可以使用以下关键字,这些关键字将扩展为特定的包集:

ALL  扩展到所有已发布包的集合。
RPP  扩展到当前环境中找到的包集(通过搜索ROS_PACKAGE_PATH)。

如果您没有源环境(ROS_DISTRO未设置),则还必须使用选项--rosdistro DISTRO_NAME指定ROS分发。

3.3.例如

从发布的源构建变体的所有包

要生成一个rosinstall文件,其中包含用于Hydro调用的desktop-full变体中包含的所有包和堆栈:

$ rosinstall_generator desktop_full --rosdistro hydro --deps > hydro-desktop-full.rosinstall

因为对于Groovy而言,并非所有的desktop_full软件包都被catkinized,你可能需要为湿和干生成两个单独的rosinstall文件。因此,您可以将这两组包签出到不同的位置

$ rosinstall_generator desktop_full --rosdistro groovy --deps --wet-only > groovy-desktop-full-wet.rosinstall
$ rosinstall_generator desktop_full --rosdistro groovy --deps --dry-only > groovy-desktop-full-dry.rosinstall

当前在环境中的所有包都来自已发布的source

要通过ROS_PACKAGE_PATH调用生成包含所有包和堆栈的rosinstall文件:

$ rosinstall_generator RPP

设置当前环境中缺少的一组包

$ rosinstall_generator rviz --deps --exclude RPP

所有ROS发行包都来自已发布的来源

生成一个rosinstall文件,其中包含特定ROS分发调用中可用的所有包和堆栈:

$ rosinstall_generator ALL --rosdistro hydro

结合 wstool / rosws

要将包含其所有依赖项的包/堆栈添加到由wstool(对于wet)或

(对于dry)管理的现有工作空间,请调用:

# assuming the wet workspace is in the relative folder "src"
$ rosinstall_generator ros_tutorials --rosdistro hydro --deps | wstool merge -t src -
$ wstool update -t src -j8
# assuming the dry workspace is in the current folder
$ rosinstall_generator navigation --rosdistro groovy --deps | rosws merge -
$ rosws update -j8

4.rosdep

rosdep是一个可用于安装ROS包所需的系统依赖项的工具。

4.1.新文件

As of ROS fuerte, rosdep现在是一个独立的工具,您可以单独下载和使用: External rosdep documentation.

4.2.快速参考

4.2.1安装:   

因为它会自动更快地更新。

  • sudo apt-get install python-rosdep

在非ubuntu平台上

  • sudo pip install -U rosdep

4.2.2初始化:

  • sudo rosdep init

需要至少调用一次或更新时(可能有新的需要定义,你的本地安装的rosdep还不知道):

不要使用sudo运行rosdep更新。它不是必需的,稍后会导致权限错误。

  • rosdep update

4.2.3使用rosdep:

安装特定包的依赖关系

您可以使用rosdep和catkin在ROS存储库中构建任何包。假设你想要构建一个名为AMAZING_PACKAGE的包,之前你没有在你的机器上构建。

  • rosdep install AMAZING_PACKAGE

安装工作空间中所有包的依赖关系

这个用例展示了rosdep更强大的功能。 转到catkin工作区的顶级目录,其中包含您要使用的ROS包的源代码。然后运行:

  • rosdep install --from-paths src --ignore-src -r -y

此命令可以神奇地安装catkin工作区中的软件包所依赖但在您的计算机上缺少的所有软件包。

使用源安装的rosdep

克隆开发存储库。这不需要在ROS_PACKAGE_PATH中的目录中完成。然后在其顶级目录中,源setup.sh。具体:

  • $ git clone https://github.com/ros-infrastructure/rosdep
  • $ cd rosdep
  • $ source setup.sh

4.3.更改列表

See changelog in the development repository.

4.4.错误/功能请求

View or file new issues on github

4.5.如何向程序包添加系统依赖项

将rosdep依赖项添加到包中

将系统依赖项添加到catkin / package.xml文件中的格式如下所示

<build_depend>wxpython</build_depend>
<build_depend>log4cxx</build_depend>
<run_depend>wxpython</run_depend>
<run_depend>log4cxx</run_depend>
  1. 必须将这些元素添加到包的package.xml中。 唯一要改变的是系统依赖项的名称。 此名称将在以YAML文件中定义的rosdep定义中查找,其主要集合托管在GitHub上:https://github.com/ros/rosdistro/tree/master/rosdep
  2. 如果你需要的系统依赖关系在rosdep中尚不存在,你可以在这里贡献一个:http://docs.ros.org/independent/api/rosdep/html/contributing_rules.html

注意事项:

应该小心地引入新的rosdep依赖项,因为这意味着代码的用户将下载安装这些第三方依赖项。 您还必须注意调查其他ROS堆栈,并确保您引入的依赖项不会产生不兼容性。

  • 10
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值