[ROS] ๋กœ๋ด‡ ๋ชจ๋ธ์„ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•œ XML, URDF์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž.

2022. 7. 6. 13:28ยท๐Ÿ’ป Language/ROS : ๋กœ๋ด‡์‹œ์Šคํ…œ
728x90
728x90

Robotics ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ Robot Operating System(ROS)์—์„œ ๋กœ๋ด‡ ๋ชจ๋ธ์„ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” URDF๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

 

 

URDF (Unified Robot Description Format)

  • ๋กœ๋ด‡ ๋ชจ๋ธ์„ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•œ XML ํŒŒ์ผ
  • ๋กœ๋ด‡, ์„ผ์„œ, ์ž‘์—… ํ™˜๊ฒฝ์„ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Œ
  • ๋งํฌ๋“ค์ด ํŠธ๋ฆฌ์™€ ๊ฐ™์€ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Œ
  • ๋งํฌ ๊ฐ„ ์กฐ์ธํŠธ๋ฅผ ํ†ตํ•ด ์—ฐ๊ฒฐ๋จ

* ๋กœ๋ณดํ‹ฑ์Šค์—์„œ ๋กœ๋ด‡์˜ ํŒ”์€ ๋งํฌ, ๋กœ๋ด‡์˜ ๊ด€์ ˆ์€ ์กฐ์ธํŠธ๋ผ๊ณ  ํ•œ๋‹ค.

 

 

URDF๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ณณ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

  1. Rviz: ROS์—์„œ ๋กœ๋ด‡์˜ ์ƒํƒœ๋ฅผ ์‹œ๊ฐํ™”ํ•˜๋Š” ํˆด
  2. MoveIt!: ROS ๊ธฐ๋ฐ˜์˜ motion planning framework
  3. Simulator (V-Rep, Gazebo, mujoco, etc)
  4. Rigid multi-body dynamics Library (RBDL, Pinocchio, etc)

์œ„ 4๊ฐ€์ง€ ์ค‘ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ๊ณณ์€ ์—ญ์‹œ Rviz์™€ Simulator์˜ ํ•œ ๋ถ„๋ฅ˜์ธ Gazebo์ผ ๊ฒƒ์ด๋‹ค. '.urdf'์˜ ํ™•์žฅ์ž๋ฅผ ๊ฐ€์ง€๋Š” URDF ํŒŒ์ผ์„ ๋งŒ๋“ค๋ฉด ๋‹ค์–‘ํ•œ ๋กœ๋ณดํ‹ฑ์Šค ํ™˜๊ฒฝ์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

๊ทธ๋ ‡๋‹ค๋ฉด URDF ํŒŒ์ผ์€ ์–ด๋–ป๊ฒŒ ์ž‘์„ฑํ• ๊นŒ? ๊ธฐ๋ณธ ๊ตฌ์กฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

<!-- 1. ๋ชจ๋ธ ์ด๋ฆ„ ์„ ์–ธ (์ž์œ ๋กญ๊ฒŒ) -->
<robot name="Example_manipulator_1R">
    <!-- 2. ๋งํฌ ์„ ์–ธ (Joint1 ๊ธฐ์ค€์—์„œ parent link) -->
    <link name="Link 1">
        <!-- 3. ์„ ์–ธ๋œ ๋งํฌ ์ •๋ณด ์ž…๋ ฅ (inertia ์ •๋ณด) -->
        <inertial>
            <origin xyz="0 0.5 0.5" rpy="0 0 0"/>
            <mass "3.9"/>
            <inertia ixx="0" ixy="0" ixz="0" iyy="0" iyz="0" izz="0" />
        </inertial>
        
        <!-- 4. ์‹œ๊ฐํ™” ์ •๋ณด ์ž…๋ ฅ (๋งํฌ์˜ visual ๋ชจ๋ธ) -->
        <visual>
            <geometry>
            	<box size="0.6 0.6 0.3"/>
            </geometry>
            <material name=" ">
            	<color rgba="0.5 0.6 0.6 1" />
            </material>
        </visual>
        
        <!-- 5. ์ถฉ๋Œ ๋ชจ๋ธ ์ž…๋ ฅ (๋งํฌ์˜ collision ๋ชจ๋ธ) -->
        <collision>
            <origin xyz="0 0.5 0.5" rpy="0 0 0"/>
            <geometry>
            	<box size="0.6 0.6 0.3"/>
            </geometry>
        </collision>
    </link>
    
    <!-- 6. ์กฐ์ธํŠธ ์„ ์–ธ -->
    <joint name="Joint1" type="revolute">
        <origin xyz="0 0.1 0.1" rpy="0 0 0" />
        <!-- 7. ํ•ด๋‹น ์กฐ์ธํŠธ์˜ parent & child ๋งํฌ ์ง€์ • -->
        <parent link="Link 1" />
        <child link="Link 2" />
        <axis xyz="0 0 1" />
    </joint>
    <!-- 8.์ถ”๊ฐ€ ๋งํฌ ์„ ์–ธ (Joint1 ๊ธฐ์ค€์—์„œ child link)-->
    <link name="Link 2"></link>
