ros使用python3编译cv_bridge、tf等packages

2020-5-17更新

如果你是在使用Kitti2bag时出错就创建一个python2的环境吧,在环境中安装opencv、kitti2bag、以及安装一些必要的包(根据实际情况)

pip install catkin_pkg pyyaml empy rospkg numpy

然后在对应的目录下执行kitti2bag脚本就可以了。
在这里插入图片描述


原文

https://stackoverflow.com/questions/49221565/unable-to-use-cv-bridge-with-ros-kinetic-and-python3

https://community.bwbot.org/topic/499/%E5%9C%A8ros%E4%B8%AD%E4%BD%BF%E7%94%A8python3/2


理解不到位的地方还请多多指正


在使用kitti2bag时候,会出现各种问题,下面简单列举

先看一下kitti2bag的文件内容

#!/home/s/anaconda3/envs/py3.7/bin/python3.7
# -*- coding: utf-8 -*-

import sys

try:
    import pykitti
    print('-----')
except ImportError as e:
    print('Could not load module \'pykitti\'. Please run `pip install pykitti`')
    sys.exit(1)

# clear py2.7 
# sys.path.remove('/opt/ros/kinetic/lib/python2.7/dist-packages')
# print(sys.path)

# sys.path.append('/home/s/anaconda3/envs/py3.7/lib/python3.7/site-packages')
# sys.path.remove('/home/s/ros_study/devel/lib/python2.7/dist-packages')
# print(sys.path)
# sys.path.append('/opt/ros/kinetic/lib/python2.7/dist-packages')
# print(sys.path)
import tf
import os
import cv2
import rospy
import rosbag
import progressbar
from tf2_msgs.msg import TFMessage
from datetime import datetime
from std_msgs.msg import Header
from sensor_msgs.msg import CameraInfo, Imu, PointField, NavSatFix
import sensor_msgs.point_cloud2 as pcl2
from geometry_msgs.msg import TransformStamped, TwistStamped, Transform
print(tf.__file__)
sys.path.append('/opt/ros/kinetic/lib/python2.7/dist-packages')
import cv_bridge
from cv_bridge import CvBridg
<think>好的,我现在需要解决用户在ROS中遇到的cv_bridge导入错误,具体是ImportError:dynamic moduledoes notdefine moduleexport function(PyInit_cv_bridge_boost)。用户提到是在PyCharm中出现的这个问题。首先,我得回忆一下常见的ROSPython环境配置问题,尤其是涉及Python2和3的兼容性问题,因为ROS1(比如Indigo、Kinetic、Melodic)主要依赖Python2.7,而用户可能错误地使用Python3环境。根据引用[3]和[4],问题可能出在Python版本不匹配。例如,cameracalibrator.py默认用Python3执行,但ROSIndigo只支持Python2.7。用户可能在PyCharm中配置了错误的解释器。需要检查PyCharm的项目解释器设置,确保使用的是Python2.7。接下来,cv_bridge编译可能存在问题。ROS自带的cv_bridge可能不支持Python3,如果用户需要同时使用Python3ROS,可能需要从源码编译支持Python3cv_bridge,但这个过程容易出错。或者用户可能没有正确安装ROSPython包,比如python-catkin-tools或相关依赖。另外,环境变量也可能影响,比如PYTHONPATH是否正确指向ROSPython2.7的dist-packages目录,而不是系统默认的Python3路径。此外,动态模块的错误通常是由于模块编译时的Python版本与运行时的版本不一致导致的,比如用Python3编译的模块被Python2.7加载,反之亦然。用户可能尝试过复制某些包,但引用[2]提到这种方法无效,甚至出现其他类似错误,如tf2的问题,说明手动复制可能破坏了包的完整性。正确的做法应该是重新配置环境或重新编译相关包。 解决方案可能包括:1)确认PyCharm中的Python解释器设置为Python2.7;2)使用virtualenv或conda环境隔离Python2.7;3)重新编译cv_bridge以兼容Python3(如果必须使用Python3);4)检查ROS的环境变量是否在PyCharm中正确加载,比如通过source devel/setup.bash;5)安装ROSPython2依赖包,如python-cv-bridge;6)确保所有ROS相关的包都是通过catkin_make或catkinbuild正确编译的,避免部分模块未正确构建。 可能还需要指导用户如何正确在PyCharm中配置ROS环境,比如通过添加ROS的路径到项目解释器的PATHPYTHONPATH中,或者使用rosrun等命令来启动脚本,而不是直接运行。此外,检查cv_bridge的安装情况,是否在正确的site-packages目录下存在编译后的模块文件,并确认其版本兼容性。 需要分步骤详细说明,确保用户能逐步检查和调整环境配置,避免遗漏关键步骤。同时,生成相关问题可以帮助用户深入理解类似问题的解决方法,比如如何处理其他ROSPython包的导入错误,或者如何配置PyCharm以适配ROS开发环境。</think>### ROS中解决`cv_bridge`导入错误的步骤 #### 1. **确认Python版本兼容性** - **问题根源**:ROS1(如Indigo、Kinetic、Melodic)默认依赖Python 2.7,而`cv_bridge`的Python模块可能未正确编译Python3环境中[^3][^4]。 - **解决方法**: - 在PyCharm中,检查项目解释器是否为Python 2.7: - 打开 **File -> Settings -> Project -> Python Interpreter**。 - 选择Python 2.7路径(例如`/usr/bin/python2.7`或虚拟环境路径)。 - 若需同时使用Python3,需从源码编译支持Python3的`cv_bridge`(见步骤3)。 --- #### 2. **配置ROS环境变量** - **问题**:PyCharm可能未加载ROS的环境变量(如`PYTHONPATH`)。 - **解决方法**: - 在PyCharm的终端中手动加载ROS环境: ```bash source /opt/ros/<distro>/setup.bash # 例如Kinetic用source /opt/ros/kinetic/setup.bash ``` - 或在PyCharm的 **Run/Debug Configurations** 中添加环境变量: - `PYTHONPATH=/opt/ros/<distro>/lib/python2.7/dist-packages:$PYTHONPATH` --- #### 3. **重新编译`cv_bridge`(针对Python3)** - **适用场景**:若必须使用Python3(如与深度学习框架兼容)。 - **步骤**: 1. 创建Catkin工作空间: ```bash mkdir -p ~/catkin_ws/src cd ~/catkin_ws/ catkin_make ``` 2. 克隆`cv_bridge`源码并编译: ```bash cd ~/catkin_ws/src git clone https://github.com/ros-perception/vision_opencv.git cd ~/catkin_ws catkin_make -DPYTHON_EXECUTABLE=/usr/bin/python3 # 指定Python3路径 ``` 3. 在PyCharm中更新`PYTHONPATH`: ``` export PYTHONPATH=~/catkin_ws/devel/lib/python3/dist-packages:$PYTHONPATH ``` --- #### 4. **安装依赖包** - 确保ROSPython接口包已安装: ```bash sudo apt-get install ros-<distro>-cv-bridge # 例如ros-kinetic-cv-bridge ``` --- #### 5. **验证修复** - 在PyCharm中运行测试脚本: ```python import rospy from cv_bridge import CvBridge print("导入成功!") ``` - 若仍报错,检查编译日志或重新执行步骤3。 --- ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Tech沉思录

点赞加投币,感谢您的资瓷~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值