目錄
前言
一、 usb攝像頭的安裝和使用
? 二、AprilTag_ros包的安裝
三、單目攝像機的標(biāo)定
四、AprilTag_ros的使用
五、其他
前言
平臺:VM虛擬機
ROS版本:noetic
Ubuntu:20.04LTS
一、 usb攝像頭的安裝和使用
1. 下載源碼
cd catkin_ws/src #安裝在一個ROS工作空間上 git clone https://github.com/bosch-ros-pkg/usb_cam.git #下載源碼
2.編譯工作空間
3. 添加usb_cam屬性文件(用于終端窗口可檢索到usb_cam功能包)
source ./devel/setup.bash #每打開一次工作空間窗口都要
4. 編譯usb_cam源碼
回到工作空間的src文件中,再去usb_cam中進行編譯
make #####
5.測試USB攝像頭
1)運行ROS
roscore
2) 回到usb_cam的launch文件夾中,運行usb_cam的功能包
roslaunch usb_cam usb_cam-test.launch
二、AprilTag_ros包的安裝
1. 安裝依賴庫apriltag
安裝方法如下。這個注意不要把它放到ROS的工作空間里,看你自己放在哪吧。
git clone https://github.com/AprilRobotics/apriltag.git # 這個不是ros的功能包
2. 編譯依賴庫apriltag
進入apriltag 文件夾中,然后新建文件夾build
sudo make install #安裝到ros中
3. 安裝AprilTag_ros包
將源碼拷貝到你的工作空間中的src工作目錄下
git clone https://github.com/AprilRobotics/apriltag_ros.git #在src文件夾內(nèi)
4. 回到工作空間進行編譯
catkin_make
三、單目攝像機的標(biāo)定
攝像機標(biāo)定是通過尋找對象在圖像與現(xiàn)實世界的轉(zhuǎn)換數(shù)學(xué)關(guān)系,找出其定量的聯(lián)系,從而實現(xiàn)從圖像中測量出現(xiàn)實中實際數(shù)據(jù)的目的,基于此才能實現(xiàn)后面的位姿檢測。
1. 安裝標(biāo)定功能包
sudo apt-get install ros-melodic-camera-calibration
2. 打開攝像頭進行標(biāo)定
roslaunch usb_cam usb_cam-test.launch #啟動攝像頭 rosrun camera_calibration cameracalibrator.py --size 8x6 --square 0.024 image:=/usb_cam/image_raw camera:=/usb_cam
第二條命令參數(shù)說明: size:棋盤內(nèi)交叉點的個數(shù),行*列 square:一個格子的邊長,單位是m image:訂閱攝像頭發(fā)布的圖像話題(ROS topic) camera:尋找相應(yīng)的設(shè)備相機名(現(xiàn)實情況應(yīng)該是/dev,仿真的話,不清楚)
攝像機的校準(zhǔn)是以一個由黑白方塊組成的棋盤為基準(zhǔn)進行的,如圖8-8所示。從下面的地址下載8x6國際象棋棋盤,并打印出來后將其貼到一個平坦的紙箱。有時也會打印成超過1米的棋盤,但這里用的是A4紙。作為參考,8x6棋盤橫向有9個方塊,所以有8個交叉點,而豎向有7個方塊,有6個交叉點,所以它被稱為8x6棋盤。
attachment:check-108.pdf of camera_calibration/Tutorials/MonocularCalibration - ROS Wikihttp://wiki./camera_calibration/Tutorials/MonocularCalibration?action=AttachFile&do=view&target=check-108.pdf
3. 開始標(biāo)定
上/下/左/右移動攝像頭,等各個方向綠條滿了之后,標(biāo)定完成時,CALIBRATE會有顏色,點擊它,然后點擊save,再點擊COMMIT。這是會自動保存標(biāo)定文件。
點擊save 后,標(biāo)定文件會自動保存在/tmp路徑下,文件名為calibrationdata.tar.gz壓縮包
4. 輸出標(biāo)定參數(shù)
1)這是一個方法
writing calibration data to /home/jiang/.ros/camera_info/head_camera.yaml #ros默認(rèn)自動找這個路徑的文件
我是用該方法生成的標(biāo)定參數(shù),此后每次打開相機就會引用head_camera.yaml 文件
2) 另一個方法(沒有用過)
打開并解壓校準(zhǔn)參數(shù)文件,解壓縮calibrationdata.tar.gz文件后,可以查看圖像文件(*.png)和記錄了校準(zhǔn)中使用的校準(zhǔn)參數(shù)的ost.txt文件。
tar -xvzf calibrationdata.tar.gz
修改校準(zhǔn)參數(shù)文件,把ost.txt文件改名為ost.ini,并使用camera_calibration_parsers功能包 的convert節(jié)點創(chuàng)建相機參數(shù)文件(camera.yaml)。創(chuàng)建完成后,將其保存在~/.ros/camera_info/目錄中,則ROS中使用的相機相關(guān)功能包會引用此信息。
rosrun camera_calibration_parsers convert ost.ini camera.yaml #轉(zhuǎn)換成相機引用信息 mkdir ~/.ros/camera_info #創(chuàng)建相機信息文件夾 mv camera.yaml ~/.ros/camera_info/ #移動到該文件下
重新運行相機節(jié)點,打印標(biāo)定信息:
rostopic echo /camera_info
至此,攝像機標(biāo)定完成
四、AprilTag_ros的使用
1. 編輯運行的配置文件
進入apriltag_ros/apriltag_ros/config文件夾中,會看到兩個文件
1)settings.yaml (配置apriltag算法)
tag_family: 'tag36h11' # options: tagStandard52h13, tagStandard41h12, tag36h11, tag25h9, tag16h5, tagCustom48h12, tagCircle21h7, tagCircle49h12 #支持單一標(biāo)簽類型 tag_threads: 2 # default: 2 # 設(shè)置Tag_Threads允許核心APRILTAG 2算法的某些部分運行并行計算。 典型的多線程優(yōu)點和限制適用 tag_decimate: 1.0 # default: 1.0 #減小圖像分辨率 tag_blur: 0.0 # default: 0.0 #設(shè)置tag_blur> 0模糊圖像,tag_blur < 0銳化圖像 tag_refine_edges: 1 # default: 1 #增強了計算精度,但消耗了算力 tag_debug: 0 # default: 0 #1為保存中間圖像到~/.ros max_hamming_dist: 2 # default: 2 (Tunable parameter with 2 being a good choice - values >=3 consume large amounts of memory. Choose the largest value possible.) publish_tf: true # default: false #發(fā)布tf坐標(biāo)
這里有兩點注意: I. tag_family:時設(shè)置檢測的標(biāo)簽類型(二維碼圖片類型),一般用’tag36h11’ 。openmv的IDE可以生成這個標(biāo)簽。 II. 如果想發(fā)布TF坐標(biāo),需要把publish_tf設(shè)置為true。
2)tags.yaml (定義要查找的標(biāo)簽和標(biāo)簽簇)
# 這個標(biāo)簽中至少要填入三個參數(shù) {id: 1, size: 0.05}, # id 對應(yīng)于生成標(biāo)簽的ID號,size對應(yīng)標(biāo)簽的大小 #這個標(biāo)簽是根據(jù)大小和位置檢測的 {id: 10, size: 0.05, x: 0.0000, y: 0.0000, z: 0.0, qw: 1.0, qx: 0.0, qy: 0.0, qz: 0.0} # id 對應(yīng)于生成標(biāo)簽(二維碼)的ID號,size對應(yīng)標(biāo)簽的大小 {id: 22, size: 0.05, x: 0.0000, y: 0.0000, z: 0.0, qw: 1.0, qx: 0.0, qy: 0.0, qz: 0.0}, # 我選用的是22和45號標(biāo)簽 {id: 45, size: 0.05, x: 0.0000, y: 0.0000, z: 0.0, qw: 1.0, qx: 0.0, qy: 0.0, qz: 0.0}, # id 對應(yīng)于生成標(biāo)簽(二維碼)的ID號,size對應(yīng)標(biāo)簽的大小
注意添加你要設(shè)定的二維碼標(biāo)簽的ID,和size(單位是 m),后面的 x,y,z 等表示的是坐標(biāo)
2. 修改launch 文件
這里主要是為了啟用對應(yīng)的相機話題(topic)和圖像話題(topic)
進入apriltag_ros/apriltag_ros/launch文件夾中,會看到三個launch文件,主要修改這個continuous_detection.launch文件
<arg name="camera_name" default="/usb_cam" /> <arg name="camera_frame" default="usb_cam" /> #發(fā)布一個坐標(biāo)系 <arg name="image_topic" default="image_raw" />
3. 使用功能包
1) 先打開相機
roslaunch usb_cam usb_cam-test.launch #啟動攝像頭
2)運行功能包
roslaunch apriltag_ros continuous_detection.launch
3)運行標(biāo)簽檢測節(jié)點
這是查看檢測標(biāo)簽的各個參數(shù),如坐標(biāo)(xyz),方向(xyzw),成功檢測到標(biāo)簽會出現(xiàn)相應(yīng)的id,size(單位為米), pose等信息,實時顯示相機的位姿信息,注意看下圖
rostopic echo /tag_detections
左邊沒檢測到, 右邊檢測到
4)可視化標(biāo)簽坐標(biāo)
運行如下命令,新開一個Terminal,先打開rqt_image_view,然后在里面選擇tag_detections_imgage 話題,就可以看到apr檢測的圖像
也可以在terminal中輸入以下命令,獲取話題的具體消息
rostopic echo /tag_detections_image #這個不好用,說實話,我沒看懂
建議使用下面工具
rosrun rviz rviz
這是rviz 的初始界面。
將紅圈的map改為usb_cam,點擊add按鈕添加話題,首先把二維碼(標(biāo)簽)檢測的話題添加進去
二維碼檢測的話題添加進去后在左下角就可以看到被標(biāo)記出來的二維碼標(biāo)簽,再將TF坐標(biāo)顯示(不是話題?。┨砑舆M去。
出現(xiàn)下圖,然后就可以查看標(biāo)簽位姿了 。
###.可以查看話題發(fā)布與訂閱的關(guān)系信息系,新開一個Terminal(終端),運行如下命令
rosrun rqt_graph rqt_graph
五、其他
1.標(biāo)簽的產(chǎn)生
使用open_mv的ide 產(chǎn)生的:工具 -> 機器視覺 ->Apriltag生成器-> TAG36H11家族(這個是根據(jù)你修改配置文件setting.yaml定的)
選擇生成0到10號的標(biāo)簽,最多有586號標(biāo)簽
2. apriltags2_ros的運行(參考,這是其前身)
其訂閱的topic: (1)/camera/image_rect:包含圖像的sensor_msgs/Image話題(例如,來自攝像機的視頻流的幀)。 假定圖像是無畸變的,即由針孔照相機產(chǎn)生。 筆記本電腦網(wǎng)絡(luò)攝像頭通常已經(jīng)提供了這種圖像,而其他相機可能需要中間節(jié)點(例如image_proc)進行處理,我購買的是無畸變的外接usb攝像頭。 (2)/camera/camera_info: sensor_msgs/CameraInfo話題,其中包含/camera/camera_info/K中的相機內(nèi)參矩陣。可以通過使用例如 camera_calibration 工具包進行相機標(biāo)定。 其發(fā)布的topic: (1)/tf:攝像機坐標(biāo)與每個檢測到的標(biāo)簽或標(biāo)簽簇的坐標(biāo)之間的相對位姿關(guān)系。僅在publish_tf:config / settings.yaml中為true時才發(fā)布/tf。 (2)/tag_detections:與/tf話題提供的信息相同,但作為自定義消息,其中包含標(biāo)簽ID,大小和geometry_msgs/PoseWithCovarianceStamped姿勢信息。 (3)/tag_detections_image:與/camera/image_rect輸入的圖像相同,但突出顯示檢測到的標(biāo)簽。僅在launch/continuous_detection.launch中的publish_tag_detections_image==true時才發(fā)布。
3. 參考文章
使用Apriltag2-ROS對相機進行定位_Tian Fangzheng的博客-CSDN博客_apriltag ros
ros下實現(xiàn)usb相機功能,并基于apriltag_ros實現(xiàn)定位_programmer_wangmj的博客-CSDN博客
ROS學(xué)習(xí)筆記(實踐二)--AprilTag_ros包的使用_知之至知的博客-CSDN博客_apriltag ros 安裝
AprilTag的Tag識別,定位以及跟隨_lifuguan的博客-CSDN博客_opencv識別apriltag碼
未完待續(xù)
|