当前位置:   article > 正文

如何像正常使用ROS一样使用Docker ROS?Ubuntu22.04在docker中安装noetic版本ROS_ros docker noetic

ros docker noetic

自从买了新电脑,遇到的麻烦接连不断。先是安装Ubuntu系统安装不上,安装完成之后网卡、触控板等硬件都没有打上驱动,折腾了老半天,把ubuntu的内核升级到了Ubuntu20.04所支持的最高版本,然而还是没有解决驱动的问题,遂一气之下将系统升级为了Ubuntu22.04,这一次安装完系统后驱动全部自动打好,之前的各种小毛病也消失了。

但是问题来了,鄙人习惯于使用Ubuntu20.04+ROS1 noetic进行开发,而Ubuntu22.04不支持ROS1,遂决定使用Docker ROS。因此我学习Docker仅仅是为了能够让Docker ROS使用起来和直接装在环境一样。

以下内容权且当作我的学习笔记。

Docker及其命令简介

1、Docker基本概念:

docker 镜像(image)与容器(container)的关系:

镜像:只读的模板,可以用来创建container容器

容器:在镜像之上的可编辑层

要使用Docker ROS,首先要有一个Docker镜像,然后使用docker run命令生成一个docker容器,而我们要使用的ROS就运行在这个容器里面。

2、Docker常用命令

1、镜像Image命令:
{image:tag}→{镜像名称:镜像版本号}

注:版本号默认是latest

  1. docker images  # 查看本机镜像列表
  2. docker rmi {-f} {image}  # 删除镜像(-f强制删除)
  3. docker search {image}  # 搜索镜像
  4. docker pull {image:tag}  # 拉取镜像
  5. docker system df  # 查看镜像容器所占的空间
2、容器Container命令
  1. docker ps -a  # 查看本机所有container
  2. docker rm {container_name}  # 删除container
  3. docker start {container_name}  # 打开container
  4. docker stop {container_name}  # 关闭container
  5. docker exec -it {container_name} /bin/bash  # 进入container
3、Docker服务命令:
  1. syetemctl start docker  # 启动docker
  2. systemctl stop docker  # 停止docker
  3. systemctl restart docker  重启docker
  4. 查看docker状态: systemctl status docker
  5. 查看docker概要信息:docker info
4、Docker run命令:
# 后面会讲

Docker ROS的安装与配置

1、安装docker和镜像

直接使用鱼香ROS一键安装(使用鱼香ROS只是为了安装docker镜像)

小鱼的一键安装系列 | 鱼香ROS (fishros.org.cn)

wget http://fishros.com/install -O fishros && . Fishros

选择noetic版本,安装过程中要输入container名称。安装完成之后应会生成一个你自己命名的container,输入名称即可进入。其实docker ros已经安装完了,但是这个container并不好用(没有nvidia-container-toolkit,没有串口且无法实现局域网通信),因此需要一些操作重新docker run一个container出来使用。

安装完成之后直接输入命令把container删掉,留下镜像就行。

输入以下命令:

docker images  # 查看镜像列表

显示如下图:

这个fishros2/ros:noetic-desktop-full就是我们要使用的镜像。(其他镜像是我自己装的,请忽视)

2、使用docker run命令生成一个我们需要的容器,并制作启动脚本

以下操作参考了这篇文章,欢迎大家前去围观:

针对ros机器人开发同学的docker入门教程 - 哔哩哔哩 (bilibili.com)

这个up@我不是姓崔的还做了视频:

【教程向】机器人专业Docker入门指南【鱼香ros】_哔哩哔哩_bilibili

我在学习的时候也参考学习了这篇文章,这里把我使用到的部分列出来:

1、docker run命令生成容器

直接说答案:

  1. sudo docker run -dit \
  2. --name={输入container的名称} \
  3. --privileged  \
  4. -e DISPLAY=unix$DISPLAY \
  5. -w /home/{ubuntu用户名} \
  6. --net=host \
  7. -v /dev:/dev \
  8. -v /home/{ubuntu用户名}:/home/{ubuntu用户名} \
  9. -v /tmp/.X11-unix:/tmp/.X11-unix  \
  10. fishros2/ros:noetic-desktop-full
  11. #--gpus all \  # 如果安装了nvidia-container-toolkit,可以加上这一行

其中比较关键的是-v命令,其能够将docker内的文件夹内容与我们的主机实时映射,作用类似于VMware虚拟机的共享文件夹。关于容器数据卷详细教程可以参考这个视频:

30_容器数据卷能干嘛_哔哩哔哩_bilibili

2、如何像鱼香的docker ros一样打开和关闭ROS的container

鱼香ROS安装的容器可以输入容器名称这样进入,如下图所示:

但是你创建的容器的开关和进入需要使用以下命令,非常麻烦:

  1. docker start {container_name}  # 打开container
  2. docker stop {container_name}  # 关闭container
  3. docker exec -it {container_name} /bin/bash  # 进入container

其实鱼香ROS不过是使用了脚本来进行启动,其脚本位置在/home/{用户名}/.fishros/bin/

以下是一键生成脚本的python文件

  1. def generate_shell_file(container_name):
  2. shell_content = f'''
  3. xhost +local: >> /dev/null
  4. echo "请输入指令控制{container_name}: 重启(r) 进入(e) 启动(s) 关闭(c) 删除(d) 测试(t):"
  5. read choose
  6. case $choose in
  7. r) docker restart {container_name};;
  8. e) docker exec -it {container_name} /bin/bash;;
  9. s) docker start {container_name};;
  10. c) docker stop {container_name};;
  11. d) docker stop {container_name} && docker rm {container_name} && sudo rm -rf /home/kr/.fishros/bin/ros;;
  12. t) docker exec -it {container_name} /bin/bash -c "source /ros_entrypoint.sh && roscore";;
  13. esac
  14. newgrp docker
  15. '''
  16. with open('/home/{user_name}/.fishros/bin/'+f'{container_name}', 'w',encoding='utf-8') as file: # 把{user_name}改成自己的用户名
  17. file.write(shell_content)
  18. container_name = input("请输入容器名称:")
  19. generate_shell_file(container_name)
  20. print("Shell文件已生成!")

输入以下命令:

  1. su -
  2. python3 container_shell_producer.py

生成脚本成功后,还需要为其添加可执行权限:

  1. cd /home/{user_name}/.fishros/bin/
  2. chmod +x {脚本名称}

输入容器名称即可启动脚本,轻松启动关闭进入容器。

此时docker ros使用起来已经和20.04+noetic大差不差了。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Li_阴宅/article/detail/1011259
推荐阅读
相关标签
  

闽ICP备14008679号