使用以下命令可以查看ROS默认使用的工作空间:
$ echo $ROS_PACKAGE_PATH
用于从多个版本控制系统维护项目工作空间的命令行工具。wstool是一个操作ROS工作区的命令。 wstool取代了它的前身rosws。wstool提供了基于单个工作空间定义文件(.rosinstall)管理多个本地SCM存储库(支持git,mercurial,subversion,bazaar)的命令。wstool不是重写。它旨在重用大部分的rosws工具代码,从而生成与rosws使用的.rosinstall文件兼容的.rosinstall文件。wstool依赖于vcstools包,并且在过渡期间它还将依赖于rosinstall包(稍后将依赖于该依赖关系)。
$ sudo apt-get install python-wstool
$ sudo pip install -U wstool
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>在没有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
官方用法:
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的包。
sudo apt-get install python-rosinstall
pip install -U rosinstall
pip install -U rosinstall_shellcompletion
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
背景
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 FILES或DIRECTORIES] *参数都可以
规范
通过默认fuerte将在 /opt/ros/fuerte中创建一个.rosinstall文件,其内容类似于:
- setup-file:
local-name: /opt/ros/fuerte/setup.sh
- other:
local-name: /opt/ros/fuerte/share/ros
...
然后,用户可以使用以下命令创建本地ros环境:
因此,生成的本地.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的rosinstall环境中生成的setup.sh理想情况应如下所示:
# setup.sh in ros env
.
# lines depending on all of .rosinstall
export ROS_PACKAGE_PATH=some/local/path:/opt/ros/electric/stacks
合理
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根目录中的文件夹。
rosinstall_generator生成rosinstall文件,其中包含有关ROS包/堆栈的存储库的信息。
sudo apt-get update
sudo apt-get install python-rosinstall-generator
sudo pip install rosinstall-generator
命令行程序由以下方式调用:
您可以传递包名称,干栈名称以及变体(仅在调用的包下面)。 变量被分解为一组包和/或堆栈。
默认情况下,它会将为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分发。
从发布的源构建变体的所有包
要生成一个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
rosdep是一个可用于安装ROS包所需的系统依赖项的工具。
As of ROS fuerte, rosdep现在是一个独立的工具,您可以单独下载和使用: External rosdep documentation.
4.2.1安装:
因为它会自动更快地更新。
在非ubuntu平台上
4.2.2初始化:
需要至少调用一次或更新时(可能有新的需要定义,你的本地安装的rosdep还不知道):
不要使用sudo运行rosdep更新。它不是必需的,稍后会导致权限错误。
4.2.3使用rosdep:
安装特定包的依赖关系
您可以使用rosdep和catkin在ROS存储库中构建任何包。假设你想要构建一个名为AMAZING_PACKAGE的包,之前你没有在你的机器上构建。
安装工作空间中所有包的依赖关系
这个用例展示了rosdep更强大的功能。 转到catkin工作区的顶级目录,其中包含您要使用的ROS包的源代码。然后运行:
此命令可以神奇地安装catkin工作区中的软件包所依赖但在您的计算机上缺少的所有软件包。
使用源安装的rosdep
克隆开发存储库。这不需要在ROS_PACKAGE_PATH中的目录中完成。然后在其顶级目录中,源setup.sh。具体:
See changelog in the development repository.
View or file new issues on github
将rosdep依赖项添加到包中
将系统依赖项添加到catkin / package.xml文件中的格式如下所示
wxpython
log4cxx
wxpython
log4cxx
注意事项:
应该小心地引入新的rosdep依赖项,因为这意味着代码的用户将下载安装这些第三方依赖项。 您还必须注意调查其他ROS堆栈,并确保您引入的依赖项不会产生不兼容性。