えいあーるれいの技術日記

ROS2やM5 Stack、Ubuntuについて書いています

rqt_graphの謎のエラーを解消したはなし

 学会発表が終わり、今年度の学会発表4回が全て終わりました!昨年の自分がこの事実を聞いたらどんな顔をするのでしょうか…?昨年は学会発表について一切知らなかったし、頭になかったので、「はぁぁ?」となりそうな気がします。

 来年度はどんな1年になるのか、正直わくわくびくびくしております。自分が想定している範囲内では事業起こしが十分に現実味を帯びているので、来年も暇な1年にはならないと思っています。(残念…)

本題

 結構前からROS2のrqt_graphで以下のようなエラーメッセージが出ていました。

f:id:Ray_ar:20210310202133p:plain
エラー画面

 詳細

RosPluginProvider.load(qt_gui_cpp/CppPluginProvider) exception raised in __builtin__.__import__(qt_gui_cpp.cpp_plugin_provider, [CppPluginProvider]):
Traceback (most recent call last):
  File "/opt/ros/dashing/lib/python3.6/site-packages/rqt_gui/ros_plugin_provider.py", line 81, in load
    attributes['module_name'], fromlist=[attributes['class_from_class_type']], level=0)
  File "/opt/ros/dashing/lib/python3.6/site-packages/qt_gui_cpp/cpp_plugin_provider.py", line 33, in <module>
    from .cpp_binding_helper import qt_gui_cpp
  File "/opt/ros/dashing/lib/python3.6/site-packages/qt_gui_cpp/cpp_binding_helper.py", line 43, in <module>
    from . import libqt_gui_cpp_sip
ValueError: PyCapsule_GetPointer called with incorrect name

RecursivePluginProvider.discover() loading plugin "qt_gui_cpp/CppPluginProvider" failed:
Traceback (most recent call last):
  File "/opt/ros/dashing/lib/python3.6/site-packages/qt_gui/recursive_plugin_provider.py", line 60, in discover
    instance = self._plugin_provider.load(plugin_descriptor.plugin_id(), None)
  File "/opt/ros/dashing/lib/python3.6/site-packages/rqt_gui/ros_plugin_provider.py", line 91, in load
    raise e
  File "/opt/ros/dashing/lib/python3.6/site-packages/rqt_gui/ros_plugin_provider.py", line 81, in load
    attributes['module_name'], fromlist=[attributes['class_from_class_type']], level=0)
  File "/opt/ros/dashing/lib/python3.6/site-packages/qt_gui_cpp/cpp_plugin_provider.py", line 33, in <module>
    from .cpp_binding_helper import qt_gui_cpp
  File "/opt/ros/dashing/lib/python3.6/site-packages/qt_gui_cpp/cpp_binding_helper.py", line 43, in <module>
    from . import libqt_gui_cpp_sip
ValueError: PyCapsule_GetPointer called with incorrect name

 これまでは「まー、GUIで見るほどでもないしいいか」と諦めていたのですが、ネームスペースを多用する機会が多くなりさすがに看過できなくなったので、解決することにしました。

 Stack Overflowなどでは、似たエラーに対して「PyQt5をダウングレードするといいよ」などのアドバイスがありました。rqt_graphにバージョンの違いがあるのか…?

 なんやかんや調べたら、解決策がありました。原因は、python3-pyqt5とpip3でのPyQt5がどちらもインストールされていてそのバージョンの差があるからとのことでした。

github.com

 というわけで、pip3版Qt5をアンインストールしました。$ pip3 uninstall PyQt5

f:id:Ray_ar:20210310202017p:plain
表示が可能になった状態

 Pythonはaptで入るパッケージとpipで入るパッケージとconda等で入るパッケージがあるので管理が面倒ですねー😇