在树莓派安装 ROS Melodic 和安装ROS软件包(适用其他ARM硬件系统)

前言

由于树莓派的系统 raspbain 自带的 ROS 软件包与正常的 Ubuntu 系统不同且数量不全,所以需要使用 rosdep 工具下载源代码进行编译和安装,而 rosdep 需要访问的网址被由于众所周知的原因,基本无法直接连接或速度极慢,所以一开始需要在树莓派上配置网络重定向(由于不是完全断连,所以有时通过手机热点或在某些地区也许可以勉强连接,可以自行测试后再确定是否需要)

该方法同样适用于其他arm硬件系统
rosdep的问题基本全是由网络不通顺造成的,自己想办法过代理就好

更早的工作

  1. 更换系统 apt 软件源到国内软件源

  2. 更换 pythonpip 工具软件源到国内软件源

  3. 配置wifi连接

  4. 通过 raspi-config 设置开启VNC、开机加载桌面

  5. 拔掉显示器接口后,再次启动使用VNC连接,通过 raspi-config 设置屏幕分辨率

    如果使用的是树莓派4,需要在sd的配置 config 文件中注释掉,否则无法变更在不插HDMI接口的情况下改变VNC屏幕分辨率

    [pi4]
    # Enable DRM VC4 V3D driver on top of the dispmanx display stack
    #dtoverlay=vc4-fkms-v3d
    #max_framebuffers=2
    
  6. 通过 raspi-config 配置树莓派启用硬件串口,用于rosserial 连接

重定向网络

  • 省略部分敏感内容

  • 配置 proxychains

    修改/etc/proxychains.conf 的最后一行修改为本地监听端口 (该软件需要和代理软件配合使用,即上方省略内容)

    socks5 127.0.0.1 1080
    
  • 测试

    在终端运行指令,测试 proxychains4 是否能够转发 wget 的流量获取网页的源代码:

    $ proxychains4 wget -qO- https://raw.githubusercontent.com
    

安装ROS Melodic

**步骤1:**设置存储库

$ 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

此处将 http://packages.ros.org/ros/ubuntu 替换为国内中科大镜像源或其他源以加快速度

$ sudo sh -c 'echo "deb http://mirrors.ustc.edu.cn/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-get update
$ sudo apt-get upgrade

**步骤2:**安装构建工具(编译器,CMake等)

  • rosdep是用于安装系统依赖项的命令行工具。
  • rosinstall_generator生成rosinstall文件,其中包含有关带有ROS软件包/堆栈的存储库的信息。
  • wstool是用于维护来自多个版本控制系统的项目工作区的工具。
$ sudo apt-get update
$ sudo apt-get install -y python-rosdep python-rosinstall-generator python-wstool python-rosinstall build-essential cmake

**步骤3:**初始化 rosdep

rosdep 是用来处理软件包依赖规则的工具(此处就需要proxychains4来进行代理了):

$ sudo proxychains4 rosdep init
$ proxychains4 rosdep update

**步骤4:**创建一个catkin工作区以构建核心程序包

在此步骤中创建的工作区可以在完成安装后删除,其本质就是在catkin空间内下载了全部ros软件包后编译并安装,和普通的下载源码编译安装一个ros软件包的原理是一样的:

$ mkdir ~/ros_catkin_ws
$ cd ~/ros_catkin_ws

**步骤5:**获取核心软件包

对于Raspberry Pi,最小的桌面版安装可能是首选,因为该板大概率是在机器人上运行。所以此安装不包括2D / 3D模拟器,导航和2D / 3D感知。可以根据核心数量修改 -j后的数字,以加快多线程的工作:

$ proxychains4 rosinstall_generator desktop --rosdistro melodic --deps --wet-only --tar > melodic-desktop-wet.rosinstall
$ proxychains4 wstool init -j4 src melodic-desktop-wet.rosinstall

如果在 wstool init 失败或被中断后,可以通过以下指令恢复:

$ proxychains4 wstool update -j4 -t src

**步骤6:**安装兼容版本的Assimp (Open Asset Import Library)来修复 rviz 的collada_urdf依赖问题和OGRE。(根据ROS官网描述,此步骤似乎可以省略)

$ cd ~
$ mkdir -p ~/ros_catkin_ws/external_src
$ cd ~/ros_catkin_ws/external_src
$ proxychains4 wget https://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
$ unzip assimp-3.1.1_no_test_models.zip
$ cd assimp-3.1.1/
$ cmake .
$ make
$ sudo make install
$ sudo apt-get install libogre-1.9-dev

**步骤7:**解决依赖关系
确保所有依赖均已就绪,该指令会安装非ROS软件包的依赖,如一些系统软件和python包等:

$ cd ~/ros_catkin_ws/
$ proxychains4 rosdep install -y --from-paths src --ignore-src --rosdistro melodic -r --os=debian:buster

**步骤8:**构建和获取安装
在上述步骤中,我们完成了下载软件包并解决了依赖性。在此步骤中,我们准备构建柳絮包。

