視覺組 | 2022暑期學習建議


?
#1?智能射擊?
1.共同負責步兵、英雄、哨兵、無人機自動瞄準功能的設計與調(diào)試;
2.開發(fā)、維護與優(yōu)化華工機器人實驗室視覺庫;
3.與電控協(xié)作進行電控-視覺聯(lián)調(diào),包括但不限于云臺響應、延遲測定等;
4.進行工業(yè)相機方案設計、選型、測試與性能評估。
?
#2?智能算法?
1.負責工程、飛鏢系統(tǒng)的算法設計、研發(fā)、調(diào)試;
2.與電控協(xié)作進行電控-視覺聯(lián)調(diào),包括但不限于輔助姿態(tài)定位等;
3.進行相機方案設計、選型、測試與性能評估。
?
#3?智能感知?
1.負責雷達站的算法開發(fā);
2.開發(fā)并維護激光雷達庫;
3.管理并維護深度學習服務器;
4.探索和創(chuàng)新3D目標檢測算法。
?
#4?軟件測試(新增方向)
1.熟悉華工機器人實驗室視覺庫底層設計、實現(xiàn)方式,并在必要時進行框架變更;
2.制定程序測試計劃,編寫測試工具、分析測試結(jié)果;
3.與視覺庫相關負責人合作,提出各模塊改進方案,并評估其合理性。

Tips
在計算機語言學習過程中,我們會遇到許多疑惑,所以在正文開始之前先推薦一個可以解決大多數(shù)問題的答疑網(wǎng)站(英文):https://stackoverflow.com/。

基礎篇—必學
?
#1?編程語言?
C++是視覺組最常使用的編程語言。教材《C++程序設計基礎(上)》通俗易懂,涵蓋了大多數(shù)基礎內(nèi)容,按學校要求修完C++課程即可應對基本的算法編寫。
結(jié)構、按位運算、類等章節(jié)雖然不是考試重點,但非常實用,建議詳細學習。面向?qū)ο缶幊?/strong>是重要的編程思想,大家要理解并運用封裝、繼承和多態(tài)。
此外,C++11的一些新特性、標準庫STL以及C++多種設計模式能夠給算法構建帶來很大的便利。利用C++11的多線程機制進行并發(fā)編程的程序開發(fā),熟練運用這些新特性也是視覺組的基本要求之一。
推薦學習資源:
1.C++語法推薦教材:《C++程序設計基礎(上)》
2.標準庫推薦學習鏈接:https://zh.cppreference.com/(中文)
3.C++11特性推薦專著:《深入理解C++11》
《深入理解》一書中,需要重點學習的章節(jié)包括:4.2 auto類型推導;4.5 基于范圍的for循環(huán);5.1 強類型枚舉;5.2.1 & 5.2.2 智能指針;6.3 原子類型和原子操作;7.3 lambda函數(shù)。
?
#2?編程語言python?
Python是一門非常方便的編程語言。它有大量的現(xiàn)成庫可供調(diào)用,可以提高視覺算法的開發(fā)速度。Python入門非常簡單,希望你能掌握基本Python語法,及使用類對代碼進行封裝。
為了能夠使用這些功能齊全的包,你需要學會配置Python的開發(fā)環(huán)境,使用pip安裝和管理包,并且使用Anaconda管理虛擬環(huán)境。
推薦IDE:Pycharm(學生賬戶可下載專業(yè)版)
推薦學習鏈接:
1.廖雪峰Python教程:https://www.liaoxuefeng.com/wiki/1016959663602400?
2.Anaconda管理Python環(huán)境:https://docs.anaconda.com/anaconda-cloud/user-guide/tutorials/
?
#3?操作系統(tǒng)(Ubuntu)
Ubuntu是一個基于Linux的、開源的操作系統(tǒng)。我們下載并安裝Ubuntu 20.04版本。
安裝Ubuntu的一般方法有虛擬機安裝、雙系統(tǒng)、移動硬盤安裝等。因過程麻煩、問題較多、難度較高,我們不推薦虛擬機安裝。
我們推薦使用雙系統(tǒng)安裝,即Ubuntu與Windows共存。安裝相對簡單,且重啟電腦即可切換系統(tǒng)。愿意買一塊移動硬盤進行安裝也是不錯的選擇。不占用原電腦硬盤容量,安裝過程也更加簡單。你還可以將其插入別人的電腦敲自己的代碼,隨時隨地都能開心地工作,乃實驗室趕進度最佳之選。
安裝完Ubuntu后,各位需要熟悉Linux系統(tǒng)的一些基本命令行操作,如Ctrl+Alt+T打開一個終端,cd進入某個目錄,sudo獲取root權限,rm刪除某個文件或文件夾等。初接觸時可能覺得繁瑣,但熟練運用后你會覺得特別便捷高效。(PS:面試時可能會考察相關操作。)
推薦學習鏈接:
1.Windows環(huán)境下Ubuntu usb系統(tǒng)盤制作教程:
https://tutorials.ubuntu.com/tutorial/tutorial-create-a-usb-stick-on-windows#0
2.系統(tǒng)安裝教程:https://tutorials.ubuntu.com/tutorial/tutorial-install-ubuntu-desktop
3.linux常用命令行操作:https://www.cnblogs.com/banjinbaijiu/p/9140460.html
4.Ubuntu Tutorial:https://ubuntu.com/tutorials/command-line-for-beginners#1-overview

