ROS melodic 安装 python3 cv_bridge
有时候,我们需要处理这些兼容性问题。此处列举我的过程,以供参考
mkdir -p my_ws_py39/src
cd my_ws_py39
catkin_make_isolated
-DPYTHON_EXECUTABLE=/usr/bin/python3 \
-DPYTHON_INCLUDE_DIR=/usr/include/python3.8 \
-DPYTHON_LIBRARY=/usr/lib/x86_64-linux-gnu/libpython3.8.so
catkin_make_isolated allows per-package customization,和常见的 catkin_make 在这里区别不大。很多教程都推荐加上 --install,我这里没有,因为失败了,原因在下面。
其中,三个 命令行标识需要更改为你自己的环境路径,你可以通过
python3 -c "import sysconfig; print(sysconfig.get_path('include'))"
python3 -c "import sysconfig; print(sysconfig.get_config_var('LIBDIR'))"
来找到后两个。至于第一个,因为我在 miniconda下,可以通过指令
conda env list
查看。若是 linux,可以使用指令:
which python
显示当前 激活的(actived) python环境。在编译成功后,刷新当前环境,执行指令
source my_ws_py39/devel_ioslated/setup.bash
注意路径。此处我处于 ~路径下。
然后,将 vision_opencv-melodic.zip 文件夹放在 my_ws_py39/src目录下,并解压。此处更通用的做法是通过 git 指令进行 clone。我不想花时间在 git 配置上,直接以 zip的形式下载。
再重新走一遍 上述的 catkin_make_isolated指令,带上必要的命令行选项。
若成功,进行测试。
rospack find cv_bridge
查看文件路径。
第二份测试方式,先在一个终端中执行 roscore,启动 rosmaster。再在另一个终端中运行下述脚本,保证它能够运行在 ros 网络中。记得 通过指令
chmod +x test_cv_bridge.py
给脚本权限。此处,我假设脚本名为 test_cv_bridge.py
#!/usr/bin/env python
import rospy
from cv_bridge import CvBridge
import cv2
if __name__ == '__main__':
rospy.init_node('cv_bridge_test')
bridge = CvBridge()
# 创建一个空白图像用于测试
import numpy as np
img = np.zeros((100,100,3), dtype=np.uint8)
try:
# 将 OpenCV 格式转换为 ROS 图像消息
img_msg = bridge.cv2_to_imgmsg(img, encoding="bgr8")
rospy.loginfo("cv_bridge 工作正常!")
except Exception as e:
rospy.logerr("cv_bridge 测试失败: %s", e)
Addition
--install失败的原因。
这里是log,方便查看:
error: option --install-layout not recognized
CMake Error at catkin_generated/safe_execute_install.cmake:4 (message):
execute_process(.../catkin_generated/python_distutils_install.sh)
returned error code
查了资料,因为 cv_bridge
的 setup.py
(或 CMakeLists.txt
)中的 --install-layout
选项在 Python 3 下不被识别。
为什么分两次编译
第一次编译是为了 创建这个工作空间,然后通过 source 指令刷新该工作空间。这样,后面的编译操作,都会找到该工作空间中的信息,也即,它会使用python3。
第二次编译则是为了编译 cv_bridge。即我们真正的目的。
所以第一次编译是 必要的 preprocess,预处理。