## URDF URDF 是用來描述機器人硬體結構的文件,通常由 `base_link` 開始,展開到各種感測器、輪子、相機等設備。 在 ROS 中,URDF 有兩種主要的協定,以下有官方的說明連結以及程式碼實現範例。而我正在將實驗室的舊有 URDF 從 `REP 120` 轉換到 `REP 105`,因為我認為 `REP 105` 更符合 AMR 的特性: - [REP 105 協定](https://www.ros.org/reps/rep-0105.html): - 適用於移動平台的座標系 - 座標系簡化為僅包含 `base_link`,更加簡潔 - [我的改版 URDF](https://github.com/ming0071/ROS2-3D-lidar-AMR/blob/main/urdf/AMR_model.urdf) - [REP 120 協定](https://www.ros.org/reps/rep-0120.html#id8): - 適用於人形機器人的座標系 - 增加了 `base_footprint` 來表示機器人在地板上的位置 - [實驗室原有 URDF](https://github.com/ming0071/ROS2-3D-lidar-AMR/blob/main/urdf/AMR_ros_3d.urdf.xacro) ## TF #### TF 座標系概述 當建立好 AMR 的 URDF 後,可透過 ROS 中的 TF 來發布座標系,來省去複雜的座標系轉換過程,是非常好用的工具。 在 ROS 中,TF 的座標系定義包含 X、Y、Z 方向以及 r、p、y 旋轉角度,並以 X 軸作為前進方向。  #### Publish tf tree 可以由這樣的 launch 檔來發布 tf 座標系到 ROS 中,發布 `robot_state_publisher` 和 `joint_state_publisher` 兩個節點來開啟 tf,另外也加入了可以彈性選擇實驗室原版與我的改良版本[^註腳],想了解 tf launch 細節的話可以參考官方指南 [Using URDF with robot_state_publisher](https://docs.ros.org/en/humble/Tutorials/Intermediate/URDF/Using-URDF-with-Robot-State-Publisher.html) 實作。 ``` import os from launch import LaunchDescription from launch_ros.actions import Node from ament_index_python import get_package_share_directory def generate_launch_description(): version = "ROS2" # 可選擇 ROS2 改良版或實驗室舊版 URDF 文件 if version == "ROS2": urdf_name = "AMR_model.urdf" # AMR_model.urdf AMR_ros_3d.urdf.xacro else: urdf_name = "AMR_ros_3d.urdf.xacro" urdf_model_path = os.path.join( get_package_share_directory("scl_amr"), "urdf", urdf_name, ) robot_state_publisher_node = Node( package="robot_state_publisher", executable="robot_state_publisher", arguments=[urdf_model_path], ) joint_state_publisher_node = Node( package="joint_state_publisher", executable="joint_state_publisher", name="joint_state_publisher", arguments=[urdf_model_path], ) ld = LaunchDescription() ld.add_action(joint_state_publisher_node) ld.add_action(robot_state_publisher_node) return ld ``` #### 撰寫 TF launch 的小訣竅 - 通過 `ros2 run rqt_tf_tree rqt_tf_tree --force-discover ` 指令來檢查 TF 是否有正確發布。 - 發布 TF 時同步藉由 Rviz 可視化 STL 模型檔,方便觀察座標系是否正確,也可以藉由調整模型顏色、透明度來更清楚的觀察物件位置和方向 - `tf2_monitor`監控 TF 更新頻率,像是`ros2 run tf2_ros tf2_monitor base_link imu_link ` [^註腳]:`joint_state_publisher` 不是必要的節點,它的功能是模擬和控制關節,在座標系轉換上並不必要。另外,目前的 TF launch 和官方的指南有細微的差異,或許還有改良空間可以嘗試。
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up