LINUX和RTOS的雙核操作系統(tǒng),極致性價比RISC-V開發(fā)板開發(fā)實(shí)踐
Milk-V Duo是一款基于算能?CV1800B芯片的MPU,能夠運(yùn)行基于LINUX和RTOS的操作系統(tǒng)。Milk-V Duo為專業(yè)人士、工業(yè)OEM企業(yè)、物聯(lián)網(wǎng)愛好者、業(yè)余愛好者、DIYers和創(chuàng)作者提供了一個可靠、低成本且極具功能的平臺,使他們能夠打造和調(diào)試自己的想法,并將其變成現(xiàn)實(shí)。
01
Milk-V Duo之開箱初體驗(yàn)
一、第一印象
外觀設(shè)計方面,Milk-V Duo以簡約而精致的風(fēng)格為主,采用沉金工藝,給人一種高端大氣的感覺。開發(fā)板的尺寸小巧,便于攜帶和使用,在我拿到的所有的開發(fā)板中,也只有STM32103C8T6核心板的體積能與之媲美了,但是前者在同樣的體積下塞進(jìn)去了更強(qiáng)的功能。
二、外設(shè)
Milk-V Duo是一個基于CV1800B芯片的超緊湊嵌入式開發(fā)平臺。它可以運(yùn)行Linux和RTOS,為專業(yè)人士、工業(yè)ODM廠商、AIoT愛好者、DIY愛好者和創(chuàng)作者提供了一個可靠、低成本和高性能的平臺,在這塊小小的開發(fā)板上集成了多達(dá)26個GPIO引腳,可以訪問內(nèi)部外設(shè),如SDIO、I2C、PWM、SPI、J-TAG和UART。
處理器: CVITEK CV1800B (C906@1Ghz + C906@700MHz)
內(nèi)存: 64MB
網(wǎng)口: 10/100Mbps?以太網(wǎng)?(需外接擴(kuò)展板)
這樣看來很適合做一些廣告機(jī)等多媒體設(shè)備。
三、軟件
除了強(qiáng)大的硬件性能,Milk-V Duo還具備良好的軟件支持。官方釋放了豐富的開發(fā)工具和庫,方便用戶進(jìn)行各種應(yīng)用程序的開發(fā)。此外,開發(fā)板還提供了豐富的示例代碼和文檔,幫助用戶快速上手和學(xué)習(xí)。
02
OpenCV的交叉編譯
Milk-V Duo是一款基于算能 CV1800B芯片的MPU,能夠運(yùn)行基于LINUX和RTOS的操作系統(tǒng)。算能 CV1800B使用的是平頭哥的玄鐵C906核,具有很強(qiáng)的處理能力,所以我們嘗試交叉編譯試用于Milk-V Duo的OpenCV圖像處理庫。平頭哥的網(wǎng)站提供了優(yōu)化的定制版OpenCV,據(jù)說這個版本可以最大限度地發(fā)揮芯片的性能,讓人很是期待。
下載和編譯OpenCV
交叉編譯器采用的是算能官方提供的。這個包中包括了用于裸機(jī)的elf工具鏈和gnu、musl兩個版本的工具鏈。我們使用cat /proc/version目錄查看了官方鏡像所使用編譯器的版本,和官方提供的工具鏈一致,而且是musl版本的。
在主機(jī)上建立一個env.sh文件,輸入如下內(nèi)容:
HOST_TOOL_PATH=/home/xxx/milk-v/CV180x/host-tools
export PATH="$HOST_TOOL_PATH/gcc/riscv64-linux-x86_64/bin:$HOST_TOOL_PATH/gcc/riscv64-linux-musl-x86_64/bin:$HOST_TOOL_PATH/gcc/riscv64-elf-x86_64/bin:$PATH"
(左右移動查看全部內(nèi)容)
然后在主機(jī)的命令行執(zhí)行source env.sh以設(shè)置環(huán)境變量。
......略
演示結(jié)果:
03
RoboMaster機(jī)器人裝甲板的識別
上次我們介紹了OpenCV圖像處理庫的移植,這次我們嘗試將RoboMaster機(jī)器人裝甲板識別的程序移植到板子上,測試開發(fā)板的圖像處理能力。
裝甲板識別算法簡介:
裝甲板識別的算法已經(jīng)非常成熟,其基本思想是先利用閾值分割、膨脹等算法對圖像中的燈條進(jìn)行識別,再根據(jù)長寬比、面積大小和凸度來篩選燈條,對找出的燈條進(jìn)行匹配找到合適的配對,并將配對燈條作為候選裝甲板,提取其中間的圖案判斷是否是數(shù)字進(jìn)行篩選。
代碼移植注意事項
Milk-V Duo處理板的CPU主頻達(dá)到1GHz,但是其RAM只有64MB,遠(yuǎn)少于一般Linux系統(tǒng),所以在移植程序時必須非常小心內(nèi)存的占用。我們的程序每次僅處理一幀圖像,而且在處理過程中盡量減少對圖像的Clone,處理的內(nèi)存稍微多一點(diǎn)就可能導(dǎo)致程序失敗。
在視頻處理方面,我們沒有采用OpenCV的VideoCapture和VideoWrite類,這兩個類的處理都非常耗用內(nèi)存,再加上我們的視頻分辨率較高(1280×1024),處理不了幾幀就會出錯。我們采用的是將視頻以圖片序列進(jìn)行存儲,這樣可以保障每次處理的內(nèi)存降到最少。
04
光感bh1750驅(qū)動添加及測試
本章介紹在milkv-duo開發(fā)板上添加光感bh1750,并實(shí)現(xiàn)應(yīng)用層測試。
一、電路圖查看
1.1 duo開發(fā)板i2c引腳:https://github.com/milkv-duo/duo-files
這些都是可以作為i2c使用的引腳:
注意:電路圖中的gpio0、1對應(yīng)的是芯片上的gpio28、29,到dtsi中查看也是28、29。電路圖中檢索gpio0、1即可找到對應(yīng)的電路。
如圖,小板的gpio0、1的默認(rèn)功能是IIC_SCL、IIC_SDA
05
基于Duo開發(fā)板的Densenet圖像分類
1、實(shí)驗(yàn)環(huán)境
2、安裝Docker
依次執(zhí)行以下命令即可:
//1、安裝依賴
$ sudo apt update
$ sudo apt install ca-certificates curl gnupg lsb-release
//2、apt上注冊Docker的GPG密鑰圈
$ sudo mkdir -p /etc/apt/keyrings
$ curl -fsSL https:
//download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
$ sudo chmod a+r /etc/apt/keyrings/docker.gpg
$ echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
$ sudo apt update
//3、下載安裝腳本并運(yùn)行
$ curl -fsSL https:
//get.docker.com -o get-docker.sh
$ sudo sh get-docker.sh
(左右移動查看全部內(nèi)容)
等待安裝結(jié)束:
驗(yàn)證docker:sudo docker run hello-world,有如下打印說明安裝成功。
3、
拉取docker鏡像
(方式1、2均可)
1)pull,拉取時長取決于網(wǎng)絡(luò)環(huán)境 $ docker pull sophgo/tpuc_dev:v2.2
2)導(dǎo)入鏡像,云盤下載后導(dǎo)入即可
鏡像下載:鏈接:https://pan.baidu.com/s/1298AU09H0t_w8BHZu7-REQ?pwd=cw8c
提取碼:cw8c
復(fù)制到虛擬機(jī)里,導(dǎo)入:sudo docker load -i tpuc_dev.tar
導(dǎo)入后列出本地列表可以看到框選鏡像:
......
測試結(jié)果: