赞
踩
更新1:使用ros工具包标定USB单目相机
没哈前言,第一篇博客,多多关照
环境:Ubuntu20.04
已安装ros
暂时还没有使用anaconda进行python环境管理
要安装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/
修改源方法:
pip install scrapy -i https://pypi.tuna.tsinghua.edu.cn/simple
创建~/.pip/pip.config文件,在里面写:
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
[install]
trusted-host=mirrors.aliyun.com
直接安装就能成功:
pip install opencv-python
sudo apt-get install ros-noetic-camera-calibration
运行指令:
终端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
参数说明:
size:为棋盘格格数比 square:为棋盘格长度
image:ros中视频流话题,此处我们使用usb_cam功能包发布了话题:/usb_cam/image_raw,对应数据类型:sensor_msgs/Image
camera:指定摄像机节点
使用rqt_graph可视化工具可以看出订阅关系:
在可视化标定工具中不断移动标定板,直到x,y,size,skew下面的进度条全部为绿色,标定完成
完成后点击save,可以保存配置,在终端界面可以看到标定的参数,以及保存路径:
找到保存路径下的压缩包,解压后可以看到:
其中ost.yaml文件即为我们需要的相机畸变矫正配置文件,将其放在自己工作空间下使用即可。
安装oepncv-python,以及ros中的opencv
sudo apt-get install ros-noetic-vision-opencv libopencv-dev
pip install opencv-python
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()
上命令:
roslaunch usb_cam usb_cam-test.launch
rosrun 以上python文件
`借鉴博主:https://zhiqianghe.blog.csdn.net/article/details/84100948
以后在更新,最近挺忙。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。