Ros学习:解决cv_bridge和python3不兼容的问题以及虚拟环境调用cv_bridge问题

参考:极简方案写在前面:可以解决90% cv_bridge与python3适配的问题。 如果解决了您的问题,点个赞呗 一、问题1,rospy安装当主函数使用python3,并加载使用ros时,会报错。因为一般的ros库基于python2的。报错如下: Traceback…icon-default.png?t=N7T8https://zhuanlan.zhihu.com/p/652106267

参考方案之前在使用ubuntu16.04时发现ROS下的cv_bridge类仅支持python2,在做项目时又需要在python3中进行,尝试把这个坑填了一下,供大家借鉴。(当然现在貌似ubuntu20.04 ROS都支持python3了) 1. 创建工作空间mkdir cat…icon-default.png?t=N7T8https://zhuanlan.zhihu.com/p/407517632网络上很多文章,都是写的noetic以下版本,安装cv_bridge插件,出现的种种问题,这是由于,ros在之前的版本对python3的支持不够好,noetic版本开始,加强了对于python3的支持。

废话不多说,直接开始

基础环境,ubuntu20.04,Ros(noetic,划重点),不知道怎么安装Ros,请参考鱼香Ros一键安装脚本

1. 创建工作空间

mkdir -p ~/testVision_OpenCV/src

cd testVision_OpenCV/src

2.编译代码并安装

git clone https://github.com/ros-perception/vision_opencv.git src/vision_opencv

#进入到clone的项目
cd vision_opencv

#切换到对应的分支,重要!!!
git checkout -b noetic remotes/origin/noetic

cd ~/testVision_OpenCV && catkin_make

开始执行编译,不出问题直接可以编译成功

3.虚拟环境调用(不用虚拟环境,可以忽略这一步)

virtualenv pyenv -p /usr/bin/python3

source pyenv/bin/activate

#虚拟环境内安装依赖,装完后,可以愉快的在虚拟环境中进行开发了
pip install catkin-tools
pip install rospkg

4.测试代码(读取video并发布)

# coding=utf-8
import rospy
from sensor_msgs.msg import Image
from cv_bridge import CvBridge
# import customCvBridge as CvBridge
import cv2

def video_publisher():
    # 初始化ROS节点
    rospy.init_node('video_publisher', anonymous=True)

    # 创建图像发布者
    image_pub = rospy.Publisher('rgb_topic', Image, queue_size=10)

    # # 创建CvBridge对象
    bridge = CvBridge()

    # 打开视频文件
    video = cv2.VideoCapture('./test.mp4')

    # 检查视频是否成功打开
    if not video.isOpened():
        rospy.logerr('无法打开视频文件')
        return

    # 循环读取视频帧并发布
    rate = rospy.Rate(30)  # 设置发布频率为30帧/秒
    while not rospy.is_shutdown():
        ret, frame = video.read()
        if ret:
            # 将帧转换为ROS图像消息
            image_msg = bridge.cv2_to_imgmsg(frame)

            # 发布图像消息
            image_pub.publish(image_msg)
        else:
            # 视频结束时退出循环
            break

        rate.sleep()

    # 关闭视频文件
    video.release()

if __name__ == '__main__':
    try:
        video_publisher()
    except rospy.ROSInterruptException:
        pass

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值