</robot>

๋งํฌ(link)๋“ค์€ ํŠธ๋ฆฌ์™€ ๊ฐ™์€ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๋ฉฐ, ๋งํฌ๋“ค๋ผ๋ฆฌ๋Š” ์กฐ์ธํŠธ(joint)๋ฅผ ํ†ตํ•ด ์—ฐ๊ฒฐ๋œ๋‹ค. URDF์—์„œ๋Š” ํ•ญ์ƒ ์ด์ „ ์กฐ์ธํŠธ์˜ ์ขŒํ‘œ์ถ•์„ ๊ธฐ์ค€์œผ๋กœ ๋‹ค์Œ ๋งํฌ ๋˜๋Š” ์กฐ์ธํŠธ์˜ origin ์ขŒํ‘œ๊ฐ€ ์ •ํ•ด์ง„๋‹ค. joint์˜ ์ข…๋ฅ˜๋กœ๋Š” continuous, revolute, prismatic, planar, floating, fixed๊ฐ€ ์žˆ๋‹ค.

 


 

๊ทธ๋Ÿฐ๋ฐ, ์ผ๋ถ€ ๋ชจ๋ธ ํŒŒ์ผ์˜ ํ™•์žฅ์ž๋Š” '.urdf.xacro'๋กœ ์ง€์ •๋œ ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค. ๋ฌด์—‡์ผ๊นŒ?

 

URDF๋Š” ๋ณต์žกํ•œ ๋กœ๋ด‡๋ชจ๋ธ์„ ์ž‘์—…ํ•˜๊ธฐ์— ํšจ์œจ์ ์ด์ง€ ์•Š๋‹ค.

 

๋‹จ์ˆœํ•œ XML ๊ตฌ์กฐ๋กœ ๋˜์–ด์žˆ๋Š” URDF๋Š” ๋ณต์žกํ•œ ๋ชจ๋ธ์„ ๊ตฌํ˜„ํ•  ๋•Œ ์ผ์ผ์ด ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์•ผํ•˜๋Š” ๋ฒˆ๊ฑฐ๋กœ์›€์ด ์กด์žฌํ•œ๋‹ค. ๋•Œ๋ฌธ์— ์ฝ”๋“œ ์žฌ์‚ฌ์šฉ์„ฑ์„ ์ฆ๋Œ€์‹œํ‚จ XACRO ํ˜•์‹์ด ์กด์žฌํ•˜๋ฉฐ, XACRO๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ณต์žกํ•œ ๋ชจ๋ธ์„ ๋น„๊ต์  ์‰ฝ๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

