文章目录
本文软件包
链接: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
参考链接:
- https://github.com/IntelRealSense/librealsense/blob/master/doc/installation.md
- 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
摄像头标定流程