在树莓派4b上源码安装 ROS MELODIC

这里写自定义目录标题

一、树莓派系统的配置

0、查看Raspbian版本信息

查看当前安装的Raspbian版本信息,执行下面的命令。

cat /etc/os-release

或者

lsb_release -sc

该命令将打印出有关操作系统发布版本的各种信息。
在运行Raspbian Buster的Raspberry Pi上运行这个程序会得到以下结果。

PRETTY_NAME="Raspbian GNU/Linux 10 (buster)"
NAME="Raspbian GNU/Linux"
VERSION_ID="10"
VERSION="10 (buster)"
VERSION_CODENAME=buster
ID=raspbian
ID_LIKE=debian
HOME_URL="http://www.raspbian.org/"
SUPPORT_URL="http://www.raspbian.org/RaspbianForums"
BUG_REPORT_URL="http://www.raspbian.org/RaspbianBugs"

1、添加 ROS 仓库

参考 ROS/Installation @ wiki

sudo sh -c . /etc/lsb-release
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
# 增加国内源
sudo sh -c 'echo "deb http://mirrors.ustc.edu.cn/ros/ubuntu/ `lsb_release -cs` main" > /etc/apt/sources.list.d/ros-latest.list'

2、添加 KEY

sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
# 或者
sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654

3、raspi 换源

原源文件做备份

sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
sudo cp /etc/apt/sources.list.d/raspi.list /etc/apt/sources.list.d/raspi.list.bak

编辑 sources.list,使用

sudo mousepad /etc/apt/sources.list

增加下面这几行。

deb http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ buster main contrib non-free rpi
deb-src http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ buster main contrib non-free rpi

4、更新源

最后执行下面命令,以更新源。

sudo apt update
sudo apt upgrade

5、附属操作

更新完之后,如有必要,安装远程桌面

sudo apt install xrdp

接着,安装中文字体

sudo apt install ttf-wqy-zenhei ttf-wqy-microhei

最后,
然后重启系统,完成树莓派系统的基本配置。

sudo reboot

二、安装ROS系统

2.1 编译器切换(可以忽略了)

首先安装gcc5和g++5防止编译报错。先查看默认的gcc和g++。

gcc -v
g++ -v

一般而言,树莓派系统的默认版本为 gcc 8。此时安装gcc 5和g++ 5。

sudo apt install gcc-5 g++-5

安装好之后进行版本切换,将系统的gcc与g++切换至5,对gcc的切换执行如下操作

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-5 50
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-8 80

以及

sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-5 50
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-8 80

接着选择默认版本为 gcc-5 和 g++5,输入

sudo update-alternatives --config gcc
sudo update-alternatives --config g++

会出现三个选项,分别输入 gcc-5 和 g+±5 对应的编号,按回车即可。
然后再测试 gcc 和 g++ 的版本

gcc -v
g++ -v

如果版本改变则切换成功。

2.2 准备工作

2.2.1 添加ROS仓库

参加 1.1 和 1.2 或者

sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
## 或者
sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654

增加国内源。

sudo sh -c 'echo "deb http://mirrors.ustc.edu.cn/ros/ubuntu/ `lsb_release -cs` main" > /etc/apt/sources.list.d/ros-latest.list'

或者

sudo sh -c 'echo "deb http://mirrors.ustc.edu.cn/ros/ubuntu/ melodic main" > /etc/apt/sources.list.d/ros-latest.list'

执行以下命令,更新仓库

sudo apt update
sudo apt upgrade

如果出现 链接解析错误的话,将 文件 /etc/apt/sources.list.d/ros-latest.list’ 中有关 $(lsb_release -sc)
的地方,全部更换为对应的raspbian 版本,版本查看方法见第 0 节,这里的系统为 buster。

2.2.2 源码安装 ROS 的相关依赖项

分布或集中执行以下命令

sudo apt install -y python-rosdep python-rosinstall-generator python-wstool python-rosinstall build-essential cmake
sudo apt install sip-dev pyqt5-dev python-sip-dev pyqt5-dev-tools
### 源码安装 ROS 的相关依赖项
sudo apt install libboost-all-dev
sudo apt install python-assimp 
sudo apt install python-pyassimp 
sudo apt install gem-plugin-assimp 

然后,初始化 rosdep:

sudo rosdep init # 国内一般无法使用
rosdep update

