在Ubuntu Linux上构建ROS 2
目录
系统要求
目前基于Debian的Foxy Fitzroy目标平台是: [小鱼@5477]
第1层: Ubuntu Linux - Focal Fossa (20.04) 64位 [Alyssa@5478]
第3层: Debian Linux - Buster (10) 64位
其他支持级别不同的Linux平台包括:
系统设置
设置语言区域 [Alyssa@5485]
确保你有一个支持 UTF-8
的语言区域。如果您处于最小环境中 (例如docker容器),则区域设置可能是最小的,例如 POSIX
。我们使用以下设置进行测试。但是,如果您使用不同的UTF-8支持的语言区域也是没有问题的。 [Alyssa@5486]
locale # check for UTF-8
sudo apt update && sudo apt install locales
sudo locale-gen en_US en_US.UTF-8
sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
export LANG=en_US.UTF-8
locale # verify settings
添加ROS 2 apt仓库
您需要将ROS 2 apt仓库添加到您的系统中。为此,首先使用如下apt指令授权我们的GPG密钥: [Alyssa@5488]
sudo apt update && sudo apt install curl gnupg2 lsb-release
sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg
然后将仓库添加到源文件列表中:
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(source /etc/os-release && echo $UBUNTU_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null
安装开发工具和ROS工具 [Alyssa@5490]
sudo apt update && sudo apt install -y \
build-essential \
cmake \
git \
libbullet-dev \
python3-colcon-common-extensions \
python3-flake8 \
python3-pip \
python3-pytest-cov \
python3-rosdep \
python3-setuptools \
python3-vcstool \
wget
# install some pip packages needed for testing
python3 -m pip install -U \
argcomplete \
flake8-blind-except \
flake8-builtins \
flake8-class-newline \
flake8-comprehensions \
flake8-deprecated \
flake8-docstrings \
flake8-import-order \
flake8-quotes \
pytest-repeat \
pytest-rerunfailures \
pytest
# install Fast-RTPS dependencies
sudo apt install --no-install-recommends -y \
libasio-dev \
libtinyxml2-dev
# install Cyclone DDS dependencies
sudo apt install --no-install-recommends -y \
libcunit1-dev
获取ROS 2代码
创建工作空间并克隆所有仓库: [Alyssa@5492]
mkdir -p ~/ros2_foxy/src
cd ~/ros2_foxy
wget https://raw.githubusercontent.com/ros2/ros2/foxy/ros2.repos
vcs import src < ros2.repos
使用rosdep安装依赖项
sudo rosdep init
rosdep update
rosdep install --from-paths src --ignore-src -y --skip-keys "fastcdr rti-connext-dds-5.3.1 urdfdom_headers"
注意: 如果你使用的是一个基于Ubuntu的发行版 (比如Linux Mint),但没有标识自己的版本,你会收到一条错误信息,比如 Unsupported OS [mint]
。在这种情况下,将 “-- os = ubuntu: focal” 附加到上述命令中。 [Alyssa@5494]
安装额外的DDS实现 (可选) [待校准@5495]
如果你想使用除了默认的eProsima的快速RTPS,以外的DDS或RTPS供应商,你可以在 here 找到说明。 [Alyssa@5496]
在工作区中编译代码 [Alyssa@5497]
如果您已经以另一种方式安装了ROS 2 (通过Debians或二进制发行版),确保在没有其他安装源文件的新环境中运行以下命令。另外,请确保您的 .bashrc
中没有 “source /opt/ros/$ {ros_diso}/setup.Bash”。您可以使用命令 “printenv | grep -i ROS” 确定ROS 2还没有进行环境配置。输出应为空。 [Alyssa@5498]
有关使用ROS工作空间的更多信息,请参见 this tutorial 。 [Alyssa@5499]
cd ~/ros2_foxy/
colcon build --symlink-install
注意: 如果您在编译所有示例时遇到问题,并且这使您无法成功完成编译,你可以像使用 CATKIN_IGNORE 的语法一样使用 COLCON_IGNORE
命令忽略子树或删除文件夹工作区。举个例子: 您希望避免安装大型的tcl库。那么简单地在 cam2image
例程目录中运行 touch COLCON_IGNORE
,把它排除在构建过程之外即可。 [小鱼@5500]
尝试运行一些例子 [Alyssa@5504]
在一个终端中,source安装文件,然后运行一个c++ talker
: [Alyssa@5505]
. ~/ros2_foxy/install/local_setup.bash
ros2 run demo_nodes_cpp talker
在另一个终端中,source安装文件,然后运行一个Python listener
: [Alyssa@5506]
. ~/ros2_foxy/install/local_setup.bash
ros2 run demo_nodes_py listener
你应该看到了 talker
说这是 Publishing
消息 ,listener
说 I heard
这些消息。这证明了C++和Python的APIs都是正常工作的。万岁! [Alyssa@5507]
使用ROS 1 bridge
ROS 1bridge可以连接从ROS 1到ROS 2的话题,反之亦然。看看这个专门的文献 documentation 如何编译和使用ROS 1bridge。 [Alyssa@5511]
附加RMW实现 (可选)
ROS 2使用的默认中间件是 Fast-RTPS
,但中间件 (RMW) 可以在运行时进行替换。查看 guide 了解如何使用多个RMWs。 [Alyssa@5513]
备用编译器 [待校准@5514]
使用除gcc之外的其他编译器编译ROS 2也很容易。如果您将环境变量 CC
和 CXX
分别设置为可用的C和C + + 编译器去生成可执行文件,并依次重新触发CMake配置 (通过使用 --force-cmake-config
或删除您想要重新编译的包),CMake将使用不同的编译器重新配置。 [Alyssa@5515]
Clang
检测并且使用Clang去配置CMake,请执行以下操作: [Alyssa@5517]
sudo apt install clang
export CC=clang
export CXX=clang++
colcon build --cmake-force-configure
了解最新情况 [Alyssa@5518]
请参阅 维护ROS 2Foxy源文件的检出 以定期的刷新安装源。 [Alyssa@5519]
卸载
如果你按照上面的指示用colcon安装了你的工作空间, "uninstalling" 可能只是打开一个新的终端,而没有source工作空间的
setup
文件。因此,您的环境就会表现得好像您的系统上没有安装Foxy。 [Alyssa@5523]如果您还打算释放所有空间,则可以使用以下命令删除整个工作空间的目录: [Alyssa@5524]
rm -rf ~/ros2_foxy