如何低成本搭建ARM+ROS的硬件載體?上文為大家介紹了實(shí)現(xiàn)的思路及原理,本文將為讀者實(shí)際操作,展示ROS部署前的籌備工作及步驟分解。
1.方案概述
本文重點(diǎn)介紹低成本搭建ARM+ROS的硬件及底層實(shí)現(xiàn)。開(kāi)發(fā)板選用HDG2L-IoT評(píng)估套件,默認(rèn)配置為2G內(nèi)存、8G存儲(chǔ),搭載可玩性極高的Ubuntu系統(tǒng)。
開(kāi)發(fā)套件默認(rèn)的Ubuntu系統(tǒng)大概占用3.1G空間,剩余3.2G空間,在構(gòu)建docker+ROS環(huán)境時(shí)可能會(huì)報(bào)eMMC空間不足的錯(cuò)誤,所以需要調(diào)整HDG2L-IoT的啟動(dòng)參數(shù),將啟動(dòng)參數(shù)改為引導(dǎo)到TF空間中。市面上常見(jiàn)的樹(shù)莓派部署ROS方案也是如此操作。
2.方案準(zhǔn)備
首先,需要用到的硬件如下所示。
3.TF卡掛載Ubuntu固件修改
本小節(jié)將介紹如何實(shí)現(xiàn)HDG2L-IoT掛載TF卡內(nèi)的文件系統(tǒng),步驟如下:
1)制作啟動(dòng)卡;
2)解壓目標(biāo)文件系統(tǒng)到TF卡內(nèi);
3)修改uboot啟動(dòng)參數(shù);
3.1制作啟動(dòng)卡
首先制作啟動(dòng)卡,格式化TF卡的操作可通過(guò)瑞薩提供的shell腳本實(shí)現(xiàn),在PC端的Ubuntu開(kāi)發(fā)環(huán)境下,執(zhí)行以下命令來(lái)下載操作腳本。
將需要被用作啟動(dòng)卡的TF卡插入到PC機(jī)內(nèi),用虛擬機(jī)來(lái)操作,調(diào)整步驟如下。首先打開(kāi)虛擬機(jī)的USB 3.1功能,以免TF卡讀取失敗。
然后將TF卡導(dǎo)入U(xiǎn)buntu虛擬機(jī)中,如下所示。
系統(tǒng)能識(shí)別后,執(zhí)行剛才下載的usb_sd_partition.sh腳本,如下所示。
腳本執(zhí)行成功后,TF卡將分為兩個(gè)分區(qū),分區(qū)1為fat32,分區(qū)2為ext4。
(注:當(dāng)前新版本的Windows系統(tǒng)比較少支持ext4格式的TF卡,所以在Windows環(huán)境下一般只看到分區(qū)1,分區(qū)2會(huì)提示需要格式才能識(shí)別,請(qǐng)忽略。)
3.2拷貝目標(biāo)文件到TF中
將HDG2L-IoT配套的Ubuntu壓縮包解壓到ext4分區(qū)中,虛擬機(jī)內(nèi)自動(dòng)掛載到/media/${USER}/sdb2內(nèi)。本機(jī)的解壓命令如下所示。
將HDG2L-IoT配套的內(nèi)核鏡像拷貝到Windows下識(shí)別的TF分區(qū)中(FAT32系統(tǒng)允許被Windows系統(tǒng)識(shí)別,ext4系統(tǒng)不被識(shí)別),拷貝后如下所示。
3.3修改uboot啟動(dòng)參數(shù)
最后需要調(diào)整HDG2L-IoT的uboot啟動(dòng)啟動(dòng)參數(shù),引導(dǎo)其使用TF卡內(nèi)的內(nèi)核與文件系統(tǒng),首先上電,在倒計(jì)時(shí)前進(jìn)入uboot菜單,如下所示。
將上一步中制作好的TF卡插入HDG2L-IoT板卡的TF卡槽中,在U-Boot提示符下設(shè)定以下變量,bootargs變量用于指定文件系統(tǒng)的載體,在系統(tǒng)內(nèi),TF卡槽占用的設(shè)備名為/dev/mmcblk1p2。
然后設(shè)置從TF的分區(qū)1內(nèi)獲取內(nèi)核鏡像和內(nèi)核設(shè)備樹(shù),命令如下所示。
設(shè)置完成后,通過(guò)以下命令保存uboot的環(huán)境變量,命令如下所示。
重新啟動(dòng)后,若TF卡正常,整體存儲(chǔ)空間情況如下所示。
若TF卡沒(méi)插入,uboot的啟動(dòng)會(huì)報(bào)錯(cuò)誤信息,錯(cuò)誤信息如下所示。
4.安裝docker環(huán)境
正常啟動(dòng)之后,開(kāi)始搭建docker環(huán)境。
4.1安裝docker軟件
首先,燒錄后的第一次上電的板卡需要更新內(nèi)部的軟件版本,命令如下所示。update更新失敗注意檢測(cè)網(wǎng)絡(luò)狀態(tài)和date日期。部分軟件可能體積過(guò)大,需要耐心等待。
然后清除舊版本的docker軟件,再重新安裝docker.io。
啟動(dòng)docker。
使能docker開(kāi)機(jī)自啟動(dòng)。
檢查docker運(yùn)行狀態(tài)。
4.2獲取鏡像
運(yùn)行此命令可以從Docker Hub上下載現(xiàn)成鏡像。
查看本地的鏡像文件命令如下所示。
4.3創(chuàng)建容器
容器就是加載模板后運(yùn)行的沙盒環(huán)境,具有運(yùn)行時(shí)所需的可寫(xiě)文件層、應(yīng)用程序也處于運(yùn)行狀態(tài)。概念上可能會(huì)與PC端常用的虛擬機(jī)混淆,虛擬機(jī)是包括內(nèi)核、應(yīng)用運(yùn)行環(huán)境和其他系統(tǒng)環(huán)境的,而Docker容器就是獨(dú)立運(yùn)行的一個(gè)或一組應(yīng)用以及他們必須的運(yùn)行環(huán)境。
創(chuàng)建容器時(shí),需要指定使用的鏡像文件,這里使用上面用pull指令下載下來(lái)的鏡像文件,創(chuàng)建命令如下所示。
查看容器狀態(tài),命令如下所示,每個(gè)容器都有自己的CONTAINER_ID與NAMES,供后面的命令操作使用(可使用docker rename命令修改容器名,便于簡(jiǎn)便使用)。
4.4啟動(dòng)容器
容器創(chuàng)建后,通過(guò)CONTAINER_ID與NAMES來(lái)操作容器,啟動(dòng)命令如下所示。
上文所說(shuō),容器是運(yùn)行一個(gè)或一組進(jìn)程,docker ps命令里的COMMAND即為容器運(yùn)行的進(jìn)程,當(dāng)前顯示bash,即進(jìn)入命令交互進(jìn)程。通過(guò)以下命令進(jìn)入容器內(nèi)部。
進(jìn)入后,可以操作容器內(nèi)的命令,如下所示。
通過(guò)exit命令,可退出容器,退出后容器就處于停止?fàn)顟B(tài),如下所示。
通過(guò)以上操作,我們就完成了硬件與底層的搭建,為ROS運(yùn)行在這套開(kāi)發(fā)板上做好了準(zhǔn)備,下一章節(jié)將為大家?guī)?lái)ROS的部署方法。