关于ros2安装的那些坑


前言

为什么要使用ros2?

对于这个问题,ros官网以及各大网络平台给出了很多答案,至于其真实性以及有效性,本人没有认真比对过。暂且贴图,至少ros2在实时性上是更胜一筹的。
截图来源:https://blog.csdn.net/LinSeeker85/article/details/122828555
在这里插入图片描述


一、ros2安装

ros官网给出了详细且简洁的步骤,详见https://docs.ros.org/en/galactic/Installation/Ubuntu-Install-Debians.html。
我安装的是galactic版本。

详细步骤如下:

1. Set Locale

locale  # check for UTF-8

// 检查是否支持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

2. Setup Sources

// 2.1 检查ubuntu是否有全球仓
apt-cache policy | grep universe
// 2.2 运行结果有如下字样则有universe repository
500 http://us.archive.ubuntu.com/ubuntu focal/universe amd64 Packages
     release v=20.04,o=Ubuntu,a=focal,n=focal,l=Ubuntu,c=universe,b=amd64
// 2.3 如果没有2.2的字样,则如下添加仓
sudo apt install software-properties-common
sudo add-apt-repository universe
// 2.4 添加ros2 apt仓——用apt授权给GPG密钥
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
// 2.4 添加ros2 apt仓
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

3. Install ROS2 Package

// 3.1 更新apt仓
sudo apt update
// 3.2 安装桌面版(包含ROS、RViz、demos、tutorials)
sudo apt install ros-galactic-desktop
// 3.3 安装基础版(包含通信库、消息包、命令行工具,没有可视化工具)
sudo apt install ros-galactic-ros-base

4. Environment Setup

source /opt/ros/galactic/setup.bash

5. Try Some Examples

// 5.1 在一个终端中起talker
source /opt/ros/galactic/setup.bash
ros2 run demo_nodes_cpp talker
// 5.2 在另一个终端中起listener
source /opt/ros/galactic/setup.bash
ros2 run demo_nodes_py listener
// 5.3 两个终端有序滚动,即安装完成

二、创建第一个ROS2包

1. 创建ROS2包

在终端中一步步执行:

// 1. 创建源文件夹
mkdir ~/dev_ws/src
// 2. 创建包
cd ~/dev_ws/src
ros2 pkg create --build-type ament_cmake <package_name>
// 3. 编译
colcon build

具体的各文件内容,详见链接 https://blog.csdn.net/sad490/article/details/81461507

此时,终端中或许会提醒你:
colcon: command not found

2. 问题-colcon: command not found

ros包的编译工具经历了3个阶段:

  1. catkin
  2. ament
  3. colcon

提示未找到colcon命令,就是未安装colcon的编译系统。
解决方案为:
终端执行以下命令

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

重新执行colcon build。
若仍然提示command not found,则极有可能是以上命令未执行成功。
我的终端提示:

Package 'python-rosdep' has no installation candidate

解决方案为将python-rosdep改为python3-rosdep
我的系统没有python-rosdep,但为什么没有我也不清楚。。。
至此可以执行colcon build。

三、其他坑们

1. 如果你不小心卸载了多余的python3.8

众所周知,安装ubuntu20.04时系统会自带python2.7和python3.
千万不要删掉这两个python版本!!!
虽然我没有试过删掉它们的后果。。。
但是我为了某个问题(no module named rclpy),而安装了python3.8,后面猜测可能用不到,担心两个python3版本会冲突,因此执行了以下命令。

sudo apt-get remove --purge python3.8

执行完这一句,肉眼可见系统的gedit、firefox、x-terminator在边栏上的图标都失效了。。。

不要慌,慌张不是解决问题的办法。
尽管我也咩有什么解决问题的简洁绝佳办法。
但是遇到问题可以一点点解决。
gedit、firefox、x-terminator重装以下就可以,很简单。

sudo apt-get install gedit
sudo apt-get install firefox
sudo apt-get install terminator

2. 问题-no module named ‘rclpy’

问题提示:

ModuleNotFoundError: No module named ‘rclpy’

原因:
系统自带的python版本过低不支持ros2的rclpy,可将python升级到python3.8.
解决方案:
安装python3.8。

./configure --prefix=/usr/local/
sudo make
sudo make install

3. 问题-/usr/bin/ld: final link failed: bad value

问题提示:

libpython3.8m.a(abstract.o): relocation R_X86_64_32S against `_Py_NotImplementedStruct' can not be used when making a shared object; recompile with -fPIC
/usr/bin/ld: final link failed: bad value

解决方案:
重新安装python3.8.

./configure --prefix=/usr/local/  --enable-shared CFLAGS=-fPIC
make clean
make && sudo make install

4. 问题-no module named ‘xxx’

原因:
没有找到对应的库。
解决方案:
pip install ‘xxx’

若又出现问题,以empy模块为例:

pip install empy Requirement already satisfied: empy in /usr/lib/python3/dis

原因:
在/usr/lib/python3/dis中已经有empy了,但是在我所需的python版本中没有empy。
解决方案:
pip install --target=目标路径 工具包名字

pip install --target=/usr/local/lib/python3.8/site-packages empy

还会出现注入缺失catkin_pkg、lark模块,对所有的缺失模块都执行该过程即可。


总结

关关难过关关过啊!

  • 5
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值