Macbook 部署 ROS2 并解决通信问题

系统环境

设备:MacBook Air M1

系统:macOS Sequoia 15.2

ROS版本:Humble

前情提要

笔者最近学习ROS2,本想使用 Docker 部署 ROS2 镜像进行开发。前期进行的十分顺利,无论是镜像部署还是编译运行均十分顺利,唯独在多机通信时遭了重。

  • 镜像网络模式无法正常打开端口,经过查证是由于macOS的Docker其实是运行在一个Linux环境中的,相当于额外套了一层壳,加上macOS自身的安全机制导致的。
  • 使用macvlan,在创建时就遇到了问题,我无法选择我的 MacBook 的网卡 en0。通过工具查看网卡发现也没有开启混杂模式,拼尽全力无法开启。
  • macOS 编译 ros2,理论可行,实操过于麻烦且对系统更改较大,不想去试

Docker方面完全没有头绪,直接编译又不想试,无奈,只能去尝试别的思路,在此记录一下,也为别人做个参考。

解决方法

简而言之,虚拟机。

用虚拟机确实不够优雅,可是它确实解决了通信的问题,也让我觉得通过正确配置 Docker 也可以实现多机通信,不过笔者已经心力交瘁,无力探索了。

通过 vmware fusion 来创建一个 Ubuntu 22.04 Server 系统的虚拟机,可以正常安装 ROS2 以及相关工具(当然,Server 版没有GUI,rviz 啥的用不了,需要的请安装桌面版),也可以通过小鱼的一键安装脚本进行安装,省心省力。

然后使用 PyCharm 的 SSH Python 解释器,可以将本机的工作目录同步至虚拟机内,也能做到如同本机开发相近的丝滑程度。无论是编译还是运行,统统都没问题,通过给虚拟机的网络模式调整为桥接模式,也彻底解决了多机通信的问题。

当然,这种方式有着不少缺点。

  • 随着网络改变,主机和虚拟机的 IP 会改变,但是 PyCharm 的 SSH Python 解释器的 IP 却不会变,导致每次更换网络也要更换 SSH Python 解释器,十分不方便。
  • PyCharm需要添加解释器路径才能正常使用自动补全,若是你的ROS软件包比较多,这会是一个大工程。
  • 虚拟机导致的性能浪费问题,主要体现在 CPU 核心利用方面。至于内存,实际测试 Ubuntu 占用内存大约 600M,PyCharm此时是3.7G......
  • PyCharm 的文件自动同步有时候会抽风,需要手动上传,这情况出现的频率不算特别高

总结

如果你也对 Docker 没什么办法,但又必须要多机通信,又没有 Windows 电脑或是不想装系统(实测 WSL2 的镜像模式也不能用,必须用 Windows 专业版的桥接模式),不妨试试虚拟机方案。

但若是不需要多机通信,不妨试试 Docker,绝对算是一个优雅的解决方案。

posted @   StarChenPy  阅读(40)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示