Linux学习之ROS的uvc camera(笔记本的摄像头)

相机相当于机器人的眼睛。从相机获得的图像对于识别机器人周围的环境非常有用。 例如,利用相机图像的对象识别和脸部识别;使用两台相机(立体相机)从两个不同图像 之间的差异获得的距离值;利用距离值生成3维地图的Visual-SLAM;单眼相机VisualSLAM;利用从彩色图像获得的颜色信息的颜色识别;跟踪特定对象的对象跟踪。
由于没有外带的USB摄像机,采用的的笔记本自带的!

首先要做的事;查看虚拟机的摄像头是否开启;也就是USB是否连接:
在这里插入图片描述
然后到虚拟机设置里面,更改usb;如果是USB2.0,就改为USB3.0,如果是USB3.0,就变为USB2.0;
在这里插入图片描述

成功之后,开启虚拟机;会在虚拟机出现如下标志:
在这里插入图片描述

相机连接信息: 打开一个新的终端窗口,并按如下所示使用“lsusb”命令检查连接是否正确;具体名字是USB的名字:在这里插入图片描述
这里可以查看一下,笔记本自带的摄像头是否正常工作:

cheese

在这里插入图片描述
出现图像之后;进行安装uvc camera功能包:

sudo apt-get install ros-kinetic-uvc-camera

加粗样式
安装image相关功能包:

sudo apt-get install ros-kinetic-image-* 
sudo apt-get install ros-kinetic-rqt-image-view

运行uvc_camera节点 如果您运行uvc_camera节点,将收到关于相机校准的警告,例如“[WARN][1423194481.257752159]: Camera calibration file /home/xxx/.ros/camera_info/ camera.yamlnot found.”。可以先忽略它:

roscore 

打开另外一个终端:

rosrun uvc_camera uvc_camera_node

在这里插入图片描述
没有出现问题,在打开另外一个终端;查看话题消息:

rostopic list

使用image_view节点查看图像:

rosrun image_view image_view image:=/image_raw

在这里插入图片描述

我最开始出现问题,忙乎了大半天,也查询了许多资料,当然每个人问题不一样,我就出现问题在于没有,连接好USB,更换USB之后,最好还是在去看看这,是否连接成功了的:
在这里插入图片描述

推介一个链接,解决大部分遇到的问题:https://blog.csdn.net/weixin_43262513/article/details/88073532
最后成功使用image_view节点查看图像:
在这里插入图片描述
再用rqt_image_view节点检查:

rqt_image_view image:=/image_raw

在这里插入图片描述
RViz运行后,先更改“Displays”选项。单击RViz左下方的[Add],在[By display type]选项卡中选择[Image],以此加载图像显示功能,然后将[Image] → [Image Topic]的值更改为“/image_raw”。则会如图8-7所示显示 图像。如果图像看起来很小,则可以用鼠标调整该image视图的边缘,以增加视图尺寸。

rviz

在这里插入图片描述
远程传输图像;只有一台计算机,选择本机:

gedit ~/.bashrc                #打开之后,在文章末尾添加,下面两句
export ROS_MASTER_URI =http://localhost:11311 
export ROS_HOSTNAME =192.168.1.100

在这里插入图片描述
然后运行roscore,并在另一个终端窗口中运行uvc_camera_node节点;以前的窗口没有关闭,可以直接运行:
在这里插入图片描述
每台相机的镜头和图像传感器彼此不同,并且由于相机的硬件结构不同,镜头 和图像传感器之间的距离也各不相同。并且,在相机制作过程中,镜头和图像传感器必须水平组装,但由于细微的偏差,图像中心(image center)与主点(principalpoint) 会有细微的偏离,且图像传感器的倾度也会略有差异。 校准这些部件的过程称为相机校准(Calibration),目的是查找相机的固有参数。
相机校准;安装相机校准功能包;

sudo apt-get install ros-kinetic-camera-calibration 
rosrun uvc_camera uvc_camera_node

在这里插入图片描述
准备棋盘 摄像机的校准是以一个由黑白方块组成的棋盘为基准进行的,
在这里插入图片描述
进行校正:

rosrun camera_calibration cameracalibrator.py --size 8x6 --square 0.024 image:=/image_raw camera:=/camera

用相机对准棋盘,校准将立即 开始。在GUI屏幕的右侧,可以看到一个标有X、Y、Size和Skew的条形控件。这是校准 的进展状态,都以绿色填满意味着校准完成。在校准过程中需要将棋盘对着相机朝着左/ 右/上/下/前/后移动,还需要倾斜棋盘。

在这里插入图片描述
校准所需的所有图像都记录下来之后,CALIBRATE按钮会被激活。 点击这个按钮后会进行实际的校准计算,这需要大约1到5分钟。计算完成后,点击SAVE 按钮保存校准信息。存储的地址显示在执行校准的终端窗口中,是存储在某一个/tmp目录(如“/tmp/calibrationdata.tar.gz”)中。

创建相机参数文件;解压缩calibrationdata.tar.gz文件以查看图像文件(*.png)和记录了校准中使用 的校准参数的ost.txt文件:

cd /tmp
tar -xvzf calibrationdata.tar.gz

在这里插入图片描述
接下来,将ost.txt文件改名为ost.ini,并使用camera_calibration_parsers功能包的convert节点创建相机参数文件(camera.yaml)。创建完成后,将其保存在~/.ros/ camera_info/目录中,则ROS中使用的相机相关功能包会引用此信息:

 mv ost.txt ost.ini 
 rosrun camera_calibration_parsers convert  ost.ini camera.yaml  
 mkdir ~/.ros/camera_info 
 mv camera.yaml ~/.ros/camera_info/

最后再次运行uvc_camera_node节点;这一次,确保 您目前没有出现关于校准文件的警告。

 rosrun uvc_camera uvc_camera_node 

在这里插入图片描述
查看/camera_info话题,则可以看到D、K、R和P参数已被填充:

rostopic echo /camera_info 

在这里插入图片描述

到此,也就基本上结束了,结果虽然很简单,但过程中所遇到的问题,以及解决的方法,就是最好的收获!

  • 6
    点赞
  • 73
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值