範例教學

單元 : RaspberryPi+Python (其他 x86/arm 架構 Linux 設備可參考)

環境 : RaspberryPi 3 & 4,Python 3.4+套件pyserial

產品 : 以 USB 輸出的產品如 HI221/HI221Dongle/HI226/HI229/CH100/CH110

本教學僅供基本參考,更多的延伸或應用問題本司不提供支援

IMU 產品整合常用 Uart to USB 晶片,如 CP210x 與 CH340,近年 Linux kernel 都已內建驅動,

可以確認類似的路徑中 /lib/modules/5.4.83+/kernel/drivers/usb/serial,有沒有 ch341.ko & cp210x.ko,如下圖。

有的話比較能確定能夠讀取設備,但開發版種類多且未必整合完善,不保證沒有 Bug。

經測試並正常運行的設備:

  • RaspberryPi 3 & 4
  • NVIDIA XAVIER

Step 1. 下載

瀏覽器下載並解壓 : CH_demo_python.zip

或 :

cd ~
wget https://github.com/avmm9898/hipnuctw_doc/raw/master/03_Examples/Python/CH_demo_python.zip
unzip CH_demo_python.zip

檔案如下 :

Step 2. 連接與設定

將產品 USB 連接上 RPI,連接成功的話,在 /dev 下會多出 ttyUSB0 (如果有連接其他 USB 設備,可能會是其他編號如 ttyUSB3)

可自行插拔,用以下指令確認多出來的是哪個設備 :

ls /dev

回到下載的範例,任意文字編輯器打開 config.json 進行設定,設定 port 名稱、與設備匹配的 baudrate,如下圖 :

(詳細設定請參考 Step 3)

檢查 python 版本,安裝 pyserial :

然後於 terminal 執行 demo.py :

開始接收資料 :

如果有使用虛擬環境,請注意 python 的 lib 中有沒有 pip install pyserial,

否則可能會出現 "import serial" not found 的錯誤。

Step 3. 原始碼快速入門

demo.py

#demo.py

from hipnuc_module import *
import time

if __name__ == '__main__':

    # m_IMU_serial= class of hipnuc_module 
    m_IMU_serial = hipnuc_module('./config.json')

    while True:
        try:
            #receive data
            data = m_IMU_serial.get_module_data(1)
        except:
            print("Serial closed.")
            m_IMU_serial.close()
            break

        try:
            #this prints all : print(data)

            #id, timestamp, acc, gyr, quat, mag, euler
            print(data['euler'])
        except:
            print("Print error.")
            m_IMU_serial.close()
            break

API 與 congig.json 說明

class hipnuc_module(*path_configjson=None*)

超核模組類,用於接收、處理超核模組資訊。

參數:path_configjson (str) – json配置文件的路徑.

  • get_module_data(*timeout=None*) 獲取已接收到的模組數據. timeout – 可選參數。若為None(默認值),將會阻塞直至有有效值;若timeout為正數,將會嘗試等待有效數據並阻塞 timeout 秒,若阻塞時間到,但仍未有有效數據,將會拋出Empty異常。 返回 : data 類型為 dict。字典的 key 為數據類型,value 為所有節點該數據的 list。** 例如 : 返回數據中,第1個模組的加速度數據為 data["acc"][0];返回數據中,第16個模組的四元數資訊為 data["quat"][15]。

  • get_module_data_size() 獲取已接收到的模組數據的數量。注意:返回長度大於0,不保證get_module_data時不會被阻塞。 參數: 返回:size – 返回模組數據,類型為字典 返回類型:int

  • close() 關閉指定的模組. 參數: 返回:

json 文件配置說明

在初始化 hipnuc_module 時,需要傳入 json 配置文件的路徑

//config.json

{
  "port": "COM8",
  "baudrate": 115200,
  "report_datatype": {
    "imusol": true,
    "gwsol": true,
    "id": true,
    "acc": true,
    "gyr": true,
    "mag": true,
    "euler": true,
    "quat": true,
    "imusol_raw": false,
    "gwsol_raw": false
  }
}

配置如下:

1.序列埠端口"port": 序列埠端口,類型為**字符串**。在Windows下為"COM*",例如"COM11";Linux下一般為"/dev/tty*",例如"/dev/ttyUSB0"。請根據設備的實際情況進行配置。

