小黑仿生輪腿機器人(二)-機器視覺
1. 功能描述
? ? ? 機器視覺系統(tǒng)是通過機器視覺產(chǎn)品(即圖像攝取裝置,分CMOS和CCD兩種)將被攝取目標轉(zhuǎn)換成圖像信號,傳送給專用的圖像處理系統(tǒng),得到被攝目標的形態(tài)信息,根據(jù)像素分布和亮度、顏色等信息,轉(zhuǎn)變成數(shù)字化信號;圖像系統(tǒng)對這些信號進行各種運算來抽取目標的特征,進而根據(jù)判別的結(jié)果來控制現(xiàn)場的設備動作。
? ? ? 本文將結(jié)合機器視覺基礎,基于開源的輪腿機器人平臺,進行形狀識別(識別圓形)、顏色檢測(紅綠藍)、顏色追蹤的應用開發(fā)。

2. 功能實現(xiàn)
操作系統(tǒng):Ubuntu18.04系統(tǒng),基于Debian GNU/Linux,支持x86、amd64(即x64)、ARM和ppc架構。
軟件:OpenCV、ROS melodic
2.1 形狀識別—識別圓形
主要用到的器材:攝像頭、紅色和綠色兩種圓形圖(見下圖)

實現(xiàn)思路:利用攝像頭采集圖片信息識別圓形,在界面上顯示出圓的圓心坐標。
操作步驟:
(1)如果您的機器人還沒有配置好環(huán)境變量,那需要先把資料附件里的visual_experiment_ws文件夾拷貝到系統(tǒng)里,然后執(zhí)行:
① 在visual_experiment_ws文件夾中的src文件夾同級別目錄下,編譯工作空間,并配置環(huán)境變量;
② 打開終端(Ctrl+Alt+T),輸入roslaunch astra_camera astra.launch(見下圖),等待程序的運行。

(2)如果您的機器人已經(jīng)配置好了環(huán)境變量,或(1)中的操作已經(jīng)完成,則執(zhí)行:
① 打開第二個終端(Ctrl+Shift+T)輸入命令:roslaunch shape_detection shape_detection_experiment.launch,等待界面的啟動;

② 放置待識別的圓形圖(請把物品放置在攝像頭可以采集到的區(qū)域),就可以在界面上看到識別結(jié)果。下圖是分別識別出紅色圓形、綠色圓形輪廓,并顯示識別出圓心的中心坐標x、y的值。

? ? ? 這個功能的python例程源碼在visual_experiment_ws\src\shape_detection\scripts文件夾里, 文件名是shape_detection_victory.py,該程序的關鍵點是:先采集圖像信息,再對圖像信息進行處理,把識別信息顯示在界面上,大家有興趣可以閱讀參考。
2.2 顏色檢測(紅綠藍)
主要用到的器材:攝像頭、紅綠藍三種物品(見下圖)


實現(xiàn)思路:當把物品放置在攝像頭前時,在界面上顯示識別顏色的結(jié)果。
顏色識別算法的核心原理:
RGB和HSV彩色模型:
? ? ?數(shù)字圖像處理通常采用RGB(紅、綠、藍)和HSV(色調(diào)、飽和度、亮度)兩種彩色模型,RGB雖然表示比較至直觀,但R、G、B數(shù)值和色彩三屬性并沒有直接關系,模型通道并不能很好的反映出物體具體的顏色信息,而HSV模型更符合我們描述和解釋顏色的方式,使用HSV的彩色描述會更加直觀。
RGB和HSV的區(qū)別:
①. RGB模型
三維坐標:

RGB:三原色(Red, Green, Blue)
原點到白色頂點的中軸線是灰度線,r、g、b三分量相等,強度可以由三分量的向量表示。
用RGB來理解色彩、深淺、明暗變化:
色彩變化: 三個坐標軸RGB最大分量頂點與黃紫青YMC色頂點的連線
深淺變化:RGB頂點和CMY頂點到原點和白色頂點的中軸線的距離
明暗變化:中軸線的點的位置,到原點,就偏暗,到白色頂點就偏亮
②. HSV模型
倒錐形模型:

