ROS2常规的安装流程在网上可以找到,正常安装基本没问题。但是,由于操作系统和后台运行程序的差异,还是会遇到一些问题。我把我在安装过程中遇到的问题记录如下:

1.安装版本的选择

ROS2有多个发行版(ros_distro),目前出来的有Crystal、Bouncy、Ardent。具体多少个,可去ROS2的网站上去查询。

选择安装版本shell命令:

$ export ROS_DISTRO=crystal # or bouncy or ardent
$ sudo apt update

就是同一个发行版,也分桌面版和基础版:

建议安装桌面版,有界面:

$ sudo apt install ros-$ROS_DISTRO-desktop

若安装基础版:

$ sudo apt install ros-$ROS_DISTRO-ros-base

2.ROS2命令不能执行

比如执行一条ros2命令:

$ ros2 run demo_nodes_cpp talker

但shell却提示 ros2: command not found。

这时应该检查环境变量ROS_DISTRO的值是否是对应的ROS2发行版名称:

$ echo $ROS_DISTRO

若不正确则要改正,比如:

$ export ROS_DISTRO=Crystal

接着设置环境变量:

$ source /opt/ros/$ROS_DISTRO/setup.bash

3.colcon命令不能运行

ROSwiki官网推荐了新的软件包编译工具colcon。ROS编译工具目前经历了三个阶段:1. catkin 2. ament 3. colcon

shell提示"“command not found”,这是因为相应的编译系统还没有安装。使用以下命令进行安装:

sudo apt update && sudo apt install -y \
  build-essential \
  cmake \
  git \
  python3-colcon-common-extensions \
  python3-pip \
  python-rosdep \
  python3-vcstool \
  wget
# install some pip packages needed for testing
sudo -H python3 -m pip install -U \
  argcomplete \
  flake8 \
  flake8-blind-except \
  flake8-builtins \
  flake8-class-newline \
  flake8-comprehensions \
  flake8-deprecated \
  flake8-docstrings \
  flake8-import-order \
  flake8-quotes \
  pytest-repeat \
  pytest-rerunfailures
# [Ubuntu 16.04] install extra packages not available or recent enough on Xenial
python3 -m pip install -U \
  pytest \
  pytest-cov \
  pytest-runner \
  setuptools
# install Fast-RTPS dependencies
sudo apt install --no-install-recommends -y \
  libasio-dev \
  libtinyxml2-dev
--------------------- 

注意命令不要写错字。

4.不能运行gazebo
shell提示:VMware: vmw_ioctl_command error Invalid argument.
这是在虚拟机上运行遇到的问题,解决办法:

$ export SVGA_VGPU10=0

shell运行指令之后即可运行gazebo。

5.环境变量设置
为了能正常使用ROS2中的命令,必须在安装完毕后添加环境变量。

source /opt/ros/crystal/setup.bash

 注意,命令中的crystal是ROS2的发行版名称,应根据自己安装的版本选择正确的名称。

6.ROS 2 软件包
ROS2 中有很多功能包(也可以理解为插件包),若是没有这些功能包,很多ROS2程序可能就无法编译、运行。所以,我们必须要安装这些功能包。
可以一个个安装,如安装3D显示功能包:

sudo apt-get install ros-crystal-rviz

也可以全部安装,用如下shell命令:

sudo apt install 'apt list ros-crystal-* 2> /dev/null | grep "/" | awk -F/ '{print $1}' | grep -v -e ros-crystal-ros1-bridge -e ros-crystal-turtlebot2- | tr "\n" " "'

建议全部安装,因为后面开发会用到很多ROS 2自带的功能包。

7.不能安装应用程序
在Ubuntu中,有时候运用sudo  apt-get install xxx 安装软件时,会出现下面的情况:
E: Could not get lock /var/lib/dpkg/lock - open (11: Resource temporarily unavailable)
E: Unable to lock the administration directory (/var/lib/dpkg/), is another process using it?

这是因为有apt还在运行,解决办法是查找所有apt相关的进程,然后用命令杀死。

~$ ps afx|grep apt
 3284 pts/0    S+     0:00          \_ grep --color=auto apt
 2869 ?        Ss     0:00 /bin/sh /usr/lib/apt/apt.systemd.daily install
 2873 ?        S      0:00  \_ /bin/sh /usr/lib/apt/apt.systemd.daily lock_is_held install
~$ sudo kill -9 2873
~$ sudo kill -9 2869

8.功能包不能识别

明明是已经通过 ros2 pkg create创建好的包,但运行时shell提示找不到包:

ros2 demo ros2的moveit_commander找不到_发行版


这可能是因为我们在创建包时,只是在功能包的目录下source了局部环境变量:

source ./install/setup.bash

这样产生的环境变量只是暂时生效,如果关闭shell或系统,该环境变量失效,必须重新source一次。

若是还遇到其他问题,百度一下。

给出ROS2安装指导链接:

http://www.guyuehome.com/2309