如有报错,请按照该链接进行操作。
国内安装源gitee安装ROS(kinetic)
Ubuntu18.04 安装 ROS Melodic

基本方法

首先,使用 find -type f -print0 | xargs -0 grep 语句在 /usr/lib/python2.7/ 或者 /usr/lib/python3 文件夹下查找包含 “raw.githubusercontent.com/ros/rosdistro” 的相关文件。

find -type f -print0 | xargs -0 grep 'raw.githubusercontent.com/ros/rosdistro' | cut -d: -f1 | sort -u

一般而言,会有如下文件列出:

./rosdistro/init.py
# 或 
./rosdistro/__init__.py
./rosdep2/gbpdistro_support.py
./rosdep2/sources_list.py
./rosdep2/rep3.py

将文件中涉及的 raw.githubusercontent.com/ros/rosdistro/master 全部替换成 gitee.com/ssonic/rosdistro/raw/master 或者 gitee.com/ohhuo/rosdistro/raw/master 即可。

然后,删除文件夹 /etc/ros/rosdep/sources.list.d 的文件 20-default.list。
并运行一下命令:

sudo rosdep init
rosdep update

如果,提示有错误,则手动在文件夹 /etc/ros/rosdep/sources.list.d 下新建文件 20-default.list

sudo mkdir -p /etc/ros/rosdep/sources\.list\.d
sudo vi 20-default.list 

然后,将下文内容复制到 文件 20-default.list 中,然后保存并退出。

# os-specific listings first rosdep update
yaml https://gitee.com/ssonic/rosdistro/raw/master/rosdep/osx-homebrew.yaml osx

# generic
yaml https://gitee.com/ssonic/rosdistro/raw/master/rosdep/base.yaml
yaml https://gitee.com/ssonic/rosdistro/raw/master/rosdep/python.yaml
yaml https://gitee.com/ssonic/rosdistro/raw/master/rosdep/ruby.yaml
gbpdistro https://gitee.com/ssonic/rosdistro/raw/master/releases/fuerte.yaml fuerte

# newer distributions (Groovy, Hydro, ...) must not be listed anymore, they are being fetched from the rosdistro index.yaml instead

最后在运行

rosdep update

成功以后,可以找到并查看相应的文件:

cat /home/pi/.ros/rosdep/sources.cache/index

获得如下的输出:

#autogenerated by rosdep, do not edit. use 'rosdep update' instead
yaml https://gitee.com/ssonic/rosdistro/raw/master/rosdep/osx-homebrew.yaml osx
yaml https://gitee.com/ssonic/rosdistro/raw/master/rosdep/base.yaml 
yaml https://gitee.com/ssonic/rosdistro/raw/master/rosdep/python.yaml 
yaml https://gitee.com/ssonic/rosdistro/raw/master/rosdep/ruby.yaml 
yaml https://gitee.com/ssonic/rosdistro/raw/master/releases/fuerte.yaml fuerte
yaml https://gitee.com/ssonic/rosdistro/raw/master/dashing/distribution.yaml dashing
yaml https://gitee.com/ssonic/rosdistro/raw/master/foxy/distribution.yaml foxy
yaml https://gitee.com/ssonic/rosdistro/raw/master/kinetic/distribution.yaml kinetic
yaml https://gitee.com/ssonic/rosdistro/raw/master/melodic/distribution.yaml melodic
yaml https://gitee.com/ssonic/rosdistro/raw/master/noetic/distribution.yaml noetic
yaml https://gitee.com/ssonic/rosdistro/raw/master/rolling/distribution.yaml rolling

2.2.3 编译并安装 libboost-1.58.0 (可忽略)

需要保证系统只有单个版本的 libboost,否则后面的编译会出错。

下载并解压代码

wget -O boost_1_58_0.tar.bz2 http://sourceforge.net/projects/boost/files/boost/1.58.0/boost_1_58_0.tar.bz2/download

国内下载,查看

https://pan.baidu.com/s/1O7U1tLWJ_fPys7OusLtmVA 

提取码:1004

解压目录,并编译(预定安装到 /usr/local/boost1.58.0下)

tar --bzip2 -xvf boost_1_58_0.tar.bz2
cd boost_1_58_0
./bootstrap.sh --with-libraries=all --with-toolset=gcc-5
./b2 toolset=gcc -j2 

然后,安装 libboost-1.58.0

sudo ./bjam install --prefix=/usr/local/boost-1.58.0

添加路径

sudo ldconfig

