无人驾驶开发环境配置指南Macos+Docker+Ros

用了Mac做无人驾驶的开发,才发现用它来ROS开发是多么痛苦 o(╥﹏╥)o,开虚拟机烫的可以煎鸡蛋,双系统有各种驱动问题,怎么用怎么不舒服。后来发现可以通过Docker来解决苹果系统带来的困扰,在此记录下来以供其他使用Mac的同学愉快的开发ROS。


微信前端核心500人群:群内不定期会有赞助商送书活动,BAT大厂资深大牛定期推送面经与源码分析,各平台大牛优秀文章推荐,更有内推跳槽咨询、视频资源共享、学习资料文章pdf面经网盘资源等等福利。加入我们一起进步。

为了解决知乎活码识别问题,下方的二维码做了持久化处理。扫描二维码添加小柠即可加入我们。

无人驾驶开发环境配置指南Macos+Docker+Ros

公众号:中台架构之家

群内分享每日一题:题目传送门

前端电子书大全:电子书

每日7点贝壳网P7大牛免费基础公开课开讲中


装好Docker

在Docker官网上下载好Docker并安装就OK了,对于没有接触过Docker的同学,可以参考这份手册底部的网站,过一遍应该就能熟悉Docker了。

下载ROS的Docker镜像

尝试了一圈最终还是发现最好用的就是官方提供的ros环境,干净,鲁棒性强,versionkey也不会失效,没有杂七杂八的东西,推荐使用以下命令拉取镜像。

docker pull ros:kinetic

使用这个Docker镜像

生成Container

docker run --name hmi 
--mount type=bind,source=/Users/aa/ee,target=/root/ros_workspaces 
-itd -p 6080:80 -p 7777:7777 -p 9111:9111 -p 1314:1314 -p 1222:1222 
library/ros:kinetic

浏览器打开 http://127.0.0.1:6080然后就可以愉快的玩耍了。

需要注意的一点是在生成容器的时候最好预先设定好需要暴露的端口号,对应了几项服务就预留出几个端口用于调用。重点是生成容器后该容器就不可修改暴露的端口内容了,因此为了避免重复创建我们需要做的就是提前规划好需要做的工作。

为什么要暴露出端口,因为在同一个容器或者不同容器中我们将端口暴露给本地用以调用,能避免产生CORS跨域问题。相同容器或不同容器不暴露出端口,容器中的服务是无法互相调用的。

最后说明一点:虽然Docker说是可以看做精简版的虚拟机,但是并不能真的当虚拟机使用,由于Docker的层级机制,导致每次往Container里增加东西或者删除文件,只会不断增加Docker image的层数(文件越来越大)。所以正确的使用方法是把Container当做一个处理文件的程序(类比Word软件和*.docx文件),将我们主机的文件系统挂载到Container当中。

不用了就直接

docker stop containerName

再需要了就

docker start containerName

开发

不使用vscode

直接使用vim开发的小伙伴看这里,在docker run生成容器之后,运行

docker exec -it containerName /bin/bash

在容器内执行/bin/bash,之后source上相应的bash

source /opt/ros/kinetic/setup.bash

查看全部镜像容器

docker ps -a

docker的常用命令

Management Commands:
  builder     Manage builds
  config      Manage Docker configs
  container   Manage containers
  context     Manage contexts
  image       Manage images
  network     Manage networks
  node        Manage Swarm nodes
  plugin      Manage plugins
  secret      Manage Docker secrets
  service     Manage services
  stack       Manage Docker stacks
  swarm       Manage Swarm
  system      Manage Docker
  trust       Manage trust on Docker images
  volume      Manage volumes
 
Commands:
  attach      Attach local standard input, output, and error streams to a running container
  build       Build an image from a Dockerfile
  commit      Create a new image from a container's changes
  cp          Copy files/folders between a container and the local filesystem
  create      Create a new container
  deploy      Deploy a new stack or update an existing stack
  diff        Inspect changes to files or directories on a container's filesystem
  events      Get real time events from the server
  exec        Run a command in a running container
  export      Export a container's filesystem as a tar archive
  history     Show the history of an image
  images      List images
  import      Import the contents from a tarball to create a filesystem image
  info        Display system-wide information
  inspect     Return low-level information on Docker objects
  kill        Kill one or more running containers
  load        Load an image from a tar archive or STDIN
  login       Log in to a Docker registry
  logout      Log out from a Docker registry
  logs        Fetch the logs of a container
  pause       Pause all processes within one or more containers
  port        List port mappings or a specific mapping for the container
  ps          List containers
  pull        Pull an image or a repository from a registry
  push        Push an image or a repository to a registry
  rename      Rename a container
  restart     Restart one or more containers
  rm          Remove one or more containers
  rmi         Remove one or more images
  run         Run a command in a new container
  save        Save one or more images to a tar archive (streamed to STDOUT by default)
  search      Search the Docker Hub for images
  start       Start one or more stopped containers
  stats       Display a live stream of container(s) resource usage statistics
  stop        Stop one or more running containers
  tag         Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE
  top         Display the running processes of a container
  unpause     Unpause all processes within one or more containers
  update      Update configuration of one or more containers
  version     Show the Docker version information
  wait        Block until one or more containers stop, then print their exit codes

使用vscode

我使用的是VS code进行软件的开发,同时VS code也支持插件导入相应的项目,请参考以下文章:

Developing inside a Container using Visual Studio Code Remote Development

必看!!!
详细查看Attaching to a Docker container部分,通过访问镜像下的/root/ros_workspaces路径进行项目导入,前后端分离的项目需要通过多开的iterm进入镜像内部start

如有问题欢迎私信或者评论。

Happy Hacking~~~

  • 我的微信
  • 微信扫一扫
  • weinxin
  • 我的微信公众号
  • 微信扫一扫
  • weinxin
afiregame
  • 本文由 发表于 2021年12月11日22:55:40
  • 转载请务必保留本文链接:https://www.afiregame.com/zixun/9509/
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: