ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • What is ROS2?
    ROS2&MQTT 2025. 3. 22. 13:31
    ๋ถ€๊ฐ€์„ค๋ช…์€ ํŽ˜์ด์ง€ ์ตœํ•˜๋‹จ์— ์ •๋ฆฌํ•ด๋‘์—ˆ์Šต๋‹ˆ๋‹ค (*ํ‘œ์‹œ)

    [๊ธฐ๋ณธ๊ฐœ๋…]

    ROS2 (Robot Operating System 2)๋Š” ๋กœ๋ด‡ ๊ฐœ๋ฐœ์„ ์œ„ํ•œ ์˜คํ”ˆ์†Œ์Šค ํ”„๋ ˆ์ž„์›Œํฌ*์ด์ž ๋ฏธ๋“ค์›จ์–ด*์ด๋‹ค.
    ๋ง ๊ทธ๋Œ€๋กœ "์šด์˜์ฒด์ œ(OS)"์ฒ˜๋Ÿผ, ๋กœ๋ด‡์„ ๊ตฌ์„ฑํ•˜๋Š” ์—ฌ๋Ÿฌ ๊ธฐ๋Šฅ(์„ผ์„œ, ๋ชจํ„ฐ, ์ธ์‹ ๋“ฑ)์„ ๋ชจ๋“ˆํ™”*ํ•˜๊ณ , ์ด๋“ค์ด ํ†ต์‹ ํ•˜๊ณ  ํ˜‘๋ ฅํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค.

    [์ฃผ์š” ๊ตฌ์„ฑ ์š”์†Œ]

    ROS2๋Š” ์•„๋ž˜์™€ ๊ฐ™์€ ํ•ต์‹ฌ ๊ตฌ์„ฑ ์š”์†Œ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค.

    ๐Ÿ“Œ  Node

    • ํ•˜๋‚˜์˜ ๋…๋ฆฝ์ ์ธ ์‹คํ–‰ ๋‹จ์œ„ (ํ”„๋กœ์„ธ์Šค)
    • ์˜ˆ: ์นด๋ฉ”๋ผ ๋…ธ๋“œ, ๋ชจํ„ฐ ์ œ์–ด ๋…ธ๋“œ

    ๐Ÿ“Œ  Topic

    • Pub/Sub ๊ตฌ์กฐ*์˜ ๋น„๋™๊ธฐ* ํ†ต์‹  ์ˆ˜๋‹จ
    • ์˜ˆ: ์นด๋ฉ”๋ผ ๋…ธ๋“œ๊ฐ€ ์ด๋ฏธ์ง€ ๋ฐ์ดํ„ฐ๋ฅผ publish → ์ธ์‹ ๋…ธ๋“œ๊ฐ€ subscribe

    ๐Ÿ“Œ  Service

    • ์š”์ฒญ(request)๊ณผ ์‘๋‹ต(response)์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ๋™๊ธฐ์‹* ํ†ต์‹ 
    • ์˜ˆ: ํ˜„์žฌ ์œ„์น˜๋ฅผ ์š”์ฒญํ•˜๊ณ  ์‘๋‹ต ๋ฐ›๊ธฐ

    ๐Ÿ“Œ  Action

    • ์žฅ์‹œ๊ฐ„ ๊ฑธ๋ฆฌ๋Š” ์ž‘์—…์„ ์œ„ํ•œ ํ†ต์‹  ๋ฐฉ์‹ (์š”์ฒญ → ์ง„ํ–‰ ์ƒํ™ฉ → ์™„๋ฃŒ ์—ฌ๋ถ€ ํ”ผ๋“œ๋ฐฑ)

    โœ”๏ธ ์™œ ํ•„์š”ํ•œ๊ฐ€?

    • ROS2์˜ Service๋Š” ์š”์ฒญ-์‘๋‹ต ๋ฐฉ์‹์ด์ง€๋งŒ, ์š”์ฒญํ•œ ๋™์•ˆ ์‘๋‹ต์ด ์˜ฌ ๋•Œ๊นŒ์ง€ ๋Œ€๊ธฐํ•ด์•ผ ํ•œ๋‹ค.
    • ๊ทธ๋Ÿฐ๋ฐ ์–ด๋–ค ์ž‘์—…์€ ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๊ฑฐ๋‚˜ ์ค‘๊ฐ„์— ์ทจ์†Œํ•˜๊ณ  ์‹ถ์„ ์ˆ˜๋„ ์žˆ์Œ
      • ์˜ˆ: ๋กœ๋ด‡ ํŒ”์ด ๋ชฉํ‘œ ์œ„์น˜๊นŒ์ง€ ์ฒœ์ฒœํžˆ ์›€์ง์ด๋Š” ์ž‘์—…
      • ์˜ˆ: ์ž์œจ์ฃผํ–‰์ฐจ๊ฐ€ ๋ชฉ์ ์ง€๊นŒ์ง€ ์ด๋™ํ•˜๋Š” ๊ฒฝ๋กœ ์ถ”์ 

    โœ”๏ธ Action์˜ ๊ตฌ์กฐ

    1. Goal ์š”์ฒญ: ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ž‘์—… ์š”์ฒญ์„ ๋ณด๋ƒ„
    2. Feedback ์ „์†ก: ์„œ๋ฒ„๊ฐ€ ์ž‘์—… ์ง„ํ–‰ ์ƒํ™ฉ์„ ๊ณ„์† ์ „๋‹ฌ
    3. Result ์‘๋‹ต: ์ž‘์—…์ด ๋๋‚˜๋ฉด ์ตœ์ข… ๊ฒฐ๊ณผ ๋ฐ˜ํ™˜
    4. Cancel ์š”์ฒญ ๊ฐ€๋Šฅ: ์ค‘๊ฐ„์— ์ž‘์—… ์ทจ์†Œ๋„ ๊ฐ€๋Šฅ

    ์‰ฝ๊ฒŒ ๋งํ•˜๋ฉด?

    “๋ฐฐ๋‹ฌ ์š”์ฒญ”์„ ๋„ฃ์œผ๋ฉด,
    ์ค‘๊ฐ„์— “๋ฐฐ๋‹ฌ ์ค€๋น„ ์ค‘”, “์ด๋™ ์ค‘” ๊ฐ™์€ ์ƒํƒœ๋ฅผ ์•Œ๋ ค์ฃผ๊ณ ,
    ์ตœ์ข…์ ์œผ๋กœ “๋„์ฐฉ ์™„๋ฃŒ”๋ผ๋Š” ๊ฒฐ๊ณผ๋ฅผ ์ฃผ๋Š” ๊ตฌ์กฐ์ด๋‹ค

    ๐Ÿ“Œ  Parameter

    • ๋…ธ๋“œ์˜ ๋™์ž‘ ์„ค์ •๊ฐ’ (๋ณ€๊ฒฝ ๊ฐ€๋Šฅ)

    โœ”๏ธ ์™œ ํ•„์š”ํ•œ๊ฐ€?

    • ์–ด๋–ค ๋…ธ๋“œ๋Š” ๋™์ž‘ ์กฐ๊ฑด์ด๋‚˜ ํ™˜๊ฒฝ๊ฐ’์„ ์กฐ์ •ํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค์ •๊ฐ’(ํŒŒ๋ผ๋ฏธํ„ฐ)์„ ๋ฐ›์Œ
    • ์˜ˆ๋ฅผ ๋“ค์–ด, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฐ’์„ ์™ธ๋ถ€์—์„œ ์„ค์ • ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๊ณ  ์‹ถ์„ ๋•Œ:
      • ๋กœ๋ด‡์˜ ์ตœ๋Œ€ ์†๋„
      • ์„ผ์„œ ์ƒ˜ํ”Œ๋ง ์ฃผ๊ธฐ
      • ํŠน์ • ๋™์ž‘์„ ์ผœ๊ณ  ๋„๋Š” ํ”Œ๋ž˜๊ทธ

    โœ”๏ธ ์ฃผ์š” ํŠน์ง•

    • ๋…ธ๋“œ ์‹คํ–‰ ์ „์— ์„ค์ •ํ•  ์ˆ˜๋„ ์žˆ๊ณ , ์‹คํ–‰ ์ค‘์—๋„ ๋™์ ์œผ๋กœ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ
    • ros2 param ๋ช…๋ น์–ด๋กœ ์™ธ๋ถ€์—์„œ ํ™•์ธ ๋ฐ ์ˆ˜์ • ๊ฐ€๋Šฅ
    ros2 param list                # ํ˜„์žฌ ๋…ธ๋“œ์˜ ํŒŒ๋ผ๋ฏธํ„ฐ ๋ชฉ๋ก
    ros2 param get /my_node speed  # ํŠน์ • ํŒŒ๋ผ๋ฏธํ„ฐ ๊ฐ’ ์กฐํšŒ
    ros2 param set /my_node speed 1.2  # ํŒŒ๋ผ๋ฏธํ„ฐ ๊ฐ’ ์„ค์ •

    ๐Ÿ“Œ  Launch

    • ๋…ธ๋“œ๋“ค์„ ํ•œ๋ฒˆ์— ์‹คํ–‰ํ•˜๋Š” ์ž๋™ํ™” ๋„๊ตฌ

    โœ”๏ธ ์™œ ํ•„์š”ํ•œ๊ฐ€?

    • ์‹ค์ œ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ๋…ธ๋“œ๊ฐ€ ํ•˜๋‚˜๋งŒ ์žˆ๋Š” ๊ฒฝ์šฐ๋Š” ๊ฑฐ์˜ ์—†์Œ
      • ์นด๋ฉ”๋ผ ๋…ธ๋“œ, ์ธ์‹ ๋…ธ๋“œ, ์ œ์–ด ๋…ธ๋“œ, ์‹œ๊ฐํ™” ๋…ธ๋“œ ๋“ฑ...
    • ์ด๊ฑธ ๋งค๋ฒˆ ํ„ฐ๋ฏธ๋„์—์„œ ํ•˜๋‚˜์”ฉ ์‹คํ–‰ํ•˜๋Š” ๊ฑด ๋น„ํšจ์œจ์ ์ด๋‹ค.
    • ๊ทธ๋ž˜์„œ ํ•„์š”ํ•œ ๊ฒŒ → Launch ์‹œ์Šคํ…œ

    โœ”๏ธ ๊ธฐ๋Šฅ

    • ์—ฌ๋Ÿฌ ๋…ธ๋“œ๋ฅผ ํ•œ๊บผ๋ฒˆ์— ์‹คํ–‰
    • ๋…ธ๋“œ ๊ฐ„ ์˜์กด์„ฑ, ์‹คํ–‰ ์ˆœ์„œ, ํŒŒ๋ผ๋ฏธํ„ฐ ์„ค์ •๋„ ํ•จ๊ป˜ ์ง€์ • ๊ฐ€๋Šฅ
    • ROS2์—์„œ๋Š” Python ์Šคํฌ๋ฆฝํŠธ ๊ธฐ๋ฐ˜์˜ launch ํŒŒ์ผ์„ ์‚ฌ์šฉ
    # ์˜ˆ์‹œ: launch/camera_and_control.launch.py
    from launch import LaunchDescription
    from launch_ros.actions import Node
    
    def generate_launch_description():
        return LaunchDescription([
            Node(package='my_camera_pkg', executable='camera_node', name='cam'),
            Node(package='my_control_pkg', executable='control_node', name='ctrl'),
        ])

    [ROS2์˜ ํ†ต์‹  ๊ตฌ์กฐ]

    ROS2๋Š” DDS(Data Distribution Service)* ๊ธฐ๋ฐ˜์˜ ํ†ต์‹  ๋ฏธ๋“ค์›จ์–ด*๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

    ๐Ÿ“Œ ํŠน์ง•:

    • ๋…ธ๋“œ ๊ฐ„ Peer-to-Peer ํ†ต์‹ *
    • ์ค‘์•™ ๋ธŒ๋กœ์ปค ์—†์ด ์ž๋™ Discovery (๋ฐœ๊ฒฌ) ๊ธฐ๋Šฅ
    • ๋‹ค์–‘ํ•œ QoS ์ •์ฑ…* ์ง€์›
      • ์˜ˆ: ์‹ ๋ขฐ์„ฑ, ์ง€์—ฐ ์‹œ๊ฐ„, ์ง€์†์„ฑ ๋“ฑ ์กฐ์ • ๊ฐ€๋Šฅ
    • UDP, TCP* ๋ชจ๋‘ ์ง€์› → ์œ ์—ฐํ•œ ์‹ค์‹œ๊ฐ„ ํ†ต์‹  ํ™˜๊ฒฝ ๊ตฌ์ถ• ๊ฐ€๋Šฅ

    [์ค‘์•™ ๋ธŒ๋กœ์ปค ์—†์ด ์ž๋™ Discovery (๋ฐœ๊ฒฌ) ๊ธฐ๋Šฅ์ด๋ž€?]

    โœ… 1. ๋จผ์ €, ์ค‘์•™ ๋ธŒ๋กœ์ปค๊ฐ€ ์žˆ๋‹ค๋ฉด? (MQTT ๊ตฌ์กฐ ์˜ˆ์‹œ)

    • MQTT์—์„œ๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ์ฃผ๊ณ ๋ฐ›๊ธฐ ์œ„ํ•ด ๋ธŒ๋กœ์ปค(Broker)๊ฐ€ ๋ฐ˜๋“œ์‹œ ํ•„์š”ํ•˜๋‹ค.
      • ๋ชจ๋“  Publisher์™€ Subscriber๋Š” ๋ธŒ๋กœ์ปค๋ฅผ ๊ฑฐ์ณ์„œ๋งŒ ํ†ต์‹  ๊ฐ€๋Šฅ
    • ์˜ˆ: Mosquitto, EMQX, HiveMQ ๊ฐ™์€ MQTT ๋ธŒ๋กœ์ปค

    ๐Ÿ“Œ ์žฅ์ : ์ค‘์•™์—์„œ ํ†ต์ œ๋ฅผ ์‰ฝ๊ฒŒ ํ•จ
    ๐Ÿ“Œ ๋‹จ์ : ๋ธŒ๋กœ์ปค๊ฐ€ ์ฃฝ์œผ๋ฉด ์ „์ฒด ํ†ต์‹  ๋ถˆ๊ฐ€ (Single Point of Failure)

     

    โœ… 2. ROS2๋Š” ์ค‘์•™ ๋ธŒ๋กœ์ปค๊ฐ€ ์—†๋‹ค!

    • ROS2๋Š” DDS ๊ธฐ๋ฐ˜ Peer-to-Peer ๊ตฌ์กฐ๋ผ์„œ, ๋…ธ๋“œ๋“ค์ด ์„œ๋กœ ์ง์ ‘ ์—ฐ๊ฒฐ๋œ๋‹ค
    • ๊ทธ๋Ÿผ "์„œ๋กœ๋ฅผ ์–ด๋–ป๊ฒŒ ์•Œ์•„๋ด?" → ๋ฐ”๋กœ ์ž๋™ Discovery ๊ธฐ๋Šฅ์ด ๊ทธ๊ฑธ ํ•ด๊ฒฐํ•ด์คŒ.

     

    โœ… 3. ์ž๋™ Discovery ๊ธฐ๋Šฅ์ด๋ž€?

    ROS2 ๋…ธ๋“œ๋“ค์ด ๊ฐ™์€ ๋„คํŠธ์›Œํฌ ์ƒ์— ๋‚˜ํƒ€๋‚˜๊ธฐ๋งŒ ํ•˜๋ฉด,
    ์„œ๋กœ๋ฅผ ์ž๋™์œผ๋กœ ๋ฐœ๊ฒฌํ•˜๊ณ  ์—ฐ๊ฒฐํ•˜๋Š” ๊ธฐ๋Šฅ

    โœ” ์ž‘๋™ ๋ฐฉ์‹ (๊ฐ„๋‹จ ํ๋ฆ„)

    1. ๋…ธ๋“œ A๊ฐ€ ์‹คํ–‰๋จ → “๋‚˜๋Š” ์ด๋Ÿฐ ํ† ํ”ฝ์„ publishํ•  ๊ฑฐ์•ผ!” ๋ผ๊ณ  ๋„คํŠธ์›Œํฌ์— ์•Œ๋ฆผ
    2. ๋…ธ๋“œ B๊ฐ€ ์‹คํ–‰๋จ → “๋‚˜๋Š” ์ด ํ† ํ”ฝ์„ ๊ตฌ๋…ํ•  ๊ฑฐ์•ผ!” ๋ผ๊ณ  ๋งํ•จ
    3. DDS๊ฐ€ ์ž๋™์œผ๋กœ ๋‘ ๋…ธ๋“œ๋ฅผ ์—ฐ๊ฒฐํ•ด์คŒ

    → ๊ฐœ๋ฐœ์ž๋Š” IP ์ฃผ์†Œ๋ฅผ ์ˆ˜๋™์œผ๋กœ ์ง€์ •ํ•˜๊ฑฐ๋‚˜ ๋ธŒ๋กœ์ปค๋ฅผ ๊ตฌ์„ฑํ•  ํ•„์š” ์—†์Œ

     

    โœ… 4. Discovery๊ฐ€ ๊ฐ€๋Šฅํ•œ ์ด์œ : DDS์˜ RTPS ํ”„๋กœํ† ์ฝœ

    • RTPS (Real-Time Publish Subscribe)๋ผ๋Š” ํ‘œ์ค€ ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•ด
      ๋„คํŠธ์›Œํฌ ๋‚ด์—์„œ ์„œ๋กœ์˜ ์กด์žฌ๋ฅผ ๋ธŒ๋กœ๋“œ์บ์ŠคํŠธ* ๋ฐฉ์‹์œผ๋กœ ์•Œ๋ฆผ
    • ๋‚ด๋ถ€์ ์œผ๋กœ๋Š” ๋ฉ€ํ‹ฐ์บ์ŠคํŠธ ํŒจํ‚ท*์„ ์ด์šฉํ•ด "๋‚˜ ์—ฌ๊ธฐ ์žˆ์–ด!"๋ผ๊ณ  ์•Œ๋ฆผ

    โœ… 5. ROS2์˜ Discovery ๊ธฐ๋Šฅ์˜ ์žฅ์ 

    ์žฅ์  ์„ค๋ช…
    ์„ค์ • ๊ฐ„ํŽธ ๋„คํŠธ์›Œํฌ์— ๋…ธ๋“œ๋งŒ ๋„์šฐ๋ฉด ์ž๋™ ์—ฐ๊ฒฐ๋จ
    ํ™•์žฅ์„ฑ ๋›ฐ์–ด๋‚จ ๋…ธ๋“œ ์ˆ˜๊ฐ€ ๋งŽ์•„๋„ ๋ณ„๋„ ์„ค์ • ์—†์ด ์œ ์—ฐํ•˜๊ฒŒ ์—ฐ๊ฒฐ
    ๋ธŒ๋กœ์ปค ์—†์Œ ๋‹จ์ผ ์žฅ์• ์  ์—†์Œ, ์ง„์งœ ๋ถ„์‚ฐ ์‹œ์Šคํ…œ ๊ตฌ์„ฑ ๊ฐ€๋Šฅ
    ๋ฉ€ํ‹ฐ ๋กœ๋ด‡ ์‹œ์Šคํ…œ์— ์ ํ•ฉ ๋™์ ์œผ๋กœ ๋…ธ๋“œ๊ฐ€ ๋ถ™์—ˆ๋‹ค ๋–จ์–ด์กŒ๋‹ค ํ•ด๋„ ์ž๋™ ๊ฐ์ง€

    [ROS2์˜ ํŠน์ง• ์ •๋ฆฌ]

    ๐Ÿ“Œ ์‹ค์‹œ๊ฐ„ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ

    • DDS ๋ฏธ๋“ค์›จ์–ด ๋•๋ถ„์—, ์ œ์–ด/์„ผ์„œ ๋ฐ์ดํ„ฐ์˜ ๋น ๋ฅธ ๋ฐ˜์‘์„ฑ ํ™•๋ณด

    ๐Ÿ“Œ ๋‹ค์–‘ํ•œ OS ์ง€์›

    • Linux๋ฟ๋งŒ ์•„๋‹ˆ๋ผ Windows, macOS, RTOS๊นŒ์ง€ ํ™•์žฅ

    ๐Ÿ“Œ ๋ชจ๋“ˆ์„ฑ, ์žฌ์‚ฌ์šฉ์„ฑ

    • Node ๋‹จ์œ„ ๊ตฌ์„ฑ์œผ๋กœ ๊ธฐ๋Šฅ ๋ถ„๋ฆฌ ๋ฐ ํ…Œ์ŠคํŠธ๊ฐ€ ์šฉ์ด

    ๐Ÿ“Œ ์ž๋™ Discovery ๊ธฐ๋Šฅ

    • ๋…ธ๋“œ๊ฐ€ ์ƒˆ๋กœ ์ƒ๊ธฐ๊ฑฐ๋‚˜ ์‚ฌ๋ผ์ ธ๋„ ์ž๋™์œผ๋กœ ์ธ์‹ํ•จ (์„ค์ • ํ•„์š” ์—†์Œ)

    ๐Ÿ“Œ QoS ์„ค์ • ์ง€์›

    • ํ†ต์‹  ์‹ ๋ขฐ์„ฑ, ์ „์†ก ๋นˆ๋„, ๋ณด์กด ์—ฌ๋ถ€ ๋“ฑ ์ƒํ™ฉ์— ๋งž๊ฒŒ ์กฐ์ ˆ ๊ฐ€๋Šฅ

    ๐Ÿ“Œ ๋‹ค์–‘ํ•œ Tool ์ง€์›


    [ROS2์˜ ์ฃผ์š” ํ™œ์šฉ ๋ถ„์•ผ]

    • ์ž์œจ์ฃผํ–‰ ๋กœ๋ด‡
    • ๋“œ๋ก  ๋ฐ UAV
    • ์Šค๋งˆํŠธ ํŒฉํ† ๋ฆฌ ๋ฐ ์‚ฐ์—… ์ž๋™ํ™”
    • ์˜๋ฃŒ์šฉ ๋กœ๋ด‡

    ROS2๋Š” ๋‹ค์–‘ํ•œ ๋กœ๋ด‡ ์‹œ์Šคํ…œ์„ ํšจ์œจ์ ์œผ๋กœ ๊ฐœ๋ฐœํ•˜๊ณ  ํ†ต์‹ ํ•˜๊ฒŒ ๋•๋Š” ์˜คํ”ˆ์†Œ์Šค ํ”„๋ ˆ์ž„์›Œํฌ์ด๋‹ค. Pub/Sub, Service, Action ๋“ฑ์˜ ๋ฉ”์‹œ์ง€ ์ „๋‹ฌ ๊ตฌ์กฐ๋ฅผ ๊ฐ–๊ณ  ์žˆ์œผ๋ฉฐ, DDS ๊ธฐ๋ฐ˜์˜ ๋ฏธ๋“ค์›จ์–ด๋ฅผ ํ†ตํ•ด ์‹ค์‹œ๊ฐ„ ํ†ต์‹ ๊ณผ ๋‹ค์–‘ํ•œ QoS ์„ค์ •์ด ๊ฐ€๋Šฅํ•˜๋ฉฐ ํ˜„์žฌ ์ž์œจ์ฃผํ–‰, ๋“œ๋ก , ์‚ฐ์—…๋กœ๋ด‡ ๋“ฑ์—์„œ ๊ด‘๋ฒ”์œ„ํ•˜๊ฒŒ ํ™œ์šฉ๋˜๊ณ  ์žˆ๋‹ค.

     


    [๋ถ€๊ฐ€์„ค๋ช…]

    1. ์˜คํ”ˆ์†Œ์Šค ํ”„๋ ˆ์ž„์›Œํฌ
    2. ๋ชจ๋“ˆํ™”
    3. ๋ฏธ๋“ค์›จ์–ด
    4. ROS2๊ตฌ์กฐ&๋ฏธ๋“ค์›จ์–ด
    5. Peer-to-Peer(P2P) ํ†ต์‹ 
    6. QoS ์„ค์ •(Quality of  Service)
    7. ๋ฉ€ํ‹ฐ์บ์ŠคํŠธ(Multicast)
    8. Pub/Sub ๊ตฌ์กฐ(Publish/Subscribe)
    9. ๋™๊ธฐ(Synchronous) / ๋น„๋™๊ธฐ(Asynchronous) ํ†ต์‹ 
    10. UDP/TCP
    11. Client Library
    12. ๋ธŒ๋กœ๋“œ์บ์ŠคํŠธ ๋ฐฉ์‹
    13. ํŒจํ‚ท

    [1. ์˜คํ”ˆ์†Œ์Šค ํ”„๋ ˆ์ž„์›Œํฌ (Open-source Framework)]

    โœ”๏ธ ๊ฐœ๋…

    • ์˜คํ”ˆ์†Œ์Šค(Open-source): ์†Œ์Šค ์ฝ”๋“œ๊ฐ€ ๊ณต๊ฐœ๋˜์–ด ๋ˆ„๊ตฌ๋‚˜ ์ž์œ ๋กญ๊ฒŒ ์‚ฌ์šฉ, ์ˆ˜์ •, ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ๋Š” ์†Œํ”„ํŠธ์›จ์–ด
    • ํ”„๋ ˆ์ž„์›Œํฌ(Framework): ๊ฐœ๋ฐœ์ž๊ฐ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋น ๋ฅด๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋„๋ก ๊ธฐ๋ณธ ๊ตฌ์กฐ์™€ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ๋ผˆ๋Œ€

    ๐Ÿ”ง ์˜ˆ์‹œ (ROS2 ๊ธฐ์ค€)

    • ROS2๋Š” ๋กœ๋ด‡ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ํ”„๋ ˆ์ž„์›Œํฌ์ž„
      • ์ด๋ฏธ ๊ตฌํ˜„๋œ ์ฝ”๋“œ ๊ตฌ์กฐ(๋…ธ๋“œ, ํ† ํ”ฝ, ์„œ๋น„์Šค ๋“ฑ)๋ฅผ ํ™œ์šฉํ•ด์„œ ์‰ฝ๊ฒŒ ๋กœ๋ด‡ ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ ๊ฐ€๋Šฅ
      • ์ง์ ‘ ํ†ต์‹  ์ฝ”๋“œ๋ฅผ ์งœ์ง€ ์•Š์•„๋„ ๋˜๋Š” "๊ธฐ๋ฐ˜ ๋„๊ตฌ"๋ฅผ ์ œ๊ณต

    ๐Ÿง  ์‰ฝ๊ฒŒ ๋งํ•˜๋ฉด?

    “์ง‘ ์ง“๊ธฐ ํ”„๋ ˆ์ž„์›Œํฌ”๊ฐ€ ์žˆ๋‹ค๋ฉด, ๋ผˆ๋Œ€(๊ณจ์กฐ), ์ „๊ธฐ ๋ฐฐ์„ , ์ˆ˜๋„๊ด€์€ ์ด๋ฏธ ๊น”๋ ค ์žˆ์Œ → ๊ฐœ๋ฐœ์ž๋Š” ๊ทธ ์œ„์— ์ง‘์„ ๊พธ๋ฏธ๊ธฐ๋งŒ ํ•˜๋ฉด ๋จ


    [2. ๋ชจ๋“ˆํ™” (Modularization)]

    โœ”๏ธ ๊ฐœ๋…

    • ์‹œ์Šคํ…œ์„ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ž‘๊ณ  ๋…๋ฆฝ์ ์ธ ๊ธฐ๋Šฅ ๋‹จ์œ„(๋ชจ๋“ˆ)๋กœ ๋‚˜๋ˆ„๋Š” ์„ค๊ณ„ ๋ฐฉ์‹
    • ๊ฐ ๋ชจ๋“ˆ์€ ์ž์‹ ์˜ ์—ญํ• ๋งŒ ํ•˜๊ณ , ๋‹ค๋ฅธ ๋ชจ๋“ˆ๊ณผ๋Š” ์ตœ์†Œํ•œ์œผ๋กœ ์—ฐ๊ฒฐ๋จ

    ๐Ÿ”ง ์˜ˆ์‹œ (ROS2 ๊ธฐ์ค€)

    • ROS2์—์„œ ํ•˜๋‚˜์˜ Node๋Š” ํ•˜๋‚˜์˜ ๊ธฐ๋Šฅ์„ ๋‹ด๋‹นํ•˜๋Š” ๋ชจ๋“ˆ์ž„
      • ์˜ˆ: ์„ผ์„œ ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘ ๋…ธ๋“œ, ์นด๋ฉ”๋ผ ๋…ธ๋“œ, ์ œ์–ด ๋…ธ๋“œ ๊ฐ๊ฐ ๋ถ„๋ฆฌ๋จ
      • ์„œ๋กœ Topic์œผ๋กœ๋งŒ ์—ฐ๊ฒฐ๋˜๊ณ , ์ฝ”๋“œ์ƒ์œผ๋กœ๋Š” ๋…๋ฆฝ์ ์ž„

    ๐Ÿง  ์‰ฝ๊ฒŒ ๋งํ•˜๋ฉด?

    ์ปดํ“จํ„ฐ๋ฅผ CPU, ๋ฉ”๋ชจ๋ฆฌ, SSD ๋“ฑ์œผ๋กœ ๋‚˜๋ˆ ์„œ ๋งŒ๋“  ๊ฒƒ์ฒ˜๋Ÿผ, ๋กœ๋ด‡ ์‹œ์Šคํ…œ๋„ "๊ธฐ๋Šฅ๋ณ„๋กœ ๋ถ„๋ฆฌํ•ด์„œ" ๋งŒ๋“ค๋ฉด ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์‰ฌ์›Œ์ง

     


    [3. ๋ฏธ๋“ค์›จ์–ด(Middleware)]

    ๋ฏธ๋“ค์›จ์–ด (Middleware)

    โœ”๏ธ ๊ฐœ๋…

    • ์‹œ์Šคํ…œ์˜ ์„œ๋กœ ๋‹ค๋ฅธ ๊ตฌ์„ฑ ์š”์†Œ(๋…ธ๋“œ, ๋ชจ๋“ˆ) ๊ฐ„์— ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›์„ ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์ฃผ๋Š” ์ค‘๊ฐ„ ๊ณ„์ธต ์†Œํ”„ํŠธ์›จ์–ด
    • ๋„คํŠธ์›Œํฌ ํ†ต์‹ , ๋ฐ์ดํ„ฐ ์ง๋ ฌํ™”/์—ญ์ง๋ ฌํ™”, ์†ก์ˆ˜์‹  ๊ด€๋ฆฌ ๋“ฑ์„ ์ž๋™ ์ฒ˜๋ฆฌ

    ๐Ÿ”ง ์˜ˆ์‹œ (ROS2 ๊ธฐ์ค€)

    • ROS2๋Š” DDS(Data Distribution Service) ๋ผ๋Š” ๋ฏธ๋“ค์›จ์–ด๋ฅผ ์‚ฌ์šฉ
      • ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ TCP/UDP ํ†ต์‹  ์ฝ”๋“œ๋ฅผ ์งœ์ง€ ์•Š์•„๋„ ๋จ
      • ๋…ธ๋“œ ๊ฐ„ ๋ฉ”์‹œ์ง€๋ฅผ ์ž๋™์œผ๋กœ ๋ณด๋‚ด์ฃผ๊ณ  ๋ฐ›์•„์คŒ
      • ์‹ค์‹œ๊ฐ„ ์ฒ˜๋ฆฌ, QoS ์„ค์ •, ์•”ํ˜ธํ™” ๋“ฑ๋„ ์ง€์›

    ๐Ÿง  ์‰ฝ๊ฒŒ ๋งํ•˜๋ฉด?

    ์„œ๋กœ ๋ง์ด ๋‹ค๋ฅธ ๋‘ ์‚ฌ๋žŒ์ด ๋Œ€ํ™”ํ•˜๋ ค๋ฉด ํ†ต์—ญ์‚ฌ๊ฐ€ ํ•„์š”ํ•˜๋“ฏ, ๋ฏธ๋“ค์›จ์–ด๋Š” ์‹œ์Šคํ…œ ์‚ฌ์ด์—์„œ ‘ํ†ต์‹  ํ†ต์—ญ์‚ฌ’ ์—ญํ• ์„ ํ•จ


    [4. ROS2 ๊ตฌ์กฐ & ๋ฏธ๋“ค์›จ์–ด ์„ค๋ช…]

    ์ด ๊ทธ๋ฆผ์€ ROS2์˜ ์†Œํ”„ํŠธ์›จ์–ด ์•„ํ‚คํ…์ฒ˜ ๊ณ„์ธต ๊ตฌ์กฐ๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ๊ทธ๋ฆผ์ด๋‹ค. ์•„๋ž˜์—์„œ๋ถ€ํ„ฐ ์œ„๋กœ ์˜ฌ๋ผ๊ฐ€๋ฉด์„œ ์„ค๋ช…ํ•˜๋ฉด

    ๐Ÿงฑ 1. ์šด์˜์ฒด์ œ ๊ณ„์ธต

    • ๋งจ ์•„๋ž˜์— ์žˆ๋Š” Linux/Windows/Mac/RTOS๋Š” ์šด์˜์ฒด์ œ๋“ค์ด๋‹ค.
    • ROS2๋Š” ๋‹ค์–‘ํ•œ OS์—์„œ ์‹คํ–‰๋  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„๋จ. → ํฌ๋กœ์Šค ํ”Œ๋žซํผ ์ง€์›

    โš™๏ธ 2. DDS ๊ณ„์ธต (๋ฏธ๋“ค์›จ์–ด)

    • ๊ทธ ์œ„์— ์žˆ๋Š” DDS๊ฐ€ ํ•ต์‹ฌ์ด๋‹ค. ๋ฐ”๋กœ ROS2์˜ ๋ฏธ๋“ค์›จ์–ด(Middleware) ์—ญํ• ์„ ๋‹ด๋‹นํ•œ๋‹ค.
    • DDS (Data Distribution Service)๋Š” ๋…ธ๋“œ ๊ฐ„ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๋„คํŠธ์›Œํฌ ํ†ต์‹  ์—”์ง„์ด๋‹ค.
    ๋„คํŠธ์›Œํฌ ํ†ต์‹  ์—”์ง„ : ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›์„ ๋•Œ, ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ์ผ์ผ์ด ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š์•„๋„ ๋˜๋„๋ก ์ž๋™์œผ๋กœ ํ†ต์‹ ์„ ์ฒ˜๋ฆฌํ•ด์ฃผ๋Š” ์†Œํ”„ํŠธ์›จ์–ด ์‹œ์Šคํ…œ

    โœ” ๋ฏธ๋“ค์›จ์–ด๋กœ์„œ DDS์˜ ์—ญํ• :

    • ๋…ธ๋“œ๋“ค์ด ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›์„ ๋•Œ ์ค‘๊ฐ„์—์„œ ๋ฐ์ดํ„ฐ ์†ก์ˆ˜์‹  ๊ด€๋ฆฌ
    • Peer-to-Peer ํ†ต์‹  ๊ตฌ์กฐ (๋ธŒ๋กœ์ปค ์—†์ด ๋™์ž‘)
    • QoS ์„ค์ •, ์‹ค์‹œ๊ฐ„ ํ†ต์‹ , ๋ณด์•ˆ, ๋ฉ€ํ‹ฐ์บ์ŠคํŠธ ๋“ฑ ๊ธฐ๋Šฅ ์ œ๊ณต
    • ๋‹ค์–‘ํ•œ DDS ๊ตฌํ˜„์ฒด ์‚ฌ์šฉ ๊ฐ€๋Šฅ (Fast DDS, Cyclone DDS, RTI Connext ๋“ฑ)

    ๐Ÿ‘‰ ์ฆ‰, ROS2๋Š” ์ง์ ‘ ๋„คํŠธ์›Œํฌ ํ†ต์‹  ์ฝ”๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜์ง€ ์•Š๊ณ , DDS ๋ฏธ๋“ค์›จ์–ด๊ฐ€ ๋Œ€์‹  ๊ทธ๊ฑธ ์ฒ˜๋ฆฌํ•จ

    DDS๋Š” “ํ†ต์‹  ๊ทœ์น™(ํ‘œ์ค€)”์ด๊ณ , ๊ทธ๊ฑธ ์‹ค์ œ๋กœ ๋งŒ๋“  ํ”„๋กœ๊ทธ๋žจ๋“ค์ด '๊ตฌํ˜„์ฒด'์ด๋‹ค.

    ๐Ÿงฉ 3. Abstract DDS Layer & Client Library (ROS2 Core)

    • Abstract DDS Layer: DDS์™€ ์ง์ ‘์ ์œผ๋กœ ๋งž๋ฌผ๋ฆฌ๋Š” ์ค‘๊ฐ„ ๊ณ„์ธต. DDS ๊ตฌํ˜„์ฒด์™€ ROS2 ์‚ฌ์ด์˜ ์ถ”์ƒํ™”* ์—ญํ• ์„ ํ•ด.
    • Client Library: ROS2์˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ธํ„ฐํŽ˜์ด์Šค(API)
      ์˜ˆ: rclcpp(C++), rclpy(Python) ๊ฐ™์€ ํด๋ผ์ด์–ธํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž ์ฝ”๋“œ๋Š” ROS2 ๊ธฐ๋Šฅ์— ์ ‘๊ทผํ•จ

    โž• Intra-process API๋ž€?

    • ๊ฐ™์€ ํ”„๋กœ์„ธ์Šค ๋‚ด์˜ ๋…ธ๋“œ ๊ฐ„ ํ†ต์‹  ์‹œ, ๋„คํŠธ์›Œํฌ๊ฐ€ ์•„๋‹Œ ๋ฉ”๋ชจ๋ฆฌ ๋ณต์‚ฌ ๋ฐฉ์‹์œผ๋กœ ๋” ๋น ๋ฅด๊ฒŒ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๋‚ด๋ถ€ ์ธํ„ฐํŽ˜์ด์Šค์ด๋‹ค.

    [์ถ”์ƒํ™” ์—ญํ• ์ด๋ž€]

    ๐Ÿ“Œ ์ •์˜ 

    ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๊ตฌ์ฒด์ ์ธ ๊ตฌํ˜„(=DDS ๊ตฌํ˜„์ฒด๋“ค)์„
    ํ•˜๋‚˜์˜ ๊ณตํ†ต๋œ ๋ฐฉ์‹์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก
    ์ค‘๊ฐ„์—์„œ ๋ฌถ์–ด์ฃผ๋Š” ์—ญํ• 

     

    ๐Ÿ“Œ ์˜ˆ์‹œ

    ROS2๋Š” ์—ฌ๋Ÿฌ DDS ๊ตฌํ˜„์ฒด๋ฅผ ์ง€์›ํ•œ๋‹ค.
    ๊ทธ๋Ÿฐ๋ฐ, ๊ฐ DDS ๊ตฌํ˜„์ฒด๋Š” ๋‚ด๋ถ€ ํ•จ์ˆ˜ ์ด๋ฆ„, ๊ตฌ์กฐ, ์ฒ˜๋ฆฌ ๋ฐฉ์‹์ด ์ „๋ถ€ ๋‹ค๋ฅด๋‹ค.

    ๋งŒ์•ฝ ROS2๊ฐ€ ์ง์ ‘ DDS ๊ตฌํ˜„์ฒด๋ฅผ ๋‹ค๋ฃจ๋ฉด?
    → ๊ตฌํ˜„์ฒด๋งˆ๋‹ค ๋‹ค๋ฅธ ์ฝ”๋“œ๊ฐ€ ํ•„์š”ํ•จ → ๋ณต์žกํ•˜๊ณ  ์œ ์ง€๋ณด์ˆ˜ ์–ด๋ ต๊ณ  ํ˜ธํ™˜์„ฑ ๋‚ฎ๋‹ค

     

    ๊ทธ๋ž˜์„œ ROS2๋Š” "์ถ”์ƒํ™” ๊ณ„์ธต(Abstract DDS Layer)"์„ ๋‘ฌ์„œ ์•„๋ž˜์ฒ˜๋Ÿผ ์ฒ˜๋ฆฌํ•œ๋‹ค:

     

    ๐Ÿ“Œ ๊ตฌ์กฐ ํ๋ฆ„:

    [์‚ฌ์šฉ์ž ์ฝ”๋“œ] → [ROS2 Client Library (rclcpp/rclpy)] 
    				↓ 
    [Abstract DDS Layer] ← ์ถ”์ƒํ™” ๊ณ„์ธต 
    		↓ 
    [Fast DDS / Cyclone DDS / RTI Connext ๋“ฑ DDS ๊ตฌํ˜„์ฒด]
    • ROS2๋Š” ์ถ”์ƒํ™” ๊ณ„์ธต๋งŒ ๋ณด๊ณ  ๊ฐœ๋ฐœ
    • ์‹ค์ œ ์–ด๋–ค DDS๊ฐ€ ์‚ฌ์šฉ๋˜๋Š”์ง€๋Š” ํ•˜๋‹จ์—์„œ ๊ต์ฒด ๊ฐ€๋Šฅ

    ๐Ÿ“Œ ์ถ”์ƒํ™”์˜ ํ•ต์‹ฌ ํšจ๊ณผ

    ํšจ๊ณผ  ์„ค๋ช…
    ํ˜ธํ™˜์„ฑ ํ–ฅ์ƒ ๋‹ค์–‘ํ•œ DDS๋ฅผ ์‰ฝ๊ฒŒ ๋ฐ”๊ฟ”์“ธ ์ˆ˜ ์žˆ์Œ
    ์œ ์ง€๋ณด์ˆ˜ ์šฉ์ด DDS ๊ตฌํ˜„์ฒด๊ฐ€ ๋ฐ”๋€Œ์–ด๋„ ์ƒ์œ„ ์ฝ”๋“œ๋Š” ๊ทธ๋Œ€๋กœ
    ์ผ๊ด€๋œ ์ธํ„ฐํŽ˜์ด์Šค ์ œ๊ณต ๊ฐœ๋ฐœ์ž๋Š” DDS ๋‚ด๋ถ€๋ฅผ ๋ชฐ๋ผ๋„ ๋จ

    ๐Ÿง  4. Application ๊ณ„์ธต (๋…ธ๋“œ๋“ค)

    • ๋งจ ์œ„๋Š” ์‹ค์ œ ์‚ฌ์šฉ์ž๊ฐ€ ๋งŒ๋“  ๋…ธ๋“œ(Node)๋“ค์ด๋‹ค.
    • ์˜ˆ: ์„ผ์„œ ๋…ธ๋“œ, ๋ชจํ„ฐ ์ œ์–ด ๋…ธ๋“œ, ์ด๋ฏธ์ง€ ์ธ์‹ ๋…ธ๋“œ ๋“ฑ

    ์ด ๋…ธ๋“œ๋“ค์ด ์ง์ ‘ DDS๋ฅผ ๋‹ค๋ฃจ์ง€ ์•Š๊ณ , Client Library๋ฅผ ํ†ตํ•ด ROS2 API๋ฅผ ํ˜ธ์ถœ → ๊ทธ ์•„๋ž˜ ๋ฏธ๋“ค์›จ์–ด(DDS)๊ฐ€ ์ž๋™์œผ๋กœ ํ†ต์‹ ์„ ์ฒ˜๋ฆฌํ•ด์คŒ

     

    ๊ทธ๋ฆผ๊ณผ ์—ฐ๊ฒฐํ•œ "๋ฏธ๋“ค์›จ์–ด" ์ •์˜ ์š”์•ฝ

    ROS2 ๊ตฌ์กฐ์—์„œ DDS ๋ฏธ๋“ค์›จ์–ด๋Š” Client Library ์•„๋ž˜์— ์œ„์น˜ํ•˜์—ฌ, ์‹ค์ œ ๋ฐ์ดํ„ฐ ์†ก์ˆ˜์‹ ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ํ•ต์‹ฌ ์—ญํ• ์„ ํ•œ๋‹ค.
    ๋…ธ๋“œ ๊ฐ„ ํ†ต์‹ ์€ ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ๋„คํŠธ์›Œํฌ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์ง€ ์•Š์•„๋„ ๋˜๋ฉฐ, DDS๊ฐ€ ๋Œ€์‹  ๋ฉ”์‹œ์ง€๋ฅผ ์ž๋™์œผ๋กœ ๋ผ์šฐํŒ…, ์ „์†ก, ์ˆ˜์‹ ํ•จ.
    ์ด๋ ‡๊ฒŒ ๋ณต์žกํ•œ ํ†ต์‹  ์ฒ˜๋ฆฌ๋ฅผ ์ˆจ๊ฒจ์ฃผ๊ณ , ๋ชจ๋“ˆ ๊ฐ„ ๋…๋ฆฝ์„ฑ์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์ฃผ๋Š” ๊ฒƒ์ด ๋ฏธ๋“ค์›จ์–ด์˜ ๋ณธ์งˆ์ ์ธ ์—ญํ• ์ด๋‹ค.


    [5. Peer-to-Peer ํ†ต์‹  (P2P ํ†ต์‹ )]

    โœ”๏ธ ๊ฐœ๋…

    • Peer-to-Peer(P2P) ํ†ต์‹ ์€ ์ค‘์•™ ์„œ๋ฒ„(๋ธŒ๋กœ์ปค) ์—†์ด,
      ๋…ธ๋“œ๋“ค๋ผ๋ฆฌ ์ง์ ‘ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›๋Š” ๋ฐฉ์‹์ด๋‹ค.

    ๐Ÿ“Œ ROS2์—์„œ์˜ ์˜๋ฏธ

    • ROS2์—์„œ๋Š” ํ† ํ”ฝ์„ publishํ•˜๋Š” ๋…ธ๋“œ์™€ subscribeํ•˜๋Š” ๋…ธ๋“œ๊ฐ€ ์ง์ ‘ ์—ฐ๊ฒฐ๋ผ์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›์Œ.
    • ์ค‘์•™ ์ค‘๊ฐœ ์„œ๋ฒ„๊ฐ€ ์—†์Œ → ์ง€์—ฐ์ด ์ค„๊ณ , ํ™•์žฅ์„ฑ์ด ์ข‹์•„์ง.

    ๐Ÿง  ์‰ฝ๊ฒŒ ๋งํ•˜๋ฉด?

    ์นดํ†ก ๋‹จ์ฒด๋ฐฉ์ฒ˜๋Ÿผ ์„œ๋ฒ„๋ฅผ ํ†ตํ•ด ๋Œ€ํ™”ํ•˜๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ,
    ์นœ๊ตฌํ•œํ…Œ ์ง์ ‘ ์ „ํ™”๋ฅผ ๊ฑธ์–ด์„œ ์ด์•ผ๊ธฐํ•˜๋Š” ๊ตฌ์กฐ!

    [6. QoS ์„ค์ • (Quality of Service)]

    โœ”๏ธ ๊ฐœ๋…

    • QoS(Quality of Service)๋Š” ํ†ต์‹  ํ’ˆ์งˆ์„ ์กฐ์ ˆํ•˜๋Š” ์˜ต์…˜์ด์•ผ.
    • ๋ฐ์ดํ„ฐ๋ฅผ ์–ด๋–ป๊ฒŒ, ์–ธ์ œ๊นŒ์ง€, ๋ช‡ ๋ฒˆ๊นŒ์ง€, ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ์ „๋‹ฌํ• ์ง€ ์ •์˜ํ•จ.

    ๐Ÿ“Œ ROS2์—์„œ ์„ค์ • ๊ฐ€๋Šฅํ•œ ์ฃผ์š” QoS ์ •์ฑ…๋“ค:

    ์ •์ฑ… ์ด๋ฆ„ ์„ค๋ช… ์˜ˆ์‹œ
    Reliability ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ˜๋“œ์‹œ ๋ณด๋‚ผ ๊ฒƒ์ธ๊ฐ€? Reliable(ํ™•์‹คํžˆ ์ „๋‹ฌ) vs Best Effort(์ตœ๋Œ€ํ•œ ์ „๋‹ฌ)
    Durability ๊ตฌ๋…์ž๊ฐ€ ๋‚˜์ค‘์— ์—ฐ๊ฒฐํ•ด๋„ ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ๊ฒŒ ์ €์žฅํ•  ๊ฒƒ์ธ๊ฐ€? Volatile(์‹ค์‹œ๊ฐ„๋งŒ) vs Transient Local(์ด์ „ ๋ฉ”์‹œ์ง€ ์ €์žฅ)
    History ๋ฉ”์‹œ์ง€๋ฅผ ๋ช‡ ๊ฐœ๊นŒ์ง€ ์ €์žฅํ•  ๊ฒƒ์ธ๊ฐ€? ๋งˆ์ง€๋ง‰ N๊ฐœ ๋ฉ”์‹œ์ง€๋งŒ ์œ ์ง€
    Deadline ํŠน์ • ์‹œ๊ฐ„ ์•ˆ์— ๋ฉ”์‹œ์ง€๋ฅผ ๊ผญ ๋ฐ›์•„์•ผ ํ•˜๋Š”๊ฐ€? ์‹ค์‹œ๊ฐ„ ์ œ์–ด ํ•„์š” ์‹œ ์‚ฌ์šฉ
    Liveliness ์ด ๋…ธ๋“œ๊ฐ€ ์‚ด์•„์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๋ฐฉ์‹ ํ†ต์‹  ์žฅ์•  ํƒ์ง€ ๊ฐ€๋Šฅ

    ๐Ÿง  ์‰ฝ๊ฒŒ ๋งํ•˜๋ฉด?

    ์šฐํŽธ์„ ๋ณด๋‚ผ ๋•Œ “๋น ๋ฅธ ๋“ฑ๊ธฐ + ๋ฐ˜๋“œ์‹œ ์ˆ˜์ทจํ™•์ธ” ์˜ต์…˜์„ ์„ ํƒํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์•„.
    ์–ด๋–ค ํ†ต์‹ ์€ ๋А๋ ค๋„ ๊ดœ์ฐฎ๊ณ , ์–ด๋–ค ๊ฑด ๋ฐ˜๋“œ์‹œ ๋„์ฐฉํ•ด์•ผ ํ•˜์ž–์•„?

    [7. ๋ฉ€ํ‹ฐ์บ์ŠคํŠธ (Multicast)]

    โœ”๏ธ ๊ฐœ๋…

    • ํ•œ ๋…ธ๋“œ๊ฐ€ ํ•œ ๋ฒˆ๋งŒ ๋ฉ”์‹œ์ง€๋ฅผ ์ „์†กํ•ด๋„, ์—ฌ๋Ÿฌ ๊ตฌ๋…์ž(Subscriber)์—๊ฒŒ ๋™์‹œ์— ๋ฉ”์‹œ์ง€๋ฅผ ์ „์†กํ•˜๋Š” ๋ฐฉ์‹

    ๐Ÿ“Œ ROS2์—์„œ์˜ ์˜๋ฏธ

    • ์˜ˆ: ์นด๋ฉ”๋ผ ๋…ธ๋“œ๊ฐ€ ์ด๋ฏธ์ง€๋ฅผ publishํ•˜๋ฉด, ์ด๋ฏธ์ง€ ์ฒ˜๋ฆฌ ๋…ธ๋“œ, ์ €์žฅ ๋…ธ๋“œ, ์ŠคํŠธ๋ฆฌ๋ฐ ๋…ธ๋“œ ๋ชจ๋‘ ๋™์‹œ์— ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ์–ด.
    • ๋„คํŠธ์›Œํฌ ๋ถ€ํ•˜๊ฐ€ ์ ๊ณ , ํšจ์œจ์ ์œผ๋กœ ๋‹ค์ˆ˜ ๊ตฌ๋…์ž์—๊ฒŒ ์ „๋‹ฌ ๊ฐ€๋Šฅ

    ๐Ÿง  ์‰ฝ๊ฒŒ ๋งํ•˜๋ฉด?

    ์ˆ˜์—… ์‹œ๊ฐ„์— ์„ ์ƒ๋‹˜์ด ํ•œ ๋ฒˆ๋งŒ ๋งํ•˜๋ฉด, ๋ชจ๋“  ํ•™์ƒ์ด ๋™์‹œ์— ๋“ฃ๋Š” ๊ตฌ์กฐ (vs ์ผ์ผ์ด ์ „ํ™”ํ•˜๋Š” ๊ตฌ์กฐ๊ฐ€ ์œ ๋‹ˆ์บ์ŠคํŠธ)


    [8. Pub/Sub ๊ตฌ์กฐ (Publish / Subscribe)]

    โœ”๏ธ ๊ฐœ๋… ์„ค๋ช…

    • ๋ฐœํ–‰(Publish): ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ด๋Š” ์ชฝ
    • ๊ตฌ๋…(Subscribe): ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›๋Š” ์ชฝ
    • ๋ฐœํ–‰์ž๋Š” ๋ˆ„๊ฐ€ ๊ตฌ๋…ํ•˜๊ณ  ์žˆ๋Š”์ง€ ๋ชฐ๋ผ๋„ ๋˜๊ณ , ๊ตฌ๋…์ž๋Š” ๋ˆ„๊ฐ€ ๋ฐœํ–‰ํ–ˆ๋Š”์ง€ ๋ชฐ๋ผ๋„ ๋จ → ๋А์Šจํ•œ ์—ฐ๊ฒฐ(Decoupling)

    ๐Ÿ“Œ ๊ตฌ์กฐ ์š”์•ฝ

    [Publisher Node] -- Topic --> [Subscriber Node]
    • ๋ฉ”์‹œ์ง€๋Š” "Topic"์ด๋ผ๋Š” ํ†ต๋กœ๋ฅผ ํ†ตํ•ด ์ „๋‹ฌ๋จ
    • Topic ์ด๋ฆ„์ด ๊ฐ™์œผ๋ฉด ํ†ต์‹ ์ด ์—ฐ๊ฒฐ๋จ

    ๐Ÿง  ์‰ฝ๊ฒŒ ๋งํ•˜๋ฉด?

    “ํ•™๊ต ๊ฒŒ์‹œํŒ์— ๊ณต์ง€ ์˜ฌ๋ฆฌ๊ธฐ(Pub)”
    → “ํ•™์ƒ๋“ค์ด ์•Œ์•„์„œ ํ™•์ธ(Subscribe)”ํ•˜๋Š” ๊ตฌ์กฐ

    [9. ๋™๊ธฐ(Synchronous) / ๋น„๋™๊ธฐ(Asynchronous) ํ†ต์‹ ]

    โœ”๏ธ ๋™๊ธฐ ํ†ต์‹  (Synchronous)

    • ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ธ ์ชฝ์ด ์‘๋‹ต์„ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๋ฐฉ์‹
    • ์‘๋‹ต์ด ์˜ฌ ๋•Œ๊นŒ์ง€ ๋Œ€๊ธฐํ•˜๊ณ , ๊ทธ ๋‹ค์Œ ์ž‘์—…์„ ์ˆ˜ํ–‰

    ์˜ˆ์‹œ:

    • A๊ฐ€ B์—๊ฒŒ "๋ช‡ ์‹œ์•ผ?" ๋ผ๊ณ  ๋ฌผ์–ด๋ณด๊ณ  → B์˜ ๋Œ€๋‹ต์„ ๋ฐ›์„ ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆผ

    ROS2์—์„œ ํ•ด๋‹น๋˜๋Š” ๊ตฌ์กฐ:

    • Service ํ†ต์‹ 
      ์˜ˆ:
    Node A (Client): "์œ„์น˜ ์ข€ ์•Œ๋ ค์ค˜" 
    Node B (Server): "์—ฌ๊ธฐ์•ผ" → ์‘๋‹ต

    โœ”๏ธ ๋น„๋™๊ธฐ ํ†ต์‹  (Asynchronous)

    • ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ด๊ณ  ๋‚˜์„œ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๊ณ  ๋‹ค์Œ ์ž‘์—…์„ ์ง„ํ–‰
    • ์‘๋‹ต์ด ์˜ค๋ฉด ๊ทธ๋•Œ ์ฒ˜๋ฆฌ (ํ˜น์€ ์•„์˜ˆ ์‘๋‹ต์ด ์—†์–ด๋„ ๋จ)

    ์˜ˆ์‹œ:

    • A๊ฐ€ ํ•™๊ต ๊ฒŒ์‹œํŒ(Pub)์— ๊ณต์ง€๋ฅผ ๋ถ™์ด๋ฉด →
      ํ•™์ƒ B, C, D๋Š” ์–ธ์ œ๋“ ์ง€ ์ž์œ ๋กญ๊ฒŒ ์ฝ์„ ์ˆ˜ ์žˆ์Œ

    ROS2์—์„œ ํ•ด๋‹น๋˜๋Š” ๊ตฌ์กฐ:

    • Publish/Subscribe ํ†ต์‹ 
    • Action๋„ ๋น„๋™๊ธฐ ๋ฐฉ์‹์— ๊ฐ€๊น์ง€๋งŒ ์ค‘๊ฐ„ ํ”ผ๋“œ๋ฐฑ๋„ ํฌํ•จ๋จ
    ROS2์˜ Pub/Sub ๊ตฌ์กฐ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ด๋Š” ์ชฝ๊ณผ ๋ฐ›๋Š” ์ชฝ์ด ๋А์Šจํ•˜๊ฒŒ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์–ด ํ™•์žฅ์„ฑ๊ณผ ์œ ์—ฐ์„ฑ์ด ๋†’๋‹ค.
    ์ด ๊ตฌ์กฐ๋Š” ๋น„๋™๊ธฐ ํ†ต์‹ ์œผ๋กœ, ๋…ธ๋“œ๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐœํ–‰ํ•œ ํ›„ ์‘๋‹ต์„ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๊ณ  ๋‹ค์Œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.
    ๋ฐ˜๋ฉด, Service ํ†ต์‹ ์€ ๋™๊ธฐ ๋ฐฉ์‹์œผ๋กœ ์š”์ฒญ์ž๊ฐ€ ์‘๋‹ต์„ ๋ฐ›์„ ๋•Œ๊นŒ์ง€ ๋Œ€๊ธฐํ•˜๋ฉฐ, Action์€ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ์— ์ค‘๊ฐ„ ํ”ผ๋“œ๋ฐฑ์ด ํฌํ•จ๋œ ๊ตฌ์กฐ์ด๋‹ค.

     


    [10. TCP/UDP]

    TCP (Transmission Control Protocol)

    โœ”๏ธ ๊ฐœ๋…

    • ์‹ ๋ขฐ์„ฑ ์žˆ๋Š” ๋ฐ์ดํ„ฐ ์ „์†ก์„ ๋ณด์žฅํ•˜๋Š” ํ”„๋กœํ† ์ฝœ
    • ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ด๋ฉด ์ˆ˜์‹  ํ™•์ธ(ACK)์„ ๋ฐ›๊ณ , ์˜ค๋ฅ˜๊ฐ€ ์žˆ์œผ๋ฉด ์žฌ์ „์†กํ•จ
    • ๋ฐ์ดํ„ฐ๊ฐ€ ์ˆœ์„œ๋Œ€๋กœ ๋„์ฐฉํ•˜๋„๋ก ๋ณด์žฅํ•จ
    • ์—ฐ๊ฒฐ์„ ๋จผ์ € ์„ค์ •ํ•ด์•ผ ํ•จ (3-way handshake)

    ๐Ÿ“ฆ ํŠน์ง•

    ํ•ญ๋ชฉ ์„ค๋ช…
    ์—ฐ๊ฒฐ ๋ฐฉ์‹ ์—ฐ๊ฒฐ ์ง€ํ–ฅ (Connection-oriented)
    ์‹ ๋ขฐ์„ฑ ๋†’์Œ (์†์‹ค ์‹œ ์žฌ์ „์†ก)
    ์ˆœ์„œ ๋ณด์žฅ O
    ์†๋„ ๋А๋ฆด ์ˆ˜ ์žˆ์Œ (ํ™•์ธ ์ ˆ์ฐจ ํ•„์š”)
    ์‚ฌ์šฉ ์˜ˆ ์›น์‚ฌ์ดํŠธ ์ ‘์†(HTTP), ์ด๋ฉ”์ผ, ํŒŒ์ผ ์ „์†ก(FTP)

    ๐Ÿง  ์‰ฝ๊ฒŒ ๋งํ•˜๋ฉด?

    ํƒ๋ฐฐ๋ฅผ ๋ณด๋‚ผ ๋•Œ, “๋ฐ›๋Š” ์‚ฌ๋žŒ์ด ์ œ๋Œ€๋กœ ๋ฐ›์•˜๋Š”์ง€ ํ™•์ธ์„œ๊นŒ์ง€ ๊ผญ ๋ฐ›๋Š”” ์•ˆ์ „ํ•œ ํƒ๋ฐฐ ์„œ๋น„์Šค


    UDP (User Datagram Protocol)

    โœ”๏ธ ๊ฐœ๋…

    • ๋น ๋ฅด๊ฒŒ ์ „์†กํ•˜๋Š” ๋ฐ ์ดˆ์ ์ด ๋งž์ถฐ์ง„ ํ”„๋กœํ† ์ฝœ
    • ์ˆ˜์‹  ํ™•์ธ ์—†์ด ๊ทธ๋ƒฅ ๋ฐ์ดํ„ฐ๋งŒ ๋˜์ง
    • ์ˆœ์„œ ๋ณด์žฅ๋„ ์—†๊ณ , ์ค‘๊ฐ„์— ๋ฐ์ดํ„ฐ๊ฐ€ ์œ ์‹ค๋  ์ˆ˜๋„ ์žˆ์Œ
    • ์—ฐ๊ฒฐ ์—†์ด ๋ฐ”๋กœ ์ „์†ก ๊ฐ€๋Šฅ

    ๐Ÿ“ฆ ํŠน์ง•

    ํ•ญ๋ชฉ ์„ค๋ช…
    ์—ฐ๊ฒฐ ๋ฐฉ์‹ ๋น„์—ฐ๊ฒฐํ˜• (Connectionless)
    ์‹ ๋ขฐ์„ฑ ๋‚ฎ์Œ (์žฌ์ „์†ก ์—†์Œ)
    ์ˆœ์„œ ๋ณด์žฅ X
    ์†๋„ ๋งค์šฐ ๋น ๋ฆ„
    ์‚ฌ์šฉ ์˜ˆ ์‹ค์‹œ๊ฐ„ ์ŠคํŠธ๋ฆฌ๋ฐ, VoIP, ์˜จ๋ผ์ธ ๊ฒŒ์ž„, ์„ผ์„œ ๋ฐ์ดํ„ฐ ์ „์†ก

    ๐Ÿง  ์‰ฝ๊ฒŒ ๋งํ•˜๋ฉด?

    ๋ฌธ์ž๋‚˜ ์ชฝ์ง€๋ฅผ ๋˜์ ธ์ฃผ๋Š” ๋А๋‚Œ. ๋ฐ›์„ ์ˆ˜๋„ ์žˆ๊ณ , ๋ชป ๋ฐ›์„ ์ˆ˜๋„ ์žˆ์Œ. ํ•˜์ง€๋งŒ ๋น ๋ฆ„!


    โœ… TCP vs UDP ๋น„๊ต ์š”์•ฝ

    ํ•ญ๋ชฉ TCP UDP
    ์—ฐ๊ฒฐ ๋ฐฉ์‹ ์—ฐ๊ฒฐ ์ง€ํ–ฅ ๋น„์—ฐ๊ฒฐ
    ์‹ ๋ขฐ์„ฑ ๋†’์Œ ๋‚ฎ์Œ
    ์ˆœ์„œ ๋ณด์žฅ O X
    ์†๋„ ๋А๋ฆผ ๋น ๋ฆ„
    ๋ฐ์ดํ„ฐ ์œ ์‹ค ์‹œ ์žฌ์ „์†ก ๋ฌด์‹œ
    ์‚ฌ์šฉ ์˜ˆ ์›น, ๋ฉ”์ผ ์˜์ƒ, ๊ฒŒ์ž„, ์„ผ์„œ ๋ฐ์ดํ„ฐ
    ROS2์—์„œ์˜ ํ™œ์šฉ Service (์ฃผ๋กœ TCP) Topic (๊ณ ์†์ด๋ฉด UDP)

    ๐Ÿ“Œ ROS2์™€์˜ ์—ฐ๊ฒฐ

    • ROS2๋Š” DDS๋ฅผ ํ†ตํ•ด TCP์™€ UDP ๋‘˜ ๋‹ค ์‚ฌ์šฉ ๊ฐ€๋Šฅ
    • ์‹ ๋ขฐ์„ฑ(Reliable) ์„ค์ • ์‹œ → TCP ๊ธฐ๋ฐ˜
    • ์†๋„ ์šฐ์„ (Best Effort) ์„ค์ • ์‹œ → UDP ๊ธฐ๋ฐ˜

    ์˜ˆ๋ฅผ ๋“ค์–ด,

    • ์ž์œจ์ฃผํ–‰์ฐจ์˜ ์นด๋ฉ”๋ผ ์ด๋ฏธ์ง€ → UDP ์‚ฌ์šฉ (๋น ๋ฅด๊ฒŒ!)
    • ๋ช…๋ น ์ œ์–ด/์‘๋‹ต → TCP ์‚ฌ์šฉ (์ •ํ™•ํ•˜๊ฒŒ!)

    โœ๏ธ  ์š”์•ฝ ๋ฌธ์žฅ

    TCP๋Š” ์‹ ๋ขฐ์„ฑ๊ณผ ์ˆœ์„œ ๋ณด์žฅ์„ ์œ„ํ•ด ์—ฐ๊ฒฐ์„ ์„ค์ •ํ•˜๊ณ , ์ˆ˜์‹  ํ™•์ธ ๋ฐ ์žฌ์ „์†ก์„ ์ง€์›ํ•˜๋Š” ํ”„๋กœํ† ์ฝœ์ด๋‹ค. ๋ฐ˜๋ฉด UDP๋Š” ๋น ๋ฅธ ์†๋„๋ฅผ ์œ„ํ•ด ์—ฐ๊ฒฐ ์„ค์ • ์—†์ด ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜๋ฉฐ, ๋ฐ์ดํ„ฐ ์œ ์‹ค์ด๋‚˜ ์ˆœ์„œ ์˜ค๋ฅ˜๋ฅผ ํ—ˆ์šฉํ•œ๋‹ค. ROS2์—์„œ๋Š” DDS ๋ฏธ๋“ค์›จ์–ด๋ฅผ ํ†ตํ•ด ํ†ต์‹  ์ƒํ™ฉ์— ๋”ฐ๋ผ TCP ๋˜๋Š” UDP ๊ธฐ๋ฐ˜ QoS ์ •์ฑ…์„ ์„ ํƒ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

    [11. Client Library]

    ๐Ÿ“Œ ์ •์˜

    ROS2 ๊ธฐ๋Šฅ์„ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ œ๊ณตํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(API)

    ์ฆ‰, C++, Python ๊ฐ™์€ ์–ธ์–ด๋กœ ROS2 ๋…ธ๋“œ, ํ† ํ”ฝ, ์„œ๋น„์Šค ๋“ฑ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ์ฝ”๋“œ ๋ชจ์Œ์ด๋‹ค.

    ์™œ ํ•„์š”ํ•œ๊ฐ€?

    ROS2 ๋‚ด๋ถ€๋Š” ๋ณต์žกํ•˜๊ฒŒ DDS, ๋ฉ”์‹œ์ง€ ํ, ํ†ต์‹  ์„ค์ • ๋“ฑ์ด ์–ฝํ˜€ ์žˆ๋‹ค.

    ํ•˜์ง€๋งŒ ์ด๋Ÿฐ ๋‚ด๋ถ€ ๊ตฌ์กฐ๋ฅผ ๋ชฐ๋ผ๋„ ๊ทธ๋ƒฅ ์•„๋ž˜์ฒ˜๋Ÿผ ์“ฐ๊ณ  ์‹ถ๊ธฐ ๋•Œ๋ฌธ์—:

    # Python์œผ๋กœ ์ž‘์„ฑํ•œ ROS2 ๋…ธ๋“œ ์˜ˆ์‹œ
    import rclpy
    from rclpy.node import Node
    
    class MyNode(Node):
        def __init__(self):
            super().__init__('hello_node')
            self.get_logger().info('Hello ROS2!')
    
    rclpy.init()
    node = MyNode()
    rclpy.spin(node)
    rclpy.shutdown()

    ์ด๋Ÿฐ ๊ฑธ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด์ฃผ๋Š” ๊ฒŒ ๋ฐ”๋กœ Client Library์ด๋‹ค!

    ROS2์—์„œ ์ œ๊ณตํ•˜๋Š” ์ฃผ์š” Client Libraries

    ์ด๋ฆ„ ์–ธ์–ด ์„ค๋ช…
    rclcpp C++์šฉ Client Library ์„ฑ๋Šฅ์ด ์ค‘์š”ํ•œ ๋กœ๋ด‡์— ์ž์ฃผ ์‚ฌ์šฉ
    rclpy Python์šฉ Client Library ๋ฐฐ์šฐ๊ธฐ ์‰ฝ๊ณ  ๋น ๋ฅด๊ฒŒ ์‹ค์Šต ๊ฐ€๋Šฅ
    rcljava, rclcs, rclgo Java, C#, Go ๋“ฑ ์ผ๋ถ€ ํ”„๋กœ์ ํŠธ์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

    ๊ตฌ์กฐ ์† ์œ„์น˜ ์ •๋ฆฌ (์ „์ฒด ๊ณ„์ธต ํ๋ฆ„)

    [์‚ฌ์šฉ์ž ์ฝ”๋“œ: Python/C++]
    		 ↓ 
    [Client Library: rclpy / rclcpp] 
    		 ↓ 
    [ROS2 Core (rcl, rmw, DDS ์ถ”์ƒํ™”)] 
    		 ↓ 
    [DDS ๊ตฌํ˜„์ฒด (Fast DDS, Cyclone DDS ๋“ฑ)]
    		 ↓ 
    [๋„คํŠธ์›Œํฌ ํ†ต์‹ ]
    • ์‚ฌ์šฉ์ž๋Š” rclpy๋‚˜ rclcpp๋ฅผ ํ†ตํ•ด์„œ ROS2 ๊ธฐ๋Šฅ์„ ํ˜ธ์ถœ
    • ๊ทธ ์•„๋ž˜๋Š” ์ „ํ˜€ ๋ชฐ๋ผ๋„ ๋œ๋‹ค (์ˆจ๊ฒจ์ ธ ์žˆ์Œ)

    [12. ๋ธŒ๋กœ๋“œ์บ์ŠคํŠธ ๋ฐฉ์‹]

    โœ” ์ •์˜

    ๋„คํŠธ์›Œํฌ ์ƒ์—์„œ ํŠน์ • ๋Œ€์ƒ์ด ์•„๋‹Œ,
    ์—ฐ๊ฒฐ๋œ ๋ชจ๋“  ์žฅ์น˜(๋…ธ๋“œ)์—๊ฒŒ ๋™์‹œ์— ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ด๋Š” ๋ฐฉ์‹

    ์ฆ‰, “๋‚˜ ์—ฌ๊ธฐ ์žˆ์–ด!”๋ผ๊ณ  ํ•œ ๋ฒˆ ๋งํ•˜๋ฉด, ๊ทผ์ฒ˜์— ์žˆ๋Š” ๋ชจ๋“  ์• ๋“ค์ด ๋‹ค ๋“ฃ๋Š” ๊ตฌ์กฐ

    ๋ธŒ๋กœ๋“œ์บ์ŠคํŠธ์™ธ ๊ฐœ๋…

    ๋ฐฉ์‹ ์„ค๋ช…
    Unicast ํŠน์ • ๋Œ€์ƒ ํ•˜๋‚˜์—๊ฒŒ๋งŒ ๋ฉ”์‹œ์ง€ ์ „์†ก (1:1)
    Multicast ํŠน์ • ๊ทธ๋ฃน์—๊ฒŒ๋งŒ ์ „์†ก (1:๋‹ค)
    Broadcast ๊ฐ™์€ ๋„คํŠธ์›Œํฌ์— ์žˆ๋Š” ๋ชจ๋“  ์žฅ์น˜์—๊ฒŒ ์ „์†ก (1:์ „์ฒด)

    [13. ํŒจํ‚ท]

    ๐Ÿ“Œ ์ •์˜

    ๋„คํŠธ์›Œํฌ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›์„ ๋•Œ,
    ์ „์†กํ•˜๊ธฐ ์ข‹๊ฒŒ ์ชผ๊ฐœ์„œ ๋งŒ๋“  ๋ฐ์ดํ„ฐ ์กฐ๊ฐ์ด๋‹ค.

    • ์ปดํ“จํ„ฐ๋Š” ํฐ ๋ฐ์ดํ„ฐ๋ฅผ ํ•œ ๋ฒˆ์— ๋ณด๋‚ด์ง€ ์•Š์•„
    • ๋Œ€์‹ , ์ผ์ • ํฌ๊ธฐ๋กœ ๋‚˜๋ˆ ์„œ ์ž‘์€ ๋ฉ์–ด๋ฆฌ(=ํŒจํ‚ท)๋กœ ๋งŒ๋“ค์–ด ์ „์†กํ•จ
    • ์ด ๋ฉ์–ด๋ฆฌ๊ฐ€ ํ•˜๋‚˜์˜ ๋‹จ์œ„ ์ „์†ก

    ๐Ÿ“Œ ๊ตฌ์„ฑ์š”์†Œ

    ํŒจํ‚ท์€ ๋‹จ์ˆœํ•œ ๋ฐ์ดํ„ฐ ๋ฉ์–ด๋ฆฌ๊ฐ€ ์•„๋‹ˆ๊ณ , ์•ˆ์— ๋‘ ๊ฐ€์ง€ ์ •๋ณด๊ฐ€ ๋“ค์–ด ์žˆ๋‹ค:

    1. ํ—ค๋”(Header)
      • ์ถœ๋ฐœ์ง€/๋„์ฐฉ์ง€ ์ฃผ์†Œ (์˜ˆ: IP ์ฃผ์†Œ)
      • ์ˆœ์„œ ๋ฒˆํ˜ธ
      • ์—๋Ÿฌ ๊ฒ€์ถœ์šฉ ์ฒดํฌ์„ฌ ๋“ฑ
        → "์–ด๋””์„œ ์™”๊ณ , ์–ด๋””๋กœ ๊ฐ€์•ผ ํ•˜๋ฉฐ, ๋ฌด์Šจ ๋‚ด์šฉ์ธ์ง€ ์•Œ๋ ค์ฃผ๋Š” ๋ด‰ํˆฌ"
    2. ๋ฐ์ดํ„ฐ(Payload)
      • ์‹ค์ œ ์ „๋‹ฌํ•˜๋ ค๋Š” ๋‚ด์šฉ
        → ์˜ˆ: ์„ผ์„œ๊ฐ’, ์ฑ„ํŒ… ๋ฉ”์‹œ์ง€, ์ด๋ฏธ์ง€ ์ผ๋ถ€ ๋“ฑ

    ๋Œ“๊ธ€

Designed by Tistory.