ROS Kinetic 串列埠讀取教學
在 Ubuntu 16.04 與 ROS Kinetic 下,把 ANROT 串列資料轉成 ROS topic 的最小公開流程。
- ros
- kinetic
- ubuntu
- tutorial
ROS Kinetic 串列埠範例
協議支援
| 協議 / frame | 支援狀態 | 這份 example 的處理方式 |
|---|---|---|
0x91 IMUSOL | 支援 | 發布 /imu_0x91_package,並同步轉成 /IMU_data (sensor_msgs/Imu)。 |
0x62 GWSOL | 支援 | 發布 /imu_0x62_package,每個 node 放在 node_data[]。 |
0x63 GWSOL Compact | 不支援 | ch_serial 沒有 0x63 / 0x93 compact node decoder。 |
0x90, 0xA0, 0xB0, 0xC0, 0xD0, 0xD1, 0xF0 | 部分支援 | parser 可解析鬆散欄位;非 gateway frame 會走單機 topic,pressure 只保留在 raw package。 |
這份範例在 Ubuntu 16.04 + ROS Kinetic 下讀取 ANROT 串列資料,並提供 raw package、標準 sensor_msgs/Imu、rviz 與 3D 顯示流程。若是第一次使用,建議先跑標準 IMU topic,再嘗試視覺化。
下載範例
瀏覽器下載並解壓縮: demo-ros-kinetic-en.zip
主要結構:
demo_ros/
└── serial_imu_ws/
└── src/
├── imu_launch/
├── imu_tool/
└── serial_imu/
└── 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-kinetic-serial
確認安裝成功:
roscd serial
3. 編譯 workspace
cd demo_ros/serial_imu_ws
source /opt/ros/kinetic/setup.bash
catkin_make
source devel/setup.bash
4. 修改串列埠與波特率
範例預設讀取 /dev/ttyUSB0,baud rate 為 115200。若需要修改,請編輯 src/serial_imu/src/serial_imu.cpp:
#define IMU_SERIAL "/dev/ttyUSB0"
#define BAUD (115200)
修改後重新編譯:
catkin_make
source devel/setup.bash
5. 輸出 ANROT raw 資料
roslaunch imu_launch imu_msg.launch imu_package:=0x91
成功後會看到裝置 ID、幀率、加速度、角速度、磁力計、歐拉角與四元數。
Device ID: 0
Frame Rate: 100Hz
Acc(G): 0.933 0.317 0.248
Gyr(deg/s): -0.02 0.30 -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
6. 輸出 ROS 標準 Imu topic
roslaunch imu_launch imu_msg.launch
標準 topic 為 /IMU_data,資料型別為 sensor_msgs/Imu。
7. rviz 與 3D 顯示
rviz:
roslaunch imu_launch imu_rviz.launch
在 rviz 中確認:
- Fixed Frame:
base_link - Topic:
/IMU_data
3D 顯示:
roslaunch imu_launch imu_display_3d.launch
常見問題
roslaunch 找不到 launch file
請確認目前終端已執行:
source /opt/ros/kinetic/setup.bash
source demo_ros/serial_imu_ws/devel/setup.bash
apt 找不到 ros-kinetic-serial
請確認 ROS apt source 對應 Ubuntu 16.04 xenial,更新 package list 後再安裝。
多個 USB 裝置導致 port 變動
可使用 udev rule 建立固定裝置名稱,例如 /dev/anrot_imu,再把 IMU_SERIAL 改成該名稱。