簡(jiǎn) 介: 本文內(nèi)容是在8
月13
日郵件接收到參加全國(guó)大學(xué)生智能車(chē)競(jìng)賽同學(xué)寫(xiě)來(lái)的一封郵件。其中對(duì)于公開(kāi)的山東大學(xué)(威海)全向組提交的RT-Thread
技術(shù)報(bào)告中所產(chǎn)生的若干疑點(diǎn)。針對(duì)于競(jìng)賽中所使用的沁恒單片機(jī)在RAM
,CPU
速度等方面的不足,作者質(zhì)疑山東大學(xué)全向組報(bào)告中存在不實(shí)之處。 海韻三隊(duì)同學(xué)很快針對(duì)提出的疑問(wèn)進(jìn)行了書(shū)面的回復(fù),具體內(nèi)容在本文的最后一節(jié)。關(guān)鍵詞
: RTT ,智能車(chē)競(jìng)賽 ,質(zhì)疑 ,沁恒單片機(jī) 01 問(wèn) 題來(lái)源??
卓 大大你好,這是我閱讀您
csdn
上公布的獲得
rtt
專(zhuān)項(xiàng)獎(jiǎng)進(jìn)入國(guó)賽的技術(shù)報(bào)告后,產(chǎn)生的一些疑問(wèn),篇幅問(wèn)題我寫(xiě)成了
word
。如果確實(shí)有這個(gè)問(wèn)題,希望卓大大能重視,如果是我自身因知識(shí)儲(chǔ)備不足而產(chǎn)生的誤解,希望卓大大樂(lè)一樂(lè)就好,不要在意。??下面內(nèi)容是來(lái)自于郵件中
WORD
文檔內(nèi)容:關(guān)于山東大學(xué)(威海)全向組海韻三隊(duì)提交的
RT-Thread
技術(shù)報(bào)告中的若干疑點(diǎn)。
基于RT-Thread全向賽車(chē)控制算法開(kāi)發(fā) [1] 第十六屆全國(guó)大學(xué)生智能汽車(chē)競(jìng)賽RT-Thread創(chuàng)新專(zhuān)項(xiàng)獎(jiǎng) [2] 02 若 干疑點(diǎn)一、關(guān)于RAM使用問(wèn)題 ??最明顯的一點(diǎn)是
RAM
的使用情況。文中作者也承認(rèn)圖像處理線程
sweep
需要存儲(chǔ)的數(shù)據(jù)非常多,卻只為其設(shè)置了
2KB
的棧空間,這顯然不正常,所以我對(duì)其
RAM
占用空間進(jìn)行了分析。
▲ 圖2.1 單片機(jī)RT-Thread 不同進(jìn)程RAM分配 ??占用
RAM
的大頭是圖像數(shù)組。從總鉆風(fēng)傳回的為灰度圖像數(shù)組,根據(jù)作者提供的屏幕截圖,通過(guò)初略估計(jì)列像素點(diǎn)(數(shù)像素點(diǎn)),再通過(guò)圖像的長(zhǎng)寬比例可以計(jì)算出圖像數(shù)組約為
100*75
。
▲ 圖2.2 灰度圖像尺寸 ??我采用逐飛提供的沁恒單片機(jī) RT 開(kāi)源庫(kù),只修改圖像數(shù)組大小與作者一致,無(wú)任何其他處理程序和變量聲明,編譯后得到的存儲(chǔ)占用情況如下
▲ 圖2.3 程序編譯后所占存儲(chǔ)分配 ??存入
RAM
里的包括
data
和
bss
的數(shù)據(jù),即
304 15976
≈
15.9KB
,再加上作者分配的動(dòng)態(tài)進(jìn)程里的??臻g
5.7KB
,顯然已經(jīng)超過(guò)了單片機(jī)的20KB
RAM
空間。這還是在最保守的情況下估計(jì)的
RAM
占用空間,即圖像顯示與圖像處理共用一個(gè)數(shù)組,而不是在二值化后重新開(kāi)辟一個(gè)內(nèi)存空間用來(lái)存二值化后的圖像數(shù)組(
CH32V103
底層里的
BOOL
也被
typedef
成了
unsigned
char
即最小的存儲(chǔ)單位是一個(gè)字節(jié))。??而采用共用數(shù)組的方法時(shí),會(huì)有一個(gè)明顯的問(wèn)題,就是在總鉆風(fēng)
DMA
傳回?cái)?shù)據(jù)時(shí),會(huì)更改當(dāng)前正在寫(xiě)入顯示屏的這個(gè)數(shù)組,造成這個(gè)數(shù)組有幾行是有亂七八糟條紋的。至于
DMA
的問(wèn)題,后面還有疑問(wèn)。??綜上所述,
在作者不定義任何全局變量,僅有一些少的可憐的動(dòng)態(tài)內(nèi)存還缺乏進(jìn)程間通訊傳遞變量的情況下,僅僅一個(gè)圖像和??臻g分配就已經(jīng)超出了單片機(jī)內(nèi)存 ,
作者是如何做到讓小車(chē)正常運(yùn)行不得而知 。
二、攝像頭采集問(wèn)題 ??作者貼出了總鉆風(fēng)的配置函數(shù),從中可以看出攝像頭的幀率是
130
,即
7.8ms
傳回一幀圖像不管單片機(jī)接不接收,而作者圖像的處理時(shí)間顯然大于這個(gè)間隔時(shí)間。
▲ 圖2.2.1 總鉆風(fēng)攝像頭配置參數(shù) ??在圖像傳回時(shí)這就可能有兩種情況出現(xiàn),即場(chǎng)中斷優(yōu)先級(jí)
大于進(jìn)程 和
小于進(jìn)程 。
1、場(chǎng)中斷優(yōu)先級(jí)大于進(jìn)程優(yōu)先級(jí) ??優(yōu)先級(jí)大于進(jìn)程時(shí),場(chǎng)中斷都得到響應(yīng),打開(kāi)
DMA
通道讓
DMA
硬件傳輸。
DMA
指向的地址就是上面說(shuō)的可憐的被共用的顯示和處理的圖像數(shù)組,此時(shí)該數(shù)組會(huì)被從頭一個(gè)個(gè)地更新,要是與此同時(shí)正跑著處理或者顯示的進(jìn)程(大多數(shù)情況下肯定是的,因?yàn)檫@兩個(gè)進(jìn)程優(yōu)先級(jí)高且用時(shí)長(zhǎng)),會(huì)造成顯示錯(cuò)誤或者處理錯(cuò)誤。
2、場(chǎng)中斷優(yōu)先級(jí)小于進(jìn)程優(yōu)先級(jí) ??
OK
,另一種情況,優(yōu)先級(jí)小于進(jìn)程,則中斷頻頻得不到響應(yīng),好不容易一次所有進(jìn)程都掛起(太巧了),場(chǎng)中斷得到了響應(yīng),打開(kāi)
DMA
通道,同樣面臨上面的問(wèn)題,且
DMA
中斷的優(yōu)先級(jí)如何?
小了甚至輪不到DMA
中斷觸發(fā),根本無(wú)從發(fā)出攝像頭采集完成的信號(hào)。 大了你怎么保證場(chǎng)中斷開(kāi)啟DMA
通道的時(shí)機(jī)攝像頭還沒(méi)開(kāi)始回傳? ??大概率得到的是一幀錯(cuò)位的,不完整的,甚至根本就得不到一幀圖像。??在我調(diào)
RTT
的程序時(shí),就出現(xiàn)了這樣的問(wèn)題,我調(diào)了很久最后采用攝像頭兩個(gè)中斷優(yōu)先級(jí)最高,瘋狂降低幀率到
30
的方案才勉強(qiáng)協(xié)調(diào)了這個(gè)問(wèn)題,也可能是我菜,不知道大佬是如何實(shí)現(xiàn)的???在我看來(lái)
作者的方案是不現(xiàn)實(shí) 的,除非去掉處理圖像這個(gè)占用時(shí)間極多且優(yōu)先級(jí)高的進(jìn)程才有可能,那么這輛車(chē)還能運(yùn)行嗎?
三、單片機(jī)運(yùn)行速度問(wèn)題 ??在該章(文章中第8章第3節(jié))中,作者聲稱(chēng)采用
RTT
系統(tǒng)減短了其圖像處理的時(shí)間和獲取圖像的時(shí)間,這就很離譜了,在
CPU
沒(méi)有超頻,沒(méi)有優(yōu)化算法的情況下,為何采用了一個(gè)操作系統(tǒng)就讓單片機(jī)運(yùn)算速度加快了?
▲ 圖2.3.1 論文的第八章第三節(jié) ??我能在文中找到作者比較勉強(qiáng)的解釋是:
從并發(fā)的角度來(lái)看,各個(gè)線程在使用delay
, ?事件等待這類(lèi)函數(shù)時(shí), 會(huì)總動(dòng)讓出CPU
給其他需要的線程。不僅書(shū)寫(xiě) delay
延時(shí)函數(shù)操的心少了,整個(gè)CPU
的利用率也得到了提高,最終提升了并發(fā)性。 ??這就很奇怪了,圖像的處理中還需要延時(shí)嗎???就算有延時(shí),將圖像處理進(jìn)程掛起去執(zhí)行其他進(jìn)程,
OK
,
CPU
利用率確實(shí)得到了提高,但對(duì)圖像處理這個(gè)進(jìn)程來(lái)說(shuō),這個(gè)延時(shí)不是還在嗎?????處理完一幀圖像的時(shí)間根本不會(huì)減少甚至?xí)冮L(zhǎng)?。ň€程的掛起,調(diào)度,壓棧出棧等等一切操作都是需要時(shí)間的)況且一般簡(jiǎn)單的算法處理,根本不需要多線程進(jìn)行,多線程也不會(huì)帶來(lái)效率的提升反而將問(wèn)題復(fù)雜化。
變量 time
代表的是獲取一副圖像的時(shí)間。每獲取一幅圖像后發(fā)送一次數(shù)據(jù)給上位機(jī),得到的結(jié)果如圖俗稱(chēng)(縱軸的單位是 )??芍猂T-Thread操作系統(tǒng)下獲取一幅攝像頭圖像的時(shí)間在1000 即 左右。 ??更離奇的是,在采用
RTT
后,連圖像的獲取都得到了加速,上面討論過(guò),在操作系統(tǒng)的情況下要保證圖像場(chǎng)中斷以及
DMA
中斷的實(shí)時(shí)性有多么困難,且圖像是由攝像頭發(fā)出的,傳輸?shù)臅r(shí)間是由攝像頭
DMA
傳輸?shù)乃俣葲Q定的,
怎么會(huì)因?yàn)榻邮辗綋Q了個(gè)系統(tǒng)就變快了
?所以作者根本就是在
無(wú)中生有,編造事實(shí)
。
03 質(zhì) 疑結(jié)論??
該 篇論文的槽點(diǎn)簡(jiǎn)直數(shù)不勝數(shù),讓人不得不
懷疑其真實(shí)性 。??我不是說(shuō)山威的同學(xué)就一定寫(xiě)的
假論文 ,可能只是因?yàn)槲易陨淼臒o(wú)知,才會(huì)有這么多所謂的"
疑點(diǎn) "。至少?gòu)恼撐闹羞€是可以看出,作者是學(xué)過(guò)RTT的。??我不是計(jì)算機(jī)專(zhuān)業(yè)的學(xué)生,這是我第一次使用單片機(jī)的操作系統(tǒng)。學(xué)習(xí)一個(gè)新的事物,在CH32V103上移植RTT也讓我吃盡了苦頭。但是直到現(xiàn)在,我還是堅(jiān)持認(rèn)為:
在CH32V103這款單片機(jī)上像作者這樣跑操作系統(tǒng)是不可能的 。就算是可能,有些設(shè)計(jì)也是拍腦袋寫(xiě)出來(lái)的,不使用操作系統(tǒng),可以做到更好。??我的觀點(diǎn)可能有些是錯(cuò)的,或者沒(méi)有
GET
到山威技術(shù)報(bào)告的點(diǎn),但這些都不是
空穴來(lái)風(fēng) ,而是在我調(diào)
RTT
的過(guò)程中遇到過(guò),考慮過(guò)的問(wèn)題。相較于其他組別的單片機(jī),沁恒的這款單片機(jī)顯然在
RTT
的適用性上差了不少,也正因此需要投入更多的精力處理而不是
濫竽充數(shù) 。??所以我希望能要求
山威立刻(以防連夜改出來(lái))公開(kāi)其軟件工程,接收全國(guó)車(chē)友的監(jiān)督 。一旦程序被證實(shí)是假的,或者給不出來(lái),取消其資格,并且追究其論文造假的責(zé)任。??但我知道這個(gè)訴求大概率不會(huì)得到實(shí)現(xiàn),這件事也大概率不了了之,畢竟
RTT的名單是RTT公司給出 [3] 的,可能查閱的專(zhuān)家因?yàn)椴惶私獗荣惗砸恍┢渌驅(qū)⑵湓u(píng)出,組委會(huì)也多一件事不如少一件事得過(guò)且過(guò)。??怎么說(shuō)呢,作為一個(gè)
非利益相關(guān)者 ,山威進(jìn)不進(jìn)國(guó)賽對(duì)我也沒(méi)什么影響,但既然卓大大公布出來(lái)了,我看到了也不吐不快,
希望能促成這個(gè)比賽往更好的方向發(fā)展,能少一些不公平不公正的現(xiàn)象發(fā)生 。
04 回 復(fù)質(zhì)疑??
我 是海韻三隊(duì)的軟件隊(duì)員?,F(xiàn)在回復(fù)
CSDN
上對(duì)我們隊(duì)的質(zhì)疑。
一、回應(yīng)關(guān)于RAM使用問(wèn)題 ??質(zhì)疑者對(duì)我們圖像數(shù)組長(zhǎng)寬比例的判斷直接目測(cè)估計(jì)
100*75
這一點(diǎn)未免也太不嚴(yán)謹(jǐn)了,我們真實(shí)使用的是
80*60
的數(shù)組,差出來(lái)的這些空間能放多少全局不量我就不說(shuō)了。??當(dāng)時(shí)我們還開(kāi)了
os
優(yōu)化這一點(diǎn)非常重要,沒(méi)有在論文里提到。沒(méi)開(kāi)優(yōu)化的話肯定是超出這個(gè)芯片的
RAM
及
FLASH
大小了,因?yàn)闆](méi)有對(duì)
os
能優(yōu)化多少空間有研究就不給出計(jì)算了。??最后所有程序編譯一遍是剛好卡在超出大小邊緣了,以下是我剛剛編譯的結(jié)果而且并沒(méi)有臨時(shí)修改什么代碼的,
RTT
公司的人員應(yīng)該有我們的源程序可以讓他們編譯一遍。
▲ 圖4.1 編譯后程序內(nèi)存分配結(jié)果 ??至于說(shuō)公開(kāi)源程序的話我是覺(jué)得不太合適的,如果要公開(kāi)那也應(yīng)該公開(kāi)所有通過(guò)
RTT
進(jìn)國(guó)賽的人。如果要復(fù)現(xiàn)也應(yīng)該是所有人進(jìn)行復(fù)現(xiàn)。我也看了其他人寫(xiě)的
RTT
論文,說(shuō)實(shí)話寫(xiě)的也非常優(yōu)秀,但并不是所有人都對(duì)
RTT
的使用部分做了詳細(xì)說(shuō)明,我們也是第一次研究
RTT
所以某些地方可能寫(xiě)得不是那么嚴(yán)謹(jǐn),當(dāng)時(shí)忙著交
RTT
論文也并沒(méi)有對(duì)所有貼上去的圖片進(jìn)行檢查。
二、回應(yīng)攝像頭采集問(wèn)題 ??我坦白一點(diǎn),可能是對(duì)
RAM
的分配還不怎么合理,所以小車(chē)在發(fā)
10
次車(chē)還是會(huì)出現(xiàn)
1
次的死機(jī)現(xiàn)象,可能是因?yàn)閮?nèi)存爆了吧。但是出現(xiàn)的概率比較低所以我們就沒(méi)有再對(duì)
RAM
分配進(jìn)行最好的優(yōu)化了。然后質(zhì)疑者還提到了場(chǎng)中斷優(yōu)先級(jí)的問(wèn)題,說(shuō)實(shí)話當(dāng)時(shí)我們并沒(méi)有想到是這個(gè)問(wèn)題,所以這可能是造成我們還會(huì)偶爾死機(jī)幾次的原因,謝謝你提出來(lái)了。??然后質(zhì)疑者還提到了什么共用數(shù)組會(huì)有亂七巴糟的條紋,現(xiàn)在我澄清一下。首先我在原有的數(shù)組
mt9v034_image
下又創(chuàng)建了一個(gè)放二值化數(shù)據(jù)的數(shù)組,應(yīng)該是因?yàn)?code style="font-size: 14px;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(30, 107, 184);background-color: rgba(27, 31, 35, 0.05);font-family: "Operator Mono", Consolas, Monaco, Menlo, monospace;word-break: break-all;">os優(yōu)化的原因
bss
和
dec
確實(shí)沒(méi)有超,如果超了我們就用備用的雙核方案了。這個(gè)數(shù)組僅僅是方便我對(duì)比灰度圖和二值化圖,并不是時(shí)時(shí)刻刻在用的??!只有在調(diào)參系統(tǒng)里按下了圖像顯示頁(yè)面選項(xiàng)時(shí)才會(huì)跳到那個(gè)函數(shù)進(jìn)行二值化并顯示,平常車(chē)在跑的時(shí)候是只用到了
mt9v034_image
數(shù)組的而且并不需要對(duì)數(shù)組進(jìn)行二值化賦值,因?yàn)槲业乃惴ㄊ怯?code style="font-size: 14px;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(30, 107, 184);background-color: rgba(27, 31, 35, 0.05);font-family: "Operator Mono", Consolas, Monaco, Menlo, monospace;word-break: break-all;">mt9v034_image數(shù)組灰度值大小直接跟二值化閾值進(jìn)行比較來(lái)判斷這個(gè)點(diǎn)是趨于黑還是趨于白,這樣做的好處是省下了對(duì)數(shù)組每一個(gè)像素點(diǎn)賦值的時(shí)間。??質(zhì)疑者還提到同時(shí)跑著處理和顯示的線程,額...實(shí)際上因?yàn)樗惴ㄔ蝻@示線程是和調(diào)參系統(tǒng)掛鉤的,只在我需要調(diào)試看圖像及參數(shù)的時(shí)候才會(huì)同時(shí)開(kāi)著圖像顯示,當(dāng)然不會(huì)讓小車(chē)跑的同時(shí)開(kāi)著圖像了,這個(gè)明顯是常識(shí)問(wèn)題我肯定不會(huì)犯錯(cuò)。
三、回應(yīng)單片機(jī)速度問(wèn)題 ??這篇論文并不是全都是我寫(xiě)的,有一部分是另一個(gè)隊(duì)友寫(xiě)的,但他并沒(méi)有參與軟件開(kāi)發(fā),所有軟件算法、調(diào)參、控制全都是我一個(gè)人寫(xiě)的,沒(méi)有那么牛逼也包攬其他雜活了。??那個(gè)延時(shí)的問(wèn)題我當(dāng)然不可能在圖像處理里面延時(shí)這不是傻子嗎。這一小部分可能是我隊(duì)友為了水的字?jǐn)?shù)寫(xiě)上去的,但是我還是要為當(dāng)時(shí)因?yàn)闀r(shí)間緊湊沒(méi)有嚴(yán)格刪掉水的部分而為大家道歉。??然后質(zhì)疑者提到了處理完一幀的時(shí)間壓根不會(huì)減少,這一點(diǎn)我其實(shí)是同意的,但是可能是我放測(cè)試運(yùn)行時(shí)間的代碼位置不對(duì),上位機(jī)給出的結(jié)果確實(shí)是少了,但是當(dāng)時(shí)要到交論文的截止時(shí)間了所以并沒(méi)有深入探究嚴(yán)謹(jǐn)性,造成了質(zhì)疑者的誤解這一點(diǎn)我要道歉。
四、回應(yīng)質(zhì)疑總結(jié) ??最后在總結(jié)一下,說(shuō)實(shí)話突然被告知自己的隊(duì)伍被舉報(bào)了還挺意外的,為什么只舉報(bào)我們山威的而不專(zhuān)門(mén)發(fā)一篇文章也舉報(bào)其他隊(duì)呢?其他隊(duì)的論文我也看了說(shuō)實(shí)話能舉報(bào)的點(diǎn)比我的論文多得多吧,這一點(diǎn)也不經(jīng)讓我產(chǎn)生質(zhì)疑,是有人眼紅山威今年的成績(jī)而專(zhuān)門(mén)挑刺嗎???公開(kāi)源程序的話我是覺(jué)得不太合適的,這設(shè)計(jì)到了我們的核心算法,如果要公開(kāi)那也應(yīng)該公開(kāi)所有通過(guò)
RTT
進(jìn)國(guó)賽的人,然后質(zhì)疑者就可以從中”
參考 ”他們的代碼了???這篇文章臨時(shí)寫(xiě)出來(lái)的可能在用詞上和行文結(jié)構(gòu)上不太嚴(yán)謹(jǐn)請(qǐng)各位見(jiàn)諒。
參考資料 [1] 基于RT-Thread全向賽車(chē)控制算法開(kāi)發(fā) : https://zhuoqing.blog.csdn.net/article/details/119652068 [2] 第十六屆全國(guó)大學(xué)生智能汽車(chē)競(jìng)賽RT-Thread 創(chuàng)新專(zhuān)項(xiàng)獎(jiǎng) : https://zhuoqing.blog.csdn.net/article/details/118506454 [3] RTT的名單是RTT公司給出 : https://zhuoqing.blog.csdn.net/article/details/119544099