ANROT 教學文件

Python 讀取教學

使用 Python 範例程式讀取 ANROT 感測器資料,適用於 Windows、Raspberry Pi 與一般 Linux 開發流程。

最後更新 2025年1月1日 對應產品 9
  • python
  • serial
  • tutorial

Python 讀取 ANROT 感測器

協議支援

協議 / frame支援狀態這份 example 的處理方式
0x91 HI91 / IMUSOL支援AnrotSerialParser._parse_hi91() 解析單機 float IMU frame。
0x92 HI92支援解析壓縮單機 IMU frame。
0x81 HI81支援解析含 GNSS/INS 欄位的 frame。
0x63 Gateway Compact支援解析 gateway compact header 與 0x93 node block,回傳每個 node 的 frame。
0x62 GWSOL不支援Python parser 沒有 0x62 case;Gateway float collection 請用 Qt C++、Ubuntu 或 ROS Kinetic 範例。
NMEA (GGA, RMC, VTG, GSA, GSV, SXT)支援AnrotNmeaParser 同時解析文字輸出;SXT 支援 $GPSXT / $GNSXT

這份範例適合第一次用電腦、Raspberry Pi 或嵌入式 Linux 讀取 ANROT UART / USB 輸出的使用者。先用 list 找到串列埠,再用 read 看即時姿態資料;需要送設定指令時再使用 send

適用情境

  • Windows 11、Ubuntu 20.04、Raspberry Pi 3 / 4、NVIDIA Xavier。
  • 產品以 USB 或 USB-UART 轉接器連到電腦。
  • 裝置端波特率與範例命令一致,預設範例使用 115200

Linux 常見 USB-UART 晶片如 CP210x、CH340 多數已由 kernel 內建驅動。若裝置插上後沒有出現 /dev/ttyUSB*,可先確認系統是否載入 cp210xch341 驅動。

下載與解壓縮

瀏覽器下載: demo-python-en.zip

Linux 也可以使用:

cd ~
wget https://sealandtech.com.tw/files/anrot/examples/python/demo-python-en.zip
unzip demo-python-en.zip
cd demo-python-en

範例結構

demo-python-en/
├── main.py
├── requirements.txt
├── commands/
│   ├── cmd_list.py
│   ├── cmd_send.py
│   └── read_data.py
├── parsers/
│   ├── anrot_serial_parser.py
│   └── anrot_nmea_parser.py
└── utils.py

anrot_serial_parser.py 負責解析 ANROT binary frame,anrot_nmea_parser.py 負責解析 NMEA 字串輸出。

安裝依賴

請使用 Python 3.6 以上版本。建議先建立虛擬環境,再安裝依賴:

python -m venv .venv
# Windows: .venv\Scripts\activate
# Linux: source .venv/bin/activate
pip install -r requirements.txt

1. 查看可用串列埠

python main.py list

範例輸出:

Your Python version is 3.11.2.
Found 3 available serial port(s):
Device: COM13                Manufacturer: Microsoft            Permissions: Unknown
Device: COM27                Manufacturer: Silicon Labs         Permissions: Unknown

Linux 使用者也可以在插拔 USB 後觀察哪個裝置新增:

ls /dev/ttyUSB*

2. 讀取即時資料

Windows:

python main.py read -p COM3 -b 115200

Linux / Raspberry Pi:

python main.py read -p /dev/ttyUSB0 -b 115200

成功後會看到加速度、角速度、磁力計、歐拉角、四元數等欄位。數字應該會隨著感測器姿態變化而更新。

Frame Type              : HI91
Temperature (C)         : 37
Acceleration (G)        : (0.010, 0.010, 1.003)
Gyroscope (deg/s)       : (-0.076, 0.053, -0.034)
Euler (deg)             : Roll -0.514 Pitch 0.575 Yaw 3.860
Quaternion              : (0.999, 0.005, -0.004, 0.034)
Frame rate              : 100 Hz

3. 發送設定指令

以下以讀取版本資訊為例:

python main.py send -p COM3 -b 115200 "LOG VERSION"

Linux:

python main.py send -p /dev/ttyUSB0 -b 115200 "LOG VERSION"

send 會先停止資料輸出、送出使用者指令、儲存設定,再恢復資料輸出。可用指令請以對應產品的使用者程式設計手冊為準。

常見問題

找不到串列埠

先確認 USB 線、USB-UART 轉接器與供電。Linux 可用 dmesg | taills /dev/ttyUSB* 檢查裝置是否被系統辨識。

Linux 權限不足

臨時測試可使用:

sudo python main.py read -p /dev/ttyUSB0 -b 115200

長期使用建議將帳號加入 dialout 群組,重新登入後即可不使用 sudo:

sudo usermod -a -G dialout $USER

讀不到資料或畫面沒有更新

確認產品輸出協議、波特率與命令列參數一致。若曾修改裝置波特率,請把 -b 改成裝置實際值,例如 460800921600