Bootstrap

在Docker上运行ROS(melodic版本)机器人项目

前言 

对于ROS机器人项目来说,运行的环境可能各不相同,有的需要在Ubuntu18.04下运行,有的需要在Ubuntu20.04下运行。运行环境的改变,产生使用Docker配置环境的需求。本人以港科大FUEL的项目为例,尝试在Docker上安装ROS-Melodic,并运行该无人机项目。在本文中,会引用到很多的链接,因为避免重复造论子,本人将踩了一路的坑总结在文章中,并找到了相应的解决办法,供读者参考,解决办法以文字或链接的形式在文中体现,大家按顺序运行即可。

 一)Docker内运行ROS(melodic版本)

1.1  Docker的安装与配置

如果安装好了Docker,本节可以跳过。

对于Docker的安装和相关配置,可以参考本人的文章。手把手教你使用Docker安装Ubuntu18.04_猪猪的超超的博客-CSDN博客本文详讲解Docker安装以及相应的配置,如取消root权限,开机自启动,阿里云加速等。最后以安装Ubuntu18.04为例,讲解了如何使用Docker进行环境的搭建。https://blog.csdn.net/weixin_65688914/article/details/133514201?spm=1001.2014.3001.5501需要注意的是,大家不需要再去安装Ubuntu18.04,因为有大神已经做好了Ubuntu18.04环境下且安装好了ROS(melodic版本)的镜像,大家只需要去拉取下面这个镜像:

osrf/ros:melodic-desktop-full

1.2  Docker拉取并配置ROS镜像

安装好Docker之后,我们需要使用Docker工具拉取大神制作的ROS镜像,参考下面博客即可:

Docker内运行ROS(melodic版本)以及使用Rviz_docker ros代码在宿主机运行-CSDN博客Docker内运行ROS(melodic版本)以及使用Rviz写在前文Docker的安装以及介绍本文就不再累述了,安装Docker的版本任意,但是要注意的一点是你是ARM板子还是x86的板子,一般在ARM板上实现上述功能较为麻烦,如果是在ARM板子上使用Docker+ROS的话可以参考这篇文章http://wiki.ros.org/docker/Tutorials/Hardware%20Acceleration#nvidia-docker1在ROS的官网上有教程,但是还是有些坑的,如果你使用的是Nvi_docker ros代码在宿主机运行https://blog.csdn.net/qq_40695642/article/details/117607446

1.3  一个问题的解决方案

警告:对Linux不熟悉的人慎重使用,为保险起见,你最好选择docker下的容器linux系统开发。如果在容器内也出现如下的问题,解决方法如下:

【警告或报错问题】:XDG_RUNTIME_DIR not set, defaulting to ‘/tmp/runtime-root‘

1)在/etc/profile末尾增加两句

export XDG_RUNTIME_DIR=/usr/lib/
export RUNLEVEL=3

2)然后刷新全局变量

source /etc/profile

二)Ubuntu容器环境配置

2.1  安装Openssh

sudo apt-get update ##(更新软件源)执行安装操作,如果不成功,执行第2行指令

sudo apt-get upgrade ##(继续更新软件源)执行安装操作,应该能成功 

sudo apt-get install -y openssh-server

2.2  配置Github的SSH密钥

我们先使用git clone [通过ssh协议拉取仓库],如果出现下面的问题,参考该博客即可解决。

解决方案:Permission denied (publickey). fatal: Could not read from remote repository.icon-default.png?t=N7T8https://www.cnblogs.com/wmr95/p/7852832.html在配置完成之后,我们就能使用我们的Docker下的ROS(Melodic版本)的容器,来运行项目啦。

三)运行HKUST的无人机项目

我们以香港科技大学的一个无人机项目为例进行说明

GitHub - HKUST-Aerial-Robotics/FUEL: An Efficient Framework for Fast UAV ExplorationAn Efficient Framework for Fast UAV Exploration . Contribute to HKUST-Aerial-Robotics/FUEL development by creating an account on GitHub.icon-default.png?t=N7T8https://github.com/HKUST-Aerial-Robotics/FUEL我们先在docker容器中,新建一个文件夹用来克隆该项目。

mkdir HKUST_FUEL

随后,我们根据github上的README文件进行操作即可

3.1  安装依赖项

  sudo apt-get install libarmadillo-dev ros-melodic-nlopt

3.2 编译源文件

新建src文件夹(用以catkin_make编译),远程拉取仓库到本地

在终端依次输入如下指令

  cd ${YOUR_WORKSPACE_PATH}/src
  git clone [email protected]:HKUST-Aerial-Robotics/FUEL.git
  cd ../ 
  catkin_make

3.3  解决catkin_make出现的问题

【问题】:cannot find -ldw

意思是找不到相应的包,因此我们需要再去安装一下相关的包

我们依次输入如下指令,安装好所缺的包

apt install libdw-dev

apt install libssl-dev

再去编译,在终端输入catkin_make,就可以完成编译啦! 

3.4  运行项目

我们打开两个终端,分别进入到docker容器中

在两个终端都输入如下指令

docker exec -it rocker bash        #以交互的方式运行容器

在两个终端中,都 cd 到我们运行项目的文件夹

在第一个终端输入:

  source devel/setup.bash && roslaunch exploration_manager rviz.launch

在第二个终端输入:

  source devel/setup.bash && roslaunch exploration_manager exploration.launch

 就可以看到电脑打开了rviz,并正在运行项目啦,我们点击右上角的 2D NAV Goal ,然后在地图中点击一下,就能看到无人机的建图过程啦!

 四)存在的一些问题及改进方案

4.1  问题一:rviz卡顿

项目能正常运行了,但是存在一个问题,就算rviz节目较为卡顿,而且点击最小化之后,rviz直接卡了,读者不妨试一试。这是因为docker占用和依赖的是本机的显卡资源,通过X协议在电脑中展现rviz的图像化界面。因此在运行项目时,需要注意不要将rviz最小化

4.2  问题二:打开多个终端烦琐

在3.4中,我们运行项目的时候需要打开两个终端,过程非常的烦琐,由于机器人项目经常需要打开多个终端,为了解决这个问题,对于本机来说,有实用的软件Terminator

对于Docker来说呢,向读者推荐Tmux,感兴趣的读者可以参考。

Tmux教程 (一文就够)_LYF0816LYF的博客-CSDN博客Tmux1. Tmux是什么?1.1 基本概念1.2 安装2. session操作2.1 启动2.2 分离2.3 退出2.4 绑定、解绑、切换session2.5 重命名session3. window操作3.1 新建窗口tmux new-window3.2 切换窗口3.3 重命名窗口4. pane操作4.1 划分窗格4.2 光标位置4.4 关闭窗格5. 其他操作5.1 tmux上下翻屏使用教程网上相关的Tmux教程很多,可是看完感觉不是太细就是太散,有一些不常用的操作、快捷键也写出来了,感觉重点不够突出_tmux教程https://blog.csdn.net/CSSDCC/article/details/121231906

总结

本文详细讲解了如何在Docker中运行ROS项目,并以香港科技大学的无人机项目为例,进行解释说明。旨在手把手教会读者上手Docker,并成功运行一个ROS机器人项目。

;