2019研電賽記錄

張 良 玉發表於2019-08-20
  • 第一部分:作品相關

  • 想法由來:
    我們做的研電賽的作品名字叫做基於ROS的智慧購物機器人。其實當初有報名研電賽想法的時候完全就是因為想在研究生階段在嘗試緊張刺激的四天三夜,雖然後來知道並不是四天三夜而且是自主命題,當時導師買了兩臺turtlebot機器人,於是就報了人工智慧方向,至於做什麼不知道。老師沒有提議我們做什麼,就是自己去亂搞,至於組內分工,壓根就沒有。主要幹活的就兩個人,後期要不是有還有濤哥仍然想幹,估計就放棄了,因為太累(論文,PPT ,調程式)。有一次在油管上看到了一個自平衡車,就是人踩著跑的那種,在需要作為代步工具時,他就是一個平衡車,當人下來自己走步的時候它會跟著人走路,並可以根據使用人的不同手勢完成不同的功能,有拍照,原地候命等等。當時就有些想法,可以做一個人體跟蹤的機器人,於是就開始找資料,開幹活。後來做到一半的時候要思考他的背景,這期間我老爸給我打過一次電話,問我之前弄的掃碼槍適合哪些超市倉儲系統(本科時候我爸搞了一個掃碼槍,想給我家超市加上倉儲系統,我當時弄了弄,後來家裡又用不上了),當時解答完我爸的問題,就突然冒出一個想法,就做超市購物機器人吧,可以跟蹤顧客,可以自主結賬,但是是未來那種大型的無人超市。因為當時是在turtlebot平臺上做,在機器人作業系統上做,所以就取了基於ROS的智慧購物機器人名字。

  • 系統組成:
    人體跟蹤:
    人體跟蹤部分參考了德國亞琛工業大學的論文,利用kinect得到的深度影像將三維點投影到一個估計的平面上,在平面影像上取ROI,一開始取很多ROI,然後傳遞給檢測器,檢測器將之前學習的模板滑動到ROI上,通過模板與覆蓋的標準化深度影像之間的歐式距離計算距離矩陣。利用距離矩陣上的最小濾波器,得到上體邊界框檢測。再利用基於模板的IoU剔除多餘部分,最後經過一次非極大值抑制,得到最好的檢測ROI,圈出來就是人的範圍。除了用到這個方法外,還用了HOG檢測,這個必然用到,這個是國外pepper機器人上用的演算法,直接拿來用了,他們改進HOG後的方法叫Groud_HOG,我們就是利用這兩個方法,得到了人體檢測區域,從而得到Kinect到人體的距離,以及人在影像中的左右位置,通過距離和偏移量就可以控制機器人的線速度和角速度,從而保持一定距離,進行人體跟蹤。
    看著很簡單,其實中間有很多問題。
    第一,以上兩種方法有視角上的限制。首先是高度問題,Kinect如果放的太低,要想看到人體上身並檢測到人體,需要人距離機器人有較遠的位置,而我們還要利用機器人的建圖導航功能(後面細說),因此需要找一個恰當的高度來同時滿足兩個方面的功能。其實一開始想從演算法上去改,發現有點難,於是就調節硬體了,可以權衡得不錯。
    第二,距離視角限制。當機器人距離人體較近的時候,Kinect就不會看到完整人體,只會看到一個屁股或者大腿,一開始想了很久,後來利用kinect紅外資訊,得到距離人體的距離,這個其實也有弊端,如果人體恰好拐彎,拐彎後恰好是一面牆,那麼Kinect仍然會檢測到距離,也就是說他就是檢測距離前方障礙物的距離。這種情況暫時沒想到特別好的解決辦法,加上一個丟失視角後的延時檢測會好一些。忘記說了,這個地方其實是將Kinect的深度資訊轉換成雷達資訊,我們將前方的720個雷達資料分成3組,根據每個組的平均值,根據人體所在方向,進行近距離的方向調節。
    第三,移植老外演算法。將老外的演算法移植到自己電腦上,除錯Kinect介面,弄了好久,他們的配置檔案太多太多,這個地方主要是費了好多時間。
    第四,硬體差。i7-7700,8G記憶體(後來擴到16G),跑的時候總會卡死,這個地方一直沒找到好的解決辦法,卡死節點後重啟節點會影響檢測連續性。這個太難了,影響也是最大的,後來想的辦法是卡死後保留上幾幀的影像,從而計算這幾幀影像人體的變化趨勢,將機器人的控制量減小,根據人體運動趨勢去執行,直到節點重啟,這種曲線救國的方法還算好用。