2.波特率(鮑率/Baud/baudrate) "baudrate": 序列埠波特率請根據模組實際參數進行設置,為115200/460800/921600,3種可能,115200 為單顆 IMU 適用,某些 HI221 或 HI221Dongle 客戶可能會設定為 460800 或 921600。可透過官方軟體 CHCenter 進行設定。

3.數據類型"report_datatype": 匯報數據種類。模組將會回傳多種數據資訊,true 表示開啟解碼,false 表示禁止解碼。

  • imusol : 0x91 單節點全資訊封包,HI221/HI226/HI229/CH100/CH110 產品預設傳輸模式。
  • gwsol : 0x62 多節點接收機全資訊封包,HI221Dongle 預設傳輸模式。
  • id : 0x90,單節點ID
  • acc : 0xA0,單節點加速度
  • gyr : 0xB0,單節點角速度
  • mag : 0xC0,單節點磁力計
  • euler : 0xD0,單節點歐拉角
  • quat : 0xD1,單節點四元數
  • imusol_raw : 0x93 單節點封包,僅保留加速度與角速度。
  • gwsol_raw : 0x63 多節點接收機封包,僅保留加速度與角速度,可設定最高 4 節點 400Hz。

模組傳輸內容示範

HI221/HI226/HI229/CH100/CH110 預設傳輸模式 (0x91協議)

產品回傳內容為 :

temp_dic = {
        "id":id_temp_list,
        "timestamp":timestamp_temp_list,
        "acc":acc_temp_list,
        "gyr":gyr_temp_list,
        "mag":mag_temp_list,
        "euler":int_eul_temp_list,
        "quat":quat_temp_list
}
return temp_dic

一幀 data 內含以下資料 : id, timestamp, acc, gyr, mag, euler, quat

  • id: 節點 ID
  • timestamp : 自開機起傳送的幀數
  • acc : 加速度,順序為 X Y Z 軸,單位=1G (1G = 1x重力加速度)
  • gyr : 角速度,順序為 X Y Z 軸,單位=deg/s
  • mag : 磁場強度,順序為 X Y Z 軸,單位=µT (10^-6 T)
  • euler : 歐拉角,順序為 橫滾(X-Roll)/俯仰(Y-Pitch)/航向(Z-Yaw),單位=degree
  • quat : 四元數,順序為 W X Y Z 軸

因此,如果要取得 acc :

print(data['acc'])

HI221Dongle 無線接收器預設傳輸模式 (0x62協議)

產品回傳內容為 :

temp_dic = {
    "GWD":gwid,
    "CNT":cnt,
    "id":id_temp_list,
    "timestamp":timestamp_temp_list,
    "acc":acc_temp_list,
    "gyr":gyr_temp_list,
    "mag":mag_temp_list,
    "euler":eul_temp_list,
    "quat":quat_temp_list
}
return temp_dic

一幀 data 內含以下資料 : GWD, CNT, id, timestamp, acc, gyr, mag, euler, quat

  • GWD: 無線接收機 ID (GWID)
  • CNT: 在線的無線節點 (HI221) 數量
  • id: 節點 ID
  • timestamp : 自開機起傳送的幀數
  • acc : 加速度,順序為 X Y Z 軸,單位=1G (1G = 1x重力加速度)
  • gyr : 角速度,順序為 X Y Z 軸,單位=°/s
  • mag : 磁場強度,順序為 X Y Z 軸,單位=µT (10^-6 T)
  • euler : 歐拉角,順序為 橫滾(X-Roll)/俯仰(Y-Pitch)/航向(Z-Yaw),單位=degree
  • quat : 四元數,順序為 W X Y Z 軸

因此,如果要取得 euler :

print(data['euler'])

HI221Dongle 無線接收器高幀模式 (0x63協議)

客製模式,此模式只保留加速度與角速度,幀率可設定400Hz,需要此模式請先聯繫我們。 產品回傳內容為 :

temp_dic = {
    "GWD":gwid,
    "CNT":cnt,
    "id":id_temp_list,
    "timestamp":timestamp_temp_list,
    "acc":acc_temp_list,
    "gyr":gyr_temp_list,
}
return temp_dic

