DrawingProcess
๋“œํ”„ DrawingProcess
DrawingProcess
์ „์ฒด ๋ฐฉ๋ฌธ์ž
์˜ค๋Š˜
์–ด์ œ
ยซ   2025/07   ยป
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (970)
    • Profile & Branding (25)
      • Career (18)
    • IT Trends (254)
      • Conference, Faire (Experien.. (31)
      • News (187)
      • Youtube (19)
      • TED (8)
      • Web Page (2)
      • IT: Etc... (6)
    • Contents (98)
      • Book (67)
      • Lecture (31)
    • Project Process (94)
      • Ideation (0)
      • Study Report (34)
      • Challenge & Award (22)
      • 1Day1Process (5)
      • Making (5)
      • KRC-FTC (Team TC(5031, 5048.. (10)
      • GCP (GlobalCitizenProject) (15)
    • Study: ComputerScience(CS) (72)
      • CS: Basic (9)
      • CS: Database(SQL) (5)
      • CS: Network (14)
      • CS: OperatingSystem (3)
      • CS: Linux (39)
      • CS: Etc... (2)
    • Study: Software(SW) (95)
      • SW: Language (29)
      • SW: Algorithms (1)
      • SW: DataStructure & DesignP.. (1)
      • SW: Opensource (15)
      • SW: Error Bug Fix (43)
      • SW: Etc... (6)
    • Study: Artificial Intellige.. (150) N
      • AI: Research (1)
      • AI: 2D Vision(Det, Seg, Tra.. (35)
      • AI: 3D Vision (71) N
      • AI: MultiModal (3)
      • AI: SLAM (0)
      • AI: Light Weight(LW) (3)
      • AI: Data Pipeline (7)
      • AI: Machine Learning(ML) (1)
    • Study: Robotics(Robot) (33)
      • Robot: ROS(Robot Operating .. (9)
      • Robot: Positioning (8)
      • Robot: Planning & Control (7)
    • Study: DeveloperTools(DevTo.. (83)
      • DevTool: Git (12)
      • DevTool: CMake (13)
      • DevTool: NoSQL(Elastic, Mon.. (25)
      • DevTool: Container (17)
      • DevTool: IDE (11)
      • DevTool: CloudComputing (4)
    • ์ธ์ƒ์„ ์‚ด๋ฉด์„œ (65)
      • ๋‚˜์˜ ์ทจ๋ฏธ๋“ค (7)
      • ๋‚˜์˜ ์ƒ๊ฐ๋“ค (42)
      • ์—ฌํ–‰์„ ๋– ๋‚˜์ž~ (10)
      • ๋ถ„๊ธฐ๋ณ„ ํšŒ๊ณ  (6)

๊ฐœ๋ฐœ์ž ๋ช…์–ธ

โ€œ ๋งค์ฃผ ๋ชฉ์š”์ผ๋งˆ๋‹ค ๋‹น์‹ ์ด ํ•ญ์ƒ ํ•˜๋˜๋Œ€๋กœ ์‹ ๋ฐœ๋ˆ์„ ๋ฌถ์œผ๋ฉด ์‹ ๋ฐœ์ด ํญ๋ฐœํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ด๋ณด๋ผ.
์ปดํ“จํ„ฐ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ์ด๋Ÿฐ ์ผ์ด ํ•ญ์ƒ ์ผ์–ด๋‚˜๋Š”๋ฐ๋„ ์•„๋ฌด๋„ ๋ถˆํ‰ํ•  ์ƒ๊ฐ์„ ์•ˆ ํ•œ๋‹ค. โ€

- Jef Raskin

๋งฅ์˜ ์•„๋ฒ„์ง€ - ์• ํ”Œ์ปดํ“จํ„ฐ์˜ ๋งคํ‚จํ† ์‹œ ํ”„๋กœ์ ํŠธ๋ฅผ ์ฃผ๋„

์ธ๊ธฐ ๊ธ€

์ตœ๊ทผ ๊ธ€

์ตœ๊ทผ ๋Œ“๊ธ€

ํ‹ฐ์Šคํ† ๋ฆฌ

hELLO ยท Designed By ์ •์ƒ์šฐ.
DrawingProcess

๋“œํ”„ DrawingProcess

[ROS] ROS URDF vs. Gazebo SDF: Link Pose, Joint Pose, Visual & Collision
Study: Robotics(Robot)/Robot: ROS(Robot Operating Sytem)

[ROS] ROS URDF vs. Gazebo SDF: Link Pose, Joint Pose, Visual & Collision

2023. 10. 27. 00:53
๋ฐ˜์‘ํ˜•
๐Ÿ’ก ๋ณธ ๋ฌธ์„œ๋Š” 'ROS URDF vs. Gazebo SDF: Link Pose, Joint Pose, Visual & Collision'์— ๋Œ€ํ•ด ์ •๋ฆฌํ•ด๋†“์€ ๊ธ€์ž…๋‹ˆ๋‹ค.
ROS 2 ๋ฐ Gazebo๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‹œ๋ฎฌ๋ ˆ์ด์…˜์šฉ ๋กœ๋ด‡์„ ๋งŒ๋“œ๋Š” ๊ฐ€์žฅ ํ˜ผ๋ž€์Šค๋Ÿฌ์šด ๊ฐœ๋… ์ค‘ ํ•˜๋‚˜ ๋Š” URDF ๋ฐ SDF๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋กœ๋ด‡์˜ ๋งํฌ ๋ฐ ๊ด€์ ˆ ์— ๋Œ€ํ•œ ์ขŒํ‘œ ํ”„๋ ˆ์ž„์„ ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค . ์ด ํŠœํ† ๋ฆฌ์–ผ์—์„œ๋Š” ๋งํฌ์™€ ๊ด€์ ˆ์˜ ํฌ์ฆˆ๊ฐ€ ์ผ๋ฐ˜์ ์ธ URDF ํŒŒ์ผ๊ณผ SDF ํŒŒ์ผ ๋‚ด์—์„œ ์ •์˜๋˜๋Š” ๋ฐฉ์‹์„ ๋น„๊ตํ•˜๊ณ  ๋Œ€์กฐํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

1. Prerequisites

๋ฌด์—‡๋ณด๋‹ค URDF๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ชจ๋ฐ”์ผ ๋กœ๋ด‡ ์ขŒํ‘œ๊ณ„๋ฅผ ์ดํ•ดํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ํ•ด๋‹น ๋‚ด์šฉ์„ '[ROS] ROS TF ์ขŒํ‘œ๊ณ„ ๋ฐ ๋ณ€ํ™˜'์— ์ •๋ฆฌํ•ด๋†“์•˜์œผ๋‹ˆ ์ฐธ๊ณ ํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.

1) What is a URDF File?

URDF(Unified Robotic Description Format)๋Š” ROS์—์„œ ๋กœ๋ด‡์˜ ๋ชจ๋“  ์š”์†Œ( ๋งํฌ ๋ฐ ๊ด€์ ˆ ) ๋ฅผ ์„ค๋ช…ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” XML ํŒŒ์ผ ํ˜•์‹์ž…๋‹ˆ๋‹ค .

์ด ํŠœํ† ๋ฆฌ์–ผ ์—์„œ URDF๋กœ ํ‘œํ˜„๋œ ๋กœ๋ด‡์„ Rviz์— ์˜ฌ๋ฆฌ๋Š” ๋ฐฉ๋ฒ•์„ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

2) What is a SDF File?

SDF( Simulation Description Format)๋Š” ๋กœ๋ด‡์˜ ๋ชจ๋“  ์š”์†Œ( ๋งํฌ ๋ฐ ๊ด€์ ˆ ) ๋ฅผ ์„ค๋ช…ํ•˜๊ธฐ ์œ„ํ•ด Gazebo์—์„œ ์‚ฌ์šฉ๋˜๋Š” XML ํŒŒ์ผ ํ˜•์‹์ž…๋‹ˆ๋‹ค .

์ด ํŠœํ† ๋ฆฌ์–ผ ์—์„œ SDF๋กœ ํ‘œํ˜„๋œ ๋กœ๋ด‡์„ Gazebo์— ์˜ฌ๋ฆฌ๋Š” ๋ฐฉ๋ฒ•์„ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

2. Concept

URDF๋ฅผ ํ†ตํ•ด ์šฐ๋ฆฌ๋Š” ์•„๋ž˜์˜ ๊ฒƒ๋“ค์„ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • Kinematic and dynamic description of the robot
  • Visual representation of the robot
  • Collision model of the robot

์œ„ ์„ธ๊ฐ€์ง€๋Š” ์ดํ›„ XML ์ž‘์„ฑ์‹œ ์ฃผ๋กœ ๋‹ค๋ฃจ๊ฒŒ ๋˜๋Š” ์ค‘์š”ํ•œ ์š”์†Œ๋“ค์ž…๋‹ˆ๋‹ค.

์†Œ๊ฐœํ•œ ์„ธ๊ฐ€์ง€ ์š”์†Œ๋ฅผ ๋งŒ์กฑํ•˜๋Š” ๊ฐ„๋‹จํ•œ ๋กœ๋ด‡์˜ ์˜ˆ๋Š” ์•„๋ž˜ ๊ทธ๋ฆผ์ฒ˜๋Ÿผ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋กœ๋ด‡์„ ๊ตฌ์„ฑํ•˜๋Š” ํ•˜๋‚˜์˜ ๊ตฌ์„ฑ์š”์†Œ๋ฅผ ๋งํฌ(Link)๋ผ๊ณ  ๋ถ€๋ฅด๊ณ , ๋งํฌ์™€ ๋งํฌ๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ์—ฐ๊ฒฐ๋ถ€๋ฅผ ์กฐ์ธํŠธ(Joint)๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋งํฌ๊ณผ ์กฐ์ธํŠธ์˜ ์กฐํ•ฉ์„ ํ†ตํ•ด ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” ํ˜•ํƒœ์˜ ๋กœ๋ด‡์„ URDF๋ฅผ ํ†ตํ•ด ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์•„๋ž˜์˜ ๋‚ด์šฉ์€ ํ˜„์žฌ๊นŒ์ง€๋Š” ์ง€์›ํ•˜์ง€ ์•Š์œผ๋‹ˆ, URDF๋กœ ๋ชจ๋“  ๋กœ๋ด‡์„ ํ‘œํ˜„ํ•  ์ˆ˜๋Š” ์—†๋Š” ์  ์ฐธ๊ณ  ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

The main limitation at this point is that only tree structures can be represented, ruling out all parallel robots. Also, the specification assumes the robot consists of rigid links connected by joints; flexible elements are not supported.

Link

๋งํฌ๋Š” ์•ž์„œ ์†Œ๊ฐœํ–ˆ๋“ฏ์ด ๋กœ๋ด‡์„ ์ด๋ฃจ๋Š” ๊ตฌ์„ฑ์š”์†Œ ์ค‘ ํ•˜๋‚˜์ด๋ฉฐ, ๋งํฌ๋Š” ์•„๋ž˜์˜ ์„ธ๊ฐ€์ง€ ์†์„ฑ์„ ์ง€๋‹™๋‹ˆ๋‹ค. ์„ธ๊ฐ€์ง€ ์†์„ฑ ๋ชจ๋‘ ํ•„์ˆ˜์ž…๋ ฅ ์˜ต์…˜์€ ์•„๋‹ˆ๋ฉฐ, Intertial์˜ ๊ฒฝ์šฐ default๊ฐ’์œผ๋กœ 0 mass์™€ 0 inertia ๋กœ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

  • <intertial>: ๋งํฌ์— ๋Œ€ํ•œ ๊ด€์„ฑ ์ •๋ณด๋‹ค. ๋งํฌ์˜ ๊ด€์„ฑ ์ค‘์‹ฌ๊ณผ ์งˆ๋Ÿ‰, ๊ด€์„ฑ๊ณ„์ˆ˜ ๋“ฑ์„ ์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • <visual>: ์‹œ๊ฐํ™” ์†์„ฑ์œผ๋กœ, Rviz์™€ ๊ฐ™์€ ์‹œ๊ฐํ™” ํˆด์„ ์‚ฌ์šฉํ• ๋•Œ ํšจ๊ณผ์ ์œผ๋กœ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋‹ค.
  • <collision>: ๋ฌผ๋ฆฌ์ ์ธ ์ถฉ๋Œ ์†์„ฑ์„ ์ •ํ•œ๋‹ค. Visual ์†์„ฑ๊ณผ ๋‹ค๋ฅด๊ฒŒ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

Joint

์กฐ์ธํŠธ๋Š” ๋งํฌ์™€ ๋งํฌ๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ๋กœ๋ด‡์˜ ๊ตฌ์„ฑ์š”์†Œ์ด๋ฉฐ, URDF ์กฐ์ธํŠธ๋Š” 6๊ฐ€์ง€ ํƒ€์ž…์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ๋กœ๋ด‡์˜ ์กฐ์ธํŠธ์— ๋งž๊ฒŒ ๊ณจ๋ผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์กฐ์ธํŠธ์˜ ๊ฒฝ์šฐ์—๋„ ์ž…๋ ฅ ๊ฐ€๋Šฅํ•œ ์†์„ฑ๋“ค์ด ์žˆ์œผ๋ฉฐ, ๋งํฌ์™€ ๋‹ฌ๋ฆฌ ์กฐ์ธํŠธ๋Š” ํ•„์ˆ˜์ž…๋ ฅ ์†์„ฑ๋“ค๋„ ์ง€๋‹™๋‹ˆ๋‹ค.

  • <origin>: ๋ถ€๋ชจ(parent) ๋งํฌ์—์„œ ์ž์‹(child) ๋งํฌ์— ๊ด€ํ•œ ๋ณ€ํ™˜(transform) ์ •๋ณด
  • <parent>: ๋ถ€๋ชจ ๋งํฌ ์ด๋ฆ„
  • <child>: ์ž์‹ ๋งํฌ ์ด๋ฆ„

๊ทธ ์™ธ ์†์„ฑ๋“ค์€ ๋ชจ๋‘ ํ•„์ˆ˜์ž…๋ ฅ ์†์„ฑ์€ ์•„๋‹ˆ๋ฉฐ, <origin> ๋˜ํ•œ ๋งํฌ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๊ธฐ๋ณธ ์ž…๋ ฅ๊ฐ’์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์˜ต์…˜์œผ๋กœ ์ž…๋ ฅ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. 

3. Link & Joint: URDF & SDF

Link & Joint: URDF

URDF ํ˜•์‹์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ธฐ๋ณธ ๋ชจ๋ฐ”์ผ ๋กœ๋ด‡(์ด ํŠœํ† ๋ฆฌ์–ผ์˜ ํ‘œ์ง€ ์ด๋ฏธ์ง€์— ์žˆ๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€)์— ๋Œ€ํ•œ ๊ธฐ๋ฐ˜์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค. base_link ์ขŒํ‘œ๊ณ„๋Š” base_footprint ์ขŒํ‘œ๊ณ„ ๋ณด๋‹ค 0.2m ์œ„์— ์œ„์น˜ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค . ์•„ํ‚คํ…์ฒ˜์˜ ์ƒ˜ํ”Œ ํšŒ๋กœ๋„๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ์€ ์ƒ˜ํ”Œ URDF ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค. base_footprint ๋งํฌ ์™€ base_link๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค .

<?xml version="1.0" ?>
<robot name="my_robot" xmlns:xacro="http://ros.org/wiki/xacro">
<!-- ****************** ROBOT BASE FOOTPRINT ***************************  -->
  <!-- Define the center of the main robot chassis projected on the ground -->   
  <link name="base_footprint">
  </link>

  <!-- ********************** ROBOT BASE *********************************  -->
  <link name="base_link">
    <visual>
      <origin xyz="-0.10 0 0" rpy="${pi/2} 0 ${pi/2}"/>
      <geometry>
        <mesh filename="file://$(find my_robot)/meshes/my_robot/robot_base.stl" />
      </geometry>
      <material name="White">
        <color rgba="${255/255} ${255/255} ${255/255} 1.0"/>
      </material>
    </visual>

    <collision>
      <origin xyz="0 0 -0.15" rpy="0 0 0"/>
      <geometry>
        <box size="0.70 0.30 0.01"/>
      </geometry>
    </collision>
   
  </link>

  <gazebo reference="base_link">
    <material>Gazebo/White</material>
  </gazebo> 
   
  <!-- The base footprint of the robot is located underneath the chassis -->
  <joint name="base_joint" type="fixed">
    <parent link="base_footprint"/>
    <child link="base_link" />
    <origin xyz="0 0 0.2" rpy="0 0 0"/>
  </joint>
</robot>
 

์œ„ URDF ํŒŒ์ผ์˜ joint ์ •์˜๋ฅผ ๋ณด๋ฉด base_footprint ์ขŒํ‘œ ํ”„๋ ˆ์ž„ ๋‚ด๋ถ€์˜ base_link ํฌ์ฆˆ๊ฐ€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(x=0, y=0, z=0.2, roll = 0 rad, pitch = 0 rad, yaw = 0 rad). ์ด ์ •๋ณด๋Š” ์กฐ์ธํŠธ์˜ <origin></origin> ํƒœ๊ทธ ๋‚ด์— ํฌํ•จ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ฆ‰, base_link์™€ base_footprint๋Š” ์ •ํ™•ํžˆ ๋™์ผํ•œ ๋ฐฉํ–ฅ์„ ๊ฐ€์ง€๋ฉฐ x, y ๋ฐ z ์ถ•์€ ๋ชจ๋‘ ๋™์ผํ•œ ๋ฐฉํ–ฅ์„ ๊ฐ€๋ฆฌํ‚ต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ base_link๋Š” ์–‘์˜ z ๋ฐฉํ–ฅ (์˜ˆ: ์œ„)์œผ๋กœ 0.2๋ฏธํ„ฐ์— ์œ„์น˜ํ•ฉ๋‹ˆ๋‹ค.

์ด์ œ base_link์— ๋Œ€ํ•œ ๋งํฌ ์ •์˜ ๋‚ด๋ถ€๋ฅผ ์‚ดํŽด๋ณด๋ฉด ๋งํฌ์˜ ์‹œ๊ฐ์  ๋ฐ ์ถฉ๋Œ ์†์„ฑ์„ ์ •์˜ํ•œ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • visual ์†์„ฑ์€ ์‹œ๋ฎฌ๋ ˆ์ด์…˜์—์„œ ๋กœ๋ด‡์ด ์–ด๋–ป๊ฒŒ ๋ณด์ด๋Š”์ง€ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.
  • collision ์†์„ฑ์€ Gazebo ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ํ™˜๊ฒฝ์—์„œ ๋กœ๋ด‡๊ณผ ๋‹ค๋ฅธ ๊ฐ์ฒด์˜ ์ถฉ๋Œ์„ ์ œ์–ดํ•˜๋Š” โ€‹โ€‹๋ฌผ๋ฆฌ์  ์†์„ฑ์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

์ข…์ข… ์‹œ๊ฐ์  ์†์„ฑ๊ณผ ์ถฉ๋Œ ์†์„ฑ์ด ๋™์ผํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ Gazebo์™€ ๊ฐ™์€ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ์—”์ง„์„ ๋” ๋น ๋ฅด๊ฒŒ ์‹คํ–‰ํ•˜๋ ค๋ฉด ๋กœ๋ด‡์˜ base_link๋ฅผ ๋” ๋ณต์žกํ•œ ๋ชจ์–‘์ด๋‚˜ ๋ฉ”์‰ฌ๊ฐ€ ์•„๋‹Œ cube๋กœ ํ‘œํ˜„ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

Link & Joint: URDF (visual & collision)

์ด ํŠœํ† ๋ฆฌ์–ผ ์—์„œ ์‹œ๊ฐ์  ๋ฐ ์ถฉ๋Œ ์†์„ฑ์— ๋Œ€ํ•œ ๋ชจ๋“  ๋‚ด์šฉ์„ ๋ฐฐ์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค .

์‹œ๊ฐ์  ๋ฐ ์ถฉ๋Œ ์†์„ฑ์€ ๋ณ„๋„์˜ <origin></origin> ํƒœ๊ทธ ๋‚ด์— ์ •์˜๋œ ์ž์ฒด ํฌ์ฆˆ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ํƒœ๊ทธ ๋‚ด๋ถ€์— ์ •์˜๋œ ํฌ์ฆˆ๋Š” ๋งํฌ์˜ ํฌ์ฆˆ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค(x=0, y=0, z=0.2, roll = 0 rad, pitch = 0 rad, yaw = 0 rad). visual, collision, and inertial ๋‚ด <origin></origin> ํƒœ๊ทธ ๋‚ด๋ถ€์˜ ํฌ์ฆˆ๋ฅผ ํŠน์ • ๋งํฌ ์ขŒํ‘œ ํ”„๋ ˆ์ž„์˜ ์˜คํ”„์…‹์œผ๋กœ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, collision ํ˜•์ƒ์„ ๋‹ค์‹œ ์‚ดํŽด๋ณด์„ธ์š”.

<collision>
  <origin xyz="0 0 -0.15" rpy="0 0 0"/>
  <geometry>
    <box size="0.70 0.30 0.01"/>
  </geometry>
</collision>
 

์œ„์˜ ์ฝ”๋“œ๊ฐ€ ์˜๋ฏธํ•˜๋Š” ๋ฐ”๋Š” ๋กœ๋ด‡์˜ ๊ธฐ๋ณธ ์ถฉ๋Œ ํ˜•์ƒ์ด ๋‘๊ป˜๊ฐ€ 0.1๋ฏธํ„ฐ์ธ ํ๋ธŒ๋ผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ๋ธŒ์˜ ์งˆ๋Ÿ‰ ์ค‘์‹ฌ์€ base_link ํฌ์ฆˆ์—์„œ 0.15m ์•„๋ž˜์— ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  base_link๋Š” base_footprint๋ณด๋‹ค 0.2m ์œ„์— ์œ„์น˜ํ•˜๋ฏ€๋กœ ์ถฉ๋Œ ํ˜•์ƒ์˜ ์งˆ๋Ÿ‰ ์ค‘์‹ฌ์€ ๊ธฐ๋ณธ ๋ฐœ์ž๊ตญ๋ณด๋‹ค 0.05m(0.20 – 0.15) ์œ„์— ์œ„์น˜ํ•ฉ๋‹ˆ๋‹ค.

์•„๋ž˜ ์ด ์„น์…˜์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋“ฏ์ด visual geometry์€ base_link ์›์ ์—์„œ 0.10๋ฏธํ„ฐ ๋’ค์— ์œ„์น˜ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ base_link ์ขŒํ‘œ ํ”„๋ ˆ์ž„์„ ๊ธฐ์ค€์œผ๋กœ x ๋ฐ z ์ถ•์„ ์ค‘์‹ฌ์œผ๋กœ 90๋„(์˜ˆ: pi/2) ํšŒ์ „ํ•ฉ๋‹ˆ๋‹ค.

<visual>
  <origin xyz="-0.10 0 0" rpy="${pi/2} 0 ${pi/2}"/>
  <geometry>
    <mesh filename="file://$(find my_robot)/meshes/my_robot/robot_base.stl" />
  </geometry>
  <material name="White">
    <color rgba="${255/255} ${255/255} ${255/255} 1.0"/>
  </material>
</visual>
 

์š”์•ฝํ•˜์ž๋ฉด, URDF ํŒŒ์ผ์—์„œ ์ขŒํ‘œ๊ณ„๋ฅผ ์ •์˜ํ•˜๊ธฐ ์œ„ํ•œ ์ฃผ์š” ์ž‘์—…์€ <joint>…<origin></origin></joint> ํƒœ๊ทธ์ž…๋‹ˆ๋‹ค. ๋งํฌ ์ •์˜ ๋‚ด์˜ <origin></origin> ํƒญ์€ visual, collision, and inertial ํ˜•์ƒ์„ ์•ฝ๊ฐ„ ์กฐ์ •/์˜คํ”„์…‹ํ•˜๋Š” ๋ฐ์—๋งŒ ์‚ฌ์šฉ ๋ฉ๋‹ˆ๋‹ค .

Link & Joint: SDF

์ด์ œ SDF ํ˜•์‹์œผ๋กœ ์ •์˜๋œ ๋™์ผํ•œ ๋กœ๋ด‡ ๋ฒ ์ด์Šค๋ฅผ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

<?xml version="1.0" ?>
<sdf version="1.6">
  <model name="my_robot"> 
  <static>false</static>

  <!-- ****************** ROBOT BASE FOOTPRINT ***************************  -->
  <link name="base_footprint"/>

  <!-- ********************** ROBOT BASE *********************************  -->
  <link name="base_link">
    <!-- The pose below is always the global pose with respect to the
    origin (i.e. base_footprint) of the robot model -->
    <pose>0 0 0.2 0 0 0</pose>
    <collision name="base_link_collision">
      <!-- The pose below is the local pose with respect to this link -->     
      <pose>0 0 -0.15 0 0 0</pose>
      <geometry>
        <box>
          <size>0.7 0.3 0.1</size>
        </box>
      </geometry>
    </collision>

    <visual name="base_link_visual">
      <pose>-0.10 0 0 1.5708 0 1.5708</pose>
      <geometry>
        <mesh>
          <uri>model://my_robot/meshes/robot_base.stl</uri>
          <scale>1.0 1.0 1.0</scale>
        </mesh>
      </geometry>
      <material>
        <ambient>1.0 1.0 1.0 1.0</ambient>
        <diffuse>1.0 1.0 1.0 1.0</diffuse>
        <specular>0.0 0.0 0.0 1.0</specular>
        <emissive>0.0 0.0 0.0 1.0</emissive>
      </material>
    </visual>
  </link>
  <!-- ************************ JOINTS ***********************************  -->
  <!-- Pose of the joint is the same as the child link frame -->
  <joint name="base_joint" type="fixed">
    <parent>base_footprint</parent>
    <child>base_link</child>
    <pose>0 0 0 0 0 0</pose>
  </joint>
  </model>
</sdf>
 

base_link์˜ ํฌ์ฆˆ๊ฐ€ <link> <pose></pose> …</link> ํƒœ๊ทธ ๋ฐ”๋กœ ๋‚ด๋ถ€์— ์„ค์ •๋˜์–ด ์žˆ๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋กœ๋ด‡ ๋‚ด๋ถ€์˜ ๋งํฌ๊ฐ€ ๋ฌด์—‡์ด๋“  ๊ด€๊ณ„์—†์ด ์ด ํฌ์ฆˆ๋Š” ๋ชจ๋ธ์˜ ์›์ (์˜ˆ: ๋ชจ๋ฐ”์ผ ๋กœ๋ด‡์˜ ๊ฒฝ์šฐ base_footprint )์„ ๊ธฐ์ค€์œผ๋กœ ํ•ญ์ƒ ์ „์—ญ ํฌ์ฆˆ์ž…๋‹ˆ๋‹ค.

์ถฉ๋Œ ๋ฐ ์‹œ๊ฐ์  ๊ธฐํ•˜ํ•™ ํƒœ๊ทธ ๋‚ด๋ถ€์˜ ํฌ์ฆˆ๋Š” URDF ํŒŒ์ผ์˜ ์ถฉ๋Œ ๋ฐ ์‹œ๊ฐ์  ๊ธฐํ•˜ํ•™ ์ •์˜ ๋‚ด๋ถ€์˜ <origin></origin> ํƒœ๊ทธ์™€ ์ •ํ™•ํžˆ ๋™์ผํ•˜๊ฒŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ํฌ์ฆˆ๋Š” ํ•ด๋‹น ํŠน์ • ๋งํฌ์˜ ํฌ์ฆˆ์— ๋Œ€ํ•œ ์˜คํ”„์…‹์ž…๋‹ˆ๋‹ค.

ํ•˜์œ„ ๋งํฌ์˜ ํฌ์ฆˆ์—์„œ ์˜คํ”„์…‹๋œ <joint></joint> ํƒœ๊ทธ ๋‚ด๋ถ€์˜ ํฌ์ฆˆ์ž…๋‹ˆ๋‹ค . ํ•˜์œ„ ๋งํฌ์˜ ํฌ์ฆˆ๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ๋งํฌ ์ •์˜ ๋‚ด๋ถ€(์˜ˆ: ์ดˆ๊ธฐ <pose></pose> ํƒœ๊ทธ ๋‚ด๋ถ€)์— ์„ค์ •๋˜๋ฏ€๋กœ ๋กœ๋ด‡ ๋ชจ๋ธ์˜ ๋ชจ๋“  ๊ด€์ ˆ์— ๋Œ€ํ•ด ๊ฑฐ์˜ ํ•ญ์ƒ ์ด ๊ฐ’์„ ๋ชจ๋‘ 0์œผ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

<link name="base_link">
   <!-- The pose below is always the global pose with respect to the
   origin (i.e. base_footprint) of the robot model -->
   <pose>0 0 0.2 0 0 0</pose>
 

๋”ฐ๋ผ์„œ ์š”์•ฝํ•˜๋ฉด SDF ํŒŒ์ผ์—์„œ ์ขŒํ‘œ ํ”„๋ ˆ์ž„์„ ์ •์˜ํ•˜๊ธฐ ์œ„ํ•œ ์ฃผ์š” ์ž‘์—…์€ <joint> …<origin></origin></joint>  ์ด ์•„๋‹Œ <link><pose></pose>…</link> ํƒœ๊ทธ์ž…๋‹ˆ๋‹ค. SDF ํŒŒ์ผ์˜ ๋งํฌ๋ณ„ ์‹œ๊ฐ์ , ์ถฉ๋Œ ๋ฐ ๊ด€์„ฑ ํฌ์ฆˆ ์กฐ์ •์€ <origin></origin> ํƒœ๊ทธ ๊ฐ€ ์•„๋‹Œ <pose></pose> ํƒœ๊ทธ ๋‚ด๋ถ€์—์„œ ์ •์˜๋ฉ๋‹ˆ๋‹ค.

๋์œผ๋กœ..

๋งํฌ์™€ ์กฐ์ธํŠธ ์กฐํ•ฉ์œผ๋กœ ํ•„์š”ํ•œ ๋กœ๋ด‡๊ตฌ์„ฑ์„ ์ž‘์„ฑํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์ตํžˆ ์•Œ๋ ค์ง„ ํ˜•ํƒœ์˜ ๋กœ๋ด‡์€ ๋Œ€๋ถ€๋ถ„ ์ฐธ์กฐํ• ๋งŒํ•œ ํ”„๋กœ์ ํŠธ๋“ค์ด ์žˆ์œผ๋‹ˆ ์ฐธ๊ณ ํ•˜๋„๋ก ํ•ฉ์‹œ๋‹ค.

  • http://wiki.ros.org/urdf/Examples

์ฐธ๊ณ 

  • http://wiki.ros.org/urdf
  • http://wiki.ros.org/tf/Tutorials
  • http://wiki.ros.org/urdf/XML/model
  • http://wiki.ros.org/urdf/XML/link
  • http://wiki.ros.org/urdf/XML/joint
  • [Blog] URDF vs. SDF – Link Pose, Joint Pose, Visual & Collision: https://automaticaddison.com/urdf-vs-sdf-link-pose-joint-pose-visual-collision/
  • [Blog] ROS URDF ์ž‘์„ฑํ•˜๊ธฐ: https://medium.com/newworld-kim/ros-urdf-b6979bfa31aa 
๋ฐ˜์‘ํ˜•
์ €์ž‘์žํ‘œ์‹œ ๋น„์˜๋ฆฌ ๋ณ€๊ฒฝ๊ธˆ์ง€ (์ƒˆ์ฐฝ์—ด๋ฆผ)

'Study: Robotics(Robot) > Robot: ROS(Robot Operating Sytem)' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[ROS] gazebo clearpath jackal ๋ชจ๋ฐ”์ผ ๋กœ๋ด‡ ์‚ฌ์šฉํ•˜๊ธฐ(velodyne vlp16 3d lidar)  (0) 2023.11.13
[ROS] apt ์„ค์น˜ํ•œ ํŒจํ‚ค์ง€์™€ buildํ•œ ํŒจํ‚ค์ง€(catkin, colcon) ์ค‘ ์–ด๋–ค ๊ฒƒ์„ ์‚ฌ์šฉ?  (0) 2023.11.10
[ROS] ROS TF ์ขŒํ‘œ๊ณ„ ๋ฐ ๋ณ€ํ™˜  (0) 2023.10.26
[ROS] ROS rosrun ์‹คํ–‰ํŒŒ์ผ ๋งŒ๋“ค๊ธฐ(python, cpp)  (0) 2023.10.12
[ROS] ROS Docker Official Image, Docker Compose ํŒŒ์ผ  (0) 2023.05.03
    'Study: Robotics(Robot)/Robot: ROS(Robot Operating Sytem)' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • [ROS] gazebo clearpath jackal ๋ชจ๋ฐ”์ผ ๋กœ๋ด‡ ์‚ฌ์šฉํ•˜๊ธฐ(velodyne vlp16 3d lidar)
    • [ROS] apt ์„ค์น˜ํ•œ ํŒจํ‚ค์ง€์™€ buildํ•œ ํŒจํ‚ค์ง€(catkin, colcon) ์ค‘ ์–ด๋–ค ๊ฒƒ์„ ์‚ฌ์šฉ?
    • [ROS] ROS TF ์ขŒํ‘œ๊ณ„ ๋ฐ ๋ณ€ํ™˜
    • [ROS] ROS rosrun ์‹คํ–‰ํŒŒ์ผ ๋งŒ๋“ค๊ธฐ(python, cpp)
    DrawingProcess
    DrawingProcess
    ๊ณผ์ •์„ ๊ทธ๋ฆฌ์ž!

    ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”