Ubuntu 20.04と最新Intel CPUでRVizを動かすDocker設定

最近ROSの開発に使用するPCを新しくしました。そこでRViz/RViz2などのOpenGLを使うソフトウェア周りでトラブルがあったので、その内容と対処方法を紹介します。

この記事はROS 2 Advent Calendar 2024の12/20の記事として投稿しています。

目次

要約

今回から新たな取り組みとしてChatGPTを使って本記事を要約した内容も紹介しておくことにします。ChatGPT o1で要約しました。

本記事ではUbuntu 20.04を新しいIntel CPUとDocker環境で利用する際に生じるRVizのソフトウェアレンダリング問題を、kisak-mesa PPAから最新のMesaドライバを導入して解決する手順を紹介します。

背景

ROSとUbuntuディストリビューションの関係

ROSの開発では、使用するROSのディストリビューションが対応するUbuntuのバージョンに制約されることがよくあります。たとえば、ROS 1の最後のディストリビューションであるROS NoeticはUbuntu 20.04での利用が前提とされており、このバージョンは2025年4月までサポートされます。そのため、Ubuntu 20.04を引き続き使用する必要がある状況が生じることもあります。
ROS 2/ROS 1のメッセージを変換するためのros1_bridgeも、基本的にはROS NoeticとあわせてUbuntu 20.04でROS 2 Foxy/Galacticで動かすことが多いと思います。

Ubuntu 20.04と最新CPUの対応状況

標準構成のUbuntu 20.04では、IntelのCPU内蔵GPU(iGPU)ドライバであるintel-media-driver(mesa)は 21.2.6 が最新のものとしてビルド済のバイナリが用意されているようです。このため、IntelのCPUは最新が第15世代となっていますが(2024年12月現在)、Ubuntu 20.04の標準的なソフトウェアで対応しているPCは、IntelのCPUのものの場合には第10~12世代までに限定されている状況です。

AMDのCPUはあまり使わないので詳しくは把握できていませんが、最新世代のCPUに対応したドライバがUbuntu 20.04では入手しづらい※というのはある程度似ているようです。
※ここでいう「入手しづらい」というのは、自分でソースからビルドしたり、有志によってビルドされたバイナリを入手してくる必要があるなどを指します。

Lenovoのサイトには各PCごとにOS対応表がありますが、最新のものはUbuntu 22.04や24.04が必要になってくるようです。

LenovoのLinux対応リスト
https://support.lenovo.com/jp/ja/solutions/pd031426-linux-for-personal-systems

ROS開発の際のPC選び

CPUとOSの対応状況を考えたとき、Ubuntu 20.04をインストールするPCとしてIntelのCPUを選ぶ場合は第11世代か第12世代のものを搭載したものを調達するのが楽そうではあるものの、残念ながらだんだん新品では調達しづらくなって来ているようです。中古で出回っているものもありますが、多くはIntelだと第8~10世代のCPUを搭載したものが多く、さらにメモリが若干少ないような印象があります。CPUが少し古くても何とかなりますが、メモリが少ないのは困ります。

そうなってくるともう少し新しい世代のCPUを搭載したPCを調達してUbuntu 22.04や24.04などをインストールし、仮想マシンやDockerを使って開発するのが良さそうです。

新しいPCで発生した問題

GPUレンダリングの問題とその原因

Ubuntu 20.04の標準的な環境では、最新のIntel CPU向けのグラフィックスドライバが提供されていません。たとえホストマシンで新しいOSと最新ドライバを使用していても、Dockerを使ってUbuntu 20.04のコンテナを起動し、ホストマシンへX11転送を行うと、GPUでOpenGLのソフトウェアをレンダリングできない状況が発生するようです。

このため、RVizを使用する際に常にソフトウェアレンダリングに切り替わり、CPU使用率が100%に張り付くという問題に遭遇しました。

mesaバージョンの違いによる影響

色々調べたところ、下記のフォーラムで第13世代のRaptor Lakeに対応しているのは mesaのバージョン22.4.2 以降であると書かれているのを見かけました。

Launchpad
Bug #2004237 “Intel Raptor Lake-P support for intel-media-driver...” : Bugs : intel-media-driver pac... [ Impact ] Requirement for Raptor Lake-P support in media-driver for jammy:   media-driver >= 22.4.2 (commit 5054a321d7) [ Test Plan ] 1. Run 'vainfo' and ensur...

最新版のドライバを使うことでこの問題は解決できる可能性が高そうと考え、Ubuntu 20.04のDockerイメージに新しいバージョンのmesaをインストールしてみたところ問題が解決できたので、詳細を共有します。

解決方法:Ubuntu 20.04のDockerイメージを修正

今回は有志が提供するバイナリを使用する方法でUbuntu 20.04のDockerイメージを用意し、Intelの第13世代CPUであるi5-1335U搭載のPCでもRVizを問題なく使えるようにする方法を紹介します。

実際に下記の環境で確認しました。

  • CPU:Intel Core i5-1335U(第13世代)
  • OS:Ubuntu 22.04.5
  • Docker:Docker Engine Version 27.3.1

使用するのは下記のPPA(Personal Package Archives)リポジトリです。

Launchpad
kisak-mesa fresh : kisak The goal of this PPA is to provide the latest point release of Mesa plus select non-invasive early backports. Deviations from upstream packages are listed on th...

Dockerfileでは上記の有志が提供するPPAを使用してmesaドライバをインストールするようにします。具体的には、下記のRUNコマンドを追加します。

# install the latest intel media driver to use GPU
# Avoid libGL error: failed to create dri screen
# https://bugs.launchpad.net/ubuntu/+source/intel-media-driver/+bug/2004237
RUN apt-get update && \
    apt-get install -y software-properties-common && \
    add-apt-repository ppa:kisak/kisak-mesa && \
    apt-get update && \
    apt-get upgrade -y && \
    apt-get install -y libegl-mesa0 && \
    rm -rf /var/lib/apt/lists/*

このDockerfileのようにUbuntu 20.04に新しいmesaドライバをインストールすることで、下記のようにRVizのCPU使用率を大幅に下げて開発ができるようになりました。

GitHub
docker-ros/noetic/Dockerfile at main · Tiryoh/docker-ros Dockerfiles to use ROS with osrf/rocker. Contribute to Tiryoh/docker-ros development by creating an account on GitHub.

RVizのCPU使用率が改善された様子を以下のスクリーンショットで示します。上が変更前、下が変更後です。

before
after

まとめ

今回は、Ubuntu 20.04のDockerイメージを最新のIntel CPU環境で利用する際に発生するRVizのGPUレンダリング問題について、その原因と解決策をまとめました。
具体的には、有志のkisak-mesa PPAを利用してmesaの最新版をインストールする方法で解決できました。この方法はAMDのCPUでも同様の効果が期待できる可能性があります。RVizのパフォーマンスにお困りの方はぜひ試してみてください。

この記事が気に入ったら
フォローしてね!

よかったらシェアしていただけると励みになります!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

Memotekiの管理人です。このブログには学んだことや共有しておきたいことをマイペースにメモしていきます。2020年からは日記も書き始めました。

コメント

コメントする


reCaptcha の認証期間が終了しました。ページを再読み込みしてください。

目次