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提示找不到包:
这可能是因为我们在创建包时,只是在功能包的目录下source了局部环境变量:
source ./install/setup.bash
这样产生的环境变量只是暂时生效,如果关闭shell或系统,该环境变量失效,必须重新source一次。
若是还遇到其他问题,百度一下。
给出ROS2安装指导链接: