如何将系统包(即 rospy、std_msgs、geoemtry_msgs)导入到我使用 python2 的虚拟环境中?

How can I import system packages (i.e. rospy, std_msgs, geoemtry_msgs) into my virtual environment that's using python2?

之前,我使用以下方法安装了 PX4 固件、ROS 和 Gazebo:

wget https://raw.githubusercontent.com/PX4/Devguide/master/build_scripts/ubuntu_sim_ros_melodic.sh
bash ubuntu_sim_ros_melodic.sh

我相信这两行安装了 ROS 等所需的所有软件包,我只需要安装 python 2.7,因为我是 运行ning ros-melodic。但是,我曾尝试安装 anaconda,然后尝试导入所需的包(rospy、std_msgs、geometry_msgs <- 找不到 geometry_msgs),但它是 运行宁 Python 3.8。最后我决定卸载anaconda,因为我一直听说在conda环境下很难用ros。由于某种原因我的机器上已经安装了 python2.7,所以我只是继续创建一个 python 虚拟环境,并且有很多关于如何执行此操作的教程。

首先我用catkin创建了一个ros工作区

mkdir -p drone/src
catkin_make
cd src
catkin_create_pkgs bigdrone std_msgs geometry_msgs rospy

我打开 Pycharm-Professional 并从 drone/venv/bin/python 设置解释器。现在我再次尝试导入我的包,但所有包都丢失了。我想也许是因为它是一个虚拟环境,所以找不到包,所以我切换到/usr/bin/python2.7中的python。我需要的软件包仍然丢失,但我确实可以访问一些像 rosdep 之类的东西。此外,当我在终端上简单地 运行 时:

python
>>> import rospy
>>> import std_msgs
>>> import geometry_msgs

出于某种原因,一切似乎都运行良好。

它无法在 Pycharm 中找到那些软件包但可以从您的终端中找到的原因是您的终端中有 运行 source /opt/ros/melodic/setup.bash。此文件设置环境变量并将更新 PYHTONPATH 以包含 ros 特定模块,如您提到的模块。您可能可以通过从具有 /opt/ 源文件的终端启动 Pycharm 来使其工作。

也就是说,更完整的解决方案是将 ros distpackages 添加到您的虚拟环境中。可以找到添加外部包的步骤here,要添加的路径是/opt/ros/melodic/lib/python2.7/distpackages。之后,您可以转到“文件”>“设置”>“项目”:>“项目解释器”。从那里您可以从列表中指定 ROS Python 解释器。