一幀 data 內含以下資料 : GWD, CNT, id, timestamp, acc, gyr

  • GWD: 無線接收機 ID (GWID)
  • CNT: 在線的無線節點 (HI221) 數量
  • id: 節點 ID
  • timestamp : 自開機起傳送的幀數
  • acc : 加速度,順序為 X Y Z 軸,單位=1G (1G = 1x重力加速度)
  • gyr : 角速度,順序為 X Y Z 軸,單位=°/s

因此,如果要取得 acc :

print(data['acc'])

其他自訂數據協議 (0x90, A0, B0, C0, D0, D1)

一幀 data 依照自己硬體模組的協議設定,可包含以下資料 : id, acc, gyr, mag, euler, quat

  • id : 當協議包含 0x90,傳輸節點 ID
  • acc : 當協議包含 0xA0,傳輸加速度,順序為 X Y Z 軸,單位=0.001G (1G = 1x重力加速度)
  • gyr : 當協議包含 0xB0,傳輸角速度,順序為 X Y Z 軸,單位=0.1°/s
  • mag : 當協議包含 0xC0,傳輸磁場,順序為 X Y Z 軸,單位=0.001G(=0.1 µT=10^-4 T)
  • euler : 當協議包含 0xD0,傳輸歐拉角,順序為 X Y Z 軸,單位=°/s
  • quat : 當協議包含 0xD1, 傳輸四元數,順序為 W X Y Z 軸

若發現數據傳輸失敗或迴圈中斷:

請檢查並重新設定:

  • 數據協議是否匹配 (0x91 或 0xA0 等等)
  • Baud 是否與模組匹配
  • port 名稱是否與模組匹配

單元 : Ubuntu 範例

原始碼(瀏覽器下載並解壓 ): CH_demo_ubuntu.zip

介紹如何在 Ubuntu 環境中讀取 HI221/HI221Dongle/HI226/HI229/CH100/CH110 的數據,提供了c代碼,用於讀取模組的數據。

  • 測試環境: Ubuntu 16.04

  • 測試設備:超核調試版 HI226 HI229

Step 1. 尋找 USB-UART 設備

因為 Ubuntu 系統自帶 CP210x 的驅動,所以不用專門去安裝相應序列埠驅動。將調試版連接到電腦上時,會自動識別設備。識別成功後,會在dev目錄下出現一個對應的設備文件。

檢查系統是否識別到 USB-UART 設備:

  1. 打開 Ubuntu 系統,按下 ctrl + alt + t 打開終端機。

  2. 終端機切換到dev目錄下,並列出所有檔案

    cd /dev
    ls
    
    如下圖,在這些文件名稱中,主要關心ttyUSB這個設備文件。後面數字代表 USB 設備號,由於 Ubuntu USB 設備號為從零開始依次累加,所以多個設備每次開機設備號是不固定的,需要確定設備的設備號 。 上圖為沒有插入USB設備的情況,這個時候,dev目錄下並沒有名為ttyUSB文件,插入 USB 線,連接模組,然後再次執行ls,目錄下多了幾個文件名稱, 如圖 : ttyUSB0文件就是調試版在 ubuntu 系統中生成的設備文件,對它進行讀寫,就可以完成序列埠通信。這個文件名稱我們把它記下來。後面的數字是不固定的,有可能為 ttyUSB1ttyUSB2等。

Step 2. 波特率設置

在 Ubuntu 環境中,波特率支援到 115200/460800/921600,本範例使用的是 115200。

如果需要輸出幀率超過100Hz,則需要需要修改 main.c 文件中的 options.c_cflag 參數,改為更高的波特率。

如圖,在第83行,將B115200修改為B460800或者是B921600。

Step 3. 編譯並執行

我們開始在 Ubuntu 環境下生成一個可執行文件,專門用來解析模組的數據:

首先在 Ubuntu 系統中,按下打開終端機,到下載好的原始碼目錄下

cd CH_demo_ubuntu
make
sudo ./main ttyUSB0

執行成功後,會出現這個畫面:

這個畫面上的數字會隨著模組位置的改變而發生變化。

  1. 如果後期修改了這些文件,需要清理之前生成的舊 .omain 文件,重新生成 main 這個可執行文件。

    make clean
    make
    

  2. 如果後期您需要在本路徑上添加其他文件,配合使用,請打開 Makefile 文件,在第一行的後面加上後添加文件的鏈接文件名,例如添加 append_file.c 文件,那麼在 Makefile 中第一行後面追加 append_file.o 文件名。如果後加的文件還需要鏈接第三方的庫,請在第二行的後面添加庫名字。格式為 -l+lib_name ("l" 是「L"的小寫的英文字母)。

  3. 如果出現: 表示未能找到序列埠,需要回到**《尋找USB-UART設備》一節** 確認 USB-UART 設備已經被 Ubuntu 識別。


單元 : ROS 序列埠範例

原始碼(瀏覽器下載並解壓 ): CH_demo_ros.zip

介紹如何在ROS下來讀取HI226/HI229的數據,並提供了c++代碼,通過ROS命令,運行相應的節點,就可以看到打印到終端機上的資訊。

  • 測試環境:Ubuntu16.04

  • ROS版本:ROS Kinetic Kame

  • 測試設備:HI226 HI229

Step 1. 安裝驅動與 ROS serial

Ubuntu 系統自帶 CP210x 的驅動,默認不需要安裝序列埠驅動。將 USB 模組連接到電腦上時,會自動識別設備。識別成功後,會在 /dev目錄下出現一個對應的設備 : ttyUSBx

檢查 USB-UART 設備是否被識別:

  1. 打開終端,輸入

    $ ls /dev
    

    查看已經存在的序列埠設備。

  2. 查看是否已經存在 ttyUSBx 這個設備文件,便於確認對應的端口號。x表示USB設備號,由於 Ubuntu USB 設備號為從零開始依次累加,所以多個設備每次開機後設備號是不固定的,需要確定設備的設備號。

  3. 接下來插入USB線,連接調試板,然後再次執行ls /devdev目錄下多了一個設備, 如圖: ttyUSB0文件就是調試版在ubuntu系統中生成的設備(後面的數字是不固定的,有可能為 ttyUSBttyUSB)

  4. 打開 USB 設備的可執行權限:

    $ sudo chmod 777 /dev/ttyUSB0
    

接下來需要安裝 ROS serial 軟體包 :

  1. 執行命令,下載安裝 serial 套件:

    $ sudo apt-get install ros-kinetic-serial
    
  2. 輸入roscd serial命令,進入 serial 下載位置,如果安裝成功,就會出現如下資訊:

    $:/opt/ros/kinetic/share/serial
    
    3. 如果出現裝不上,可以到 Step 5 的查看建議的解決方式。

Step 2. 編譯 serial_imu_ws 工作空間

  1. 打開終端進入/examples/ROS/serial_imu_ws 目錄

  2. 執行catkin_make命令,編譯成功後出現完成度 100% 的資訊。

Step 3. 修改序列埠波特率和設備號

  1. 在Ubuntu環境中,支援的波特率為115200, 460800, 921600。本範例使用的默認波特率是115200,默認打開的序列埠名稱是/dev/ttyUSB0

  2. 如果您需要更高的輸出頻率,請編輯 serial_imu.cpp 文件,修改 serial_imu.cpp 文件中的宏定義,改為其他波特率。

    #define IMU_SERIAL ("/dev/ttyUSB0")
    #define BAUD       (115200)
    

    注意修改後需要回到 serial_imu_ws 目錄下,重新執行catkin_make命令

Step 4. 顯示數據

本範例提供了三種查看數據方式:

  1. 顯示所有的數據資訊,便於查看數據。
  2. 打印 ROS 標準 mu_msg 數據
  3. rviz 工具實現可視化

4.1:輸出 IMU 原始數據

  1. 打開另一個終端,執行:

    $ roslaunch imu_launch imu_msg.launch imu_package:=0x91
    
    2. 如果執行失敗,提示找不到相應的 launch 文件,則需要配置環境,在當前終端執行:

    $ source <serial_imu_ws_dir>/devel/setup.bash
    
  2. 執行成功後,就可以看到所有的資訊:

         Devie ID:     0
        Run times: 0 days  3:26:10:468
      Frame Rate:   100Hz
           Acc(G):   0.933    0.317    0.248
       Gyr(deg/s):   -0.02     0.30    -0.00
          Mag(uT):    0.00     0.00     0.00
       Eul(R P Y):   52.01   -66.63   -60.77
    Quat(W X Y Z):   0.770    0.066   -0.611   -0.172
    

4.2:輸出 ROS 標準 Imu.msg

  1. 在 Windows 系統下進行配置模組,使能四元數輸出。

  2. 使用 Windows 下 CHCenter 軟體進行配置 :

    1. 把模組連接到PC後,使用 CHCenter 進行連接對應的 COM串口,點擊**模組設定**。
    2. 在協議配置區域,可以選擇單獨勾選加速度、角速度、四元數,或者是選擇建議的 IMUSOL(0x91)。各自寫入接收區最後顯示 OK,代表成功寫入在關閉配置窗口上,回到數據顯示區域,確認重啟生效。同時檢查加速度、角速度、四元數是否正確輸出。
  3. 終端機執行命令

    $ roslaunch imu_launch imu_msg.launch
    

    執行成功後,就可以看到 ROS 定義的 IMU 訊息:

    header: 
      seq: 595
      stamp: 
        secs: 1595829903
        nsecs: 680423746
      frame_id: "base_link"
    orientation: 
      x: 0.0663746222854
      y: -0.611194491386
      z: -0.17232863605
      w: 0.769635260105
    orientation_covariance: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
    angular_velocity: 
      x: 0.0851199477911
      y: 0.0470183677971
      z: 0.00235567195341
    angular_velocity_covariance: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
    linear_acceleration: 
      x: 0.93323135376
      y: 0.317857563496
      z: 0.247811317444
    linear_acceleration_covariance: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
    

4.3:rviz 可視化

  1. 安裝 ROS rviz 插件

  2. 同上節,使模組能輸出四元數

  3. 進入 serial_imu_ws,終端機執行命令,

    $ roslaunch imu_launch imu_rviz.launch
    

    執行成功後,rviz 工具便被打開。

  4. 先點擊左下角的 Add 標籤,然後在彈出窗口中,選擇 By display type 標籤,尋找 rviz_imu_plugin;找到之後,選擇它下面的 IMU標籤,點擊 OK, 這時,我們可以看到 rviz 的左側的展示窗口中已經成功添加上了 IMU 的標籤。在 FixedFrame 中填入 base_linktopic 中添加 /IMU_data。這時,可以看到坐標系隨感測器改變而改變。

  5. 可以從這裡下載 rviz 的工具,這是 ROS 官方的一個 rviz 插件:

    $ git clone -b indigo https://github.com/ccny-ros-pkg/imu_tools.git
    

Step 5. 常見錯誤

如果是第一次裝 ROS serial 包,很可能會失敗,因為我們在裝的時候,遇到了這個問題,這裡把解決方法提供出來,節約大家的時間。當在終端執行sudo apt-get install ros-kinetic-serial這條命令的時候,有可能會提示

為了提供素材,serial 故意輸錯的。

一個解決辦法是:

$ cd /etc/apt/sources.list.d
$ sudo vi ros-latest.list

打開這個文件之後,一般這個文件中只有一個可用的源,就是指沒有被註釋的,現在把它註釋掉,在它的開頭輸入__#__即可註釋。

然後另起一行輸入:

$ deb https://mirrors.tuna.tsinghua.edu.cn/ros/ubuntu/ xenial main

保存,關閉文件。打開終端,執行:

$ sudo apt-get update
$ sduo apt-get install ros-kinetic-serial

單元 : STM32 範例

原始碼(瀏覽器下載並解壓 ): CH_demo_stm32.zip

本範例提供了C 語言範例代碼,用戶接收HI226/HI229及HI221數據。

  • 測試環境:Windows10_x64 操作系統

  • 編譯器:keil_V5.28

  • 開發板:正點原子-戰艦V3 STM32F103ZET6

  • 測試設備:HI226/HI229

硬體連接

將Hi226/Hi229 正確插入到超核調試板上。

超核調試板 正點原子開發板
RXD PA2(TXD)
TXD PA3(RXD)
3.3V 3V3
GND GND

用杜邦線將上表相對應的引腳連接起來。

用USB線插到開發板的 USB_232 插口上,另一端插到電腦上。

觀察輸出

打開序列埠調試助手,打開開發板對應的序列埠號,觀察數據輸出


單元 : QT C++ 範例

原始碼(瀏覽器下載並解壓 ): CH_demo_qtc++.zip

測試環境:

  • QT 5.9.9 + Win10
  • 僅適用傳輸協議新版本(0x91,0x62,詳見說明書)

Step 1. include 與 .pro 設定

  1. include 資料夾底下分別有 packet、imu_data_decode 的 header 與 cpp 檔, 在 QT 加入這4檔案。

  2. QT .pro 檔加入QT += serialport才能使用序列埠,並於在主視窗當中 include header ```C++ #ifndef MAINWINDOW_H #define MAINWINDOW_H

    #include "include/imu_data_decode.h" #include "include/packet.h" ```

Step 2. main function

在開始接收前初始化模組

imu_data_decode_init();

packet_decode(c)接收到來自序列的單個 uint8_t 字元並解析,在 loop 中持續接收並解析:

void MainWindow::read_serial()
{
    auto NumberOfBytesToRead = m_reader.bytesAvailable();

    if(NumberOfBytesToRead > 0 && m_reader.isReadable())
    {
        QByteArray arr = m_reader.readAll();

        for (int i=0;i<NumberOfBytesToRead;i++) {
            uint8_t c=arr[i];
            packet_decode(c);
        }
    }
}

在解碼的同時,receive_imusol_packet_t會根據IMU接收的數據進行即時更新。 如果使用的是HI221Dongle(無線接收器),則receive_gwsol_packet_t將會是接收到的數據,它是多個receive_imusol_packet_t的組合。 例如,要取得歐拉角 :

int euler_x,euler_y,euler_z;
euler_x=receive_imusol_packet_t.eul[0];
euler_y=receive_imusol_packet_t.eul[1];
euler_z=receive_imusol_packet_t.eul[2];
以下是receive_imusol_packet_treceive_imusol_packet_t的宣告結構 :

   typedef struct receive_imusol_packet_t{
        uint8_t tag;
        uint8_t id;
        float acc[3];
        float gyr[3];
        float mag[3];
        float eul[3];
        float quat[4];
   }receive_imusol_packet_t;

   typedef struct receive_gwsol_packet_t{
       uint8_t tag;
        uint8_t gw_id;
        uint8_t n;
        receive_imusol_packet_t receive_imusol[MAX_LENGTH];
   }receive_gwsol_packet_t;

Step3. 了解數據包種類

0X91( IMUSOL)

共76字節,新加入的數據包,用於替代A0,B0,C0,D0,D1等數據包。集成了IMU的傳感器原始輸出和姿態解算數據。

字節偏移 類型 bytes 單位 說明
0 uint8_t 1 - 數據包標籤:0x91
1 uint8_t 1 - ID
2 - 6 - 保留
8 uint32_t 4 ms 時間戳資訊,從系統開機開始累加,每毫秒增加1
12 float 12 1G(1G = 1重力加速度) X,Y,Z軸的加速度,注意單位和0xA0不同
24 float 12 deg/s X,Y,Z軸的角速度,注意單位和0xB0不同
36 float 12 uT X,Y,Z軸的磁場強度(HI229支持,注意單位和0xC0不同)
48 float 12 deg 節點歐拉角集合, 順序為:橫滾角(Roll),俯仰角(Pitch),航向角(Yaw)(注意順序和單位與0xD0數據包不同)
60 float 16 - 節點四元數集合,順序為WXYZ

0x62(GWSOL)

HI221Dongle(無線接收器)數據包前8個字節為接收機資訊。後面分為N個數據塊。每個數據塊描述一個節點的姿態數據(最大支持16個節點)。每個數據塊大小為76字節,數據結構同0x91。此協議數據量較大,建議將波特率調整至460800以上獲得穩定的幀率輸出。

協議結構如下:

字節偏移 bytes 類型 單位 說明
0 1 uint8_t - 數據包標籤:0x62
1 1 uint8_t - GWID, 接收機網絡ID
2 1 uint8_t - N, 此幀包含節點數據塊個數
3 5 - - 保留
----節點數據塊開始---- - - - 數據結構同0x91
8+76*N(N=0-15) 1 uint8_t - 數據包標籤:0x91
9+76*N(N=0-15) 1 uint8_t - 節點N的ID
10+76*N 10 - - 保留
20+76*N 12 float - 節點N三軸加速度
32+76*N 12 float - 節點N三軸角速度
44+76*N 12 float - 節點N軸磁場強度
56+76*N 12 float - 節點N歐拉角
68+76*N 16 float - 節點N四元數
----節點數據塊結束---- - - - -----------