ROS无法导入第三方库

ROS can't import third party libraries

我正在尝试在我的 ROS 环境中使用 tkinter,但我在设置它时遇到了一些问题。我像这样将它添加到我的 packages.xml 文件中

<build_depend>roscpp</build_depend>
<build_depend>rospy</build_depend>
<build_depend>std_msgs</build_depend>
<depend>python-tk</depend>
<build_export_depend>roscpp</build_export_depend>
<build_export_depend>rospy</build_export_depend>
<build_export_depend>std_msgs</build_export_depend>
<exec_depend>roscpp</exec_depend>
<exec_depend>rospy</exec_depend>
<exec_depend>std_msgs</exec_depend>

但是当我用 rosdep install [my package] 安装包时,我有 import tkinter 的节点仍然不会 运行,而是 returns ImportError: No module named tkinter。我对 ROS 比较陌生,之前没有安装过第三方软件包,所以我不确定我是否遗漏了什么。在此先感谢您的帮助!

如果是第三方library/package,ros 可能不知道如何安装。如果安装正确,rosdep 应该有一个规则缓存来安装由社区手动创建的各种包。如果一切正常,当你 运行 rosdep install my_new_pkg,它应该说 All required rosdeps installed successfully,或者失败报告

ERROR: the following packages/stacks could not have their rosdep keys resolved to system dependencies:
my_new_pkg: Cannot locate rosdep definition for [tkinter]

这意味着没有预定义的安装规则。 (它应该使用 pip/pip3 吗?搜索 apt?apt install ros-version-tkinter 或 apt install tkinter?) 这不是说不能做,而是不加规则是不行的。但是,如果您通过其他方式安装它,它仍会检查它是否已安装。您可以尝试使用 rosdep update 将缓存更新到全局,但这对 tkinter 没有帮助。

这是rosdep tutorial for system deps。如果你有一堆 3rd pary python 包,你可以做正常的 python env + requirements.txt 文件。 (偏 ex,使用 pyenv+virtualenv + direnv 自动调用 pip install on your requirements.txt) 否则,您可以在 CMakeLists.txt 文件中设置一个挂钩,以便在每次编译之前在 requirements.txt 文件上调用 pip install,或者通过其他方式。

编辑:请记住,ROS Melodic 及更早版本使用 python2。在 python2,according to the docs 中,它是 import Tkinter。小写导入是 python3.

的规范