?
#4?代碼管理工具Git
在整個賽季中,你需要與多人合作編寫大量代碼。反復更改代碼很容易產(chǎn)生混亂,此時學會使用強大的版本管理工具Git便顯得格外重要。
使用Git,你可以看到自己和隊友每次修改的內(nèi)容,出現(xiàn)問題時也可以退回到任意一次修改之前。代碼會被實時推送到云端服務器倉庫中,即使電腦慘遭彈丸攻擊,代碼也會安然無恙。

多人協(xié)作Git倉庫示例
前期學習中,建議先熟練Git命令行操作,再嘗試使用Gitkraken等圖形化工具,這會讓你對Git的管理方法和常見問題(如合并和沖突)有充分的理解。
推薦學習鏈接:
1.Git命令行操作:https://git-scm.com/book/zh/v2
2.Gitkraken官網(wǎng):https://www.gitkraken.com/
3.常用代碼托管平臺:【碼云】https://gitee.com/;【github】https://github.com/
?
#5?編譯調(diào)試工具?
在Windows下,Visual Studio等IDE已經(jīng)為你準備好了全套環(huán)境,但在Ubuntu下,這些都需要你自己配置。
常見的編譯器是GCC,常見的調(diào)試器是GDB。編譯器需要Makefile文件來配置系統(tǒng)環(huán)境,但Makefile文件的編寫頗為困難。在實際使用中,我們通常編寫CMakeList文件,再由CMake自動生成Makefile文件。
通常,Linux初學者會使用命令行工具Vim或Gedit來進行文本編輯,再使用終端命令進行編譯運行調(diào)試,但這樣的開發(fā)效率其實十分低下。我們推薦使用VSCode作為代碼編輯器,其插件豐富,使用非常方便,毫不遜色于Windows系統(tǒng)中的Visual Studio。
推薦學習鏈接:
1.Cmake(全英,時間充裕可看):https://www.ibm.com/developerworks/cn/linux/l-cn-cmake/index.html
2.VSCode學習:https://code.visualstudio.com/docs/languages/cpp
?
#6?通信與系統(tǒng)服務?
我們使用串口(SerialPort)進行電控與視覺之間的數(shù)據(jù)通信,本段后附有超詳細的Ubuntu與嵌入式系統(tǒng)的串口通信教程。
安裝在機器人里的電腦需要程序開機自啟動,這里給大家介紹一個方法——系統(tǒng)服務(Systemd)。其設計目標是為系統(tǒng)的啟動和管理提供完整解決方案。你需要了解如何寫簡單的.service文件,如何設置系統(tǒng)服務開始、停止和查看服務的狀態(tài)。
推薦學習鏈接:
1.超詳細的Ubuntu與嵌入式系統(tǒng)的串口通信教程:http://xanthium.in/Serial-Port-Programming-on-Linux
2.Systemd入門教程1:http://www.ruanyifeng.com/blog/2016/03/systemd-tutorial-commands.html
3.Systemd入門教程2:http://www.ruanyifeng.com/blog/2016/03/systemd-tutorial-part-two.html

