在Mac M1上利用Docker安装ROS2并打开RViz2
在Mac M1电脑上利用Docker安装ROS2并打开RViz2
前言
随着ROS的发展,越来越多的人开始使用ROS2,尤其在具身智能领域上,较新的开源代码基本都基于ROS2。所以,近期的项目为了跟上时代的潮流,团队决定将原有的ROS1升级到ROS2。做为一个老程序员,只能带头先将ROS2进行前期的学习与部署。为了方便代码的部署与传承,我决定采用docker的方式进行安装,但是没想到掉入了好多坑。。。经过几天的资料查找与测试,终于找到在Mac M1芯片上用docker跑通ROS2的方法,由于查找资料大都为英文资料,且是拼拼凑凑实现的,因此决定写一篇中文博客,以便遇到同样问题的小伙伴们也可以解决同样问题。本文是原生创作,希望如果引用本文可以注明出处,谢谢。
Mac的Docker安装
关于Mac电脑的docker安装在这里我就不多加描述了,大家可以在网上找到相关资料。
ROS2的安装
起初,由于Docker安装包的问题,我在安装时遇到了类似
ros2: ddsi_udp_create_conn: set IP_MULTICAST_IF failed: Bad Parameter
的问题,一开始我以为是ros2 dds 的问题,在网上找了好多方法,都不好使,后面终于发现把安装包换一下就好了。。。最后我选的包是
althack/ros2:humble-full
其次,在ROS开发中,有很重要的一个板块是可视化界面的开发,包括RViz以及Gazebo的使用,通常,docker部署在Linux或者window上只需要解决X11等问题,于是,我就想着如何解决在苹果上用X11的问题,经过几天断断续续的摸索,最终参考链接得知DISPLAY这个参数的配置应该是 -e DISPLAY=host.docker.internal:0,才可行,于是得到了如下启动代码:
docker run -it --rm -e DISPLAY=host.docker.internal:0 --volume /tmp/.X11-unix:/tmp/.X11-unix --network host --privileged -e QT_X11_NO_MITSHM=1 althack/ros2:humble-full bash
但是问题来了,小乌龟界面是可以启动过了,但是Rviz2启动的时候却报错了,大致如下:
[ERROR] [1737792787.520878416] [rviz2]: Failed to create an OpenGL context. BadValue (integer parameter out of range for operation)
[ERROR] [1737792787.520953375] [rviz2]: RenderingAPIException: Unable to create a suitable GLXContext in GLXContext::GLXContext at ./.obj-aarch64-linux-gnu/ogre-v1.12.1-prefix/src/ogre-v1.12.1/RenderSystems/GLSupport/src/GLX/OgreGLXContext.cpp (line 60)
[ERROR] [1737792787.521052625] [rviz2]: rviz::RenderSystem: error creating render window: RenderingAPIException: Unable to create a suitable GLXContext in GLXContext::GLXContext at ./.obj-aarch64-linux-gnu/ogre-v1.12.1-prefix/src/ogre-v1.12.1/RenderSystems/GLSupport/src/GLX/OgreGLXContext.cpp (line 60)
大致问题就是OpenGL在M1芯片上的问题了,为此,我查找了很多博客,均说这个在M1上是无解了。全是英文资料,这对于英语不是我第一语言的人来说,简直就是灾难啊,看的我头晕眼花的,不过好在功夫不负有心人,借鉴参考链接我终于找到了方法。
为了方便大家使用,我把Docker Compose 部署的代码上传到Github地址,方便大家下载使用。具体使用方法如下:
docker-compose up --build -d
在安装好ros2后,就可以用docker exec来启动ros了
docker exec -it d5e1850f6724 /bin/bash
然后通过浏览器地址打开:http://localhost:8080/vnc.html

点击connect,便可查看Rviz了。
更多推荐



所有评论(0)