実行環境: Ubuntu 22.04.5 LTS, ROS2 humble
ros2及びISAAC SIMをインストールした後に、ros2単体で起動しようとするとspdlog.soがimportできず起動に失敗することがあります。
mizuki@mizuki-FRONTIER:~/PX4-Autopilot$ ros2
Traceback (most recent call last):
File "/opt/ros/humble/bin/ros2", line 33, in <module>
sys.exit(load_entry_point('ros2cli==0.18.11', 'console_scripts', 'ros2')())
File "/opt/ros/humble/bin/ros2", line 25, in importlib_load_entry_point
return next(matches).load()
File "/usr/lib/python3.10/importlib/metadata/__init__.py", line 171, in load
module = import_module(match.group('module'))
File "/usr/lib/python3.10/importlib/__init__.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 1050, in _gcd_import
File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 688, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 883, in exec_module
File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
File "/opt/ros/humble/lib/python3.10/site-packages/ros2cli/cli.py", line 22, in <module>
from rclpy.executors import ExternalShutdownException
File "/opt/ros/humble/local/lib/python3.10/dist-packages/rclpy/__init__.py", line 49, in <module>
from rclpy.signals import install_signal_handlers
File "/opt/ros/humble/local/lib/python3.10/dist-packages/rclpy/signals.py", line 15, in <module>
from rclpy.exceptions import InvalidHandle
File "/opt/ros/humble/local/lib/python3.10/dist-packages/rclpy/exceptions.py", line 15, in <module>
from rclpy.impl.implementation_singleton import rclpy_implementation as _rclpy
File "/opt/ros/humble/local/lib/python3.10/dist-packages/rclpy/impl/implementation_singleton.py", line 32, in <module>
rclpy_implementation = import_c_library('._rclpy_pybind11', package)
File "/opt/ros/humble/lib/python3.10/site-packages/rpyutils/import_c_library.py", line 39, in import_c_library
return importlib.import_module(name, package=package)
File "/usr/lib/python3.10/importlib/__init__.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
ImportError: /opt/ros/humble/lib/librcl_logging_spdlog.so: undefined symbol: _ZN6spdlog7details7log_msgC1ENS_10source_locEN3fmt2v817basic_string_viewIcEENS_5level10level_enumES6_
The C extension '/opt/ros/humble/local/lib/python3.10/dist-packages/rclpy/_rclpy_pybind11.cpython-310-x86_64-linux-gnu.so' failed to be imported while being present on the system. Please refer to 'https://docs.ros.org/en/{distro}/Guides/Installation-Troubleshooting.html#import-failing-even-with-library-present-on-the-system' for possible solutions
このエラーはlibrcl_logging_spdlog.soが破損している場合に起こる可能性があるので、通常であれば単純にros2の再インストールで解決できそうですが、ISAAC SIMを入れている場合、ISAAC SIMにバンドルされたROS2 (今回の場合はhumble)を先に読み込むことがあります。ISAAC SIMの方が壊れている場合はISACC SIMにバンドルされたhumbleを読み込まないようにするため~.bashrcから以下の行をコメントアウト(ISAAC SIMのチュートリアルに従っていれば以下の行が存在するはず)し、ターミナルをリスタートします。
その後はros2コマンドを打ってもエラーにならず、正常に起動することができます。
以下の例はpx4のros2リスナー起動