算法篇—必學
?
#1?OpenCV
視覺圖像處理是視覺組最常見的工作內(nèi)容,基于OpenCV開源視覺庫進行圖像處理是重點的學習內(nèi)容。
它是當前最具影響力的計算機視覺開源庫。官網(wǎng)資料相當完整,包括Online Documentation、Tutorials、User Q&A forum,都非常棒。
官網(wǎng)Tutorials中有詳細的安裝教程。我們建議在你的Windows和Ubuntu上都安裝好OpenCV(4.5及以上版本)。OpenCV最推薦的學習資料還是官網(wǎng)文檔,其內(nèi)容詳盡、更新速度快。
PS.大家需要盡快適應閱讀英文資料,因為后面開發(fā)中遇到的一些問題很難用中文查到。
推薦學習書籍:《學習OpenCV3》《OpenCV4.0快速入門》
進入OpenCV 4.0時代后,蝴蝶書(《學習OpenCV3》)中的部分內(nèi)容依然適合入門者閱讀,關于OpenCV 4.0的內(nèi)容也可以購買《OpenCV 4.0快速入門》這類書籍進行查閱。
多多使用其實是最好的學習方法。我們更推薦遇到問題的時候再去查找相關資料,完成視覺組面試前的實戰(zhàn)任務,也是快速的OpenCV學習方法。

?
#2?數(shù)學基礎?
機器人的眼睛是相機。相機的作用就是將三維的真實世界投影到二維的圖像數(shù)據(jù)中。我們需要在算法中利用降維的數(shù)據(jù)進行識別處理,使得機器人對三維世界具有一定的感知。
那么如何將三維世界降維到二維平面,又如何從二維平面反推到三維世界呢?這便是線性代數(shù)的一個重要應用——坐標變換(映射)。三維世界,我們一般稱為世界坐標系(或笛卡爾坐標系),而相機圖像的二維平面,一般稱為像素坐標系。
如果考慮圖像的深度信息、視角大小,我們就可以獲得相機的三維坐標系。通過一些固定點在不同坐標系中的坐標,我們便可以通過旋轉(zhuǎn)、平移變換獲得坐標系之間的相對位姿,進而獲得機器人的位姿。
數(shù)學基礎在坐標變換中有很深的應用價值,在特征提取、數(shù)據(jù)處理(如卡爾曼濾波)中也有重要的應用。
在計算線性代數(shù)中的常用運算時,Eigen庫是你提高計算速度的好幫手。這個庫有豐富的接口來讓你進行歐拉角、四元數(shù)、旋轉(zhuǎn)矩陣、矩陣求逆等運算。此外,還方便地可以與OpenCV中的數(shù)據(jù)類型進行相互轉(zhuǎn)換。
推薦學習鏈接:
1.視覺SLAM十四講:https://www.bilibili.com/video/BV16t411g7FR
2.3Blue1Brown線性代數(shù)教程:https://b23.tv/jqyxkkm


拓展篇-深度學習-二選一
RM2020賽季推出的新兵種“雷達站”使得基于深度學習技術的機器人識別、定位算法成為視覺組算法開發(fā)的一個重點方向。
?
#1?深度學習框架?
我們推薦使用Pytorch或Tensorflow作為深度學習框架。如果你的筆記本電腦沒有顯卡或者顯存較少,可以嘗試安裝CPU版本,來對框架中的基本數(shù)據(jù)類型、各種類型的網(wǎng)絡層接口進行簡單的了解。學有余力的同學可以嘗試使用RM開源的DJI_ROCO數(shù)據(jù)集進行機器人識別和分類,嘗試實現(xiàn)下圖的識別效果。
推薦學習鏈接:
1.Pytorch中文文檔:https://pytorch-cn.readthedocs.io/zh/latest/
2.DJI_ROCO數(shù)據(jù)集:https://terra-1-g.djicdn.com/b2a076471c6c4b72b574a977334d3e05/resources/DJI%20ROCO.zip