添加环境变量

vim ~/.bashrc

在文件末尾添加:

# Boost
export BOOST_INCLUDE=/usr/local/boost-1.58.0/include/
export BOOST_LIB=/usr/local/boost-1.58.0/lib

至此,boost库安装完成。

期间操作的各项命令的解释,可以参看《在Linux下安装boost》或者《ubuntu查看、安装、更新、卸载boost库 指定目录》又或者《Linux 下 boost 库的安装,配置个人环境变量》。

2.3 安装ROS

2.3.1 下载源码

第一步,创建一个catkin工作空间

mkdir -p ~/ros_catkin_ws
cd ~/ros_catkin_ws

接下来,构建 ros核心包源码。
**注意:**如果看官方教程,建议安装ROS-Comm版本,不要安装Desktop版本,没梯子,容易出错。
(1)安装 ROS-Desktop

rosinstall_generator desktop --rosdistro melodic --deps --wet-only --tar > melodic-desktop-wet.rosinstall
# vcs import src < melodic-desktop-wet.rosinstall

(2)安装 ROS-Comm

rosinstall_generator ros_comm --rosdistro melodic --deps --wet-only --tar > melodic-ros_comm-wet.rosinstall
# vcs import src < melodic-ros_comm-wet.rosinstall

(3)自定义安装 robot

rosinstall_generator robot --rosdistro melodic --deps --wet-only --tar > melodic-robot-wet.rosinstall
# vcs import src < melodic-robot-wet.rosinstall

下载源码。

wstool init -j4 src melodic-desktop-wet.rosinstall

下载源码时,如果发生错误或者中断,通过下述命令继续

wstool update -j4 -t src

2.3.2 安装collada_urdf依赖Assimp(可忽略)

安装兼容版本 Assimp (Open Asset Import Library) 用于搞定collada_urdf 依赖问题。

mkdir -p ~/ros_catkin_ws/external_src 
cd ~/ros_catkin_ws/external_src

下载 Assim 源码

wget http://sourceforge.net/projects/assimp/files/assimp-3.1/assimp-3.1.1_no_test_models.zip/download -O assimp-3.1.1_no_test_models.zip

或者在百度网盘。

链接:https://pan.baidu.com/s/17RzxQTvtOMJVxhFQax3Q5A 
提取码:1004

解压并编译和安装。

unzip assimp-3.1.1_no_test_models.zip
cd assimp-3.1.1
cmake .
make
sudo make install

然后,为 rviz 安装 OGRE 依赖的 libboost。

sudo apt install  libogre-1.9-dev

该依赖似乎在2020年元月份以后已经被 ROS 团队搞定了。
包括所需的依赖 assimp 也可以通过下面的命令直接完成。

sudo apt install python-assimp 
sudo apt install python-pyassimp 
sudo apt install gem-plugin-assimp

2.3.3 搞定 libboost 的问题(可忽略了)

在 src/rosconsole/package.xml 中写明了关于 libboost 的依赖有:

  <build_depend>libboost-regex-dev</build_depend>
  <build_depend>libboost-system-dev</build_depend>
  <build_depend>libboost-thread-dev</build_depend>
  <run_depend>libboost-regex-dev</run_depend>

该问题由 boost::posix_time::milliseconds 函数引起的。新的 boost 版本只接受整数的传入参数,但是 ROS 中的 actionlib 功能包却使用的是浮点参数,因此,需要在 ros_catkin_ws/src 文件夹中将所用使用了 boost::posix_time::milliseconds 函数的文件全部找到,并进行替换。

find -type f -print0 | xargs -0 grep 'boost::posix_time::milliseconds' | cut -d: -f1 | sort -u

例如:
(1)将

boost::posix_time::milliseconds(loop_duration.toSec() * 1000.0f));

替换为

boost::posix_time::milliseconds(int(loop_duration.toSec() * 1000.0f)));

(2)将

boost::posix_time::milliseconds(1000.0f)

替换为

boost::posix_time::milliseconds(1000)

2.3.4 安装rosdep所需依赖

使用rosdep安装所需依赖

rosdep install -y --from-paths src --ignore-src --rosdistro melodic -r --os=debian:buster

**注意:**需要对应 raspbian 的版本。

2.3.5 源码编译并安装ROS

编译工作空间

sudo ./src/catkin/bin/catkin_make_isolated --install -DCMAKE_BUILD_TYPE=Release --install-space /opt/ros/melodic -j2

