MacBook Air M1虚拟机中Ubuntu22.04 ARM版Gazebo启动即崩溃
问题
在M1芯片MacBook Air上通过Parallels Desktop 18运行Ubuntu 22.04 ARM系统,搭配ROS2 Humble及Gazebo Gardens做仿真。Rviz运行正常,但执行gz sim启动Gazebo后,点击空白项目或演示项目时窗口立刻崩溃,终端输出错误日志如下:
libGL error: pci id for fd 42: 1ab8:0010, driver (null) pci id for fd 43: 1ab8:0010, driver (null) libGL error: pci id for fd 44: 1ab8:0010, driver (null) pci id for fd 52: 1ab8:0010, driver (null) libEGL warning: pci id for fd 64: 1ab8:0010, driver (null) pci id for fd 65: 1ab8:0010, driver (null) terminate called after throwing an instance of 'Ogre::UnimplementedException' what(): OGRE EXCEPTION(9:UnimplementedException): in GL3PlusTextureGpu::copyTo at ./RenderSystems/GL3Plus/src/OgreGL3PlusTextureGpu.cpp (line 685) Stack trace (most recent call last): #31 Object "/lib/aarch64-linux-gnu/libQt5Core.so.5", at 0xffff93fcb06b, in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) #30 Object "/lib/aarch64-linux-gnu/libQt5Core.so.5", at 0xffff9402b523, in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) #29 Object "/lib/aarch64-linux-gnu/libglib-2.0.so.0", at 0xffff92e02f13, in g_main_context_iteration #28 Object "/lib/aarch64-linux-gnu/libglib-2.0.so.0", at 0xffff92e5aeab, in #27 Object "/lib/aarch64-linux-gnu/libglib-2.0.so.0", at 0xffff92e05a6f, in g_main_context_dispatch #26 Object "/lib/aarch64-linux-gnu/libQt5Core.so.5", at 0xffff9402c057, in #25 Object "/lib/aarch64-linux-gnu/libQt5Core.so.5", at 0xffff93fcff87, in QCoreApplicationPrivate::sendPostedEvents(QObject*, int, QThreadData*) #24 Object "/lib/aarch64-linux-gnu/libQt5Core.so.5", at 0xffff93fccb8f, in QCoreApplication::notifyInternal2(QObject*, QEvent*) #23 Object "/lib/aarch64-linux-gnu/libQt5Widgets.so.5", at 0xffff95472abf, in QApplicationPrivate::notify_helper(QObject*, QEvent*) #22 Object "/lib/aarch64-linux-gnu/libQt5Core.so.5", at 0xffff93ffcfd3, in QObject::event(QEvent*) #21 Object "/usr/lib/aarch64-linux-gnu/gz-gui-7/plugins/libMinimalScene.so", at 0xffff58337dd7, in gz::gui::plugins::RenderWindowItem::Ready() #20 Object "/usr/lib/aarch64-linux-gnu/gz-gui-7/plugins/libMinimalScene.so", at 0xffff58337917, in gz::gui::plugins::RenderThread::Initialize[abi:cxx11]() #19 Object "/usr/lib/aarch64-linux-gnu/gz-gui-7/plugins/libMinimalScene.so", at 0xffff58343d17, in gz::gui::plugins::RenderThreadRhiOpenGL::Initialize[abi:cxx11]() #18 Object "/usr/lib/aarch64-linux-gnu/gz-gui-7/plugins/libMinimalScene.so", at 0xffff5833b10f, in gz::gui::plugins::GzRenderer::Initialize[abi:cxx11]() #17 Object "/lib/aarch64-linux-gnu/libgz-rendering7.so.7", at 0xffff582c39c3, in gz::rendering::v7::BaseRenderEngine::CreateScene(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) #16 Object "/lib/aarch64-linux-gnu/libgz-rendering7.so.7", at 0xffff582cc03f, in gz::rendering::v7::BaseRenderEngine::CreateScene(unsigned int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) #15 Object "/lib/aarch64-linux-gnu/libgz-rendering7.so.7", at 0xffff582dfff3, in gz::rendering::v7::BaseScene::CreateMaterials() #14 Object "/usr/lib/aarch64-linux-gnu/gz-rendering-7/engine-plugins/libgz-rendering-ogre2.so", at 0xffff33b50423, in gz::rendering::v7::Ogre2Material::SetTextureMapImpl(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, Ogre::PbsTextureTypes) #13 Object "/usr/lib/aarch64-linux-gnu/OGRE-2.3/libOgreNextMain.so.2.3.1", at 0xffff337ab46b, in Ogre::TextureGpuManager::_waitFor(Ogre::TextureGpu*, bool) #12 Object "/usr/lib/aarch64-linux-gnu/OGRE-2.3/libOgreNextMain.so.2.3.1", at 0xffff337ab0af, in Ogre::TextureGpuManager::_update(bool) #11 Object "/usr/lib/aarch64-linux-gnu/OGRE-2.3/libOgreNextMain.so.2.3.1", at 0xffff3368ebaf, in Ogre::ObjCmdBuffer::execute() #10 Object "/usr/lib/aarch64-linux-gnu/OGRE-2.3/libOgreNextMain.so.2.3.1", at 0xffff3368cf37, in Ogre::ObjCmdBuffer::NotifyDataIsReady::execute() #9 Object "/usr/lib/aarch64-linux-gnu/OGRE-2.3/libOgreNextMain.so.2.3.1", at 0xffff3379cef3, in Ogre::TextureFilter::GenerateHwMipmaps::_executeSerial(Ogre::TextureGpu*) #8 Object "/usr/lib/aarch64-linux-gnu/OGRE-2.3/OGRE/RenderSystem_GL3Plus.so", at 0xffff330f2633, in Ogre::GL3PlusTextureGpu::copyTo(Ogre::TextureGpu*, Ogre::TextureBox const&, unsigned char, Ogre::TextureBox const&, unsigned char, bool, Ogre::CopyEncTransitionMode::CopyEncTransitionMode, Ogre::CopyEncTransitionMode::CopyEncTransitionMode) #7 Object "/usr/lib/aarch64-linux-gnu/OGRE-2.3/OGRE/RenderSystem_GL3Plus.so", at 0xffff330b4997, in #6 Object "/lib/aarch64-linux-gnu/libstdc++.so.6", at 0xffff971e2d23, in __cxa_throw #5 Object "/lib/aarch64-linux-gnu/libstdc++.so.6", at 0xffff971e2a3f, in std::terminate() #4 Object "/lib/aarch64-linux-gnu/libstdc++.so.6", at 0xffff971e29db, in #3 Object "/lib/aarch64-linux-gnu/libstdc++.so.6", at 0xffff971e51fb, in __gnu_cxx::__verbose_terminate_handler() #2 Object "/lib/aarch64-linux-gnu/libc.so.6", at 0xffff9b22712f, in abort #1 Object "/lib/aarch64-linux-gnu/libc.so.6", at 0xffff9b23a67b, in raise #0 Object "/lib/aarch64-linux-gnu/libc.so.6", at 0xffff9b27f200, in Aborted (Signal sent by tkill() 13395 1000)
解决方案
- 强制启用软件渲染:Parallels的ARM GPU虚拟化对OpenGL部分特性支持不足,启动Gazebo前设置环境变量
export LIBGL_ALWAYS_SOFTWARE=1,再执行gz sim;或者直接用命令LIBGL_ALWAYS_SOFTWARE=1 gz sim临时启用。 - 调整Parallels虚拟机GPU配置:打开虚拟机设置,找到“硬件”-“显卡”,将图形内存调至4GB及以上,确保“启用3D加速”和“使用Metal API”选项处于开启状态,重启虚拟机后再尝试启动Gazebo。
- 切换Gazebo版本:Gazebo Gardens对ARM平台兼容性有待优化,换成Gazebo Fortress(ROS2 Humble官方兼容版本),卸载现有Gardens后安装Fortress,命令如下:
启动时用sudo apt remove gz-gardens sudo apt install gz-fortressgz sim -v 7(Fortress对应版本号7)。 - 更新Parallels Desktop:升级到最新版本,官方会持续修复ARM Ubuntu的GPU虚拟化问题,新版本可能直接解决OpenGL相关崩溃。
内容的提问来源于stack exchange,提问作者Nike Lepz
相关产品推荐
相关产品推荐

