2020/3/31

mmwave out of box demo, console command

這些 command 的 宣告在 sdk_install_path/packages/ti/utils/cli/src/cli_mmwasve.c
裡面就有 command 和 argument 說明
CLI_CmdTableEntry gCLIMMWaveExtensionTable[] =
{
    {
        "version",
#ifdef CLI_MMWAVE_HELP_SUPPORT
        "No arguments",
#else
        NULL,
#endif
        CLI_MMWaveVersion
    },
    {
        "flushCfg",
#ifdef CLI_MMWAVE_HELP_SUPPORT
        "No arguments",
#else
        NULL,
#endif
        CLI_MMWaveFlushCfg
    },
    {
        "dfeDataOutputMode",
#ifdef CLI_MMWAVE_HELP_SUPPORT
        "<modeType>   1-Chirp and 2-Continuous",
#else
        NULL,
#endif
        CLI_MMWaveDataOutputMode
    },
    {
        "channelCfg",
#ifdef CLI_MMWAVE_HELP_SUPPORT
        "<rxChannelEn> <txChannelEn> <cascading>",
#else
        NULL,
#endif
        CLI_MMWaveChannelCfg
    },
 ..



舉例來說...
    {
        "profileCfg",
#ifdef CLI_MMWAVE_HELP_SUPPORT
        "<profileId>l; <startFreq> <idleTime> <adcStartTime> <rampEndTime> <txOutPower> <txPhaseShifter> 
         <freqSlopeConst> <txStartTime> <numAdcSamples> <digOutSampleRate> <hpfCornerFreq1> <hpfCornerFreq2> <rxGain>",
#else
        NULL,
#endif
        CLI_MMWaveProfileCfg
    },

2020/3/27

TI mmwave, build xwr16xx mmw demo

這是 mmwave sdk 的 demo : Millimeter Wave (mmw) Demo for XWR16XX

裝完 mmwave_sdk 後,在 sdk_install_path\packages\ti\demo\xwr16xx\mmw 下。
但是這個 demo 沒有 CCS 的 project 檔 .project

但是裡面有 makefile,所以猜是用 command line 來 make

tool path 的設定,在 sdk_insall_path\packages\scripts\windows 下,有 setenv.bat
裡面就有 tool path 環境變數設定。

對照一下 裡面設定的 tool path, 版本是不是和你一樣,如果不一樣,就去 ti 下載一樣的版本。
例如: ARM-CGT-16.9.6.LTS

還有 要確認 MMWAVE_SDK_TOOLS_INSTALL_PATH 是不是正確。

還有 要確認MMWAVE_SDK_DEVICE 是不是正確 awr16xx

開啟 command window (CMD)。
到 sdk_install_path\packages\scripts\windows 下執行 setenv.bat
之後,到 sdk_install_path\packages\ti\demo\xwr16xx\mmw
TI TOOLSET 的 make 好像是 gmake。
所以
gmake clean
...
發現 最後的 bin, map ...etc 都被刪掉了。
然後
gmake all
...

call C:/ti/mmwave_sdk_02_00_00_04/packages\scripts\ImageCreator\xwr16xx\crc_multicore_image\crc_multicore_image.exe xwr16xx_mmw_demo.bin xwr16xx_mmw_demo.bin.tmp
size of App Image is 295168 bytes
cur_crc_read_addr 128
cur_crc_read_addr 86272
cur_crc_read_addr 108224
Failed to remove CRC temp file

call C:/ti/mmwave_sdk_02_00_00_04/packages\scripts\ImageCreator\append_bin_crc\gen_bincrc32.exe xwr16xx_mmw_demo.bin
>>>> Binary CRC32 = 1e71f854 <<<<
>>>> Total bytes in binary file 295172 <<<<

Info: MMWAVE_SECDEV_INSTALL_PATH is not defined. Skipping secure build
******************************************************************************
Built the mmw Demo Flash Binary
******************************************************************************
完成。

2020/3/26

Bookmark , TI mmwave tool pages

add busybox to git bash

git bash 很方便(其實就是 mingw),但是有些command 還是沒有提供。
最簡單的方式就是加 busybox

這個 busybox-win32 就是在 mingw 下 build 的 busybox。
所以下載後,就可以 在 windows 下 run 了。

要跟 git bash 整合在一起的話,用檔案管理員放到 C:\Program Files\Git\usr\bin 下。
至於 busybox 的 ln 功能,用 windows 的 "捷徑" 試過,沒用。
後來用 複製,改檔名,才可以用。

例如複製一份 busybox.exe,然後改名為 hd.exe,結果就有 hd 命令了。

2020/3/25

VSCode, PyQT4, Anaconda

這三個好像可以合作愉快...

首先裝好 anaconda,create 一個 qt4 env,python 選 3.6
然後在環境中 conda install pyqt4

VSCode 要安裝 extension : PYQT Integration.
然後這個最新的是support pyQT5。
要在 extension page ,他的齒輪選 "Install Another Version",我選 0.1.1,這個版本有 support pyQT4

然後去download 最新的 Qt Designer for windows,安裝。

"c:\Program Files (x86)\Qt Designer\designer.exe" 找到 designer.exe
把他寫到 PYQT Integration 的齒輪李,Qt Designer Path 中。
記得要用 " " 刮起來。不然執行會有問題。

VSCode 使用 Qt Designer 編輯 *.ui

用 VSCode Open Folder,開啟你的 python source code 和 *.ui 所在的 folder。
之後,在 *.ui 按右鍵,選 "PYQT : Edit In Designer",就會跳出 QT designer...


VSCode 配合 anaconda 環境

開啟任何 python, *.ui 檔,VSCode 左邊最下方都會有 Python 3.6.10 64-bit('qt4': conda) 字樣。
按下去,就會出現anaconda 所有的 env,選一個你要的..就 OK 了。

2020/3/20

FMCW 雷達的一些特性公式

Maximum Rage

最遠可以偵測的距離,跟兩項參數有關:
  • 中頻頻寬
  • SNR
中頻就是 FMCW 型,收到和發射的頻率差。
然後chip 的設計,這個頻率差只支援到一定的頻率。
Range = IF x c /(2 x S)
IF : 中頻頻寬
c : 光速
S : FMCW 掃描時, 頻率增加的速度(斜率)



range resolution

可以分辨出兩個物體時,物體之間的最短距離。
c/(2 x B)
c : 光速
B : chirp 的掃描頻寬

B 就是 FMCW 每次 掃描時,最終的頻率 - 一開始的頻率。



Maximum Velocity

用FMCW 來偵測物體速度時,最大可偵測速度是..
由於速度是由連續兩個 chirp 間,收到的相位差算出來的,所以和波長,chirp 時間有關:
Max velocity = L / (4 x T)
L : 採用的雷達波波長
T : 一整個Chirp 的時間 (也就是兩個Chirp 開始的時間差)



Velocity Resolution

分辨出兩個不同速度的物件時,兩者最小的速度差。
這個跟 用連續的 chirp 算出速度有關,因為是用 FFT,所以 period 越大,resolution 越高。
而 period 就是選擇累積一定 chirp 後,開始進行計算的chirp 數。
稱作一個 Frame。
Velocity Resolution = L / (2 x N x T)
N : 一個 frame 的 chirp 數。
L : 雷達波長。
T : 一個 chirp 的時間,就是兩個chirp 開始,相差的時間。



Angular Range

角度是靠多組天線,利用不同天線收到的回波來相位差來算,所以和天線的距離有關。
最大角度 = asin( L /(2 x d) )
L : 波長
d : 天線間的距離



Angular Resolution

一樣,Angular 是用多組天線,從收到的相位做 FFT 取得,所以天線越多,做 FFT 的 period 越大,解析度就越高。
Angular Resolution = L /( d x N x Cos(s))   x (180 / pi)
L : 波長
N : 接收天線數量
s : 物體所在的角度

github bash -- disable cursor blinking

ref: minttyrc

github bash 也類似linux shell,在 user home 目錄 (cd ENTER 就會到),下有 .minttyrc
這個就是 terminal 行為的設定檔。
依照參考內容:
CursorBlinks=No
加上這個,重新開啟 github bash 後,cursor 就不會閃了。

2020/3/17

AWR1642BOOST

Error and Fix:
follow 16xx User Guide,download and run (先run R4),出現:
[Cortex_R4_0] **********************************************
Debug: Launching the Millimeter Wave Demo
**********************************************
Debug: MMWDemoMSS Launched the Initialization Task
ti.sysbios.family.arm.v7r.vim.Hwi: line 271: E_undefined: Hwi undefined, intnum: 95
xdc.runtime.Error.raise: terminating execution
ref:RTOS/AWR1642: One question about mmw demo project in mmw SDK 1.1.02

結果我用的就是 1.1.02,板子是 RevB,應該要用 2.0


另外,分成 ARM Cortex R 的 project 和 DSP 的 project。
然後,在 Cortex R 的 project properties 中,Build - Steps - Post Build steps:
${COM_TI_MMWAVE_SDK_INSTALL_DIR}/packages/scripts/ImageCreator/xwr16xx/out2rprc/out2rprc.exe xwr16xx_mmw_mss.xer4f xwr16xx_mmw_mss.bin
${COM_TI_MMWAVE_SDK_INSTALL_DIR}/packages/scripts/ImageCreator/xwr16xx/multicore_image_generator/MulticoreImageGen.exe 
                  LE 37 0x00000006 xwr16xx_mmw.bin 
                        0x35510000 xwr16xx_mmw_mss.bin 
                        0xb5510000 ${COM_TI_MMWAVE_SDK_INSTALL_DIR}/firmware/radarss/xwr16xx_radarss_rprc.bin 
                        0xd5510000 ${WORKSPACE_LOC}/mmw_dss_16xx/Debug/xwr16xx_mmw_dss.bin
${COM_TI_MMWAVE_SDK_INSTALL_DIR}/packages/scripts/ImageCreator/xwr16xx/crc_multicore_image/crc_multicore_image.exe xwr16xx_mmw.bin xwr16xx_mmw.bin.tmp
${COM_TI_MMWAVE_SDK_INSTALL_DIR}/packages/scripts/ImageCreator/append_bin_crc/gen_bincrc32.exe xwr16xx_mmw.bin
可以看到,會 call MulticoreImageGen 把 ...
Version: 1.0.0.0
Usage :
Single image create takes the rprc images and adds the Meta Header  and creates single output image

The resulting output is placed in the output image path

Syntax: ./<executable file name> <ENDIANESS> <Dev_ID> <Mem_Alloc> <output image path/name> 
                                  <Core_ID> <input image1 path/name> 
                                  [<Core_ID> <input image2 path/name>, ...]

ENDIAN: BE/LE --> specifies whether TI header is in Big or Little Endian format
Dev_ID (hex)is the Device ID

For Input rprc images provide the Core_Id(hex) followed by input image name
把 dss 和 mss 的 bin 合在一起。
所以燒錄時 (UniFlash),選一個 bin 檔就可以 (xwr16xx_mmw.bin)




Error and Fix

有時後會 卡在 MulticoreImageGen.exe,這時候,選出 background job,按下 停止,然後看 console,就會有 Error Message。
C:/ti/mmwave_sdk_01_01_00_02/packages/scripts/ImageCreator/xwr16xx/out2rprc/out2rprc.exe xwr16xx_mmw_mss.xer4f xwr16xx_mmw_mss.bin
Parsing the input object file, xwr16xx_mmw_mss.xer4f.
Appending zeros 0
Appending zeros 256
File conversion complete!
C:/ti/mmwave_sdk_01_01_00_02/packages/scripts/ImageCreator/xwr16xx/multicore_image_generator/MulticoreImageGen.exe LE 37 0x01000005 xwr16xx_mmw.bin 0x35510000 xwr16xx_mmw_mss.bin 0xb5510000 
C:/ti/mmwave_sdk_02_01_00_04/firmware/radarss/xwr16xx_radarss_rprc.bin 0xd5510000 C:/Users/charles.chang/workspace_v8/mmw_dss_16xx_11/Debug/xwr16xx_mmw_dss.bin
Number of Input Files 3
Error opening input image file! C:/ti/mmwave_sdk_02_01_00_04/firmware/radarss/xwr16xx_radarss_rprc.bin
這個麻煩的地方就是有 Error 時會 hang 住,但是 error message 不會顯示在 console。
要中斷 build process 後才會顯示。

像這個就是說...xwr16xx_radars_rprc.bin 找步道。

這個 path 是寫死在 project properties , build step 的 post-step 李...

2020/3/9

作者說...
另外,ref:fcn voc-fcn32s training 手起刀落

clone 下來,root folder 有 surgery.py,就是把 fully connected layer 的 parameters 裁剪成 fully convolution layer 的樣子。
所以先用 ssd - fully connected layer train 到收斂後,用 surgery.py 裁出可用的部份,作為 FCN 的 pretrained parameters

先拿 train.prototxt 來看.
第一層的data 層:
layer {
  name: "data"
  type: "Python"
  top: "data"
  top: "label"
  python_param {
    module: "voc_layers"
    layer: "SBDDSegDataLayer"
    param_str: "{\'sbdd_dir\': \'../data/sbdd/dataset\', \'seed\': 1337, \'split\': \'train\', \'mean\': (104.00699, 116.66877, 122.67892)}"
  }
}
data input 層會call voc_layer.py 中的 SBDSegDataLayer 這個 function,並且會把 param_str 傳入...
現在用的是 SBDSegDataLayer.他的 setup( ) 的comment:
        """
        Setup data layer according to parameters:

        - sbdd_dir: path to SBDD `dataset` dir
        - split: train / seg11valid
        - mean: tuple of mean values to subtract
        - randomize: load in random order (default: True)
        - seed: seed for randomization (default: None / current time)

        for SBDD semantic segmentation.

        N.B.segv11alid is the set of segval11 that does not intersect with SBDD.
        Find it here: https://gist.github.com/shelhamer/edb330760338892d511e.

        example

        params = dict(sbdd_dir="/path/to/SBDD/dataset",
            mean=(104.00698793, 116.66876762, 122.67891434),
            split="valid")
        """
配合上面的 train.prototxt 的 param_str 來看..
{
 \'sbdd_dir\': \'../data/sbdd/dataset\',
 \'seed\': 1337,
 \'split\': \'train\',
 \'mean\': (104.00699, 116.66877, 122.67892)
}
知道 data 在 ../data/sbdd/ 下..