ROS学习笔记27(ROS的环境变量)

您可以设置许多环境变量来影响ROS的行为。其中,最重要的是ROS_MASTER_URI,ROS_ROOT和ROS_PACKAGE_PATH,因为它们在系统中常用,并且在文档中经常提到。

环境变量在ROS中扮演各种角色:

  • 查找包:首先,ROS_ROOT和ROS_PACKAGE_PATH使ROS能够在文件系统中找到堆栈。您还必须设置PYTHONPATH,以便Python解释器可以找到ROS库。

  • 影响节点运行时:还有一些影响节点运行方式的 ROS环境变量。ROS_MASTER_URI是一个重要的环境变量,告诉一个节点,哪一个是Master。ROS_IP和ROS_HOSTNAME影响节点的网络地址,ROS_NAMESPACE允许您更改其命名空间。ROS_LOG_DIR允许您设置写入日志文件的目录。Many of these can be overridden by Remapping Arguments as well, which have precedence over environment variables.

  • 修改构建系统:ROS_BINDEPS_PATH,ROS_BOOST_ROOT,ROS_PARALLEL_JOBS和ROS_LANG_DISABLE会影响到哪里找到库的位置,库的构建方式以及构建哪一个库。

下面更详细地描述这些环境变量和更多。

必需的ROS环境变量

大多数系统也会设置ROS_PACKAGE_PATH,但ROS唯一需要的环境变量是ROS_ROOT,ROS_MASTER_URI和PYTHONPATH。默认情况下,这些是通过获取/opt/ros/fuerte/setup.bash自动为您设置的。

1 ROS_ROOT

ROS_ROOT设置ROS核心软件包的安装位置。

export ROS_ROOT=/home/user/ros/ros
export PATH=$ROS_ROOT/bin:$PATH

2 ROS_MASTER_URI

ROS_MASTER_URI是一个必需的设置,告诉节点他们可以在哪里找到Master。它设置为master的XML-RPC URI。使用localhost时应特别小心,因为这会导致远程启动节点的意外行为。

export ROS_MASTER_URI=http://mia:11311/

3 PYTHONPATH

ROS要求更新您的PYTHONPATH,即使您不使用Python编程!许多ROS基础结构工具依赖于Python,需要访问roslib包以进行引导。

export PYTHONPATH=$PYTHONPATH:$ROS_ROOT/core/roslib/src

其他PATH环境变量

1 ROS_PACKAGE_PATH

ROS_PACKAGE_PATH是一个可选但非常常见的环境变量,允许您从source向环境添加更多ROS包。ROS_PACKAGE_PATH可以由一个或多个由标准OS路径分隔符分隔的路径组成(累死Unix系统上的':')。这些有序路径告诉ROS系统在哪里搜索更多的ROS包。如果有相同名称的多个包,ROS会选择上出现的一个ROS_PACKAGE_PATH 。

export ROS_PACKAGE_PATH=/home/user/ros/ros-pkg:/another/path

请注意,ROS_PACKAGE_PATH中的每个条目都是递归搜索的 - 将找到命名路径下的所有ROS包。

随着catkin的引入,ROS_PACKAGE_PATH变得过时,并且仅为了向后兼容rosbuild包而保留。

系统数据环境变量

1 ROS_HOME

默认情况下,ROS将数据写入〜/ .ros。可以通过设置ROS_HOME来更改此位置。You can also change the location of certain individual directories in ~/.ros (e.g. ROS_TEST_RESULTS_DIR, ROS_LOG_DIR).

2 ROS_LOG_DIR

默认情况下,ROS将内部日志文件写入ROS_HOME/log。如果此位置不可写入ROS,或者您希望将日志文件写入其他位置,请将ROS_LOG_DIR设置为该路径。

3 ROS_TEST_RESULTS_DIR

应该写入测试结果的目录。

额外的Bash环境变量

1 ROS_LOCATIONS

ROS_LOCATIONS是一个可选的环境变量,它为有用的位置提供keyed names。它是:密钥位置对的分隔列表。每个密钥位置对由=分隔。例如:

export ROS_LOCATIONS="rospkg=/path/to/rospkg:stairpkg=/path/to/stairpkg"

然后可以在诸如roscd之类的工具中使用这些键名。

2 ROS_WORKSPACE

ROS_WORKSPACE由rosinstall/rosws工具引入,它由setup.sh设置,由创建工作区时这些工具生成。它指向工作空间的文件夹,并由rosws命令使用,并作为这个命令的默认目标。

