在Python3环境中使用ROS的cv

    技术2022-07-11  79

    在Python3环境中使用ROS的 cv_bridge

    问题:ROS自带的cv_bridge只支持python2,想要在Python3中使用cv_bridge需要自行编译cv_bridge包。

    本人环境:Ubuntu 18.04+ROS Melodic+ virtualenv虚拟环境(或者 Anaconda3)+Python3.6

    参考stackoverflow,只看第一个回答即可。

    一、编译cv_bridge包与使用依赖cv_bridge包的详细步骤:

    首先进入python3的环境并安装相关依赖包 # 比如先进入 virtualenv 的python3虚拟环境 env_py3 中 workon env_py3 # 然后安装相关依赖包 sudo apt-get install python-catkin-tools python3-dev python3-catkin-pkg-modules python3-numpy python3-yaml ros-kinetic-cv-bridge 创建一个工作空间用于存放待编译的 cv_bridge 文件 mkdir -p catkin_workspace/src 指示carkin设置cmake变量 cd catkin_workspace 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 Instruct catkin to install built packages into install place。这一步不成功也没关系,可不用。 # Instruct catkin to install built packages into install place. It is $CATKIN_WORKSPACE/install folder catkin config --install 在catkin_workspace工作空间中克隆 cv_bridge src git clone https://github.com/ros-perception/vision_opencv.git src/vision_opencv Find version of cv_bridge in your repository apt-cache show ros-kinetic-cv-bridge | grep Version Checkout right version in git repo. In our case it is 1.12.8 cd src/vision_opencv/ git checkout 1.12.8 cd ../../ 开始编译 catkin build 或者 catkin build cv_bridge 进入python3环境(virtualenv)之后,先进入到catkin_workspace工作目录下,运行下面的source,然后再到相关的节点工作空间(如catkin_ws),就可以启动那些使用到cv_bridge库的相关节点了: # 打开虚拟环境env_py3和进入catkin_workspace空间进行source。 workon env_py3 cd catkin_workspace/ # 这里 --extend 参数的作用是让这次的路径配置不影响之前配置好的路径,否则这一次source会覆盖掉之前配置的路径。 source install/setup.bash --extend cd .. # 进入另一个工作空间,该空间含有需要启动的python脚本节点。 cd catkin_ws/src/beginner_tutorials/scripts/ python ImgSub.py

    如果编译过程中遇到下面的报错:

    编译过程中,如果出现下面的报错:

    CMake Error at /usr/share/cmake-3.6/Modules/FindBoost.cmake:1677 (message): Unable to find the requested Boost libraries. Boost version: 1.58.0 Boost include path: /usr/include Could not find the following Boost libraries: boost_python3 No Boost libraries were found. You may need to set BOOST_LIBRARYDIR to the directory containing Boost libraries or BOOST_ROOT to the location of Boost. Call Stack (most recent call first): CMakeLists.txt:11 (find_package)

    这是因为CMake试图找到libboost_python3.so库,但是在ubuntu中它是libboost_python-py36.so(/usr/lib/x86_64-linux-gnu/libboost_python-py36.so)。因此应该在文件src/vision_opencv/cv_bridge/CMakeLists.txt中将下面这行更改find_package()中的内容,更改为python-py36。然后再重新编译: 原始行:

    find_package(Boost REQUIRED python3)

    更改成:

    find_package(Boost REQUIRED python-py36)
    Processed: 0.010, SQL: 9