文章

[問題] 利用 ffmpeg 工具來轉換 RTP 檔案

        想利用 ffmpeg 工具將 RTP 檔案轉換成 wav 檔,但是似乎過程會出現錯誤。我將 RTP stream 儲存成 RTP 檔案,分別儲存成三種檔案類型,而只有一種類型可以被轉換成功。三種類型的描述如下:     第一種 -- 保存來自網路的每個 RTP 完整封包,每個封包包含 RTP header 加上 payload。     第二種 -- 只保存第一筆 RTP header,其餘封包的 header 不保存,每筆 payload 依序儲存下來。     第三種 -- 只保存所有的 payload,不含 RTP header。 我將上述這三種檔案的範例放在底下的連結, https://drive.google.com/file/d/1aCznHT_3Wp45Ndm50dUb_G_0hyje0O49/view?usp=share_link ,接下來透過 ffmpeg 工具來進行轉換,下面是依序採用三種檔案類型來轉換成 wav。 "ffmpeg.exe -loglevel debug -f rtp -i input.sdp -i AudioRx_RTP_Packets.rtp out1.wav" ==> 出現錯誤 "ffmpeg.exe -loglevel debug -f rtp -i input.sdp -i AudioRx_RTP_Header.rtp out2.wav" ==> 出現錯誤 "ffmpeg.exe -f mulaw -ar 8000 -ac 1 -i AudioRx_Raw_Data.raw -codec:a pcm_mulaw out3.wav" ==> 成功         過程出現錯誤時,返回的錯誤訊息為 " Unsupported RTP version packet received ",實在找不出問題點在哪裡,詢問了網站 stackoverflow 也沒有人能回答。 https://stackoverflow.com/questions/75955112/got-error-to-convert-rtp-files-by-using-ffmpeg-to...

[筆記] AI 的研究心得:TensorFlow, Pytorch, Lite ...

圖片
        最近在閱讀有關 AI 領域的知識,常常聽到 TensorFlow 與 Pytorch 等名詞,還有 TensorFlow Lite 、 H5 、 PB模型 、 OpenVINO ...,底下我記錄下學習的心得。首先,我們要將 AI 區分成 前置作業階段 和 執行階段 ,前者主要工作為建立模型 、 收集資料 、 訓練... 等 ,如下圖所示,這個階段需要專業的工程人員,花費時間訓練並建立出最終的模型參數。後者則為執行過程,在什麼平台上面執行 AI 的判斷。 圖一:建立模型階段         在建立模型階段,工程師經常用到的語法就是 TensorFlow 或 Pytorch,將自己的演算法透過上述的程式語言不斷地訓練資料,來獲得最終的模型參數,而模型的優劣就是由這套演算法的好壞所決定。訓練過程,有幾項參數將與最終的模型參數有關,比如精密度 、 錯誤率...,精密度高且錯誤率低可能就要花費更多時間,精密度低且錯誤率高就可以節省一些運算空間....等等的 trade-off。         對於一般人而言,想要建立模型,當然不是一件容易的事。因此,Google推出一套 Teachable Machine https://teachablemachine.withgoogle.com/  讓一般人能快速建模,體驗一製作 AI 模型的過程。產生的模型格式,有 H5 (Keras 產出) 或 PB (TensorFlow 產出) 型態,根據夜市小霸王的說法[1],PB 格式的效能比載入 H5 的運算效能高。接下來就是如何依照這個模型來執行判斷了。         在執行判斷的階段,拿到訓練後的模型後,我們要在什麼平台上面執行?可以是效能的 PC,可以是 NVIDIA 平台,也可以是 Intel OpenVINO 平台,或者在嵌入式的 MCU 上面執行。如果是在 Arduino 或者 ESP32 MCU 上面執行 AI 模型,可以參考 TensorFlow Lite for Microcollectors  連結,由於它是開源的程式碼,所以我們可以自行移植到其他的 MCU 平台。在 ...

[筆記] 以 STM32 為核心的四軸無人機套件