?
#2?神經(jīng)網(wǎng)絡?
采用神經(jīng)網(wǎng)絡搭建模型做圖像推理,可以有效提高識別的容錯率。
首先,你需要搭建一個神經(jīng)網(wǎng)絡的框架。其次,將自己的任務和網(wǎng)絡結(jié)構相結(jié)合,并做優(yōu)化。如何設計網(wǎng)絡的結(jié)構是門學問,既要保證速度,又要保證泛化性等。
然后,開始調(diào)整超參數(shù),即深度學習程序員口中的調(diào)參。這種調(diào)參跟最終網(wǎng)絡模型的效果之間有一種微妙的關系,達不到預期效果時,不深入學習往往難以分析出問題所在,但如果你掌握相關知識,就能快速定位癥結(jié)。
接著,把推理模型部署在設備中。這里面也大有學問:部署的快速性、準確性,電腦硬件資源的分配,以及經(jīng)濟性等,都是需要考慮的點。
?
#3?目標檢測?
2022賽季中,我們也在目標檢測方向進行了一些探索,對這方面有所了解也是面試加分項哦。
首先,你需要學習深度學習基礎知識,重點學習基本概念術語,不同情況下?lián)p失函數(shù)的設計。然后嘗試目標檢測,跑通基礎的YOLO模型。最后設計簡單的四點模型,這里可以參考yolov5face項目。
這是一項充滿挑戰(zhàn)的任務。希望大家努力學習,學會利用各種渠道搜索學習資源。
如果你對目標檢測、強化學習、小樣本學習等算法有一定的經(jīng)驗或具有濃厚的興趣,歡迎帶上你的作品來參加視覺組雷達站研發(fā)組的面試!
?
#4?智能決策?
對于雷達站的開發(fā),我們不僅著眼于目標檢測,更期待有更多的潛能開發(fā)。本賽季也有對激光雷達進行一定程度的探索,需要負責對激光雷達庫的開發(fā)與維護。因此,我們也在智能決策等方向進行了一些探索。非常歡迎對智能決策有所了解的同學加入我們實驗室。
推薦學習鏈接:
1.行為樹學習:https://www.behaviac.com/concepts/
2.人機對抗門戶:http://turingai.ia.ac.cn/

拓展篇-ROS-二選一
ROS是一種編寫機器人軟件程序的高度靈活性軟件架構,它對于視覺組的意義在于“一套標準和一堆工具”。
?
#1?“一套標準”?
ROS中有一個概念叫“計算圖”,這是ROS用于處理數(shù)據(jù)的一種點對點的網(wǎng)絡形式,即由一個master根節(jié)點管理下層的一系列節(jié)點。擁有了計算圖這個特性,我們可以非常方便且安全地通過編寫多個節(jié)點的代碼來實現(xiàn)多進程編程(注意區(qū)別于多線程)。這種獨特的編程方式也是ROS標準的一部分。
除了多進程編程的標準以外,ROS標準還提供了一系列的通用數(shù)據(jù)類型,例如點云、圖像,用于描述機器人運動的速度姿態(tài)等等。如今許多廠商生產(chǎn)的硬件都支持ROS,比如一些激光雷達、深度相機、雙目相機之類的傳感器等。廠家提供現(xiàn)成的節(jié)點讀取硬件數(shù)據(jù),我們只要讀取它的節(jié)點就可以獲得ROS標準數(shù)據(jù)類型。不用接觸底層,更換設備也很方便。