XACRO

  • URDF์— ๋‹จ์ˆœ์„ฑ, ์ฝ”๋“œ ์žฌ์‚ฌ์šฉ์„ฑ, ๋ชจ๋“ˆํ™”, ํ”„๋กœ๊ทธ๋žจ ๊ฐ€๋Šฅ์„ฑ์„ ์ถ”๊ฐ€์‹œํ‚จ ํŒŒ์ผ ํ˜•์‹
  • ๋ณ€์ˆ˜, ์ƒ์ˆ˜, ์ˆ˜ํ•™ ํ‘œํ˜„, ์กฐ๊ฑด๋ฌธ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ
  • ๋ณดํ†ต '.launch' ํŒŒ์ผ์—์„œ XACRO ํŒŒ์ผ์„ ๋ถˆ๋Ÿฌ URDF ํŒŒ์ผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ณผ์ •์„ ๊ฑฐ์ณ ์‚ฌ์šฉ
  • XACRO Wiki
728x90
320x100
์ €์ž‘์žํ‘œ์‹œ

'๐Ÿ’ป Language > ROS : ๋กœ๋ด‡์‹œ์Šคํ…œ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Ubuntu+ROS2] LG CLOiSim Simulator ์„ค์น˜ ๋ฐ ๊ตฌ๋™  (0) 2022.07.26
[ROS2] Ubuntu 20.04 Focal - ROS2 Foxy ์„ค์น˜ ๋ฐ ๊ตฌ๋™  (0) 2022.07.25
[ROS] Gazebo ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ํ™˜๊ฒฝ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž.  (0) 2022.07.08
[ROS] Python์œผ๋กœ ๊ฐ„๋‹จํ•œ Publisher & Subscriber ๋งŒ๋“ค๊ธฐ  (0) 2022.07.04
[ROS] ROS๋ž€ ๋ฌด์—‡์ธ๊ฐ€? (Robotics)  (0) 2022.07.04
'๐Ÿ’ป Language/ROS : ๋กœ๋ด‡์‹œ์Šคํ…œ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [ROS2] Ubuntu 20.04 Focal - ROS2 Foxy ์„ค์น˜ ๋ฐ ๊ตฌ๋™
  • [ROS] Gazebo ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ํ™˜๊ฒฝ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž.
  • [ROS] Python์œผ๋กœ ๊ฐ„๋‹จํ•œ Publisher & Subscriber ๋งŒ๋“ค๊ธฐ
  • [ROS] ROS๋ž€ ๋ฌด์—‡์ธ๊ฐ€? (Robotics)
mxnxeonx
mxnxeonx
"์•„, ์ด๊ฑฐ ๋ญ์˜€๋”๋ผ"๋ฅผ ํ•˜์ง€ ์•Š๊ธฐ์œ„ํ•œ ์ผ๊ธฐ์žฅ.
  • mxnxeonx
    MJ's Development Diary
    mxnxeonx
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (148)
      • ๐Ÿ’ป Language (41)
        • Java : ์ž๋ฐ” (17)
        • Python : ํŒŒ์ด์ฌ (9)
        • ROS : ๋กœ๋ด‡์‹œ์Šคํ…œ (9)
        • Android : ์•ˆ๋“œ๋กœ์ด๋“œ (4)
        • JavaScript : ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ (1)
      • ๐ŸŒ Environment (17)
        • IDE : ํ†ตํ•ฉ๊ฐœ๋ฐœํ™˜๊ฒฝ (7)
        • Virtual : ๊ฐ€์ƒํ™˜๊ฒฝ (10)
      • โš™ Framework (12)
        • Vue-๋ทฐ (3)
        • Spring-์Šคํ”„๋ง (7)
      • ๐Ÿ’พ DataBase (18)
      • ๐ŸŒŒ OS (35)
        • Linux-๋ฆฌ๋ˆ…์Šค (35)
      • ๐Ÿ’ฌ CI · CD (7)
        • Git : ๊นƒ (7)
      • ๐Ÿ“ƒ ETC (3)
      • ๐Ÿค– AI (3)
  • ๋งํฌ

    • GitHub
  • ์ธ๊ธฐ ๊ธ€

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

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
mxnxeonx
[ROS] ๋กœ๋ด‡ ๋ชจ๋ธ์„ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•œ XML, URDF์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž.
์ƒ๋‹จ์œผ๋กœ

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