圖片
        最近買一套無人機套件,並研究其原理。套件包含一個遙控器,以及無人機主體,如下圖所示。系統架構與先前的平衡車系統類似,MCU 為控制與運算的核心,周邊搭配一顆 MPU6050 重力加速計,用來偵測系統的軸向變化,再來就是控制馬達驅動的模組。從系統原理來看,無人機比平衡車的運算更為複雜,建議可以先從平衡車的系統開始學習,然後再來研究無人機的系統。 圖一:無人機的套件         遙控器的電路,由 STM32F103 為核心,搭配 NRF24L01 做為無線傳輸的模組,以及周邊的數個按鈕和兩顆搖桿頭。飛行器的電路,同樣以 STM32F103 為控制核心,搭配 NRF24L01 透過 SPI 介面控制,一顆 MPU6050 加速度計透過 I2C 介面控制,然後利用 PWM 訊號控制四軸的馬達。另外,STM32 的 USB 介面可以連接到電腦,電腦端會顯示一個 HID 裝置。這套件的資料中,提供 PC 上面的監控軟體,如下圖所示,能顯示目前飛行器的三軸情況,以及遙控器傳給飛行器的數值。不得不說這整套系統,從硬體到韌體,再到電腦端的監控軟體都非常專業,適合想進入這領域的人員好好學習。 圖二:PC 端的監控軟體         再來,韌體的開發,該套件提供完整的原始碼,遙控器和飛行器都是用 KEIL 工具來開發和編譯程式碼。要留意的是有的套件上面焊的是 F103C 6 ,有的是 F103C 8 ,這兩者晶片內部的 Flash 配置不同,前者是 Low Density 核心,後者是 Medium Density 核心,因此在編譯程式碼時要注意。         無人機的操作比起平衡車更需要安全性,畢竟平衡車是在二軸平面上運行,但是無人機是三軸空間的運行,危險性更高。當遙控器與飛行器主體建立連線後,飛行器的螺旋槳還處在鎖定狀態,不會旋轉。 解鎖的方式 需要遙控器的油門,油門壓到最低,再將油門加到最高,最後再將油門壓到最低後,螺旋槳便會開始轉動,此時慢慢增加油門,飛行器就會慢慢上升。

[模組] ESP32 C3 無線模組帶有 OLED 顯示

圖片
        本周收到 ESP32C3 模組帶有 OLED 顯示模組,如下圖一所示,晶片的尺寸比一個銅板還小。ESP32 核心採用的是頻率 160MHz 的 RISC-V,我們從編譯過程就能看到 riscv32-gcc 的編譯工具,推斷內核是 RISC-V。之前,我常使用的 ESP32 內核晶片是 xtensa 核心,不過今年已經看到不少 MCU 核心改成 RISC-V 架構了,大概與中美科技對抗有關,參考先前的文章  "以 RISC-V 架構的 MCU" https://han-ya.blogspot.com/2022/05/risc-v-mcu.html 。這個無線模組上面的 SSD1306 OLED 尺寸是 0.42吋,72 x 40 點。 圖1-1:ESP32C3 模組正面圖 圖1-2:ESP32C3 模組背面圖         如何開發這個模組?很容易上手,只要在 Arduino IDE 上面就能編譯程式碼。首先,設定開發板的安裝網址 https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_dev_index.json,然後到 "開發板管理員" 下載安裝 ESP32 的套件,最後開發板的選項中,選 " ESP32C3 Dev Module "。        再來就是 OLED 模組的顯示,需要下載 u8g2 的函數庫,如下圖二,安裝到 IDE 環境裡。接著,到 github 網站下載程式碼 https://github.com/01Space/ESP32-C3-0.42LCD ,範例程式碼便能成功編譯了。 圖二:使用的 OLED 函數庫         題外話,近期市面上越來越多以 RISC-V 為架構的 MCU,可預期在中低端的成熟晶片將替換掉 ARM 架構,畢竟 ARM 架構需要授權金,RISC-V 目前是開放的架構,在成本上會比 ARM 架構更為有競爭力。

分析 Keyes 自動平衡車的原理

