ROS理论与实践(以移动机器人为例)连载(六) ——机器视觉处理

本文介绍了ROS中摄像头驱动、数据接口,如二维摄像头、kinect和Intelsense。详细讲解了摄像头参数标定,包括rgb摄像头和Kinect的标定流程。接着探讨了ROS+OpenCV的图像处理,如Haar级联分类器的人脸检测和帧差法物体跟踪。最后,展示了如何结合Tensorflow进行物体识别,并利用识别结果控制移动机器人。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


本文软件包
链接:https://pan.baidu.com/s/1mAHCr4JI-9xMyXa4V_lyIQ
密码:1tmo

1. ROS摄像头驱动及数据接口

①二维摄像头

在这里插入图片描述
可以参考以前写的博客:https://blog.youkuaiyun.com/qq_44455588/article/details/104998284

$ sudo apt-get install ros-melodic-usb-cam
$ roslaunch usb-cam usb_cam-test.launch
$ rqt_image_view

在这里插入图片描述
usb_cam-test.launch

<launch>
	<!-- 摄像头驱动,和上图的摄像头参数设置 -->
	<node name="usb_cam" pkg="usb_cam" type="usb_cam_node" output="screen" >
    	<param name="video_device" value="/dev/video2" />
    	<param name="image_width" value="640" />
    	<param name="image_height" value="480" />
    	<param name="pixel_format" value="yuyv" />
    	<param name="camera_frame_id" value="usb_cam" />
    	<param name="io_method" value="mmap"/>
  	</node>
  	<!-- 订阅摄像头数据,用做显示的窗口 -->
  	<node name="image_view" pkg="image_view" type="image_view" respawn="false" output="screen">
    	<remap from="image" to="/usb_cam/image_raw"/>
    	<param name="autosize" value="true" />
  	</node>
</launch>

二维图像的数据结构:

  • Header: 消息头,包含消息序号(ROS默认累加),时间戳和绑定坐标系;
  • height: 图像的纵向分辨率;
  • width: 图像的横向分辨率;
  • encoding: 图像的编码格式,包含RGB、YUV等常用格式,不涉及图像压缩编码;
  • is_begendian: 图像数据的大小端存储模式;
    • 大端: 低字节存放在地址高位,高字节存放在地址低位
    • 小端: 高字节存放在地址高位,低字节存放在地址低位
  • step: 一行图像数据的字节数量,做为数据的步长参数width*3(RGB);
  • data: 存储图像数据的数组,大小为step*height个字节

1280*720分辨率的摄像头产生一帧图像的数据大小是:3*1280*720=2764800字节,即2.7648MB。

在这里插入图片描述
压缩图像消息:

  • format: 图像的压缩编码格式(jpeg、png、bmp)
  • data: 存储图像数据数组
    在这里插入图片描述

②深度RGB-D摄像头——kinect

在这里插入图片描述

  • 安装驱动
$ sudo apt-get install ros-melodic-freenect-*
$ git clone https://github.com/avin2/SensorKinect.git
$ cd SensorKinect/Bin
$ tar xvf SensorKinect093-Bin-Linux-x64-v5.1.2.1.tar.bz2
$ sudo ./install.sh	(在解压出来的文件夹目录下)
  • 运行
$ roslaunch freenect_launch freenect.launch 

在这里插入图片描述
freenect.launch

<launch>
    <!-- Launch the freenect driver -->
    <include file="$(find freenect_launch)/launch/freenect.launch">
        <arg name="publish_tf"                      value="false" /> 

        <!-- use device registration -->
        <arg name="depth_registration"              value="true" /> 

        <arg name="rgb_processing"                  value="true" />
        <arg name="ir_processing"                   value="false" />
        <arg name="depth_processing"                value="false" />
        <arg name="depth_registered_processing"     value="true" />
        <arg name="disparity_processing"            value="false" />
        <arg name="disparity_registered_processing" value="false" />
        <arg name="sw_registered_processing"        value="false" />
        <arg name="hw_registered_processing"        value="true" />
    </include>
</launch>

图像数据结构:

  • height: 点云图像的纵向分辨率;
  • width: 点云图像的横向分辨率;
  • fields: 每个点的数据类型;
  • is_bigendian: 数据的大小端存储模式;
  • point_step: 单点的数据字节步长;
  • row_step: 一行数据的字节步长;
  • data: 点云数据的存储数值,总字节大小为row_step*height;
  • is_dense: 是否有无效点。
    在这里插入图片描述
    点云即包括RGB信息还有该位置的XYZ信息,点云单帧数据量也很大,如果使用分布式网络传输,需要考虑能否满足数据的传输要求,或者针对数据进行压缩。

③英特尔Intelsense

在这里插入图片描述

$ mkdir build
$ cd build
$ cmake ..
$ make
$ sudo make install
$ catkin_make -DCATKIN_ENABLE_TESTING=False -DCMAKE_BUILD_TYPE=Release
$ catkin_make install
$ echo "source `/catkin_ws/devel/setup.bash" >> ~/.bashrc
$ source ~/.bashrc

参考链接:

  1. https://github.com/IntelRealSense/librealsense/blob/master/doc/installation.md
  2. https://blog.youkuaiyun.com/u012926144/article/details/80761342

点云显示

$ roslaunch realsense2_camera rs_rgbd.launch
$ rosrun rviz rviz

在这里插入图片描述

2. 摄像头参数标定

①标定rgb摄像头

安装标定功能包

$ sudo apt-get install ros-melodic-camera-calibration

摄像头标定流程

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值