今回はUbuntu ServerでROS2 Humbleをインストールする手順について解説します。
手順自体は簡単なステップで完了しますが、環境によってはインストール時にエラーが発生する場合があります。
私の環境の場合に発生したエラーとその対処法をまとめました。
動作環境
ハードウェア:Raspberry Pi 4
OS:Ubuntu22.04LTS
ROS2 Humbleのインストール手順
ここからは具体的なインストール手順を解説します。
aptリポジトリの追加
sudo apt update && sudo apt install curl gnupg lsb-release
sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg
リポジトリをsource listに追加
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(source /etc/os-release && echo $UBUNTU_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null
ROS2 インストール
sudo apt update
sudo apt install ros-humble-desktop
インストール完了
以下のように表示されたらインストールが完了です。
pi@ubuntu:~$ sudo apt install ros-humble-desktop
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
ros-humble-desktop is already the newest version (0.10.0-1jammy.20240127.080159).
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
環境変数の設定
以下のコマンドを実行してROS 2環境をアクティベートします。
source /opt/ros/humble/setup.bash
この操作をシェルを開くたびに行いたくない場合は、.bashrc
ファイル(または使用しているシェルに応じた適切な設定ファイル)にこの行を追加して、シェル起動時に自動で実行されるようにすることができます。
echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc
source ~/.bashrc
ROS2の動作テスト
最後にROS2 Humbleの動作テストを行います。
ターミナルで以下のコマンドを実行してください。
ros2 run demo_nodes_cpp talker
以下のように「Hello World」が表示されれば問題なくROS2が動作しています。
発生したエラー
ここからは私の環境でインストール時に発生したエラーと、その対処法を紹介します。
以下のコマンドを実行した際にエラーが発生しました。
sudo apt install ros-humble-desktop
エラー内容は以下となります。
Errors were encountered while processing:
/tmp/apt-dpkg-install-RNL2UZ/0851-python3-catkin-pkg-modules_1.0.0-1_all.deb
/tmp/apt-dpkg-install-RNL2UZ/0894-python3-rospkg-modules_1.5.0-1_all.deb
/tmp/apt-dpkg-install-RNL2UZ/0895-python3-rosdistro-modules_0.9.0-1_all.deb
needrestart is being skipped since dpkg has failed
E: Sub-process /usr/bin/dpkg returned an error code (1)
dpkg
が特定のパッケージの処理中に問題に遭遇したことを示しています。問題のパッケージはpython3-catkin-pkg-modules
、python3-rospkg-modules
、そしてpython3-rosdistro-modules
です。このような問題が発生する一般的な理由には、依存関係の問題、破損したパッケージファイル、または以前のインストールから残っている設定の不整合があります。
依存関係の修復
apt
には依存関係の問題を修復するための機能があります。以下のコマンドを実行してみてください。
このコマンドは、不足している依存関係をインストールし、未完成のインストールを修復しようとします。
sudo apt --fix-broken install
パッケージキャッシュの更新とアップグレードの実行
依存関係やパッケージの問題を解決した後、システムのパッケージキャッシュを更新し、利用可能なアップグレードをすべて適用します。
sudo apt update
sudo apt upgrade
aptのアップデートを実行したところ以下のエラーが発生しました。
Errors were encountered while processing:
/var/cache/apt/archives/python3-catkin-pkg-modules_1.0.0-1_all.deb
/var/cache/apt/archives/python3-rospkg-modules_1.5.0-1_all.deb
/var/cache/apt/archives/python3-rosdistro-modules_0.9.0-1_all.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)
dpkg
がpython3-catkin-pkg-modules
、python3-rospkg-modules
、python3-rosdistro-modules
の3つのパッケージを処理中に問題に遭遇しています。これらはROSのインストールに関連するパッケージであり、依存関係の問題、破損したダウンロード、または以前のインストールの不整合が原因でエラーが発生している可能性があります。
キャッシュのクリア
最初に、APTのキャッシュをクリアして、問題のあるパッケージファイルを削除します。これにより、次回のapt update
やapt install
時に新鮮なパッケージファイルがダウンロードされます。
sudo apt clean
依存関係の修復
依存関係の問題が原因である可能性があるため、apt
の修復オプションを使用して、壊れた依存関係を修復します。
sudo apt --fix-broken install
コマンド実行時に以下のエラーが発生しました。
pi@ubuntu:~$ sudo apt --fix-broken install
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Correcting dependencies... Done
The following additional packages will be installed:
python3-catkin-pkg-modules python3-rosdistro-modules python3-rospkg-modules
The following NEW packages will be installed:
python3-catkin-pkg-modules python3-rosdistro-modules python3-rospkg-modules
0 upgraded, 3 newly installed, 0 to remove and 3 not upgraded.
1192 not fully installed or removed.
Need to get 99.4 kB of archives.
After this operation, 658 kB of additional disk space will be used.
Do you want to continue? [Y/n] y
Get:1 http://packages.ros.org/ros2/ubuntu jammy/main arm64 python3-catkin-pkg-modules all 1.0.0-1 [43.2 kB]
Get:2 http://packages.ros.org/ros2/ubuntu jammy/main arm64 python3-rospkg-modules all 1.5.0-1 [24.2 kB]
Get:3 http://packages.ros.org/ros2/ubuntu jammy/main arm64 python3-rosdistro-modules all 0.9.0-1 [31.9 kB]
Fetched 99.4 kB in 2s (60.1 kB/s)
(Reading database ... 205029 files and directories currently installed.)
Preparing to unpack .../python3-catkin-pkg-modules_1.0.0-1_all.deb ...
Unpacking python3-catkin-pkg-modules (1.0.0-1) ...
dpkg: error processing archive /var/cache/apt/archives/python3-catkin-pkg-modules_1.0.0-1_all.deb (--unpack):
trying to overwrite '/usr/lib/python3/dist-packages/catkin_pkg/__init__.py', which is also in package python3-catkin-pkg 0.4.24-2
Preparing to unpack .../python3-rospkg-modules_1.5.0-1_all.deb ...
Unpacking python3-rospkg-modules (1.5.0-1) ...
dpkg: error processing archive /var/cache/apt/archives/python3-rospkg-modules_1.5.0-1_all.deb (--unpack):
trying to overwrite '/usr/lib/python3/dist-packages/rospkg/__init__.py', which is also in package python3-rospkg 1.3.0-1
Preparing to unpack .../python3-rosdistro-modules_0.9.0-1_all.deb ...
Unpacking python3-rosdistro-modules (0.9.0-1) ...
dpkg: error processing archive /var/cache/apt/archives/python3-rosdistro-modules_0.9.0-1_all.deb (--unpack):
trying to overwrite '/usr/lib/python3/dist-packages/rosdistro/__init__.py', which is also in package python3-rosdistro 0.8.3-2
Errors were encountered while processing:
/var/cache/apt/archives/python3-catkin-pkg-modules_1.0.0-1_all.deb
/var/cache/apt/archives/python3-rospkg-modules_1.5.0-1_all.deb
/var/cache/apt/archives/python3-rosdistro-modules_0.9.0-1_all.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)
dpkg
が特定のファイルを上書きしようとしたときに発生しています。これは、既にインストールされているパッケージ(python3-catkin-pkg
、python3-rospkg
、python3-rosdistro
)が、新しくインストールしようとしているモジュール版パッケージ(python3-catkin-pkg-modules
、python3-rospkg-modules
、python3-rosdistro-modules
)と同じファイルを含んでいるためです。
このような問題を解決するには、既存のパッケージと競合するファイルを持つパッケージを削除(または置き換え)する必要があります。
競合するパッケージの削除
上書きしようとしてエラーが発生したファイルを含むパッケージを削除します。これにより、競合が解消され、残りのパッケージを正常にインストールできるようになります。
sudo apt remove python3-catkin-pkg python3-rospkg python3-rosdistro
コマンド実行時に以下のエラーが発生しました。
pi@ubuntu:~$ sudo apt remove python3-catkin-pkg python3-rospkg python3-rosdistro
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
You might want to run 'apt --fix-broken install' to correct these.
The following packages have unmet dependencies:
python3-rosdep2 : Depends: python3-catkin-pkg but it is not going to be installed
Depends: python3-rosdistro but it is not going to be installed
Depends: python3-rospkg but it is not going to be installed
ros-humble-ament-cmake-core : Depends: python3-catkin-pkg-modules but it is not going to be installed
ros-humble-qt-gui : Depends: python3-catkin-pkg-modules but it is not going to be installed
ros-humble-ros2doctor : Depends: python3-catkin-pkg-modules but it is not going to be installed
Depends: python3-rosdistro-modules but it is not going to be installed
ros-humble-ros2pkg : Depends: python3-catkin-pkg-modules but it is not going to be installed
ros-humble-rqt-gui : Depends: python3-catkin-pkg-modules but it is not going to be installed
ros-humble-rqt-msg : Depends: python3-catkin-pkg-modules but it is not going to be installed
ros-humble-rqt-plot : Depends: python3-catkin-pkg-modules but it is not going to be installed
ros-humble-rqt-publisher : Depends: python3-catkin-pkg-modules but it is not going to be installed
ros-humble-rqt-shell : Depends: python3-catkin-pkg-modules but it is not going to be installed
E: Unmet dependencies. Try 'apt --fix-broken install' with no packages (or specify a solution).
一部のROS Humbleパッケージがpython3-catkin-pkg-modules
、python3-rosdistro-modules
、python3-rospkg-modules
に依存していることを示していますが、これらの依存関係が満たされていない状態です。python3-catkin-pkg
、python3-rospkg
、python3-rosdistro
を削除しようとすると、これらの依存関係が破損するため、エラーが発生します。
依存関係の修復
この問題を解決するには、まずapt --fix-broken install
コマンドを使用して、破損した依存関係を修復する必要があります。このコマンドは、依存関係の問題を自動的に解決し、必要なパッケージをインストールすることでシステムを安定した状態に戻します。
sudo apt --fix-broken install
競合するパッケージの強制削除
依存関係の問題が解決しない場合、dpkg
を使用して競合するパッケージを強制的に削除することができます。(この方法はリスクが伴うため、注意して実行してください。)
sudo dpkg --remove --force-remove-reinstreq python3-catkin-pkg python3-rospkg python3-rosdistro
コマンド実行時に以下のようなエラーが発生しました。
pi@ubuntu:~$ sudo dpkg --remove --force-remove-reinstreq python3-catkin-pkg python3-rospkg python3-rosdistro
dpkg: dependency problems prevent removal of python3-catkin-pkg:
python3-rosdep2 depends on python3-catkin-pkg.
dpkg: error processing package python3-catkin-pkg (--remove):
dependency problems - not removing
dpkg: dependency problems prevent removal of python3-rospkg:
python3-rosdep2 depends on python3-rospkg.
dpkg: error processing package python3-rospkg (--remove):
dependency problems - not removing
dpkg: dependency problems prevent removal of python3-rosdistro:
python3-rosdep2 depends on python3-rosdistro.
dpkg: error processing package python3-rosdistro (--remove):
dependency problems - not removing
Errors were encountered while processing:
python3-catkin-pkg
python3-rospkg
python3-rosdistro
python3-catkin-pkg
、python3-rospkg
、およびpython3-rosdistro
パッケージが他のパッケージによって依存されているため、通常の方法で削除することができないことを示しています。python3-rosdep2
がこれらのパッケージに依存しているため、依存関係の問題が発生しています。
これらの依存関係の問題を解決するためには、依存しているパッケージを先に削除するか、または同時に削除する必要があります。
依存関係にあるパッケージも含めて問題のあるパッケージを強制的に削除し、その後でシステムの整合性を修復します。
実行する前にシステムのバックアップを取ることを強くお勧めします。
python3-rosdep2
を含む依存しているパッケージを一時的に削除します。
sudo dpkg --remove --force-depends python3-rosdep2
コマンド実行時に以下のようなエラーが最後に発生しました。
needrestart is being skipped since dpkg has failed
このメッセージは、dpkg
コマンドが完了した後に、システムが自動的に再起動が必要なサービスをチェックする needrestart
パッケージによって生成されることがあります。この場合、dpkg
が失敗したというメッセージは、実際には dpkg
コマンドの実行によって問題が解決された後に、needrestart
が正常に実行できなかったことを指しています。dpkg
コマンド自体は、指定されたパッケージの削除に成功した可能性が高いです。
システムの整合性を再度チェックして、必要な修復を行います。
sudo apt --fix-broken install
その後、問題のあったパッケージが正常に削除されているかを確認するために、以下のコマンドを実行してください。
dpkg -l | grep -E 'python3-catkin-pkg|python3-rospkg|python3-rosdistro'
このコマンドは、上記のパッケージに関連するものがまだインストールされているかをリストアップします。もしリストに表示されなければ、削除が成功しています。
pi@ubuntu:~$ sudo apt --fix-broken install
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
pi@ubuntu:~$ dpkg -l | grep -E 'python3-catkin-pkg|python3-rospkg|python3-rosdistro'
ii python3-catkin-pkg-modules 1.0.0-1 all catkin package library
ii python3-rosdistro-modules 0.9.0-1 all A tool to work with rosdistro files
ii python3-rospkg-modules 1.5.0-1 all ROS package library
表示された情報に基づくと、python3-catkin-pkg-modules
、python3-rosdistro-modules
、python3-rospkg-modules
の各モジュールがインストールされていることが確認できます。これらは、以前の python3-catkin-pkg
、python3-rosdistro
、python3-rospkg
パッケージの代わりにインストールされたものであり、ROS 2 の依存関係を満たすために必要なモジュールです。
この状態は、依存関係の問題が解決され、システムが再び安定した状態にあることを示しています。ROS 2のインストールまたは使用に戻ることができます。
sudo apt install python3-rosdep2
以下のようにメッセージが表示され、ROS2のインストールが成功したことが確認できました。
pi@ubuntu:~$ sudo apt install ros-humble-desktop
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
ros-humble-desktop is already the newest version (0.10.0-1jammy.20240127.080159).
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
まとめ
Ubuntu ServerでROS2 Humbleをインストールする手順を解説しました。
同じようなエラーが発生している方は、ぜひ参考にしてみてください。
それでは、また次の記事でお会いしましょう。
コメント