welcom ! Handel home

2025年3月20日 星期四

imu_link 解析與 link_1 追蹤設定檢查

 imu_link 解析與 link_1 追蹤設定檢查

ROS Gazebo / MoveIt! 內,IMU (Inertial Measurement Unit) 用來測量 

角速度 (gyroscope)、加速度 (accelerometer)、方向 (orientation)

並發布到 imu/data topic。

以下是 imu_linklink_1 之間的關係,以及如何確保 IMU 可以正確跟隨 link_1 運動


📌 1️⃣ imu_link 結構解析

xml
<link name="imu_link"> <inertial> <mass value="0.01"/> <origin xyz="0 0 0" /> <inertia ixx="0.001" ixy="0.0" ixz="0.0" iyy="0.001" iyz="0.0" izz="0.001"/> </inertial> <visual> <geometry> <sphere radius="0.02"/> </geometry> <material name="Gray"/> </visual> <collision> <geometry> <sphere radius="0.02"/> </geometry> </collision> </link>

imu_link 代表 IMU 的物理模型

  • inertial 設定:質量 0.01 kg,影響 Gazebo 物理運算
  • visual (可視化):IMU 以 球體 (radius=0.02m) 顯示,顏色為 Gray
  • collision (碰撞):和 visual 相同,影響 Gazebo 物理交互

📌 2️⃣ imu_joint 連接 imu_linkbase_link

xml
<joint name="imu_joint" type="fixed"> <parent link="base_link"/> <child link="imu_link"/> <origin xyz="0 0 0.1"/> </joint>

imu_jointimu_link 固定在 base_link

  • type="fixed"imu_link完全跟隨 base_link 運動
  • parent="base_link"imu_link 直接連結 base_link
  • child="imu_link"imu_link 是附屬元件
  • origin xyz="0 0 0.1"IMU 放在 base_link 上方 0.1m

🔹 🚨 但這樣 IMU 不會跟隨 link_1,需要改成掛載在 link_1 上!


📌 3️⃣ 讓 imu_link 跟隨 link_1

目前 IMU 掛載在 base_link,如果 link_1 轉動,IMU 不會跟隨
如果 IMU 應該裝在 link_1 上,請修改 parentlink_1

修改 imu_joint

xml
<joint name="imu_joint" type="fixed"> <parent link="link_1"/> <!-- 讓 IMU 連到 link_1 --> <child link="imu_link"/> <origin xyz="0 0 0.1"/> <!-- 放在 link_1 上方 10cm --> </joint>

🔹 這樣 IMU 會跟著 link_1 旋轉! 🎯


📌 4️⃣ 確保 IMU 正確發布數據

Gazebo 內,IMU 需要使用 libgazebo_ros_imu_sensor.so 插件,否則 IMU 只是一個靜態模型,不會發布任何數據!

gazebo 標籤內加入 IMU 插件

xml
<gazebo reference="imu_link"> <sensor type="imu" name="imu_sensor"> <update_rate>100.0</update_rate> <plugin name="imu_plugin" filename="libgazebo_ros_imu_sensor.so"> <alwaysOn>true</alwaysOn> <updateRate>100.0</updateRate> <bodyName>imu_link</bodyName> <topicName>imu/data</topicName> <frameName>imu_link</frameName> </plugin> </sensor> </gazebo>

這樣 Gazebo 會自動將 IMU 數據發布到 /imu/data

📌 啟動 Gazebo

bash
roslaunch robot_arm_urdf robot_arm_control.launch

📌 監聽 IMU 數據

bash
rostopic echo /imu/data

應該輸出

yaml
header: seq: 123 stamp: secs: 10 nsecs: 123456 frame_id: "imu_link" orientation: x: 0.001 y: -0.002 z: 0.003 w: 1.000 angular_velocity: x: 0.01 y: -0.01 z: 0.02 linear_acceleration: x: 0.05 y: -0.03 z: 9.81

表示 IMU 正確運作!


📌 5️⃣ Rviz 內可視化 IMU

📌 啟動 rviz

bash
rosrun rviz rviz

📌 rviz 1️⃣ 點擊 Add 2️⃣ 選擇 IMU 3️⃣ 設定 Topic/imu/data你應該會看到 IMU 的方向變化!


🚀 總結

項目**設定說明
IMU 連接的連結link_1IMU 會跟隨 link_1 旋轉
關節類型fixedIMU 固定在 link_1
Gazebo 插件libgazebo_ros_imu_sensor.soIMU 發布 /imu/data
監聽 IMU 數據rostopic echo /imu/data檢查 IMU 是否運作
Rviz 可視化Add -> IMU顯示 IMU 方向

🚀 這樣 IMU 就能跟隨 link_1 並正確發布數據! 🚀

沒有留言: