ROS2学习(三).ROS2环境配置

19 篇文章 5 订阅


ROS2在shell环境中使用了组合工作区workspace。
Workspace : 系统上使用ROS2进行开发的位置,跟我们一般的工作区概念是一致的。
核心ROS2工作区被称为底层underlay,其他的本地工作区被称为覆盖层overlay。
通常我们使用ROS2开发时,将同时拥有几个活动的工作区。

官方流程

Configuring your ROS 2 environment1

流程

执行配置脚本

在每个要运行ROS 2命令的终端,执行以下命令:

source /opt/ros/galactic/setup.bash

注意
不同的安装方式该命令的执行路径可能不一致,请注意调整。

将配置命令加入shell启动脚本中

将上述source命令加入shell的默认启动脚本.bashrc中,可以避免每次执行命令的麻烦。

echo "source /opt/ros/galactic/setup.bash" >> ~/.bashrc

注意
~/.bashrc的设置仅对当前登录用户有效。
如果要取消,则从~/.bashrc中去除对应命令即可

将colcon_cd加入shell启动脚本中

colcon_cd命令允许你快速地将现有工作区目录跳转到包的目录。例如
colcon_cd some_ros_package会将您带到~/ ros2_install /src/some_ros_package目录。
简单来说,就是一个ros2专用的路径切换命令工具。
其中colcon-argcomplete.bash是自动补全工具。

echo "source /usr/share/colcon_cd/function/colcon_cd.sh" >> ~/.bashrc
echo "source /usr/share/colcon_argcomplete/hook/colcon-argcomplete.bash" >> ~/.bashrc
echo "export _colcon_cd_root=~/ros2_install" >> ~/.bashrc

注意
在执行上述之前,请先试着执行

source /usr/share/colcon_cd/function/colcon_cd.sh

按照debian binary安装包的安装方法的话,colcon_cd并不会默认被安装。
可以参考下一节colcon安装,先进行colcon相关功能的安装。

colcon安装

如果colcon已经安装过,可以跳过此节。本节参考colcon安装2

我们还是采用apt的方法安装debian包。
ROS工程中已经包含了colcon,因此我们可以选择相应的ROS工程的源。

apt仓库源设置
下述二选一即可

  • ROS源
$ sudo sh -c 'echo "deb [arch=amd64,arm64] http://repo.ros2.org/ubuntu/main `lsb_release -cs` main" > /etc/apt/sources.list.d/ros2-latest.list'
$ curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add -
  • 非ROS源
$ curl -s https://packagecloud.io/install/repositories/dirk-thomas/colcon/script.deb.sh | sudo bash

安装colcon
直接用apt install 安装

$ sudo apt update
$ sudo apt install python3-colcon-common-extensions

安装完后手动执行

source /usr/share/colcon_cd/function/colcon_cd.sh   

看是否安装成功了。
只要确认能执行就好啦。

环境变量检查

上述配置文件将会设定一些操作ROS2所需的环境变量。
但我们还是需要对这些变量是否被正确的设置进行确认,如果没有,请重新执行上面步骤的配置工作。

xh@hp-prodesk-680-g1-twr:~$ printenv | grep -i ROS
ROS_VERSION=2
ROS_PYTHON_VERSION=3
AMENT_PREFIX_PATH=/opt/ros/galactic
PYTHONPATH=/opt/ros/galactic/lib/python3.8/site-packages
_colcon_cd_root=/home/xh/ros2_install
LD_LIBRARY_PATH=/opt/ros/galactic/opt/yaml_cpp_vendor/lib:/opt/ros/galactic/opt/rviz_ogre_vendor/lib:/opt/ros/galactic/lib/x86_64-linux-gnu:/opt/ros/galactic/lib
ROS_LOCALHOST_ONLY=0
PATH=/opt/ros/galactic/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
ROS_DISTRO=galactic

请特别注意以下变量

ROS_VERSION=2
ROS_PYTHON_VERSION=3
ROS_DISTRO=galactic

注意
通过 echo命令加入到 ~/.bashrc的是不会马上生效的,需要新开一个终端。

ROS_DOMAIN_ID变量

ROS_DOMAIN_ID 是ROS的通信域设定,用来标记哪些域之间可以互相通信。
只有相同的ROS_DOMAIN_ID的shell间可以通信。

我们拿原先的例子来理解一下。

验证样例
  1. 不设定ROS_DOMAIN_ID

在一个终端(A)里,启动C++的talker

ros2 run demo_nodes_cpp talker

在另一个终端(B)里,启动Python的listener

ros2 run demo_nodes_py listener

此时 listener终端是可以收到talker终端的消息的。

  1. 两个终端设置不同的ROS_DOMAIN_ID

我们在A终端设置ROS_DOMAIN_ID变量,终端B不设置(或设置为其他值)。

export ROS_DOMAIN_ID=5

在终端A里,启动C++的talker

ros2 run demo_nodes_cpp talker

在终端B里,启动Python的listener

ros2 run demo_nodes_py listener

此时 listener终端就无法收到talker终端的消息了。

  1. 两个终端设置相同的ROS_DOMAIN_ID

我们在B终端也设置同A终端相同的ROS_DOMAIN_ID变量。

export ROS_DOMAIN_ID=5

在终端A里,启动C++的talker

ros2 run demo_nodes_cpp talker

在终端B里,启动Python的listener

ros2 run demo_nodes_py listener

此时 listener终端又可以收到talker终端的消息了。:)

设置

如果仅要设置目前的shell的ROS_DOMAIN_ID,在shell终端输入:

export ROS_DOMAIN_ID=5

如果要在所有的shell终端保持相同的配置,老规矩

echo "export ROS_DOMAIN_ID=5" >> ~/.bashrc

上述5可以换为下述限制条件内的任意值。

限制条件

ROS_DOMAIN_ID一般有两种(short version / long version)。
正常使用推荐short version,在[0, 101]之间进行选择即可。
long version则可以在[0, 232]之间进行选择。
这里暂时不做展开,详情可以参考The ROS_DOMAIN_ID3
后续预计会对这一块做一些说明。

小结

ROS2开发环境需要在使用前被正确配置,配置方法主要有

  1. 在每个打开的shell使用source命令运行设置文件;
  2. 将source命令加入到启动脚本中。

参考


  1. https://docs.ros.org/en/galactic/Tutorials/Configuring-ROS2-Environment.html#id5 ↩︎

  2. https://colcon.readthedocs.io/en/released/user/installation.html# ↩︎

  3. https://docs.ros.org/en/galactic/Concepts/About-Domain-ID.html ↩︎

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值