ROS 安装详细教程 —— Ubuntu22.0.4 LTS 安装
ROS 安装详细教程 —— Ubuntu22.0.4 LTS 安装
ROS 简介
官方文档对 ROS 的介绍如下:
The Robot Operating System (ROS) is a set of software libraries and tools that help you build robot applications. From drivers to state-of-the-art algorithms, and with powerful developer tools, ROS has what you need for your next robotics project. And it's all open source.
简单来说 ROS 就是一款开源的机器人操作系统,可以实现在 Linux 或 Dock 下安装并进行使用。这里我们选择在 Ubuntu 22.04LTS 下进行安装。
版本选择
ROS 目前主要支持 Linux 和 MacOS 系统,新发布的 ROS2 也支持 Windows 和 RTOS 系统。
对 ROS 兼容性最好的当属 Ubuntu 系统。从 ROS 发布以来,每版的 Ubuntu 系统版本都有与之对应 ROS 版本的,每一版 ROS 都有其对应版本的 Ubuntu 版本,切记不可随便装。
ROS 和 Ubuntu 之间的版本对应关系如下:
Ubuntu | ROS 1.0 | ROS 2.0 |
---|---|---|
16.04 LTS | Kinetic LTS | Ardent |
18.04 LTS | Melodic LTS | Dashing LTS |
20.04 LTS | Noetic LTS | Foxy LTS |
22.04 LTS | Noetic Ninjemys | Humble Hawksbill |
我们使用的系统是 ubuntu 22.04 LTS ,所以这里选择对应的版本
安装过程
由于 ROS1 对 Ubuntu 的支持只到 20.04,如果要在 22.04 上安装 ROS1 只能从源码编译安装
ROS1 源码编译安装
添加源
由于 ROS1 官网不支持,因此只能添加 ROS2 的源,这里都是通用的:
sudo apt update && sudo apt install curl
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 $(. /etc/os-release && echo $UBUNTU_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null
sudo apt update
如果在进行第二部报错如下:
Failed to connect to raw.githubusercontent.com port 443: Connection……
我们需要在域名解析查询网站上查询对应的 ip ,然后添加到 hosts 中,域名解析网站推荐:http://dbcha.com/?t=1675223502
sudo gedit /etc/hosts
添加后如下:
这样我们再次执行就不会报错了
安装依赖项
安装编译依赖项
sudo apt-get install python3-rosdep python3-rosinstall-generator python3-vcstools python3-vcstool build-essential
sudo pip3 install -U rosdep rosinstall_generator vcstool
sudo pip3 install --upgrade setuptools
sudo apt install build-essential
sudo apt install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
sudo apt install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev
安装 rosdep 依赖
rosdep 安装依赖,因为 ROS1 官网不支持 Ubuntu22.04,所以每个依赖项的手动安装:
sudo apt-get install puthon3-pip
sudo apt-get install python3-rosdep python3-rosinstall-generator python3-vcstools python3-vcstool build-essential
sudo pip3 install -U rosdep rosinstall_generator vcstool
sudo pip3 install --upgrade setuptools
源码编译
首先新建 catkin workspace 并定位到对应目录下:
mkdir ~/ros_catkin_ws
cd ~/ros_catkin_ws
下面我们就可以开始拉取源码:
rosinstall_generator desktop --rosdistro noetic --deps --tar > noetic-desktop.rosinstall
mkdir ./src
vcs import --input noetic-desktop.rosinstall ./src
vcs import
这一步因为代理的原因大概率会失败, 直接替换 noetic-desktop.rosinstall 中所有的 github.com 为 kgithub.com ,然后再次执行
错误会显示:EEEEEEE……
成功会显示:…………
在修改后再次运行即可
下面我们手动安装 ROS Noetic 依赖项
sudo apt install libboost-all-dev uuid-dev python3-nose google-mock libgtest-dev libbz2-dev libgpgme-dev libssl-dev python3-coverage libboost-program-options-dev python3-psutil python3-opengl python3-pygraphviz python3-pydot qt5-qmake sbcl libapr1-dev libaprutil1-dev libboost-regex-dev liblog4cxx-dev python3-matplotlib libpyside2-dev libshiboken2-dev pyqt5-dev python3-pyqt5 python3-pyqt5.qtsvg python3-pyside2.qtsvg python3-sip-dev shiboken2 lm-sensors graphviz python3-paramiko python3-pycryptodome python3-gnupg python3-defusedxml python3-pyqt5.qtopengl libcurl4-openssl-dev libpoco-dev libogre-1.9-dev libassimp-dev libogre-1.9.0v5 libyaml-cpp-dev libgl1-mesa-dev libglu1-mesa-dev libqt5opengl5 libqt5opengl5-dev libopencv-dev python3-opencv python3-pykdl tango-icon-theme liborocos-kdl-dev libtinyxml-dev libtinyxml2-dev liburdfdom-headers-dev python3-numpy python3-empy libboost-filesystem-dev libboost-thread-dev python3-pygraphviz python3-pygraphviz python3-mock libboost-date-time-dev libboost-system-dev liburdfdom-dev libboost-chrono-dev libboost-dev libqt5core5a libqt5gui5 libqt5widgets5 qtbase5-dev libconsole-bridge-dev liblz4-dev python3-pyqt5.qtwebkit exfatprogs
这里时间会很长,我们需要耐心等待,等安装完成我们就可以进行最后一部,编译A:
./src/catkin/bin/catkin_make_isolated --install -DCMAKE_BUILD_TYPE=Release -DPYTHON_EXECUTABLE=/usr/bin/python3
注意:在运行当前命令之前需要安装 cmake ,否则会报错
如果出现 rosconsole 有关报错,就在 github 中拉取 rosconsole 的源码,切到 concise_output_roso 分支,覆盖到 ~/ros_catkin_ws/src 下即可,github 地址如下:rosconsole 源码 github 官方地址
如果出现 shared_mutex 有关报错,修改 /usr/include/log4cxx/boost-std-configuration.h 中的如下部分:
#define STD_SHARED_MUTEX_FOUND 1
#define Boost_SHARED_MUTEX_FOUND 0
改为以下代码即可:
#define STD_SHARED_MUTEX_FOUND 0
#define Boost_SHARED_MUTEX_FOUND 1
这样我们就可以成功编译
最后 source 环境变量就可以愉快的使用 ROS Noetic 了~
ROS2 安装
安装 ROS2 ,这里根据系统版本选择 Humble Hawksbill 系统进行安装
设置编码
安装代码如下:
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
只有我们设置为 UTF-8 的英文编码才能正常安装运行于显示,设置后显示如下:
添加镜像源
## 通过检查此命令的输出,确保已启用Ubuntu Universe存储库。
apt-cache policy | grep universe
输出应如下:
若没有看到像上面这样的输出行,依次执行如下命令:
sudo apt install software-properties-common
sudo add-apt-repository universe
这里的命令就是添加 apt 软件源,这里会基本添加好所有的国内的 apt 软件源
然后继续执行上面的命令即可,在全部命令执行成功后,执行如下命令:
## 继续执行如下命令:
sudo apt update && sudo apt install curl gnupg 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
这里如果出现如下界面:
就需要执行如下命令:
sudo rm /var/chche/apt/archives/lock
sudo rm /var/lib/dpkg/lock-frontend #注意自己无法获得锁的路径
sudo apt install -y gcc nasm
如果报错:ubuntu curl: (56) Recv failure: 连接被对方重设,说明已有程序占用该端口,我们直接重启即可
我们把所有的环境准备做好,就可以开始安装 ROS2 了
安装 ROS2
sudo apt update
sudo apt upgrade
## 推荐桌面版,比较推荐。
sudo apt install ros-humble-desktop
## 安装时间可能较长,安心等待。
在我们安装好之后,需要设置以下环境变量:
source /opt/ros/humble/setup.bash
echo " source /opt/ros/humble/setup.bash" >> ~/.bashrc
到此,我们已经完整安装了 ROS2 ,我们就可以直接使用了
示例测试
ROS1 示例测试
运行 roscore 进行测试,
如果显示为找到相关命令,则需要手动安装如下:
sudo apt install python3-roslaunch
如果出现报错如下:
RLException: Invalid <param> tag: Cannot load command parameter [rosversion]: command [['rosversion', 'roslaunch']] returned with code [1].
Param xml is <param name="rosversion" command="rosversion roslaunch"/>
The traceback for the exception was written to the log file
则需要重新执行如下命令:
source ~/ros_catkin_ws/install_isolated/setup.bash
如果出现如下报错:
ERROR: cannot launch node of type [rosout/rosout]: rosout
ROS path [0]=/home/ppqppl/ros_catkin_ws/install_isolated/share/ros
ROS path [1]=/home/ppqppl/ros_catkin_ws/install_isolated/share
RLException: failed to start core service [/rosout]
The traceback for the exception was written to the log file
这个错误,一般原因是由于没有 source bashrc
因此工作空间使用如下命令:
source ~/.bashrc
ROS2 示例测试
示例一:通信测试
首先我们来测试以下 ROS2 最为重要的底层通信系统 DDS 是否正常,我们启动一个终端并通过命令新建一个数据的发布者节点:
ros2 run demo_nodes_cpp talker
接下来,在这个终端不关闭进程的情况下,打开第二个终端,通过以下命令启动一个数据的订阅者节点:
ros2 run demo_nodes_py listener
这里可以看出来,我们的 Hello World 字符串在两个终端中正常传输,说明通信系统没有问题
示例二:小海龟仿真测试
这里我们需要用到两个终端,分别使用如下命令:
# 终端一
ros2 run turtlesim turtlesim_node
# 终端二
ros2 run turtlesim turtle_teleop_key
第一句指令将启动一个蓝色背景的海龟仿真器,第二句指令将启动一个键盘控制节点,在该终端中点击键盘上的“上下左右”按键,就可以控制小海龟运动了