速解魔方機器人(下)
接上篇
5.4.2 粒子群優(yōu)化算法(PSO)
訓練BP神經網絡常常采用誤差反向傳播算法,這種算 法容易陷入局部極值點,并且隨著層數(shù)增多,內層權重梯 度過低,學習速度慢。而PSO算法是一種基于群體的優(yōu)化方 法,算法中種群稱作粒子群,個體稱為粒子。它的基本概念 源于對海鷗等海鳥捕食方式的模擬。一群海鳥隨機地搜尋食 物,它們不知道食物在哪里,但知道當前離食物最近的位 置,從而選擇搜尋目前離食物最近的鳥的周圍區(qū)域,以盡快 地找到食物。這種算法有訓練速度快,不易陷入局部極值點 的優(yōu)點。
1.問題的描述
采 用 P S O 訓 練 神 經 網 絡 時 , 首 先 應 將 特 定 結 構 中 所 有 神 經 元 間 的連 接 權 值 編 碼 成 實 數(shù) 碼 串 表 示 的 個 體 。 假 設 網 絡 中 包 含 M 個 優(yōu) 化 權 值 ( 包 括 閾 值 在 內 ) , 則 每 個 個 體 將 由 M 個 權 值 參 數(shù) 組 成 的 一 個
M 維 向 量 來 表 示 。 例 如 : 給 定 如 下 結 構 的 神 經 網 絡 , 其 中 包 括 一 個 閾 值 , 一 維 輸 入 , 兩 個 隱 層 單 元 , 一 維 輸 出 , 從 圖 中 可 知 其 中 包括 6 個 連 接 權 , 分 別 是, 令
則 微 粒 群 中 的 個 體 可 用 一 個 6 維 向 量 來 表 示 , 即
此時, 個體結構中的每一個 元素,即代表神經網絡中的一個權值。
2.初始化微粒群
圖19 CCD攝像頭
圖20 舵機實物
根據(jù)微粒群規(guī)模,按照上述個體結構隨機產生一定數(shù)目的個體(微粒)組成種群,其中不同的個體代表神經網絡的 一組不同權值。同時初始化群體最優(yōu)位置gbest,個體最優(yōu)位 置lbest。
3.神經網絡的訓練及微粒
將微粒群中每一個體的分量映射為網絡中的權值,從而構成一個神經網絡。對每一個體對應的神經網絡,輸入訓 練樣本進行訓練。網絡權值的優(yōu)化過程是一個反復迭代的過 程。為了保證所訓練的神經網絡具有較強的泛化能力,在網 絡的訓練過程中,往往將給定的樣本空間分為兩部分,一部 分用作訓練樣本,稱為訓練集,一部分作為測試樣本,稱為 測試集。而在權值優(yōu)化過程中,每進行一次訓練,都要對給 定的樣本集進行分類,以保證每次訓練時采用的訓練集均不 相同。計算每一個網絡在訓練集上產生的均方誤差,并以此 作為目標函數(shù),并構造如下的適應度函數(shù),用來計算個體的適應度。
其中,tk,p指訓練樣本P在K輸出端的給定輸出,則適應度函數(shù)定義如下:
4.PSO模型計算
評價微粒群中的所有個體( 每一個體視為可飛行的微 粒),從中找到最佳個體用來判斷是否需要更新微粒的Gbest 與Lbest。之后,按照PSO模型更新每一個體不同分量上的飛 行速度,并以此產生新的個體微粒。
5.算法終止條件
當目標函數(shù)值(即均方誤差)小于給定的 時,算法終止。 用PSO訓練神經網絡算法的具體流程如下圖21。
5.5 Linux系統(tǒng)下通過地址映射訪問物理內存
設計基于ARM的linux應用程序控制FPGA端PIO控制器 pio_led,pio_led連接到HPS/ARM lightweight axi bridge從而獲 得在HPS/ARM總線上的物理地址空間。linux應用程序通過 linux內核內存映射設備驅動訪問PIO控制器pio_led的寄存器 物理地址進而控制pio_led執(zhí)行相應的動作。
Linux系統(tǒng)下通過地址映射訪問物理內存的原理如下
圖22 算法終止條件
/dev/mem: 物理內存的全鏡像。可以用來訪問物理內存。
調試嵌入式Linux內核時,可能需要查看某個內核變量 的值。/dev/kmem提供了訪問內核虛擬內存的途徑。現(xiàn)在 的內核大都默認禁用了/dev/kmem,打開的方法是在 make menuconfig中選中 device drivers --> Character devices -->/dev/
kmem virtual device support.用 cat /proc/kallsyms | grep *** 找到要查看的變量的地 址, 這個地址作為本程序的輸入?yún)?shù)。/dev/mem 用來訪問物理IO設備, 比如X用來訪問顯 卡的物理內存, 或訪問嵌入式板中的G P I O 。 用法一般是 open,mmap,然后使用map之后的地址訪問物理內存。這 是實現(xiàn)用戶空間驅動的一種方法。
比如,標準VGA 16色模式的實模式地址是A000:0000, 而線性地址則是A0000。設定顯 存大小為0x10000,則可以 如下操作mem_fd = open( "/dev/mem", O_RDWR );
vga_mem = mmap( 0, 0x10000, PROT_READ | PROT_ WRITE, MAP_SHARED,
mem_fd, 0xA0000 ); close( mem_fd );
然后便可以對vga_mem進行訪問。當然,如果是操作 VGA顯卡,還要獲得I/O 端口的訪問權限,以便進行直接的 I/O操作,用來設置模式/調色板/選擇位面等等。在工控領 域中還有一種常用的方法,用來在內核和應用程序之間高效 傳遞數(shù)據(jù)。
6 設計特點
6.1 機械手臂設計
利用舵機的旋轉帶動拉伸桿的拉伸,從而達到像人的 手臂一樣靈活伸縮旋轉,抓取魔方,轉動魔方。
6.2 魔方機器人結構
巧妙地利用舵機與塑料條的配合搭建機器人的機械手 臂,利用方形架構固定四個機械手臂,使機械手臂能靈活快 速地轉動以及伸縮。
6.3 基于BP神經網絡的顏色識別算法
對顏色進行分類的方式有多種,其中 RGB顏色空間是 最基本、最常用的顏色空間,然而,從顏色感知特性來說, R G B 顏 色 空 間 是 非 均 勻 的 , 各 顏 色 分 量 之 間 的 相 關 性 較 強, 因而一般用于把目標分為兩類的識別模型中。HSI 顏色 空間是另一種比較常用的顏色空間,它基于人的心理感知特 性而建立,屬于極坐標空間結構,其優(yōu)點是能直觀地描述顏 色,但是,由于 HSI 顏色空間內存在奇異點,同時,當光線 明暗變化,燈光中的某分量值稍高時,對顏色分類會出現(xiàn)許 多錯誤。因此也不適合用來實現(xiàn)對顏色的分類和量化。對于 這種復雜多變環(huán)境下的顏色的分類,我們最終采用人工神經 網絡(ANN)來進行。
6.4. 獨立開發(fā)的還原魔方算法
算法的核心是基于迭代加深啟發(fā)式搜索算法(IDA*)的 一種二階段的搜索算法,過程規(guī)則很簡單,沒有很復雜的狀 態(tài)判斷,只是重復循環(huán):對每個階段的魔方不斷重復嘗試不 同的旋轉,然后判斷是否達到目標狀態(tài),如果沒有,則根據(jù) 一個估價函數(shù),選擇估價最低的操作繼續(xù)嘗試。第一個階 段有18種可能的操作,最多12步,第二階段有10種可能的操作,最多有18步。可見,如果僅做簡單處理,循環(huán)的次數(shù)會
十分巨大,難以搜索出正確結果。所以,對每個操作進行高 效的代價計算,然后進行剪枝是十分必要的。估價函數(shù)是一 張事先生成好的內存查找表。采用該內存查找表進行啟發(fā)搜 索,有些情況下,得出還原方法速度會非常快,在百毫秒之 內,當然,也存在一定的概率,需要花較長時間得出還原方 法,(算法運行到現(xiàn)在,未出現(xiàn)超過3秒的情況)在一臺intel i5@2.50Ghz的個人電腦,得出方法平均僅需一秒鐘的時間。
6.5 采用SoC設計
利用FPGA端豐富的外設做數(shù)據(jù)采集,將采集到的圖像 數(shù)據(jù)進行處理,在ARM端做算法,對任意一個打亂的魔方 進行還原的求解步驟,充分發(fā)揮DE1-SoC的SoC特點。
7 總結
經過三個月的奮戰(zhàn),我們的作品基本達到預期目標, CCD攝像頭識別、VGA顯示以及機械部分的搭建等都已實 現(xiàn),唯一不足的是在VGA顯示部分畫面不夠絢麗,寫好的
3D魔方程序由于移植出現(xiàn)問題,沒有出現(xiàn)在顯示屏上。在 團隊的分工上,硬件軟件分工明確,很大地提高了作品完成 效率。
在這次比賽中,我們學會了Altera公司許多開發(fā)工具, 例如Quartus ,Qsys以及ARM公司的DS-5等,為我們的硬件 開發(fā)和測試提供了很大的便利。
從入門FPGA開發(fā)板,到現(xiàn)在基本完成預期作品,通過 這次比賽和這三個月的努力,我們團隊的每個人都學到了很 多,我們都總結了許多解決問題的方法,并養(yǎng)成了良好的文 檔習慣。在比賽過程中,我們采用多種途徑解決技術難題, 例如網絡、DE1-SoC的配套書籍、官方論壇以及開發(fā)板的用 戶手冊和自帶例程,攻破設計難點。我們針對各個模塊制定 了多套方案,合理分析了設計的可行性,保證在實現(xiàn)基本功 能的基礎上再進行優(yōu)化。在每一次實驗中,我們將自己的收 獲寫進文檔,然后與隊友進行交流,分享心得,共同進步。 當然,我們必須感謝湖北大學—Altera公司EDA/SOPC聯(lián)合 實驗室提供的豐富的硬件、軟件資源,同時還要感謝感謝 Altera和TERASIC公司為本課題提供的設計工具,包括大學 計劃所提供的學習資源、FPGA、軟件、開發(fā)板、文檔支持 和參考設計。
評論