Python 讀取教學
使用 Python 範例程式讀取 ANROT 感測器資料,適用於 Windows、Raspberry Pi 與一般 Linux 開發流程。
- 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*,可先確認系統是否載入 cp210x 或 ch341 驅動。
下載與解壓縮
瀏覽器下載: 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 | tail 或 ls /dev/ttyUSB* 檢查裝置是否被系統辨識。
Linux 權限不足
臨時測試可使用:
sudo python main.py read -p /dev/ttyUSB0 -b 115200
長期使用建議將帳號加入 dialout 群組,重新登入後即可不使用 sudo:
sudo usermod -a -G dialout $USER
讀不到資料或畫面沒有更新
確認產品輸出協議、波特率與命令列參數一致。若曾修改裝置波特率,請把 -b 改成裝置實際值,例如 460800 或 921600。