ROS中二維條碼定位

2022-01-13 20:00:02

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