畫風(fēng)引發(fā)熱議,用開源機(jī)器人項(xiàng)目實(shí)現(xiàn)“云畢業(yè)典禮”
前幾天,南京郵電大學(xué)的一場(chǎng)畢業(yè)典禮引起了吃瓜群眾的熱議,先來看看這個(gè)畫風(fēng):
由于疫情原因,很多高校的學(xué)生只能在家里通過線上視頻的方式完成畢業(yè)論文答辯。答辯通過后,畢業(yè)典禮就要來了,但疫情原因還不能返校怎么辦?畢竟畢業(yè)典禮一生可能就這一次,儀式感還是要有的!于是南京郵電大學(xué)就用自研的機(jī)器人,為部分無法到場(chǎng)的畢業(yè)生整了這么一出畫風(fēng)清奇的“云畢業(yè)典禮”。
據(jù)南郵的老師介紹,畢業(yè)典禮上的這些機(jī)器人出自學(xué)校的機(jī)器人創(chuàng)新團(tuán)隊(duì)之手,是在以前參賽機(jī)器人的基礎(chǔ)上改裝的。這次改裝主要是為機(jī)器人配置了與真人身高相仿的模型,現(xiàn)場(chǎng)由專門的同學(xué)對(duì)機(jī)器人進(jìn)行遠(yuǎn)程控制,屏幕則是用 ZOOM 與參加畢業(yè)典禮的同學(xué)進(jìn)行視頻交互。這個(gè)由南郵學(xué)生組成的機(jī)器人團(tuán)隊(duì)曾在國(guó)內(nèi)外各大機(jī)器人競(jìng)賽中獲得不錯(cuò)的成績(jī)。
其實(shí)現(xiàn)在的 AI 技術(shù)已經(jīng)非常成熟且親民,就算是編程能力不太強(qiáng)的同學(xué)也可以玩轉(zhuǎn)很多 AI 工具,比如很多好玩的開源機(jī)器人項(xiàng)目。據(jù)悉,南郵這款機(jī)器人內(nèi)部的控制系統(tǒng)也是在開源軟件的基礎(chǔ)上改進(jìn)而來,雖然具體用的哪款開源軟件并不知曉,但我想借此機(jī)會(huì)給大家分享一些有趣的開源機(jī)器人項(xiàng)目,感興趣的朋友可以自己動(dòng)手 DIY 一個(gè) AI 機(jī)器人。
PyRobot
PyRobot 是 Facebook AI 團(tuán)隊(duì)與卡耐基梅隆大學(xué)研究團(tuán)隊(duì)合作研發(fā)的開源機(jī)器人框架,基于 Facebook 的機(jī)器學(xué)習(xí)框架 PyTorch ,能夠運(yùn)行由 PyTorch 訓(xùn)練的深度學(xué)習(xí)模型。
PyRobot 基于機(jī)器人操作系統(tǒng) ROS 提供了一組無關(guān)硬件的 API,供開發(fā)人員控制各種型號(hào)的機(jī)器人。PyRobot 抽象了硬件底層控制器與應(yīng)用程序之間交互的細(xì)節(jié),因此對(duì)于 AI 愛好者來說,可以在不具備設(shè)備驅(qū)動(dòng)程序、控制或規(guī)劃等專業(yè)知識(shí)的情況下,使用各種機(jī)器人的通用功能,比如控制機(jī)器人關(guān)節(jié)的位置、速度或是力矩,甚至包括笛卡爾路徑規(guī)畫或是視覺 SLAM 等。
PyRobot 原生支持兩款機(jī)器人,分別是低成本的 LoCoBot (就是上面動(dòng)圖里的那款)和 Sawyer (工業(yè)制造機(jī)械臂),感興趣的朋友可以買一臺(tái) LoCoBot 來玩玩看(也可以在 3D 模擬器上玩)。當(dāng)然,如果想用在自己 DIY 的機(jī)器人上,開發(fā)團(tuán)隊(duì)也提供了教程,可以接著往下看:詳情點(diǎn)擊。
安裝使用
-
使用 LoCoBot
同時(shí)安裝 PyRobot 和 LoCoBot 依賴項(xiàng)
1. 安裝 Ubuntu 16.04
2. 下載安裝腳本
sudo apt updatesudo apt-get install curlcurl 'https://raw.githubusercontent.com/facebookresearch/pyrobot/master/robots/LoCoBot/install/locobot_install_all.sh' > locobot_install_all.sh
3. 運(yùn)行腳本安裝所有內(nèi)容(ROS、realsense 驅(qū)動(dòng)程序等)。
4. 如果你已經(jīng)擁有一臺(tái) LoCoBot 。運(yùn)行以下命令:(請(qǐng)?jiān)谶\(yùn)行以下命令之前將 nuc 計(jì)算機(jī)連接到 realsense 相機(jī))
#-t Decides the type of installation. Available Options: full or sim_only#-p Decides the python version for pyRobot. Available Options: 2 or 3chmod +x locobot_install_all.sh./locobot_install_all.sh -t full -p 2
5. 沒有真的 LoCoBot 也沒關(guān)系,可以在 Gazebo 這款 3D 模擬器上運(yùn)行一個(gè)虛擬的 LoCoBot,測(cè)試各種機(jī)器人的算法。跳過第 4 步,運(yùn)行以下命令:
#-t Decides the type of installation. Available Options: full or sim_only#-p Decides the python version for pyRobot. Available Options: 2 or 3chmod +x locobot_install_all.sh ./locobot_install_all.sh -t sim_only -p 2
注: 如果安裝了與 PyRobot 兼容的 Python 3 ,把上面的 -p 2 改成 -p 3 。
-
使用 DIY 機(jī)器人
安裝 PyRobot
-
安裝 Ubuntu 16.04
-
安裝 ROS kenitc
-
安裝 PyRobot
cd ~mkdir -p low_cost_ws/srccd ~/low_cost_ws/srcgit clone --recurse-submodules https://github.com/facebookresearch/pyrobot.gitcd pyrobot/chmod +x install_pyrobot.sh./install_pyrobot.sh -p 2 #For python3, modify the argumet to -p 3
兼容問題:由于 realsense 一直在更新,如果不小心從 ubuntu 中的軟件更新程序更新了 realsense相關(guān)的軟件包,可能會(huì)出現(xiàn)兼容性問題。因此,作者建議不要更新任何與 realsense 相關(guān)的庫。當(dāng) ubuntu 提示軟件更新時(shí),請(qǐng)仔細(xì)檢查更新列表。
新建 DIY 機(jī)器人配置文件
1. 創(chuàng)建一個(gè)新的配置文件
想要與新機(jī)器人交互的第一步是創(chuàng)建新的配置文件。首先配置文件名應(yīng)遵循以下命名規(guī)則:<ROBOT_NAME> _config.py。創(chuàng)建此文件最簡(jiǎn)單的方法是繼承 src / pyrobot / cfg / config.py 中的預(yù)定義配置。在 config.py 中,作者定義了 Robot 和 ARM 類所需的一些配置。此處的每個(gè)配置都應(yīng)指定適當(dāng)?shù)闹?。?pyrobot / cfg / sawyer_config.py 中可以找到有關(guān)如何編寫配置文件的示例。sawyer_config.py 繼承了 config.py 中定義的配置,并更改了這些配置的默認(rèn)值。sawyer_config.py 還顯示了如何在配置文件中添加特定于新機(jī)器人的更多配置。
2. 繼承 PyRobot 父類
下一步是繼承現(xiàn)有的 PyRobot 父類(手臂,抓取器,基礎(chǔ),相機(jī)等)。在 src / pyrobot 中創(chuàng)建一個(gè)名為 <ROBOT_NAME> 的文件夾。根據(jù)新機(jī)器人擁有的硬件,創(chuàng)建一個(gè)名為 arm.py,gipperper.py,base.py 或 camera.py 的 python 腳本。例如,如果新機(jī)器人具有所有這 4 個(gè)組件,則應(yīng)在上面創(chuàng)建 4 個(gè)文件。如果新機(jī)器人只有手臂和抓手,則應(yīng)只創(chuàng)建 arm.py 和 nipper.py 。在每個(gè)文件中,創(chuàng)建一個(gè)新類(類名稱應(yīng)該與 <ROBOT_NAME> _config.py 中的配置 CLASS一致)并繼承 PyRobot 父類。
建議在父類中重用盡可能多的方法,如果新的機(jī)器人不支持方法,則可以覆蓋該方法,并在調(diào)用該方法時(shí)引發(fā)錯(cuò)誤??傮w而言,該庫非常靈活,你可以覆蓋任何方法??梢栽?src / pyrobot / sawyer 中找到編寫 arm.py 的示例。例如 Sawyer 機(jī)器人,只需要覆蓋命令發(fā)布功能即可使其代碼與 PyRobot 兼容。
3. 編寫單元測(cè)試
寫完代碼后,需要為新機(jī)器人編寫單元測(cè)試。單元測(cè)試的示例可以在 tests / 中找到。
4. 添加示例
可以在 examples / 中添加示例。創(chuàng)建一個(gè)名為 <ROBOT_NAME> 的新文件夾,然后添加示例文件。
PyRobot 的下載地址:點(diǎn)擊下載
PHOENIXEngine
如果覺得購(gòu)買 LoCoBot 的渠道太麻煩,可以試試這個(gè)國(guó)產(chǎn)項(xiàng)目。PHOENIXEngine 是一個(gè)可以用來開發(fā)機(jī)器人、游戲的引擎。集成 HectorSlam 算法為機(jī)器人室內(nèi)導(dǎo)航,使用 A* 算法進(jìn)行全局路徑規(guī)劃,使用 DWA 算法進(jìn)行局部避障。該項(xiàng)目為國(guó)產(chǎn)項(xiàng)目,作者提供了一整套低成本的機(jī)器人物理組件。目前,PHOENIXEngine 已經(jīng)支持 Windows、ARM、Linux、LinuxARM、iOS 平臺(tái),以 Lua 為主要開發(fā)語言,底層構(gòu)建用的 C/C++,支持跨平臺(tái)編譯。
PythonRobotics
娛樂之余,如果大家想進(jìn)一步學(xué)習(xí)和了解機(jī)器人相關(guān)的各種 AI 算法原理,推薦看看這個(gè)機(jī)器人算法庫。PythonRobotics 是用 Python 實(shí)現(xiàn)的機(jī)器人算法案例集合,該庫包括了機(jī)器人設(shè)計(jì)中常用的定位算法、測(cè)繪算法、路徑規(guī)劃算法、SLAM、路徑跟蹤算法。作者的初衷是希望幫助 AI 愛好者更容易理解每個(gè)算法的基本思想,選擇的算法示例都是一些應(yīng)用非常廣泛的實(shí)用算法。強(qiáng)烈推薦給想要進(jìn)一步了解和學(xué)習(xí) AI 機(jī)器人相關(guān)算法原理的朋友。
部分算法案例:
機(jī)器人定位算法:
擴(kuò)展卡爾曼濾波器(EKF)定位
這是使用擴(kuò)展卡爾曼濾波器(EKF)的傳感器融合定位。藍(lán)線是真實(shí)的軌跡,黑線是推算的軌跡,綠點(diǎn)是定位觀測(cè)(例如 GPS),紅線是 EKF 的估計(jì)軌跡,紅色橢圓是 EKF 估計(jì)的協(xié)方差橢圓。
無損卡爾曼濾波定位
這是一個(gè)使用無損卡爾曼濾波器(UKF)的傳感器融合定位,線條和點(diǎn)與 EKF 模擬的含義相同。
PythonRobotics 的下載地址:點(diǎn)擊下載
感興趣的朋友不妨業(yè)余時(shí)間 DIY 一個(gè) AI 機(jī)器人吧。