1 ROS视觉应用(第八讲)
机械臂只是执行装置,与外界打交道难免要通过视觉等传感器获取外部信息
1.1 ROS图像接口
1.1.1二维平面图像
sudo apt-get install ros-noetic-usb-cam
命令安装USB_CAM功能包
roslaunch probot_vision usb_cam.launch
命令运行用以启动USB摄像头,usb_cam.launch
文件内容如下
<launch>
<node name="usb_cam" pkg="usb_cam" type="usb_cam_node" output="screen" >
<param name="video_device" value="/dev/video0" />
<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>
</launch>
rqt_image_view
启动rqt接受摄像头画面
USB_CAM的维基官方介绍
usb_cam_node
是摄像头驱动核心节点
终端输入
rosmsg show sensor_msgs/Image
查看图像消息的内容为
uint32 seq
time stamp
string frame_id
uint32 height
uint32 width
string encoding
uint8 is_bigendian
uint32 step
uint8[] data
1.1.2 点云图像
手头上没有深度相机。。。按相应深度相机安装驱动即可。关于深度相机仿真可参考
Kinect仿真1
kinect仿真2
简单来说,深度相机即RGB-D,是在二维图像每个像素点上累加了xyz的三维位置信息,这种包含位置信息的RGB图像称为点云。
rqt不能查看点云信息,需要通过运行Rviz添加PointCloud2
控件来查看点云图像信息,其消息格式内容如图
1.2 摄像头内参标定
摄像头这种精密仪器对光学器件的要求较高,由于摄像头内外部原因,生成的物体图像往往会发生畸变,为避免数据源造成的误差,需要针对摄像头参数进行标定。
内参是指摄像头自身的参数。外参是指摄像头跟机械臂外部环境的关系。
终端输入如下命令安装标定功能包
sudo apt-get install ros-noetic-camera-calibration
摄像头标定流程:
1.启动摄像头
roslaunch probot_vision usb_cam.launch
2.启动标定包
rosrun camera_calibration cameracalibrator.py --size 8x6 --square 0.024 image:=/usb_cam/image_raw camera:=/usb_cam
size
:标定期盼的内部脚点个数,8x6
指标定棋盘共六行,每行有8个内部脚点,需要注意的是并非乘号,而是字母x;
square
:这个参数对应每个棋盘格的边长,单位是米;
image
和camera
:设置摄像头发布的图像话题。
启动标定包成功后,会产生如图界面,通过不断移动和旋转标定靶来使各个尺度上标定成功。
当calibrate
按键亮起后,即代表采集图像数据已足够,此时点击calibrate
,后台开始运行标定程序,界面会卡死一段时间,需耐心等待,此时在启动标定功能包的终端中可以看到程序正在运行。标定完成后点击save
,终端中会显示标定配置信息文件保存路径。
例程路径为其他位置/计算机/tmp/
下的名为calibrationdata.tar.gz
的压缩包,解压后标定参数的配置文件为ost.ymal
,使用时只需在驱动摄像头的launch文件中加入对相机标定文件的调用。
**报错说明:**例程中所给处的usb_cam_with_calibration.launch
中,摄像头分辨率设置为1280×720,而usb_cam
文件中分辨率为640×480。运行usb_cam_with_calibration.launch
后报错信息如下:
[usb_cam-2] process has died [pid 51465, exit code -11, cmd /opt/ros/noetic/lib/usb_cam/usb_cam_node __name:=usb_cam __log:=/home/hxd/.ros/log/4f2a4942-8ac1-11ee-8054-2130c607434d/usb_cam-2.log].
log file: /home/hxd/.ros/log/4f2a4942-8ac1-11ee-8054-2130c607434d/usb_cam-2*.log
修改分辨率为640×480后不再报错。
1.3 ROS+OpenCV(基础介绍和使用)
1.3.1 CvBridge功能包
ROS中的图像数据格式和OpenCV的图像格式不相同,CvBridge的功能即将二者的图像格式相互转换(类似作用的Bridge还有很多)。
1.3.2 OpenCV使用
1.安装OpenCV(ubuntu20.04里自带了opencv4.2的版本)
2.运行例程1,效果为在图像左上方出现红色圆形。
roslaunch probot_vision usb_cam.launch
rosrun probot_vision image_converter
rqt_image_view
运行流程为ROS驱动摄像头获取图像usb_cam/image_raw
,再通过CvBridge转换格式后由OpenCV在图像上修改后再输出,再经过CvBridge转换格式后输出为image_converter/output_video
。
2 手眼结合
1.手眼标定(内参,外参)
2.物体识别与定位
3.抓取姿态分析
4.运动规划