ROS Melodic 串列埠讀取教學
在 Ubuntu 18.04 與 ROS Melodic 下,把 ANROT 串列資料轉成標準 IMU topic 的最小公開流程。
- ros
- melodic
- ubuntu
- tutorial
ROS Melodic 串列埠範例
協議支援
| 協議 / frame | 支援狀態 | 這份 example 的處理方式 |
|---|---|---|
0x91 IMUSOL | 支援 | 發布 /IMU_data (sensor_msgs/Imu)。 |
0x62 GWSOL | 只解析、不發布 | ch_serial 有 0x62 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 改成該名稱。