2024年4月12日 星期五

在SSH執行rpicam-hello

原本是要用圖形介面執行 (VNC), 指令如下
rpicam-hello --tuning-file /usr/share/libcamera/ipa/rpi/vc4/imx219_noir.json

如果在SSH執行會有錯誤訊息, 如下:
terminate called after throwing an instance of 'std::runtime_error'
  what():  failed to import fd 20
Aborted

不過根據討論串: https://forums.raspberrypi.com/viewtopic.php?t=338799

可以在後面加上--qt-preview, 就可以出現畫面了! (只是比較慢) 舉例來說:
rpicam-hello --tuning-file /usr/share/libcamera/ipa/rpi/vc4/imx219_noir.json  --qt-preview





2024年3月27日 星期三

停用特定顯卡

遇到的問題: 執行nvidia-smi的時候, 會出現某個GPU故障 (如下圖)



因為機器在機房, 也不太可能跑過去拆顯卡 (光是從機櫃搬下來就超累了 QQ)

然後就查了一下, 看是否有辦法用指令的方式停用顯卡, 然後就找到下列討論串:
* https://forums.developer.nvidia.com/t/how-to-turn-off-specific-gpu/107574
* https://forums.developer.nvidia.com/t/nvidia-smi-drain-failed-to-parse-device-specified-at-the-command-line/180402/3
* https://man.archlinux.org/man/nvidia-smi.1.en
* https://juejin.cn/post/7232665460714012731

步驟如下:

1. 使用nvidia-smi查詢狀態, 找出有異常的Bus-Id. 以第一張圖為例, 是第二個顯卡有問題, 顯示ERR! 他的ID是00000000:03:00.0

2. 接著用 nvidia-smi drain -p 0000:03:00.0 -q 查詢drain mode狀態 (原本ID第一組數字有8個0, 只要打4個0就好)
> The current drain state of GPU 00000000:03:00.0 is: not draining.

3. 設定drain mode: sudo nvidia-smi drain -p 0000:03:00.0 -m 1
> Successfully set GPU 00000000:03:00.0 drain state to: draining.

4. 確認狀態: nvidia-smi drain -p 0000:03:00.0 -q
> The current drain state of GPU 00000000:03:00.0 is: draining.

5. GPU reset: sudo nvidia-smi drain -p 0000:03:00.0 -r
>GPU 00000000:03:00.0 successfully removed.

然後再用nvidia-smi就看不到那張出問題的GPU了



補充: 查詢錯誤原因

ref: 
* https://docs.nvidia.com/deploy/xid-errors/index.html
* https://houmin.cc/posts/feaa4605/

搜尋系統log, 路徑是/var/log/syslog, 不過也有可能變成syslog.1, 偷懶的話可以直接搜尋整個log資料夾: grep "NVRM: Xid" /var/log/*

以我的情況為例, 有看到
NVRM: Xid (PCI:0000:03:00): 62,
NVRM: Xid (PCI:0000:03:00): 32,
NVRM: Xid (PCI:0000:03:00): 31,

接著再去xid-errors網站查詢對應的資訊
31: GPU memory page fault
32: Invalid or corrupted push buffer stream
62: Internal micro-controller halt (newer drivers)

雖然看到原因, 可是也不知道要怎麼處理 QQ (應該就是換GPU吧? XD

2024年3月22日 星期五

mpu9250檢查磁力計的i2c address

最近上課用新的IMU: MPU9250 (其實這個也不新了 QQ)

不過跑程式的時候, 有人會遇到Remote I/O Error

仔細檢查後, 發現是磁力計的部分有回報錯誤, 把磁力計的function關閉就可以讀取acc + gyro了


之前的GY801, 可以直接用sudo i2cdetect -y 查詢acc, gyro, mag, baro各自的I2C位址

可是MPU9250不行, 只能找到0x68的位置


後來閱讀datasheet的時候, 看到bypass mode的設定方式
> 啟用bypass可讓System Processor能直接管理、存取與控制連接在MPU-9250上的auxiliary sensor

回頭看一下python code跟sample code, 可以在終端機裡面設定這個模式:

以下都是在python環境下執行 (終端機輸入python後)
>>> import smbus
>>> bus = smbus.SMBus(1)
>>> bus.write_byte_data(0x68, 0x37, 0x02)

然後再開另一個終端機執行sudo i2cdetect -y 1

下圖是正常的mpu9250 (可提供9軸資訊)
image.png

下圖則是有問題的mpu9250, 只能讀取acc+gyro
會發現這邊只有0x68, 沒有磁力計的0x0c
image.png

2023年11月24日 星期五

latex的titleformat

 https://tex.stackexchange.com/questions/339305/how-to-get-default-formatting-for-chapter-section-etc


\titleformat{\chapter}[display]
{\normalfont\huge\bfseries}{\chaptertitlename\ \thechapter}{20pt}{\Huge}
\titleformat{\section}
{\normalfont\Large\bfseries}{\thesection}{1em}{}
\titleformat{\subsection}
{\normalfont\large\bfseries}{\thesubsection}{1em}{}
\titleformat{\subsubsection}
{\normalfont\normalsize\bfseries}{\thesubsubsection}{1em}{}
\titleformat{\paragraph}[runin]
{\normalfont\normalsize\bfseries}{\theparagraph}{1em}{}
\titleformat{\subparagraph}[runin]
{\normalfont\normalsize\bfseries}{\thesubparagraph}{1em}{}
\titlespacing*{\chapter}     {0pt}{50pt}{40pt}
\titlespacing*{\section}     {0pt}{3.5ex plus 1ex minus .2ex}{2.3ex plus .2ex}
\titlespacing*{\subsection}   {0pt}{3.25ex plus 1ex minus .2ex}{1.5ex plus .2ex}
\titlespacing*{\subsubsection}{0pt}{3.25ex plus 1ex minus .2ex}{1.5ex plus .2ex}
\titlespacing*{\paragraph}   {0pt}{3.25ex plus 1ex minus .2ex}{1em}
\titlespacing*{\subparagraph} {\parindent}{3.25ex plus 1ex minus .2ex}{1em}