?
#2?“一堆工具”?
ROS提供了大量的工具,如:用于檢測每個節(jié)點的發(fā)布頻率和信息類型的許多命令行工具,可視化工具rviz,用于數(shù)據(jù)可視化的rqt_plot,用于仿真的gazebo,用于標定相機內(nèi)參的工具等等。
以上所說的都是ROS內(nèi)置工具。進一步學習后,你會發(fā)現(xiàn)很多GitHub上的開源工具都是依賴ROS開發(fā)的,比如由港科大開源、用于標定imu的imu_utils,以及可以用于imu和相機聯(lián)合標定的工具kalibr等。
?
#3?學習建議?
ROS需要在Linux系統(tǒng)下安裝,因此你需要先安裝Ubuntu或其他Linux系統(tǒng)。實驗室統(tǒng)一使用Ubuntu 20.04作為開發(fā)環(huán)境,因此需要安裝適用于Ubuntu的ROS。需要注意的是,ROS與Ubuntu的版本是一一對應的,比如Ubuntu 20.04對應的是ROS-Noetic。我們在后面提供了官網(wǎng)安裝教程以供參考,大家也可以自行尋找其他教程。
安裝好之后,就可以著手學習啦。ROS Wiki是應用最廣、公認最好的ROS入門工具,也推薦大家從此出發(fā)學習。在了解完ROS的基本概念后,我們推薦閱讀三本書籍,來幫助你從入門走到項目實踐,系統(tǒng)地學習ROS整個框架。當然,閱讀的前提是你具備ROS、GNU/Linux和編程概念的基本知識。
不必擔心學習路上無資料可尋,ROS社區(qū)的建設非常好,網(wǎng)上也有大量博客可作學習參考。
ROS的工程特性決定了一定要在項目中才能更好地被習得。大家只有不斷在ROS中嘗試新的傳感器、新的算法、甚至嘗試新的框架,才能對ROS有更深入的理解。因此在安裝完ROS后,你可以自己動手實現(xiàn)一個簡單的兩個節(jié)點間的通訊。
?
#4?學習途徑?
1.ROS-Noetic安裝:http://wiki.ros.org/noetic/Installation
2.ROS Wiki:http://wiki.ros.org/
3.入門閱讀?Effective Robotics Programming with ROS - Third Edition:http://wiki.ros.org/Effective_Robotics_Programming_with_ROS-Third_Edition
4.進階閱讀?Mastering ROS for Robotics Programming:http://wiki.ros.org/Books/MasteringROSforRoboticsProgramming
5.項目實踐?ROS Robotics Projects:http://wiki.ros.org/ROS_Robotics_Projects

小貼士
以上學習建議中,基礎篇與算法篇為必學項,而拓展篇則是選學項,大家可以根據(jù)興趣選擇其中一項進行學習。
實踐是檢驗理論的一個重要手段,招新面試時,我們會考核大家實踐任務的完成情況及提前學習內(nèi)容的掌握情況,大家一定要用心完成。詳情等待后續(xù)招新推文通知。
如有疑問,歡迎大家掃描以下二維碼,加入實驗室招新qq群進行交流:


競賽組&項目組分流須知
實驗室的技術開發(fā)分兩個大組——競賽組和項目組,每個大組下分設電控組,機械組與視覺組。競賽組主要參與RoboMaster機甲大師賽,而項目組主要參加華為嵌入式大賽、ROBOCON、全國大學生機械創(chuàng)新設計大賽等團隊規(guī)模相對較小的比賽。
加入競賽組,可以感受到大型團隊里協(xié)作配合的氛圍,并且基于較為完善的培養(yǎng)體系,能夠系統(tǒng)地學習和掌握開發(fā)機器人所需的知識。同時會負責從零到一開發(fā)機器人,并在機器人交流和對抗中,不斷迭代和完善機器人,成為一名追求極致的工程師。
相比于競賽組,項目組更注重理論的探索和學習,因此仿真的運用會更加頻繁和必要。因為參加的比賽規(guī)模較小,并且比賽規(guī)則每年變動較大,因此隊員開發(fā)的自由度較大,更加考驗隊員的創(chuàng)新能力,以及設計的魯棒性。
兩大組別在機械、電控、視覺三個方面的學習和考核要求一致。在前期,兩大組的新隊員會統(tǒng)一培訓培養(yǎng),后期則會按照報名和面試結(jié)果進行分流。
文案 / 視覺組
編輯 / 李曉欣
美工 / 胡鈺瀅
審核 / 徐心卓 趙曦
閱讀?2134