此处使用 catkin_make_isolated 指令是为了在不使用任何ros setup脚本提供环境变量的情况下,仅使用catkin的基础功能来完成编译:

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

在用户环境文件中设定开机配置ROS工作环境:

$ echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc

至此ROS已经安装完成,重启树莓派:

$ sudo reboot

再次启动后运行 roscore 来测试 ros:

$ roscore

日常安装软件包

以下就省略proxychains4 了,执行联网程序时请自行添加。将其他软件包添加到已安装到ros生态系统中。首先,必须创建一个包含新软件包的新 rosinstall 文件(注意,这也可以在初次安装时完成)。例如,如果我们已经安装了ros_comm,但是想要添加 ros_controljoystick_drivers 则命令为:

$ cd ~/ros_catkin_ws
$ rosinstall_generator ros_comm ros_control joystick_drivers --rosdistro melodic --deps --wet-only --tar > melodic-custom_ros.rosinstall

可以继续列出尽可能多的ROS软件包,并用空格分隔。

而后使用wstool更新工作空间:

$ wstool merge -t src melodic-custom_ros.rosinstall
$ wstool update -t src

更新工作空间后,运行rosdep来安装所需的任何新依赖项:

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

最后,工作空间是最新的并且满足了依赖性,重新构建工作空间:

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

安装Rosserial

**方式1:**使用之前安装ros的工作空间编译安装

$ cd ~/ros_catkin_ws
$ rosinstall_generator rosserial --rosdistro melodic --deps --wet-only --tar > melodic-custom_ros.rosinstall
$ wstool merge -t src melodic-custom_ros.rosinstall
$ wstool update -t src
$ rosdep install --from-paths src --ignore-src --rosdistro melodic -y -r --os=debian:buster
$ sudo ./src/catkin/bin/catkin_make_isolated --install -DCMAKE_BUILD_TYPE=Release --install-space /opt/ros/melodic

**方式2:**使用新的工作空间编译安装

一般安装新的软件包时我推荐使用该方法, 用这个方法之前安装ROS的工作文件夹就可以删除了,另外尽量新建一个工作文件夹用来安装ROS软件包不要在我们平常编写ROS代码的工作空间运行,防止在安装时,把我们编写的半成品代码安装进入系统目录下

由于我们已经安装了ROS的基础内容,所以可以在此环境下通过catkin_make来完成其他软件包的构建

创建一个新的工作空间:

$ mkdir ~/ros_my_ws
$ cd ~/ros_my_ws

生成想要安装的软件列表文件,此工作会查询该软件的地址:

$ rosinstall_generator rosserial --rosdistro melodic --deps --deps-only --tar --exclude RPP > my.rosinstall
  • --rosdistro 选项告诉它从哪个ROS分发中提取这些软件包

  • --deps 选项告诉它获取您指定的软件包的依赖关系

  • --deps-only 告诉它避免包括您指定的软件包(我假设您已经拥有了这些软件包)

  • --tar 选项告诉如果可能的话,它可以获取tarball而不是git / hg信息库(下载速度更快)

  • --exclude RPP 选项告诉它避免添加可以在本地RPP上找到的软件包。

它将所有这些信息输出到stdout,因此我们可以将其通过管道传送到文件中 > my.rosinstall,该文件的名称并不重要。

拥有rosinstall文件后,您可以使用以下命令获取其中的软件包wstool:

$ wstool init ~/ros_my_ws/src my.rosinstall -j8

然后,可以按照ROS的源安装说明进行操作,执行 rosdep 和 catkin 命令:

$ rosdep install --from-paths src -i -y
$ su
输入密码
$ source /opt/ros/melodic/setup.sh
$ catkin_make_isolated --install -DCMAKE_BUILD_TYPE=Release --install-space /opt/ros/melodic

或使用 catkin_make 安装,不过不推荐此方法,具体原因可以查看资料5

$ catkin_make -DCMAKE_INSTALL_PREFIX=/opt/ros/melodic install -DCATKIN_WHITELIST_PACKAGES="rosserial"

特别说明

  • 在编译源代码过程中可能会提醒缺少某些包,因为我们已经解决了ros的依赖包,那么此时出现的就是python或者其他系统软件了,粘贴那个名称搜索,如果是python包那么就使用sudo apt install python-xxx安装,如果是普通软件就使用sudo apt install xxx安装后继续即可。该现象仅出现在rosdep install --from-paths src -i -y 没有正常工作的情况下。
  • 在操作过程中某些联网缓慢的程序都可以通过 proxychains4 来加速。
  • wstool 运行过程中如果一直显示 XXX still active 说明下载卡了,Ctrl+C 退出再用 wstool update -t src指令继续即可。

参考资料

  1. 删除敏感内容
  2. Installing ROS Melodic on the Raspberry Pi
  3. How To Install ROS Melodic, rosserial, and more on Raspberry Pi 4 (Raspbian Buster)
  4. Automatically get missing package dependencies
  5. catkin_make vs catkin_make_isolated, which is preferred?
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值