当前位置:   article > 正文

【ros学习-课设-人脸识别追踪】_ros课设

ros课设

课程设计开发空间

更新1:使用ros工具包标定USB单目相机



前言

没哈前言,第一篇博客,多多关照
环境:Ubuntu20.04
已安装ros
暂时还没有使用anaconda进行python环境管理


一、pip换源

要安装opencv-python,先换个源:
pip国内的一些镜像
  阿里云 http://mirrors.aliyun.com/pypi/simple/
  中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/
  豆瓣(douban) http://pypi.douban.com/simple/
  清华大学 https://pypi.tuna.tsinghua.edu.cn/simple/
  中国科学技术大学 http://pypi.mirrors.ustc.edu.cn/simple/
  
修改源方法:

  1. 临时使用:
    可以在使用pip的时候在后面加上-i参数,指定pip源
pip install scrapy -i https://pypi.tuna.tsinghua.edu.cn/simple
  • 1
  1. 永久换源:

创建~/.pip/pip.config文件,在里面写:

[global]

index-url = https://pypi.tuna.tsinghua.edu.cn/simple

[install]

trusted-host=mirrors.aliyun.com

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

二、安装opencv-python

直接安装就能成功:

pip install opencv-python
  • 1

三、相机标定

安装ros标定功能包

sudo apt-get install ros-noetic-camera-calibration
  • 1

运行指令:

终端1:roslaunch usb_cam usb_cam-test.launch
终端2:rosrun camera_calibration cameracalibrator.py  --size 8x6 --square 0.019 image:=/usb_cam/image_raw camera:=/usb_cam
  • 1
  • 2

参数说明:
size:为棋盘格格数比 square:为棋盘格长度
image:ros中视频流话题,此处我们使用usb_cam功能包发布了话题:/usb_cam/image_raw,对应数据类型:sensor_msgs/Image
camera:指定摄像机节点

使用rqt_graph可视化工具可以看出订阅关系:

相机标定

在可视化标定工具中不断移动标定板,直到x,y,size,skew下面的进度条全部为绿色,标定完成

完成后点击save,可以保存配置,在终端界面可以看到标定的参数,以及保存路径:
在这里插入图片描述找到保存路径下的压缩包,解压后可以看到:
在这里插入图片描述其中ost.yaml文件即为我们需要的相机畸变矫正配置文件,将其放在自己工作空间下使用即可。

三、opencv调用摄像头视频流

安装oepncv-python,以及ros中的opencv

sudo apt-get install ros-noetic-vision-opencv libopencv-dev 
pip install opencv-python
  • 1
  • 2

ROS与Opencv之间的数据连接是通过CvBridge来实现的。
上代码:

#!/usr/bin/env python3
#-*- coding:utf-8 -*-
# 代码实现使用usb_cam包获取usb视频流后,将其从ros数据格式转换为opencv数据格式,然后又转换为了ros发布出去
import rospy
import cv2
from cv_bridge import CvBridge,CvBridgeError
from sensor_msgs.msg import Image

class image_converter:
    def __init__(self):    
        # 创建cv_bridge,声明图像的发布者和订阅者
        self.image_pub = rospy.Publisher("cv_bridge_image", Image, queue_size=1)
        self.bridge = CvBridge()
        self.image_sub = rospy.Subscriber("/usb_cam/image_raw", Image, self.callback)
    def callback(self,data):
        # 使用cv_bridge将ROS的图像数据转换成OpenCV的图像格式
        try:
            cv_image = self.bridge.imgmsg_to_cv2(data, "bgr8")
        except CvBridgeError as e:
            print(e)
        # 在opencv的显示窗口中绘制一个圆,作为标记
        (rows,cols,channels) = cv_image.shape
        if cols > 60 and rows > 60 :
            cv2.circle(cv_image, (60, 60), 30, (0,0,255), -1)
        # 显示Opencv格式的图像
        cv2.imshow("Image window", cv_image)
        cv2.waitKey(3)
        # 再将opencv格式额数据转换成ros image格式的数据发布
        try:
            self.image_pub.publish(self.bridge.cv2_to_imgmsg(cv_image, "bgr8"))
        except CvBridgeError as e:
            print(e)


if __name__ == '__main__':
    try:
        # 初始化ros节点
        rospy.init_node("cv_bridge_test")
        rospy.loginfo("Starting cv_bridge_test node")
        image_converter()
        rospy.spin()
    except KeyboardInterrupt:
        print("Shutting down cv_bridge_test node.")
        cv2.destroyAllWindows()

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45

上命令:

roslaunch usb_cam usb_cam-test.launch
rosrun 以上python文件
  • 1
  • 2

总结

`借鉴博主:https://zhiqianghe.blog.csdn.net/article/details/84100948

以后在更新,最近挺忙。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/454402
推荐阅读
相关标签
  

闽ICP备14008679号