**注意:
** 可能需要更改权限

sudo chmod +x ./src/catkin/bin/*

** 默认路径是安装在

~/ros_catkin_ws/install_isolated

本例程改变了安装路径,指定的安装路径为:

 --install-space /opt/ros/melodic

2.3.6 配置环境变量

添加路径到环境变量

source /opt/ros/melodic/setup.bash

测试安装,打开终端运行

roscore

若无报错,则成功安装

2.4 安装思岚RPLIDAR ROS 功能包

2.4.1 新建 catkin_ws 工作空间

mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/
catkin_make

将路径添加的默认路径文件 .bashrc 中:

echo "source $HOME/catkin_ws/devel/setup.bash" >> ~/.bashrc

2.4.2 安装 RPLIDAR ROS 功能包

cd src
sudo git clone  https://github.com/Slamtec/rplidar_ros.git
cd ~/catkin_ws
catkin_make

2.4.3 启动并测试激光雷达。

使用如下命令启动 激光雷达

roslaunch rplidar_ros rplidar.launch

2.4.4 设置 ROS 在多台机器上运行

需要一台安装了 ROS Melodic 的 Ubuntu 18.04 计算(PC) 机。关于在Ubuntu 系统的PC机上安装 ROS Melodic 的教程请另行参考。

在 Raspberry Pi 和PC机上都安装好 ROS Melodic 后,将两台机器的 IP 地址设置到同一个网络上!

(1) 在PC机上运行 roscore 并导出 ROS_MASTER_URI

roscore
export ROS_MASTER_URI=http://[192.168.0.201]:11311

(2) 在树莓派上执行

export ROS_MASTER_URI=http://[192.168.0.201]:11311
export ROS_IP=[192.168.0.201]

并启动 RPILIDAR 启动文件。

roslaunch rplidar_ros rplidar.launch

(3) 查看PC机的主题
树莓派上的激光雷达成功启动后,需要检查PC机上存在的主题。

rostopic list 

(4)图形化检查
如果能够找到 /scan 消息,则说明一切正常。然后,在PC机上启动 RVIZ,添加 Laser Scan 消息并选择 /scan 主题(topic)。您还需要fixed frame 更改为 /laser。

2.4.5 后续工作

上述步骤,只是在Raspberry Pi 4 上构建 ROS 机器人的第一步。现在,已经安装了 ROS Melodic 并可以通过无线网络连接到PC机上进行远程控制。

接下来,可以添加用于里程计的电机和编码器、用于 Visual SLAM 的立体摄像头以及各种其他的设备。

三、参考链接

3.1 参考教程

更多的问题,可以参考

3.1.1 《Raspbian安装ROS系统Kinectic》

3.1.2《树莓派4B安装ROS并使用OpenCV(全流程)》

3.1.3 《在树莓派4b上安装 ROS Melodic 源码安装》

3.1.4 ROS Melodic on Raspberry Pi 4 (Debian Buster) + RPLIDAR A1M8

3.2 在Raspberry Pi 4安装过程中的问题

3.2.1 下载 ROS 源码不完整

如果在使用 “wstool init src melodic-desktop-wet.rosinstall” 下载ROS源码过程中,出现因网络或者其他原因而发生的中断时,可以多次的重复使用

wstool update -j2 -t src

来不断更新下载的 ROS 源码,直到下载完毕。
如果已经从别处获得了 ROS 源码,可以使用下面的命令,快速的检查和更新源码。

wstool merge -t src melodic-desktop-wet.rosinstall
wstool update -t src
cp -rf melodic-desktop-wet.rosinstall ./src/.rosinstall

3.2.2 SIP Generator Error

遇到的第一个问题

[ 89%] Built target qt_gui_cpp
[ 89%] Running SIP generator for qt_gui_cpp_sip Python bindings...
Traceback (most recent call last):
  File "/opt/ros/melodic/share/python_qt_binding/cmake/sip_configure.py", line 85, in <module>
    sip_dir, sip_flags = get_sip_dir_flags(config)
  File "/opt/ros/melodic/share/python_qt_binding/cmake/sip_configure.py", line 65, in get_sip_dir_flags
    raise FileNotFoundError('The sip directory for PyQt5 could not be located. Please ensure' +
NameError: global name 'FileNotFoundError' is not defined
make[2]: *** [src/qt_gui_cpp_sip/CMakeFiles/libqt_gui_cpp_sip.dir/build.make:90: sip/qt_gui_cpp_sip/Makefile] Error 1
make[1]: *** [CMakeFiles/Makefile2:566: src/qt_gui_cpp_sip/CMakeFiles/libqt_gui_cpp_sip.dir/all] Error 2
make: *** [Makefile:141: all] Error 2

解决方法:

sudo apt install sip-dev pyqt5-dev python-sip-dev pyqt5-dev-tools

然后,

cd /home/pi/ros_catkin_ws/build_isolated/qt_gui_cpp
/opt/ros/melodic/env.sh make -j2

3.2.3 处理归档*.deb时出错

在安装ROS时出现了下面的问题: 在这里插入图片描述
解决方法:
通过命令

sudo dpkg -i --force-overwrite <filename>

强制覆盖,然后强制安装。

sudo dpkg -i --force-overwrite /var/cache/apt/archives/python-rospkg-modules_1.1.7-1_all.deb

接着运行:

sudo apt-get -f install

3.2.4 ‘…’ is not a member of ‘std’

在c++文件中加入下面这个万能头文件即可。

#include<bits/stdc++.h>

需要更改的 CMakeList.txt 文件有:

文件清单

3.2.5. ‘nullptr’ was not declared in this scope

ROS中,编译xmlrpcpp时,

error:nullptr’ was not d`在这里插入代码片`eclared in this scope

在xmlrpcpp 的 CMakeList.txt 中添加:

include(CheckCXXCompilerFlag)
CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11)
CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPILER_SUPPORTS_CXX0X)
if(COMPILER_SUPPORTS_CXX11)
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
elseif(COMPILER_SUPPORTS_CXX0X)
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
else()
    message(STATUS "The compiler ${CMAKE_CXX_COMPILER} has no C++11 support. Pleaseuse a different C++ compiler.")
endif()

需要更改的 CMakeList.txt 文件有:

文件清单()

3.2.6 消除部分编译警告

编译的时候,可能会出现以下的警告问题:

In file included from test.cpp:2:0:
Sales_item.h:56:20: warning: defaulted and deleted functions only available with -std=c++11 or -std=gnu++11
     Sales_item() = default;
                    ^
Sales_item.h:70:27: warning: non-static data member initializers only available with -std=c++11 or -std=gnu++11
     unsigned units_sold = 0; // explicitly initialized
                           ^
Sales_item.h:71:22: warning: non-static data member initializers only available with -std=c++11 or -std=gnu++11
     double revenue = 0.0;
                      ^
Sales_item.h:45:7: error: constructor required before non-static data member for ‘Sales_item::units_sold’ has been parsed
 class Sales_item {
       ^
Sales_item.h:45:7: error: constructor required before non-static data member for ‘Sales_item::revenue’ has been parsed

解决办法是:首先,将 gcc 和 g++ 的版本升到 8.0版,

sudo update-alternative --config g++
sudo update-alternative --config gcc

然后,在 ~/.bashrc 中增加以下两行。

alias g++11='g++ -g -Wall -std=c++11'
alias g++14='g++ -g -Wall -std=c++14'

需要更改的 CMakeList.txt 文件有:

文件清单(略)

3.2.7 查看并修正Boost版本

查看boost版本,可以使用以下方法

dpkg -S /usr/include/boost/version.hpp
dpkg -s libboost-dev | grep 'Version'

注意查看 /include/boost/ 文件夹的位置,并卸载其中较低版本的boost,例如:
删除/usr/include/boost文件夹,删除/usr/lib中和boost有关的文件

sudo rm -rf /usr/include/boost
sudo rm -rf /usr/lib/libboost*

然后,使用

apt-cache search libboost
apt-cache show libboost-dev

命令查看所需安装的版本信息,接着重新安装所需版本的 libboost,例如:

sudo apt install libboost-all-dev

最后,使用

sudo apt autoremove

来卸载剩余的无用功能模块,到此boost 1.67.0就已经成功被卸载了。

注意: 编译ROS源码时,需要保证系统中只有一种版本的 boost,否则会有报错。

3.2.8 ‘shared_ptr’does not name a template type

取消CMakeLists.txt下 add_compoile_options( -std=c++11 ) 的注释。

## Compile as C++11, supported in ROS Kinetic and newer
  add_comile_options(-std=c++11)

需要更改的 CMakeList.txt 文件有:

文件清单(略)
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值