繁体   English   中英

使用 ROS Kinetic 和 Python3 构建 cv_bridge 包而忽略 Cmake 参数

[英]Building cv_bridge Package with ROS Kinetic and Python3 ignoring Cmake Arguments

我正在尝试将 ROS 包集成到我们的研究项目系统中,并且需要 cv_bridge 包和 python3 才能使包正常工作。 目前我无法在 python3 中构建 cv_bridge 包,尽管有多个步骤,但在 python2 目录中不断构建。

使用 ROS kinetic 在 Ubuntu 16.04 中工作。 使用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 传递给 cmake 来实现。 或者,如果您使用 catkin 来构建软件包,则可以执行以下步骤:”

这些步骤的唯一变化是我必须使用 catkin_make,因为我正在使用的一堆较旧的软件包的问题目前不适用于 catkin build。 不知道是不是这个原因。 但是我将 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 args 被忽略/没有正确定位。

我关注了这篇博文

本质上,您需要创建新的 catkin 工作区,以便其配置不会与原始 (python2) 工作区混淆。

  1. 安装 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
  2. 新建一个工作区

    mkdir py3_catkin_ws cd py3_catkin_ws mkdir src
  3. 配置了 python3 的初始化 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
  4. Clone 和catkin在您的新工作区中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越来越友好,并且包有望随之而来,这在未来不会成为问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM