前言
由于树莓派的系统 raspbain 自带的 ROS 软件包与正常的 Ubuntu 系统不同且数量不全,所以需要使用 rosdep 工具下载源代码进行编译和安装,而 rosdep 需要访问的网址被由于众所周知的原因,基本无法直接连接或速度极慢,所以一开始需要在树莓派上配置网络重定向(由于不是完全断连,所以有时通过手机热点或在某些地区也许可以勉强连接,可以自行测试后再确定是否需要)
该方法同样适用于其他arm硬件系统
rosdep的问题基本全是由网络不通顺造成的,自己想办法过代理就好
更早的工作
-
更换系统
apt
软件源到国内软件源 -
更换
python
的pip
工具软件源到国内软件源 -
配置wifi连接
-
通过
raspi-config
设置开启VNC、开机加载桌面 -
拔掉显示器接口后,再次启动使用VNC连接,通过
raspi-config
设置屏幕分辨率如果使用的是树莓派4,需要在sd的配置
config
文件中注释掉,否则无法变更在不插HDMI接口的情况下改变VNC屏幕分辨率复制代码1
2
3
4
5[pi4] # Enable DRM VC4 V3D driver on top of the dispmanx display stack #dtoverlay=vc4-fkms-v3d #max_framebuffers=2
-
通过
raspi-config
配置树莓派启用硬件串口,用于rosserial 连接
重定向网络
-
省略部分敏感内容
-
配置 proxychains
修改
/etc/proxychains.conf
的最后一行修改为本地监听端口 (该软件需要和代理软件配合使用,即上方省略内容)复制代码1
2socks5 127.0.0.1 1080
-
测试
在终端运行指令,测试 proxychains4 是否能够转发 wget 的流量获取网页的源代码:
复制代码1
2$ proxychains4 wget -qO- https://raw.githubusercontent.com
安装ROS Melodic
**步骤1:**设置存储库
1
2
3
4$ 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 替换为国内中科大镜像源或其他源以加快速度
1
2
3
4$ 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
更新软件源列表和软件:
1
2
3$ sudo apt-get update $ sudo apt-get upgrade
**步骤2:**安装构建工具(编译器,CMake等)
- rosdep是用于安装系统依赖项的命令行工具。
- rosinstall_generator生成rosinstall文件,其中包含有关带有ROS软件包/堆栈的存储库的信息。
- wstool是用于维护来自多个版本控制系统的项目工作区的工具。
1
2
3$ 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来进行代理了):
1
2
3$ sudo proxychains4 rosdep init $ proxychains4 rosdep update
**步骤4:**创建一个catkin工作区以构建核心程序包
在此步骤中创建的工作区可以在完成安装后删除,其本质就是在catkin空间内下载了全部ros软件包后编译并安装,和普通的下载源码编译安装一个ros软件包的原理是一样的:
1
2
3$ mkdir ~/ros_catkin_ws $ cd ~/ros_catkin_ws
**步骤5:**获取核心软件包
对于Raspberry Pi,最小的桌面版安装可能是首选,因为该板大概率是在机器人上运行。所以此安装不包括2D / 3D模拟器,导航和2D / 3D感知。可以根据核心数量修改 -j
后的数字,以加快多线程的工作:
1
2
3$ 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
失败或被中断后,可以通过以下指令恢复:
1
2$ proxychains4 wstool update -j4 -t src
**步骤6:**安装兼容版本的Assimp (Open Asset Import Library)来修复 rviz
的collada_urdf依赖问题和OGRE。(根据ROS官网描述,此步骤似乎可以省略)
1
2
3
4
5
6
7
8
9
10
11$ 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包等:
1
2
3$ 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的基础功能来完成编译:
1
2$ sudo ./src/catkin/bin/catkin_make_isolated --install -DCMAKE_BUILD_TYPE=Release --install-space /opt/ros/melodic
在用户环境文件中设定开机配置ROS工作环境:
1
2$ echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc
至此ROS已经安装完成,重启树莓派:
1
2$ sudo reboot
再次启动后运行 roscore
来测试 ros:
1
2$ roscore
日常安装软件包
以下就省略proxychains4
了,执行联网程序时请自行添加。将其他软件包添加到已安装到ros生态系统中。首先,必须创建一个包含新软件包的新 rosinstall 文件(注意,这也可以在初次安装时完成)。例如,如果我们已经安装了ros_comm
,但是想要添加 ros_control
和 joystick_drivers
则命令为:
1
2
3$ cd ~/ros_catkin_ws $ rosinstall_generator ros_comm ros_control joystick_drivers --rosdistro melodic --deps --wet-only --tar > melodic-custom_ros.rosinstall
可以继续列出尽可能多的ROS软件包,并用空格分隔。
而后使用wstool更新工作空间:
1
2
3$ wstool merge -t src melodic-custom_ros.rosinstall $ wstool update -t src
更新工作空间后,运行rosdep来安装所需的任何新依赖项:
1
2$ rosdep install --from-paths src --ignore-src --rosdistro melodic -y -r --os=debian:buster
最后,工作空间是最新的并且满足了依赖性,重新构建工作空间:
1
2$ sudo ./src/catkin/bin/catkin_make_isolated --install -DCMAKE_BUILD_TYPE=Release --install-space /opt/ros/melodic
安装Rosserial
**方式1:**使用之前安装ros的工作空间编译安装
1
2
3
4
5
6
7$ 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来完成其他软件包的构建
创建一个新的工作空间:
1
2
3$ mkdir ~/ros_my_ws $ cd ~/ros_my_ws
生成想要安装的软件列表文件,此工作会查询该软件的地址:
1
2$ 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:
1
2$ wstool init ~/ros_my_ws/src my.rosinstall -j8
然后,可以按照ROS的源安装说明进行操作,执行 rosdep 和 catkin 命令:
1
2
3
4
5
6$ 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:
1
2$ 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
指令继续即可。
参考资料
- 删除敏感内容
- Installing ROS Melodic on the Raspberry Pi
- How To Install ROS Melodic, rosserial, and more on Raspberry Pi 4 (Raspbian Buster)
- Automatically get missing package dependencies
- catkin_make vs catkin_make_isolated, which is preferred?
最后
以上就是鲜艳宝贝最近收集整理的关于在树莓派安装 ROS Melodic 和安装ROS软件包(适用其他ARM硬件系统)日常安装软件包的全部内容,更多相关在树莓派安装内容请搜索靠谱客的其他文章。
发表评论 取消回复