ANROT 教學文件

ROS Melodic 串列埠讀取教學

在 Ubuntu 18.04 與 ROS Melodic 下,把 ANROT 串列資料轉成標準 IMU topic 的最小公開流程。

最後更新 2025年1月1日 對應產品 6
  • ros
  • melodic
  • ubuntu
  • tutorial

ROS Melodic 串列埠範例

協議支援

協議 / frame支援狀態這份 example 的處理方式
0x91 IMUSOL支援發布 /IMU_data (sensor_msgs/Imu)。
0x62 GWSOL只解析、不發布ch_serial0x62 case,但 serial_imu.cpp 遇到 KItemGWSOL 不發布 topic。
0x63 GWSOL Compact不支援沒有 compact gateway decoder。
0x90, 0xA0, 0xB0, 0xC0, 0xD0, 0xD1, 0xF0部分支援parser 可解析鬆散欄位;主節點以單機 /IMU_data 輸出,pressure 不進入標準 IMU topic。

這份範例在 Ubuntu 18.04 + ROS Melodic 下讀取 ANROT 串列資料,並發布為 ROS 標準 sensor_msgs/Imu topic。新手建議先確認 topic 有資料,再進一步接 rviz 或自己的節點。

下載範例

瀏覽器下載並解壓縮: demo-ros-melodic-en.zip

主要結構:

demo_ros/
└── serial_imu_ws/
    └── src/
        ├── imu_launch/
        └── serial_port/
            └── src/serial_imu.cpp

1. 確認串列埠

插入產品後確認新增的裝置名稱:

ls /dev/ttyUSB*

若需要臨時開啟權限:

sudo chmod 666 /dev/ttyUSB0

長期使用建議把帳號加入 dialout 群組。

2. 安裝依賴

範例使用 ROS serial package:

sudo apt-get update
sudo apt-get install ros-melodic-serial

確認安裝成功:

roscd serial

3. 編譯 workspace

cd demo_ros/serial_imu_ws
source /opt/ros/melodic/setup.bash
catkin_make
source devel/setup.bash

4. 修改串列埠與波特率

範例預設讀取 /dev/ttyUSB0,baud rate 為 115200。若需要修改,請編輯 src/serial_port/src/serial_imu.cpp:

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

修改後重新編譯:

catkin_make
source devel/setup.bash

5. 啟動節點

roslaunch imu_launch imu_msg.launch

成功後會發布 /IMU_data,資料型別為 sensor_msgs/Imu

header:
  frame_id: "base_link"
orientation:
  x: 0.0663746
  y: -0.611194
  z: -0.172329
  w: 0.769635
angular_velocity:
  x: 0.085120
  y: 0.047018
  z: 0.002356
linear_acceleration:
  x: 0.933231
  y: 0.317858
  z: 0.247811

6. rviz 視覺化

啟動 rviz:

roslaunch imu_launch imu_rviz.launch

在 rviz 中確認:

  • Fixed Frame: base_link
  • Topic: /IMU_data

常見問題

roslaunch 找不到 launch file

請確認目前終端已執行:

source /opt/ros/melodic/setup.bash
source demo_ros/serial_imu_ws/devel/setup.bash

apt 找不到 ros-melodic-serial

請確認 ROS apt source 對應 Ubuntu 18.04 bionic,更新 package list 後再安裝。

多個 USB 裝置導致 port 變動

可使用 udev rule 建立固定裝置名稱,例如 /dev/anrot_imu,再把 IMU_SERIAL 改成該名稱。