2011-12-11 23 views
1

我試圖讓一個機器人來識別地面上的一條線,並遵循它。
我搜索了互聯網,發現很多線路跟隨機器人的例子,但他們都使用專門的傳感器來檢測線路。
我想在機器人上使用相機。如何使機器人沿着線使用其攝像機

我是新來的計算機視覺領域,所以我想就如何解決這個問題提出一些建議。具體來說,我怎樣才能檢測出與機器人相關的線條及其角度/方向?我如何檢測轉彎?

更新以下nikies評論:
行如何看起來是對我,我想放一些色彩明亮的磁帶在地上,但我可以使用什麼是最簡單的...
相機可以採取兩種顏色和b & w圖像。
照明和位置可能會有所不同,但我會後來擔心,我只想知道要開始尋找什麼。有沒有一種「普通」的方式來做到這一點?

+3

這取決於很多事情:線條看起來像什麼,背景是什麼樣子?你怎樣才能將圖像與圖像中其他邊緣區分開來?你想使用什麼樣的相機(顏色或灰度,分辨率)?你有什麼樣的照明?如果您需要實用的建議,從機器人的角度來看,最好使用正確的相機拍攝幾張用合適照明拍攝的影像。 – Niki

+0

我更新了帖子來回答你的問題 – yurib

回答

6

這裏有一種方法,適合改進。

通過縮放,像素化濾鏡和閾值處理的組合,將相機輸入縮小爲3 x 3的白色或黑色方格網格。通過適當的調整,縮小應該能夠放大線條,使其恰好佔據三個減少的像素。然後,機器人的邏輯包括向八個方向中的一個方向移動以保持中心像素爲黑色。

還原後的圖像:

☐ ■ ☐ 
☐ ■ ☐ ↑ move forward one unit 
☐ ■ ☐ 

什麼左轉的樣子:

☐ ☐ ☐ 
■ ■ ☐ ← turn 90 degrees left 
☐ ■ ☐ 

這是一個非常簡單的方案,並通過3格ISN視頻輸入轉換成清潔3這不是一項簡單的任務,但它應該足以讓你朝着正確的方向前進。

+1

最終雙關打算如何? –

+1

@KierenJohnstone赫,甚至沒有跨過我的腦海。只是一個幸福的事故。 – blahdiblah

0

機器人需要移動多快?有AI(人工智能智力)選項(這會比在其他的答案中描述製作容易決策慢

在人工智能領域,你可以調查:

自組織映射(SOM)嘗試在黑線上做推理,你可以教它識別形狀(我之前用它來識別字母),我認爲這可以在現代計算機上快速計算,但取決於你的機器人硬件(不能完全記住)

人工智能技術需要相當長的時間來訓練,併爲你學習。另一個答案也是一個很好的選擇,如果你想要一個固定的代碼方式做它

0

那麼,你可以做很多事情。如果你不瞭解他們,我會先閱讀union-find algorithms。根據您的環境,您可能能夠避開1)對比度標準化或對圖像執行histogram equalization,然後2)將大致符合您線條顏色的所有像素添加到聯合查找數據結構。爲了保持健壯(如果你有彩色相機),我會選擇一些非常強烈的東西,比如明亮的橙色,而不是黑色,它不包含任何hue信息,並且隨處可見。

從那裏,你需要一些方法來根據處理的數據做出決定。你可以想象編寫一個簡單的(雖然肯定是不完美的)算法來猜測哪個圖像段是線,計算它的方向,併爲你的控制器計算轉向。也許你會掃描圖像中的幾條水平線,並將一行代碼放入濾鏡的最大響應中。這可能會讓你獲得大部分你想要的東西。也許你可以根據你的硬件想出更聰明的東西,或者,例如,強制該行總是從圖像的底部運行到某個高度。

如果你真的有雄心壯志和熟練的數學知識,你應該閱讀(camera) lens calibration。本質上,通過將數學模型擬合到相機鏡頭上,並假設圖像中的所有內容都位於機器人下方的地面上,實際上可以確定線條相對於機器人在3D中的位置。儘管如此,最後一步還是需要大量的知識,所以不要期望它很容易!

1

一種選擇是同時使用OpenCV的或類似的圖像處理/視覺庫與相機期待和向下做到以下幾點:

  1. 廣場的已知,不尋常的磁帶,明亮的顏色,如黃色或橙色。如果你願意在你的機器人上安裝光源,你甚至可以使用反光帶。
  2. 使用OpenCV將彩色視頻圖像分解爲三個HSV平面 - 色調(顏色),飽和度和值(強度)。
  3. 使用描邊寬度變換來識別線條。以下的StackOverflow文章有指向SWT視頻的鏈接: Stroke Width Transform (SWT) implementation (Java, C#...)
  4. 應用細化算法(Stentiford或Zhang-Suen)將分割的磁帶線縮小爲單個像素寬度。
  5. 將單個像素視爲曲線擬合的輸入點。或者,更簡單地說,計算線中每個連續N個點的終點到終點的角度。
  6. 應用一點3D幾何圖形以及關於機器人當前方向和速度的信息來計算它必須轉動的時間以及爲了跟隨線條而急劇變化。

如果您的機器人移動緩慢,那麼向下看的照相機可能更適合。計算更容易,但機器人將無法向前看。