Elevators & Occupied Event - modulabs/gazebo-tutorial GitHub Wiki

Overview

์ด ํŽ˜์ด์ง€์—์„œ๋Š” ๊ฐ€์ œ๋ณด์—์„œ ์—˜๋ ˆ๋ฒ ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ๋ ค์ค€๋‹ค. ๊ฐ€์ œ ์—˜๋ ˆ๋ฒ ์ดํ„ฐ๋Š” ๋ฌธ์ด ๋‹ฌ๋ฆฐ ์นธ์œผ๋กœ ์œ„์•„๋ž˜๋กœ ์›€์ง์ผ ์ˆ˜ ์žˆ์œผ๋ฉฐ prismatic joint๋กœ ์ œ์–ด๋œ๋‹ค.

Functionality

์—˜๋ ˆ๋ฒ ์ดํ„ฐ์˜ ๋™์ž‘์€ ElevatorPlugin์„ ํ†ตํ•ด ์ด๋ฃจ์–ด์ง„๋‹ค. ์ด ํ”Œ๋Ÿฌ๊ทธ์ธ์€ 2๊ฐœ์˜ prismatic joint๋ฅผ ์ œ์–ดํ•œ๋‹ค. ํ”Œ๋Ÿฌ๊ทธ์ธ์˜ ์—…๋ฐ์ดํŠธ ์‚ฌ์ดํด์—๋Š” lift joint๊ฐ€ ์—˜๋ ˆ๋ฒ ์ดํ„ฐ๋ฅผ ์š”์ฒญ๋œ ์ธต์œผ๋กœ ์ด๋™์‹œํ‚ค๊ณ  dorr joint๊ฐ€ ์—˜๋ ˆ๋ฒ ์ดํ„ฐ์˜ ํ˜„์žฌ ์ƒํƒœ์— ๋”ฐ๋ผ ๋‹ซํžŒ ๋ฌธ์„ ์—ฐ๋‹ค. ํŠน์ • ์ธต์œผ๋กœ์˜ ์ด๋™์€ ์ธต์˜ ๋ฒˆํ˜ธ๋ฅผ string message๋กœ ์—˜๋ ˆ๋ฒ ์ดํ„ฐ์˜ ํ† ํ”ฝ์œผ๋กœ ๋ณด๋‚ด ์ด๋ฃจ์–ด์งˆ ์ˆ˜ ์žˆ๋‹ค. ์ž์„ธํ•œ ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” ๋’ค ์„น์…˜์—์„œ ์ฃผ์–ด์ง„๋‹ค. ์—˜๋ ˆ๋ฒ ์ดํ„ฐ์˜ ์ œ์–ด ๊ณผ์ •์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  1. Wait for a floor request.
  2. Close door.
  3. Move to requested floor.
  4. Open door.
  5. Wait for five seconds.
  6. Close the door.
  7. Go to #1.

์ธต ์ด๋™ ์š”์ฒญ์€ Queue ํ˜•ํƒœ๊ฐ€ ์•„๋‹ˆ๋ฉฐ ์ƒˆ๋กœ์šด ์š”์ฒญ์ด ์˜ค๊ธฐ ์ „์— ์ด๋™์„ ๋งˆ์น ๊ฒƒ์ด๋‹ค.

Parameters

lift joint, door joint, floor height, control topic์€ SDF์•ˆ์— ๋ช…์‹œ๋˜์–ด์žˆ๋‹ค. ๋‹ค์Œ์€ ๊ทธ ์˜ˆ์ด๋‹ค.

<plugin filename="libElevatorPlugin.so" name="elevator_plugin">
  <lift_joint>elevator::lift</lift_joint>
  <door_joint>elevator::door</door_joint>
  <floor_height>3.075</floor_height>
  <topic>~/elevator</topic>
</plugin>