這個模型就是按色彩、深淺、明暗來描述的。
H是色彩
S是深淺, S = 0時,只有灰度
V是明暗,表示色彩的明亮程度,但與光強無直接聯(lián)系,(意思是有一點點聯(lián)系吧)。

③. RGB與HSV的聯(lián)系
從上面的直觀的理解,把RGB三維坐標的中軸線立起來,并扁化,就能形成HSV的錐形模型了。
但V與強度無直接關系,因為它只選取了RGB的一個最大分量。而RGB則能反映光照強度(或灰度)的變化。
v = max(r, g, b)
由RGB到HSV的轉(zhuǎn)換:

④. HSV色彩范圍

操作步驟:
(1)先把資料附件里的visual_experiment_ws文件夾拷貝到系統(tǒng)里,然后執(zhí)行:
① 在visual_experiment_ws文件夾中的src文件夾同級別目錄下,編譯工作空間,并配置環(huán)境變量;
② 打開終端(Ctrl+Alt+T),輸入roslaunch astra_camera astra.launch(見下圖),等待程序的運行。

③ 打開第二個終端(Ctrl+Shift+T)輸入命令:roslaunch color_detection color_detectioning.launch,等待程序的運行。

④ 界面啟動后,放置物品(請把物品放置在攝像頭可以采集到的區(qū)域),然后開始識別并在界面上顯示識別結(jié)果。下面以藍色物品為例,當攝像頭識別到藍色物品后,在界面顯示結(jié)果(the color is blue)。

⑤ 試著去放置紅色、綠色物品,分別識別出的結(jié)果如下面兩幅圖。當攝像頭識別到紅色物品后,在界面顯示結(jié)果(the color is red);當攝像頭識別到綠色物品后,在界面顯示結(jié)果(the color is green)。

2.3 顏色追蹤
主要用到的器材:本實驗中需要用到的器材見下圖,用紅色的滅火器作為被追蹤的物體。

實現(xiàn)思路:攝像頭采集到紅色物品后,通過串口通信來發(fā)布消息,輪腿訂閱消息后進行相應的運動。
操作步驟:
①首先參考2.2中的步驟,實現(xiàn)顏色檢測功能。
②打開資料中的
visual_experiment_ws\src\color_tracking\arduino_program\Color_Tracking_Arduino_Program文件夾,下載程序Color_Tracking_Arduino_Program.ino至輪腿機器人的mega2560主控板。
③ 打開終端(Alt+ctrl+T),輸入roslaunch astra_camera astra.launch 命令即可,見下圖。

④ 打開第二個終端(shift+ctrl+T),輸入roslaunch color_tracking camera_calibration.launch 命令,見下圖。

⑤ 移動滅火器,觀察輪腿跟隨滅火器運動的效果。
注意1:請把滅火器放置在攝像頭可采集到的區(qū)域內(nèi);
注意2:受硬件的影響,移動滅火器的速度建議稍微慢點,如可以先把滅火器移動到一個位置,觀察輪腿追蹤的效果。
我在可以在rviz界面里看到攝像頭采集到紅色目標的中心坐標及面積,供追蹤使用(見下圖);同時可以觀察到輪腿進行追蹤紅色的滅火器,直到運動到靠近滅火器的地方。

? ?? 這個功能的python例程源碼在visual_experiment_ws\src\color_tracking\scripts文件夾里, 文件名是ros_arduino_translation_test.py,該程序的關鍵點是:識別紅色區(qū)域并在界面上顯示識別后的坐標及面積。大家有興趣可以閱讀參考。
3. 資料下載
資料內(nèi)容:輪腿機器人-機器視覺-例程源代碼
資料下載地址:http://www.robotway.com/h-col-196.html
想了解更多機器人開源項目資料請關注 機器譜網(wǎng)站 https://www.robotway.com