圖片
        將 Keyes 平衡車套件組裝起來後,系統的核心控制器是 Arduino 的核心晶片,搭配三軸加速度感測器以及馬達驅動模組,組合成一套自動平衡車的系統。首先,三軸感測器負責偵測出車子動態的情況,當偵測到車子有前傾或後仰的情況時,立刻輸出馬達驅動讓輪子往前進或往後退來達到車子的動態平衡。         系統在尋求動態平衡的過程中,採用 PID (Proportional Integral Derivative) 機制,將一個偏差的比例透過積分與微分的線性組合構成一個控制量,用這一控制量對被控制的對象進行控制。以平衡車的系統,透過 "傾斜的角度" 與 "角速度" 的變化量來控制馬達驅動。底下開始分析每個細節與操作。 MPU6050         平衡車上面有一顆三軸加速度感測元件 MPU6050,用於偵測 X, Y, Z 三軸的角速度與角度的變化,它們之間的關係如下圖一所示。圖一中的右手邊代表車子前進的方向,也就是 Y 軸的方向,車子朝上方就是 Z 軸方向,而我們眼睛正視車輪的輪軸就是 X 軸的方向。從 MPU6050 感測器可以讀取到每一軸的角速度,以及每一軸的重力加速度數值,參考前面文章的說明 https://han-ya.blogspot.com/2015/12/gyro-accelerometer.html 。我們從 Y 與 Z 軸的重力加速度 g 值,可以計算出傾斜的角度,如下圖二所示。 圖一:三軸感測器的角速度與角度之關係         假設車子往前傾斜了, Z 軸往 Y 軸順時針旋轉了一個角度後,依據物理分量的觀念,重力加速度可看成具有  gy  和  g z 的分量,而這兩個分量分別可從晶片量測而得到。再根據三角函數的定義,我們可以計算出旋轉的角度,如下圖二所示,因此角度等於 atan( gy / gz)。 圖二:傾斜角度的計算 Kalman濾波器         前段我們從 MPU6050 感測器計算出角度與角速度之後,這裡需要加上一個 Kalman 濾波器,用來消除雜訊的干擾,並根據過去的動態來預估未來的...

[心得] Ideas Hatch 專訪漢亞科技的文章

圖片
八月中,資策會來漢亞造訪,想深入了解目前國內物聯網開發的生態 ,花了一個半小時的互動專訪,我也述說過去使用國產 IC 的情況,最後由資策會人員整理成一篇文章。 分享一篇刊登自 ideas Hatch 智造基地的專訪文章,底下是連結內容。 https://www.ideas-hatch.com/news_detail.jsp?id=364&type_id=4

[模組] 開箱 Filogic Arduino SDK 開發板

圖片
        拿到最新的 Filogic 開發板,晶片核心是聯發科的 MT7933,由群登科技(AcSip)封裝成模組,再製作成開發板,如下圖一所示。之前下載的 Filogic SDK 是 Linux 環境的版本,對初學者的操作上確實是相對困難,這次釋出 Arduino SDK 的版本,在設計開發方式會比較容易上手。本文將介紹如何 燒錄 板子的韌體,以及如何配置每根腳位 IO mux 的功能。 圖一:Filogic 130A 開發板         這套 Arduino SDK 必須上大聯大的網站 (大大通) 下載最新出爐的版本(1.0.0),下圖二所示。下載後,發現它是一個 zip 壓縮包,要怎麼與 Arduino IDE 一起套用呢?要先在電腦上安裝 Tomcat 軟體,然後把下載的 SDK 檔案放到 Tomcat 的目錄底下: \Tomcat 8.5\webapps\ROOT ,此時執行 Tomcat 後,再開啟 Arudino IDE。接著,在 IDE 裡面設定 "開發板管理員網址" (其實網址就是本機 localhost:8080),Arduino IDE 就會自動下載 Filogic 相關的 SDK 了,細節請參考最底下的文章連結。 圖二:Filogic SDK 網站 上傳燒錄 接上 USB 後,試著從電腦上傳韌體到開發板上,首先我們開啟一個範例程式,在 Arduino IDE  上面編譯並上傳。當編譯時,需先按住板子上的  SW1 (Reset)  鈕,然後觀察  IDE  的下方訊息欄,直到我們看到 “ INFO: Goto open COM xx ” 這段訊息時,再放開板子上的  SW1 鈕, IDE  工具便會進入燒錄韌體的階段,開始上傳。最後,上傳成功後,我們會看到 “ Finished! ” 的訊息。 每次上傳成功後,我們必須再按一次板子上的  SW1 (Reset)  鈕,這樣板子才會重新啟動我們的程式碼。因為,它並不像  Arduino UNO  開發板會自動重新啟動。 IO Mux         市面常見...