์ด ์˜ˆ์—์„œ elevator ๋ชจ๋ธ์€ ๋ฆฌํ”„ํŒ…์„ ์œ„ํ•œ lift, ๋ฌธ ๊ฐœํ๋ฅผ ์œ„ํ•œ door joint์™€ ํ•จ๊ฒŒ SDFํŒŒ์ผ ์–ด๋”˜๊ฐ€์— ์กด์žฌํ•œ๋‹ค. ๊ฐ ์ธต์˜ ๋†’์ด๋Š” 3.075 ๋ฏธํ„ฐ์ด๊ณ  ์—˜๋ ˆ๋ฒ ์ดํ„ฐ ํ”Œ๋Ÿฌ๊ทธ์ธ์€ ~/elevator ํ† ํ”ฝ์ƒ์˜ ์š”์ฒญ์„ ์ˆ˜์‹ ํ•œ๋‹ค.

Example

์™„์„ฑ๋œ example world๋Š” ๊ฐ€์ œ๋ณด์™€ ํ•จ๊ป˜ ๋ฐฐํฌ๋œ๋‹ค. ์•„๋ž˜ ์ฝ”๋“œ๋กœ ์‹คํ–‰์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

gazebo worlds/elevator.world

์ด world๋Š” ๋‘ ์ธต๊ณผ ์—˜๋ ˆ๋ฒ ์ดํ„ฐ ํ•˜๋‚˜๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค. ๊ฐ„๋‹จํ•œ ๋„ํ˜•์„ ์ธต ์•ž์— ๋‘๋ฉด ์ธต ์ด๋™ ์š”์ฒญ์ด Occupied Region Event๋กœ ์ธํ•ด ๋ฐœ๋„์˜ค๋””๊ฒŒ ๋œ๋‹ค.

Occupied Region Event

์—˜๋ ˆ๋ฒ ์ดํ„ฐ ํ”Œ๋Ÿฌ๊ทธ์ธ์€ SimEventsPlugin์˜ OccupiedEvent์™€ ํ•จ๊ป˜ ๋™์ž‘ํ•œ๋‹ค. OccupiedEvent๋Š” 3D ๊ตฌ์—ญ์œผ๋กœ model์— ์˜ํ•ด ๋ฉ”์„ธ์ง€๋ฅผ ๋ฐœ์†กํ•˜๊ฒŒ ๋œ๋‹ค.

Usage and Example

<plugin filename="libSimEventsPlugin.so" name="event_plugin">

  <region>
    <name>region1</name>
    <volume>
      <min>0 0 0</min>
      <max>0 1 1</max>
    </volume>
  </region>

  <event>
    <name>region1_event</name>
    <type>occupied</type>
    <region>region1</region>
    <topic>~/elevator</topic>
    <msg_data>0</msg_data>
  </event>

</plugin>

OccupiedEvent๋ฅผ libSimEventsPlugin.so๋ฅผ ์˜ˆ๋กœ ๋“ค์–ด ์„ค๋ช…ํ•œ๋‹ค. ์ด๋Š” ์ด๋‚˜ occupied ์˜ ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์— ์˜์กดํ•œ๋‹ค.

๋‹ค์Œ ์˜ˆ์—์„œ region์€ ์ตœ์†Œ์  (0,0,0)๊ณผ ์ตœ๋Œ€์ (1,1,1)๋กœ ์ด๋ฃจ์–ด์ง„ ๊ณต๊ฐ„์ด๋‹ค. ์ด ๊ณต๊ฐ„์˜ ์ด๋ฆ„์€ region1 ์ด๋‹ค. occupied ์˜ ์ธ region1 event ๋˜ํ•œ region1์„ ํ†ตํ•ด ๋ช…์‹œ๋œ๋‹ค. ์–ด๋–ค ๋ชจ๋ธ์ด region1์— ์œ„์น˜ํ•˜๊ฒŒ ๋˜๋ฉด ๋ฐ์ดํ„ฐ string message ๊ฐ€ ๊ฐ’ "0"์„ ๊ฐ€์ง€๊ณ  ~/elevator๋กœ ์ „์†ก๋œ๋‹ค.

โš ๏ธ **GitHub.com Fallback** โš ๏ธ