我正在尝试将ROS包集成到我们的系统中以进行研究项目,并且需要cv_bridge包和python3才能使包正常工作。目前,尽管有多个步骤,但我无法在python3中构建cv_bridge包,不断在python2目录中构建。
在 Ubuntu 16.04 中使用 ROS kinetic。使用 python3.5
错误信息:
[ERROR] [1563897986.999724]: bad callback: <function color_callback at 0x7f00ffa06598>
Traceback (most recent call last):
File "/opt/ros/kinetic/lib/python2.7/dist-packages/rospy/topics.py", line 750, in _invoke_callback
cb(msg)
File "/home/rival/Documents/Repos/ROS/src/rcnn_apple_detector/detection.py", line 84, in color_callback
image = bridge.imgmsg_to_cv2(image_msg, "bgr8")
File "/home/rival/Documents/Repos/ROS/src/vision_opencv/cv_bridge/python/cv_bridge/core.py", line 163, in imgmsg_to_cv2
dtype, n_channels = self.encoding_to_dtype_with_channels(img_msg.encoding)
File "/home/rival/Documents/Repos/ROS/src/vision_opencv/cv_bridge/python/cv_bridge/core.py", line 99, in encoding_to_dtype_with_channels
return self.cvtype2_to_dtype_with_channels(self.encoding_to_cvtype2(encoding))
File "/home/rival/Documents/Repos/ROS/src/vision_opencv/cv_bridge/python/cv_bridge/core.py", line 91, in encoding_to_cvtype2
from cv_bridge.boost.cv_bridge_boost import getCvType
ImportError: dynamic module does not define module export function (PyInit_cv_bridge_boost)
我已经尝试了上一个问题的答案中的步骤:
无法将cv_bridge与 ROS Kinetic 和 Python3 一起使用
"你是对的,你应该用python3构建cv_bridge。
你可以通过传递 -DPYTHON_EXECUTABLE=/usr/bin/python3 来做到这一点 -DPYTHON_INCLUDE_DIR=/usr/include/python3.5m -DPYTHON_LIBRARY=/usr/lib/x86_64-linux-gnu/libpython3.5m.so args to cmake.或者,如果您使用 catkin 构建软件包,您可以执行下一步操作 步骤:">
这些步骤的唯一变化是我必须使用catkin_make因为我使用的一堆旧包的问题目前不适用于 catkin 构建。我不知道这是否是原因造成的。但是我将 cmake 参数传递到我的工作区中,它仍然针对 ROS python2 目录。
位置cv_bridge目前仍在建设中:
/opt/ros/kinetic/lib/python2.7/dist-packages
版本:
apt-cache show ros-kinetic-cv-bridge | grep Version
Version: 1.12.8-0xenial-20190320-142632-0800
卡特金配置:
-------------------------------------------------------------------------------------------------------------------------------------------------
Profile: default
Extending: [env] /home/rival/Documents/Repos/ROS/devel:/opt/ros/kinetic
Workspace: /home/rival/Documents/Repos/ROS
---------------------------------------------------------------------------------------------------------------------------------------------------
Build Space: [exists] /home/rival/Documents/Repos/ROS/build
Devel Space: [exists] /home/rival/Documents/Repos/ROS/devel
Install Space: [missing] /home/rival/Documents/Repos/ROS/install
Log Space: [missing] /home/rival/Documents/Repos/ROS/logs
Source Space: [exists] /home/rival/Documents/Repos/ROS/src
DESTDIR: [unused] None
---------------------------------------------------------------------------------------------------------------------------------------------------
Devel Space Layout: linked
Install Space Layout: merged
---------------------------------------------------------------------------------------------------------------------------------------------------
Additional CMake Args: -DPYTHON_EXECUTABLE=/usr/bin/python3 -DPYTHON_INCLUDE_DIR=/usr/include/python3.5m -DPYTHON_LIBRARY=/usr/lib/x86_64-linux-gnu/libpython3.5m.so
Additional Make Args: None
Additional catkin Make Args: None
Internal Make Job Server: True
Cache Job Environments: False
---------------------------------------------------------------------------------------------------------------------------------------------------
Whitelisted Packages: None
Blacklisted Packages: None
---------------------------------------------------------------------------------------------------------------------------------------------------
Workspace configuration appears valid.
采取的确切步骤:
sudo apt-get install python-catkin-tools python3-dev python3-catkin-pkg-modules python3-numpy python3-yaml ros-kinetic-cv-bridge
catkin clean
catkin config -DPYTHON_EXECUTABLE=/usr/bin/python3 -DPYTHON_INCLUDE_DIR=/usr/include/python3.5m -DPYTHON_LIBRARY=/usr/lib/x86_64-linux-gnu/libpython3.5m.so
cd src/vision_opencv/
git checkout 1.12.8
catkin_make cv_bridge
source devel/setup.bash --extend
我希望cv_bridge是用 cmake 参数构建的,但它仍然被定位回 python2 目录。似乎 cmake 参数被忽略/未正确定位。
我关注了这篇博文。
本质上,您需要创建新的 catkin 工作区,以便其配置不会弄乱您的原始 (python2) 工作区。
-
安装 python3 和依赖项。我喜欢使用没有 sudo 的
--user
来更轻松地解决依赖冲突。sudo apt-get install python-catkin-tools python3-dev python3-numpy sudo apt-get install python3-pip python3-yaml pip3 install rospkg catkin_pkg --user
-
创建新工作区
mkdir py3_catkin_ws cd py3_catkin_ws mkdir src
-
配置了 python3 的 Init catkin(使用您的 python3x 版本)
catkin config -DPYTHON_EXECUTABLE=/usr/bin/python3 -DPYTHON_INCLUDE_DIR=/usr/include/python3.6m -DPYTHON_LIBRARY=/usr/lib/x86_64-linux-gnu/libpython3.6m.so catkin config --install
-
在新工作区中克隆和
catkin build
vision_opencv。像往常一样继续。Python3现在应该能够找到cv_bridge
。博客文章建议source install/setup.bash --extend
,但就我而言,这不是必需的。
我在 ROS Melodic、Ubuntu 18.04 下遇到了同样的问题,并使用 conda 来分离环境。我开始收到一些奇怪的错误,例如找不到NumPy。在这一点上,这太麻烦了,而且可能浪费时间。
这特别烦人,因为我可以使用 Python 3 启动我的 ROS 节点,并且 OpenCV 运行良好,只是缺少从 ROS 到 CV 的转换......
我最终只是将翻译的cv_brdige
行复制到我的包中,并在不导入包的情况下进行翻译cv_bridge
。
随着 ROS 对 Python 3 越来越友好,并且包有望随之而来,这在未来不会成为问题。