ROS中二维码定位
一、环境相关
系统:
- ROS-Kinetic + ubuntu16.04
相关功能包:
- 摄像头:usb-cam
- 摄像头标定:camera-calibration
- 二维码:ar-teack-alvar
二、方法一
(1)usb_cam摄像头的标定
- 安装usb-cam功能包
sudo apt-get install ros-kinetic-usb-cam
- 安装camera-calibration功能包
sudo apt-get install ros-kinetic-camera-calibration
- 下载robot_vision
将文件robot_vision下载 解压 到catkin_ws/src下面
链接:https://pan.baidu.com/share/init?surl=ay0Wv1XboX19yHdeke1xpQ 提取码:csic
catkin_make & rospack profile
- 启动摄像头
roslaunch robot_vision usb_cam.launch
- 启动标定包
rosrun camera_calibration cameracalibrator.py --size 8x6 --square 0.0245 image:=/usb_cam/image_raw camera:=/usb_cam
注意:相关参数解析
size :标定棋盘个的内部角点个数,这里实用的棋盘一共有6行,每行有8个内部角点(不包括最外围的一圈棋盘格)。
squre:这个参数对应每一个棋盘格的边长,单位是米,棋盘格打印出来以后要自己再测量一下打印的是或否准确然后自己更改。
image和camera:设置摄像头发布的图像话题。
- 相机标定步骤
将打印好的棋盘格放入摄像头的视野范围内,不断调整与摄像头的距离,慢慢旋转棋盘格,左右移动棋盘格,不断变换位置。(左右、上下、旋转,反复几次)。
当标定靶移动测试成功后,在可视化页面中的第一个按键将从灰色变为深绿色,说明标定已经结束。
当第一个按键变为绿色的时候表示这个参数已经标定成功。可以在命令窗口中看到当前标定的数据。
接下来点击深绿色的CALIBRATE按键,等待程序计算出相机的标定参数(此时界面会卡顿,千万不要关掉,要等待后台进行计算),直到三个按键都变为深绿色。
点击SAVE可以讲标定的数据保存,在命令终端上可以看到保存到的文件路径,同时命令终端上也会显示标定的结果。此时摄像头的标定已经结束。
解压缩生成的文件压缩包,可以看到当中有很多采集到的图像的照片,其中最重要的是ost.yaml文件,为该相机的标定文件。
- 参考
https://blog.csdn.net/zzu_seu/article/details/89278698
(2)二维码识别
- 安装ar-teack-alvar功能包
sudo apt-get install ros-kinetic-ar-track-alvar
- 创建二维码
rosrun ar_track_alvar createMarker
eg: 创建三个二维码,大小为边长5cm,二维码的内容分别为0、1、2.
roscd robot_vision/config
rosrun ar_track_alvar createMarker -s 5 0
rosrun ar_track_alvar createMarker -s 5 1
rosrun ar_track_alvar createMarker -s 5 2
这样就在catkin_ws/src/robot_vision/config文件夹下面创建了三个二维码。
-
二维码识别
-
- 启动相机
roslaunch robot_vision usb_cam_with_calibration.launch
#该launch文件一定要更改为自己相机的标定文件,上面提到过。
-
- 启动二维码设别功能包
roslaunch robot_vision ar_track_camera.launch
-
- 将二维码打印出来放置到 摄像头前面进行识别
- 查看二维码识别结果
rostopic echo /ar_pose_marker
- 查看消息结构
rosmsg show ar_track_alvar_msgs/AlvarMarker
std_msgs/Header header
uint32 seq
time stamp
string frame_id
uint32 id
uint32 confidence
geometry_msgs/PoseStamped pose
std_msgs/Header header
uint32 seq
time stamp
string frame_id
geometry_msgs/Pose pose
geometry_msgs/Point position
float64 x
float64 y
float64 z
geometry_msgs/Quaternion orientation
float64 x
float64 y
float64 z
- 参考
https://blog.csdn.net/zzu_seu/article/details/89289556
三、方法二
介绍: VISP(visual servoing platform library )是一个开源的视觉伺服平台。
官网:http://visp.inria.fr/
功能包:visp_auto_tracker
系统:ubuntu16.04
sudo apt-get install ros-kinetic-visp-auto-tracker
例子:
<1> roslaunch launch/tutorial.launch
<2> roslaunch launch/tracklive_usb.launch
优点:精度高。
缺点:不宜识别。
参考:
http://wiki.ros.org/visp_auto_tracker