fuerte中的roscd工具被更改为在没有参数的情况下调用时使用该变量。以前它默认改为ROS_ROOT。

节点环境变量

1 ROS_IP/ROS_HOSTNAME

ROS_IP和ROS_HOSTNAME是可选的环境变量,用于设置ROS 节点或工具的声明的网络地址。这两个是互斥的,如果两者都设置了ROS_HOSTNAME将优先。使用ROS_IP如果你指定一个IP地址,并ROS_HOSTNAME用于指定主机名。当ROS组件向Master或其他组件报告URI时,将使用此值。仅当您有多个计算机地址并需要强制ROS到特定地址时才需要此设置。

With the exception of 'localhost', it does not affect the actual bound address as ROS components bind to all available network interfaces. If the value is set to localhost, the ROS component will bind only to the loopback interface.如果该值设置为localhost,则ROS组件将仅绑定到 loopback 接口,这将阻止远程组件与本地组件通信。

2 ROS_NAMESPACE

ROS_NAMESPACE允许您节点push down到命名空间。节点中的所有名称都将相对于此值进行解析,包括重新映射的名称。

3 ROSCONSOLE_CONFIG_FILE

这是一个roscpp特定的环境变量。rosconsole允许您定义将由logCcxx使用的配置文件,该文件ROSCONSOLE_CONFIG_FILE环境变量定义。此配置文件中定义的任何内容都将覆盖默认配置文件。

有关更多信息,请参见http://ros.org/doc/api/rosconsole/html/index.html

4 控制台输出格式

rosconsole允许您通过ROSCONSOLE_FORMAT环境变量指定您希望其输出显示在控制台输出中的方式。默认值相当于:

export ROSCONSOLE_FORMAT='[${severity}] [${time}]: ${message}'

有关更多信息,请参见http://ros.org/doc/api/rosconsole/html/index.html

5 ROS_PYTHON_LOG_CONFIG_FILE

这特定于rospyrosmasterroslaunchrostest。对于这些工具,您可以定义自己的Python 日志配置文件,而不是默认的配置文件,该文件存储在$ ROS_ROOT / config / python_logging.conf中。有关更多信息,请参阅Python 日志记录文档:

http://docs.python.org/library/logging.html

构建系统环境变量

为了更好地理解这些环境变量,请参阅ROS构建系统一节

1 ROS_BOOST_ROOT

ROS_BOOST_ROOT是一个可选的环境变量,可让您覆盖搜索boost的位置。如果未设置ROS_BOOST_ROOT,则默认使用ROS_BINDEPS_PATH

2 ROS_PARALLEL_JOBS

此变量的值(如果已设置)在构建包时传递给make。这个想法是让你开发一个多处理器的机器。例如,如果您有8个处理器/核心并希望尽可能多地运行并行作业,只要系统负载小于8,通过将作业限制为8,可以防止在启动时出现过冲:

export ROS_PARALLEL_JOBS='-j8 -l8'

或者,您可以将-j标志与参数一起使用,以并行运行多达8个作业,与系统负载无关:

export ROS_PARALLEL_JOBS = -j8

我们强烈建议使用 -l 标志来设置与并行性相关的系统负载限制。大型构建中过多的并行性会耗尽系统内存。

您可以接受的系统负载取决于您拥有的核心数: http://blog.scoutapp.com/articles/2009/07/31/understanding-load-averages

因此8可能适用于具有8个核心的机器。

3 ROS_LANG_DISABLE

应禁用的客户端库的以冒号分隔的程序包名称列表。此列表中的包不会发生消息生成。例如:

export ROS_LANG_DISABLE = roslisp:rosjava

Groovy中的新功能 如果负责为特定语言生成消息的包使用catkin(对于Groovy中的大多数消息生成器都是如此),包名称应该是实际生成消息的包。例如:

export ROS_LANG_DISABLE = genlisp:genjava

请注意,在禁用语言之前,您应该首先确定您使用的所有代码都不需要该语言的绑定。

4 ROS_OS_OVERRIDE

格式:“OS_NAME:OS_VERSION_STRING”这将强制它检测Ubuntu Lucid:

export ROS_OS_OVERRIDE = ubuntu:10.04

如果已定义,则将覆盖OS的自动检测。当调试外来平台上的rosdep依赖关系,当平台实际上非常相似并且可能需要强制,或者当然自动检测失败时,这可能很有用。

猜你喜欢

转载自blog.csdn.net/qq_27806947/article/details/85237557