建圖導航
這個系統仍然用到了建圖和導航,想法是購物機器人在倉庫待命,如果有顧客呼叫,就會根據事先建立好的地圖來到顧客參身邊,從而進行跟蹤服務。建圖這部分用的Gmapping建圖,導航用的也是功能包,除了修改一些更適合小型地圖構建的引數外,對於主要建圖導航功能沒有太多的改進。這個部分花費時間的地方是目標點的設定,因為目標點很多,一定要找好來來回回的目標點導航。

語音互動
採用科大訊飛語音。這部分的想法是每當購物機器人完成相關操作,導航完成,掃碼完成,結賬完成等等都進行中文語音提示。後來加上了詢問導航功能,顧客不知道某些商品在哪個區域的時候,可以對機器人進行提問,語音識別後可以根據內容進行回答。這裡要注意的是科大訊飛只能線上識別,因此需要連線有網路接入的區域網。這裡的難點就是操作科大訊飛語音包,改成自己想要的,並同時進行聽寫操作。

自主掃碼槍和藍芽通訊
搞了一個手動掃碼槍,就是那種按一下亮一下的那種,上面裝了一個舵機和紅外感測器,紅外檢測到東西的時候舵機就按一下,效果不錯。至於為什麼沒直接用那種一直亮著的掃碼機就不說了(貴還不太好用,不便攜,主要是貴)。這些外設使用樹莓派3B驅動的,因為樹莓派可以裝ROS,可以將檢測到的資訊傳送到topic流上,機器人控制器和主機控制端都可以在區域網下共享訊息。此外樹莓派還有一個大作用,就是藍芽。由於人手短缺,就直接用藍芽了,比較簡單。樹莓派連線手機藍芽,之後就可以通過手機控制整個智慧購物機器人系統。

手機app
沒學過java,更別提安卓了。用的是appinventor寫的,簡單的學了學就開始搞了,實際上也沒啥東西。選擇藍芽列表,加上幾個按鍵,傳送資料,加上幾個標籤,接收樹莓派發來的訊息。因為最後要顯示賬單功能嘛,按鍵有呼叫機器人,詢問導購,開始跟蹤,結賬,打包幾個按鍵,再加上幾張個性化的圖片,就齊活了。

倉儲系統
再就是寫了一個簡單的倉儲系統,能夠進行快速商品錄入,查詢當前商品剩餘量等等,這裡沒深度開發,因為簡單,而且暫時不重要。

  • 總結
    以上大概就是想法由來和整個購物機器人的控制流程了。其中要改進的有很多很多。這個部分最後貼上我們答辯時的標語:
    在這裡插入圖片描述

  • 第二部分:比賽相關

  • 準備階段
    去比賽前大概十天左右,組委會會要求提交論文,答辯ppt,作品簡介,易拉寶圖片等等。這裡強調一下易拉寶需要自己製作,並帶到現場去,答辯ppt一旦提交就不可以再修改。

  • 第一天
    2019年研究生電賽8月15日在南京資訊工程大學開始進行。我們早上七點半的飛機在大連起飛,如果涉及到電池,一定要檢視電池的瓦時引數,一般不超過100Wh是可以帶上飛機的(Wh是指電池一個小時能輸出的瓦數,能量單位)。
    大概中午到達南信大,安排好住宿後開始去場館組裝機器人,開始除錯,現場的人是真的多,建立地圖都費勁,一直可以調到晚上十點。這個期間,傍晚進行一次抽籤,決定答辯順序,再就是確認ppt是否可以正常播放。此外就是一直調,我們一直調的不好,一度想放棄0.0

  • 第二天
    第二天一早上去開幕式,然後集體合影,然後就開始作品展示。一共分成20組左右,每組有17,18個隊,這個分組是按照作品型別分的,也就是你的同組做的內容和你做的類似。作品展示是專家評委們挨個看,看完會給成績。到我們組的時候,因為我們部分功能沒展示出來,有很大影響,但是評委老師仍然耐心詢問。後來得知我們組很多都出了很多毛病,我們組都是機器人,大老遠運來的都有魯棒性的問題,其實重組機械結構會有變化的。上午展示完後,下午一點左右就開始進行答辯,按照第一天的抽籤順序,每組答辯有6分鐘時間,4分鐘問題提問。我們組答辯很順利。第二天過後就沒啥事了,就等著出成績和top10競演。

  • 關於top10
    top10競演,我從頭看到尾,我的感受就是他們的實驗室第一有傳承,每個作品都是4、5年的傳承,好幾代的樣機,第二有錢,受很多專案的支援。再就是他們的作品都是和醫療,通訊,電網相關,切實落實到人的生活中,不是提升人們體驗的作品(例如我們組做機器人的,沒有上去的)而是增加社會保障的作品。也可能這屆是這樣子吧。

  • 第三部分:關於這個比賽的一些感受

其實這裡寫了很多list item,但是都刪掉了,很多事情自己知道就行了,自己選擇的跪著也要過去。

相關文章