使用ROS Kinetic和Python3忽略cmake参数构建cv_bridge软件包

时间:2019-07-23 16:57:43

标签: python-3.x opencv cmake ros

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

在具有ROS动力学的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)

我已经尝试了上一个问题的答案中的步骤:

Unable to use cv_bridge with ROS Kinetic and 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固定。或者,如果您使用柳絮来构建软件包,则可以执行下一步   步骤:“

该步骤的唯一变体是我必须使用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

catkin配置:

-------------------------------------------------------------------------------------------------------------------------------------------------
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被忽略/定位不正确。

2 个答案:

答案 0 :(得分:0)

我遵循了这个blog post

基本上,您需要创建一个新的catkin工作区,以使其配置不会与您原来的(python2)工作区混淆。

  1. 安装python3和依赖项。我喜欢使用--user而不使用sudo来简化依赖冲突的解决。

    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. 在新工作区中克隆和catkin build vision_opencv。照常继续。 Python3现在应该能够找到cv_bridge。博客文章建议source install/setup.bash --extend,但这对我而言不是必需的。

答案 1 :(得分:0)

在ROS Melodic,Ubuntu 18.04下我遇到了同样的问题,并使用conda分隔了环境。我开始遇到一些奇怪的错误,例如找不到NumPy。在这一点上,这太麻烦了,可能会浪费时间。

这特别令人讨厌,因为我可以使用Python 3启动ROS节点,而OpenCV则运行得很好,只缺少从ROS到CV的传输...

我最终只是将进行翻译的cv_brdige中的行复制到我的包中,并且在不导入cv_bridge包的情况下进行了翻译。

随着ROS越来越多Python 3 friendly,并且有希望发行的软件包,将来将不再是问题。