sequence - zero1ne-26/doc GitHub Wiki
๊ฐฑ์ 2026-08-28. ๋ช ๋ น์ ๋๊ฐ ๋ฐํํ๋๊ฐ๊ฐ 08-08 ํ๊ณผ ๋ค๋ฆ ๋๋ค. ์๋ ยง0 ์ด ์ง๊ธ ๊ตฌ์กฐ์ด๊ณ , ๊ทธ ๋ค ์๋๋ฆฌ์ค๋ณ ๊ทธ๋ฆผ์ ๋ก๋ด ์ชฝ ๋์(ack 2๋จ๊ณยท์ํยท ๋น์์ ์ง)์ ์ฝ๋ ๋ฐ ์๋๋ค.
๋ก๋ด์ด ๋ฐ๋ ํ ํฝยทํ์ด๋ก๋๋ MQTT_SCHEMA-SPOT, ๋์ฐฉ ์๋ํ ๊ท์นยทํ์ ์์ธํ ์ค๊ณ๋ LOCATION_AUTOMATION_DESIGN ์ ์์ต๋๋ค.
๋ก๋ด ํ ํฝ robot/{robotId}/command ์ ๋ฐํํ๋ ๊ฒ์ OC ์๋ฒ๋ฟ์
๋๋ค.
ํ๋ธ๋ฆฟ๋ ๊ด๋ฆฌ์ ํ๋ฉด๋ ์ง์ ์์ง ์์ต๋๋ค โ ์๋ฒ์ ์์ฒญํ๊ณ , ์๋ฒ๊ฐ ํ๋ก ์์๋ฅผ
์ ํด ๋
๋๋ค.
flowchart TD
T["ํ๋ธ๋ฆฟ<br/>์ ํ์ง๋ฅผ ๊ณ ๋ฅธ๋ค"] -->|"orchestration/{sess}/task(event)/option/select"| S
A["๊ด๋ฆฌ์ยทํ
์คํธ ์ฝ์"] -->|"orchestration/{sess}/spot/command"| S
V["Vision<br/>vision/position/person"] -->|"์ฅ์ ๋์ฐฉ ๊ฐ์ง"| S
S["OC ์๋ฒ"] --> DB[("DB<br/>์ ํ์ง์ spot_action<br/>์ฅ์โ์จ์ดํฌ์ธํธ ๋ผ๋ฒจ<br/>๋์ฐฉ ์๋ํ ๊ท์น")]
DB --> S
S --> Q["๋๋ฐ์ด์ค ๋ช
๋ น ํ<br/>SQS FIFO ยท ๋๋ฐ์ด์ค๋ณ ์ง๋ ฌ"]
Q -->|"robot/spot-01/command"| R["SPOT"]
R -->|"robot/spot-01/ack"| Q
Q -->|"์๋ฃ๋๋ฉด ๋ค์ ์ก์
"| Q
R -->|"state ยท plan ยท waypoints"| S
S -->|"orchestration/spot/{id}/*<br/>orchestration/{sess}/spot/*"| T
| # | ๊ณ๊ธฐ | ์๋ฒ๊ฐ ํ๋ ์ผ |
|---|---|---|
| 1 | ํ๋ธ๋ฆฟ์ด ์ ํ์ง๋ฅผ ๊ณ ๋ฆ | ๊ทธ ์ ํ์ง์ spot_action ์ด ์ค์ ๋ผ ์์ผ๋ฉด ์ฆ์ ๋ฐํ. ์ ํ ์์ฒด๊ฐ ์น์ธ์ด๋ผ ๋ณ๋ ํ์ธ ์ ์ฐจ๊ฐ ์๋ค. navigate_to ๋ฉด ๋ชฉ์ ์ง๋ฅผ ๊ทธ ์๋ฆฌ์์ ๊ณ์ฐํ๋ค โ ์ธ์
์ ๋ค์ ๋ฐฉ๋ฌธ ์ฅ์๋ฅผ ์ฐพ๊ณ , ๊ทธ ์ฅ์์ ๋งคํ๋ ์จ์ดํฌ์ธํธ ๋ผ๋ฒจ์ ๊บผ๋ธ๋ค |
| 2 | ๊ด๋ฆฌ์ยทํ ์คํธ ์ฝ์ |
orchestration/{sessionId}/spot/command ๋ฅผ ๋ฐ์ ๊ทธ๋๋ก ํ์ ๋ฃ๋๋ค. ์ธ์
์ ๋ฐฐ์ ๋ SPOT ์ด ์์ผ๋ฉด ๊ฑฐ์ |
| 3 | ์ฅ์ ๋์ฐฉ ์๋ํ (2026-08-22 ์ ๊ท) | Vision ์ด ๋ฐฉ๋ฌธ๊ฐ ์ขํ๋ฅผ ๊ณ์ ๋ฐํ โ ์๋ฒ๊ฐ ์ฅ์๋ก ๋งคํ โ ์ฅ์๊ฐ ๋ฐ๋ ์๊ฐ ๊ทธ (์ฌ์ฉ์ยท์ฅ์ยทํ์คํฌ/์ด๋ฒคํธ) ์ ๊ฑธ๋ฆฐ ๊ท์น์ ์ฐพ์ ์๋ ๋ฐํ. ๋ณด์ ์์ดํ ยท์ฒซ ๋ฐฉ๋ฌธ ์ฌ๋ถ ๊ฐ์ ์กฐ๊ฑด๊ณผ ์ฟจ๋ค์ด์ ๋ณธ๋ค |
Enqueue โ ๋๋ฐ์ด์ค๋ณ ๊ทธ๋ฃน(spot:{robotId})์ผ๋ก ์ง๋ ฌํ
โ delay_ms ๋๊ธฐ โ MQTT ๋ฐํ
โ ์๋ฃ ์ ํธ ๋๊ธฐ SPOT ์ ack ์ ์ข
๊ฒฐ status (SUCCESS/FAULT_*/ABORTED/TIMEOUT)
โ ๋ค์ ์ก์
์ ์ฌ ๊ท์น ์์ ์ก์
์ฒด์ธ
โ timeout_ms(๊ธฐ๋ณธ 30์ด) ๋์ผ๋ฉด timeout ์ผ๋ก ๊ธฐ๋กํ๊ณ ๋ค์์ผ๋ก
์ ํ ๊ณณ์ผ๋ก ๋ชจ์๋ โ SPOT ์ ํ ๋ฒ์ ํ๋๋ง ์คํํ๊ณ ์คํ ์ค ์ ๋ช
๋ น์ BUSY ๋ก
๊ฑฐ์ ํฉ๋๋ค(ยง9.1). ํ๋ธ๋ฆฟยท์๋ํยท์ฝ์์ด ์๋ก ๋ชจ๋ฅธ ์ฑ ๊ฐ์ ๋ณด๋ด๋ฉด ๋ค์ฃ๊ฒ์ด ๊ทธ๋ฅ ์ฃฝ์ต๋๋ค.
2026-08-10 ์ ์๋ฒ๊ฐ ์์๋ฅผ ๋งก๊ธฐ๋ก ์ ํ๊ณ , 08-22 ์ ๋๋ฐ์ด์ค ๊ณตํต ํ๋ก ์ผ๋ฐํ๋์ต๋๋ค.
๋ก๋ด ์ชฝ์ ์ด ๋ณํ๋ก ๋ฐ๋ ๊ฒ์ด ์์ต๋๋ค. ๋ฐ๋ ํ ํฝยทํ์ด๋ก๋ยทack ๊ท์ฝ์ด ๊ทธ๋๋ก์ ๋๋ค. ์๋ ๊ทธ๋ฆผ๋ค์ ํ์ดํ ์ถ๋ฐ์ (ํ๋ธ๋ฆฟ)์ ์ ํ์ด๋ผ ยง0 ์ผ๋ก ์ฝ์ด์ฃผ์ธ์.
sequenceDiagram
participant ํ๋ธ๋ฆฟ
participant MQTT as MQTT
participant SPOT
participant OC as OC-SERVER
participant ๋ก๋ดํ
ํ๋ธ๋ฆฟ-->>MQTT: 1. pub (์ด๋ ๋ช
๋ น ํ ํฝ) {destination: "A"}
MQTT-->>SPOT: 2. sub (์ด๋ ๋ช
๋ น ํ ํฝ)
MQTT-->>OC: 3. sub (์ด๋ ๋ช
๋ น ํ ํฝ) โ ์งํ ์ค ์ํ ๋ณ๊ฒฝ
SPOT-->>MQTT: 4. pub (์ด๋ ์๋ฃ ํ ํฝ) {status: "arrived", location: "A"}
MQTT-->>OC: 5. sub (์ด๋ ์๋ฃ ํ ํฝ)
OC-->>MQTT: 6. pub (๋ก๋ด ํ ๋ช
๋ น ํ ํฝ)
MQTT-->>๋ก๋ดํ: 7. sub (๋ก๋ด ํ ๋ช
๋ น ํ ํฝ)
๋ก๋ดํ-->>MQTT: 8. pub (๋ก๋ด ํ ์์
์๋ฃ) {status: "complete"}
MQTT-->>OC: 9. sub (๋ก๋ด ํ ์์
์๋ฃ)
OC-->>MQTT: 10. pub (์ด๋ ๋ช
๋ น ํ ํฝ) {destination: "B"}
MQTT-->>SPOT: 11. sub (์ด๋ ๋ช
๋ น ํ ํฝ)
SPOT-->>MQTT: 12. pub (์ด๋ ์๋ฃ ํ ํฝ) {status: "arrived", location: "B"}
์ ๋ค์ด์ด๊ทธ๋จ์ ๋ํด SPOT ์ชฝ์์ ์ ์ํ๋ ๊ท์น์ ๋๋ค. ์ด๊ฒฌ ์์ผ๋ฉด ์๋ ค์ฃผ์ธ์.
| # | ์ ์ | ์ |
|---|---|---|
| 1 | ์ ๋ฐ ์ ๋ ฌ์ SPOT ์ด ํ๋ค. ์๋ฒ๊ฐ ๋ณด๋ผ ๋ช ๋ น์ด ์๋ค | ๋ก๋ดํ์ด ์์ ํ๋ ค๋ฉด SPOT ์ด cm ๋จ์๋ก ์ ์์ด์ผ ํฉ๋๋ค. ์ ์ฌ ์ง์ ์ AprilTag ๋ฅผ ๋ณด๊ณ SPOT ์ด ์ค์ค๋ก ๋ง์ถฅ๋๋ค |
| 2 | ์ด๋ ์๋ฃ(4๋ฒ)๋ฅผ ๋ฐ์ ๋ค์ ๋ก๋ดํ์ ์ง์(6๋ฒ)ํ๋ค | ์ ์ ์๋ต์ "์ถ๋ฐํ๋ค"์ผ ๋ฟ์ ๋๋ค. ๋์ฐฉ ์ ์ ํ์ด ์์ง์ด๋ฉด ์ถฉ๋ํฉ๋๋ค |
| 3 | ์ด๋์ด ์คํจํ๋ฉด ๋ก๋ดํ ๋ช ๋ น์ ๋ณด๋ด์ง ์๋๋ค | SPOT ์ด ์๋ ์๋ฆฌ์์ ํ์ด ์์ ํ๋ฉด ์ํํฉ๋๋ค |
| 4 | ์ ์ฌ ์ง์ ์ AprilTag(36h11 / 146mm)๋ฅผ ๋ถ์ธ๋ค | SPOT ์ด ์๊ธฐ ์์น๋ฅผ ๋ง์ถ๋ ๊ธฐ์ค์ ๋๋ค(ํ์ ์ํ ํ์์ด ์๋๋๋ค). ์จ์ดํฌ์ธํธ ์ด๋๋ง์ผ๋ก๋ ์ค์ฐจ๊ฐ ์์ญ cm ๋ผ, ํ์ด ๊ณ ์ ์ขํ๋ก ์์ ํ๋ ค๋ฉด SPOT ์ด ๋งค๋ฒ ๊ฐ์ ์๋ฆฌ์ ์ ์ค์ผ ํฉ๋๋ค |
| 5 | ์ ์ฌ ์ค์๋ SPOT ์ ๋ค๋ฅธ ๋ช ๋ น์ ๋ณด๋ด์ง ์๋๋ค | ํ์ด ์์ ํ๋ ๋์ SPOT ์ด ์์ง์ด๋ฉด ์ ๋ฉ๋๋ค |
| 6 | ๋ชฉ์ ์ง(destination)๋ ์ด๋ฆ ๋ถ์ธ ์ง์ ๋ง ์ด๋ค |
SPOT ์ด waypoints ํ ํฝ(retained)์ผ๋ก ๊ฐ ์ ์๋ ๊ณณ ๋ชฉ๋ก์ ๋ฐํํฉ๋๋ค. ๊ทธ ๋ชฉ๋ก์ ์๋ ๊ฐ์ ๊ฑฐ๋ถ๋ฉ๋๋ค |
| 7 | ์ด๋ ์๋ฃ ์๋ต์ ๊ฒฐ๊ณผ ์ฝ๋๋ฅผ ํจ๊ป ์ฃ๋๋ค | ์ ๋ค์ด์ด๊ทธ๋จ์ {status:"arrived"} ๋ ์ฑ๊ณต๋ง ํํํฉ๋๋ค. ์คํจํ์ ๋๋ ๊ฐ์ ํ ํฝ์ผ๋ก ์ด์ ๊ฐ ์์ผ ์๋ฒ๊ฐ ๋ค์ ํ๋จ์ ํ ์ ์์ต๋๋ค (์์ธํ ๊ฐ์ MQTT_SCHEMA-SPOT) |
๋ฏธ๊ฒ์ฆ โ ์ด ํ๋ฆ์ ์์ง ๋ก๋ดํ๊ณผ ํจ๊ป ์ํํด๋ณด์ง ์์์ต๋๋ค. ์ ๋ ฌ ์ ํ๋์ ์์ ์๊ฐ์ ํฉ๋ ์ํ ํ์ ์ฑ์ฐ๊ฒ ์ต๋๋ค.
๋ก๋ดํ์ด ๊ด์ฌํ์ง ์๋ SPOT ์๋๋ฆฌ์ค๋ค์ ๋๋ค. ์ฌ๋์ด ์์ํ๋ ๋ช ๋ น์ ํ๋ธ๋ฆฟ์ด ์ ํ์ง ์ ํ์ผ๋ก ์๋ฆฌ๊ณ , OC ์๋ฒ๊ฐ ๊ทธ๊ฒ์ SPOT ๋ช ๋ น์ผ๋ก ๋ฐ๊ฟ ๋ฐํํฉ๋๋ค (ยง0). ํ๋ธ๋ฆฟ์ ๋ก๋ด ํ ํฝ์ ์ง์ ์์ง ์์ต๋๋ค.
์ ์ ์ปจ์ ์ ๊ณ ๊ฐ์ ์์ฒญ์ ๋ฐ์ผ๋ฉด ์์คํ ์ด ์์์ ์๋๋ฆฌ์ค๋ฅผ ๋๋ฆฌ๋ ๊ฒ์ ๋๋ค. ๊ทธ "์์์" ๊ฐ ์ผ์ด๋๋ ์๋ฆฌ๋ ํ๋ธ๋ฆฟยทOC ์๋ฒ ์ชฝ์ด๊ณ , SPOT ์ ๊ทธ ๊ฒฐ๊ณผ๋ก ์ ํด์ง ์๋๋ฆฌ์ค๋ฅผ ์คํํฉ๋๋ค.
๊ณ ๊ฐ ์์ฒญ โ ์ด๋ค ์๋๋ฆฌ์ค๋ฅผ ๋๋ฆด์ง ํ๋จ โ ์ง๋ น ๋ฐํ โ SPOT ์ด ์คํ (๊ด๋ฆฌ์๊ฐ ๋ฏธ๋ฆฌ DB ์ ์ค์ โ OC ์๋ฒ๊ฐ ์กฐํ) (ํ๋จ ์ ํจ)SPOT ์ "๋ฌด์์ ํ ์ง" ๋ฅผ ์ค์ค๋ก ๊ณ ๋ฅด์ง ์์ต๋๋ค. ๋ฐ์ ์๋๋ฆฌ์ค๋ฅผ ์ด๋ป๊ฒ ์ํํ ์ง(๊ฒฝ๋ก, ์์ธ, ์ ๋ ฌ)๋ง ์ ํฉ๋๋ค.
SPOT ์ด ์ง๋ น ์์ด ์ค์ค๋ก ํ๋ ์ผ์ ๋ ๊ฐ์ง๋ฟ์ ๋๋ค โ ์ด๋ฏธ ๋ฐ์ ๋ช ๋ น์ ๋ง๋ฌด๋ฆฌํ๋ ๊ฒ(์ถ์ข ์ข ๋ฃ ํ ์์น ์ฌํ์ธ ๋ฑ)๊ณผ ์์ ๋์(ํต์ ๋์ ์ ์ ์ง, ์ ํด ์ ์ฐฉ์).
ํ ํฝยทํ์ด๋ก๋ ์์ธ๋ MQTT_SCHEMA-SPOT ์ฐธ์กฐ.
sequenceDiagram
participant ํ๋ธ๋ฆฟ
participant MQTT
participant SPOT
participant OC as OC-SERVER
ํ๋ธ๋ฆฟ-->>MQTT: 1. pub (task/option/select) {option_id}
MQTT-->>OC: 2. sub โ DB ์กฐํ (spot_action ยท ๋ค์ ์ฅ์ โ ์จ์ดํฌ์ธํธ ๋ผ๋ฒจ) โ ํ
OC-->>MQTT: 3. pub (command) {action:"navigate_to", destination:"p2"}
MQTT-->>SPOT: 4. sub (command)
SPOT-->>MQTT: 4. pub (ack) {status:"ACCEPTED"}
MQTT-->>OC: 5. sub (ack)
Note over SPOT: ์์น์ถ์ ํ์ธ โ ๊ฒฝ๋ก ๊ณ์ฐ โ ์ฃผํ<br/>์ค๊ฐ ๊ฒฝ์ ์ง๋ SPOT ์ด ์์์ ์ง๋๊ฐ๋ค
loop 1Hz
SPOT-->>MQTT: pub (state) {fsm:"NAVIGATING", current_waypoint_label:โฆ}
MQTT-->>OC: sub (state)
end
alt ๋์ฐฉ
SPOT-->>MQTT: 6. pub (ack) {status:"SUCCESS", location:"p2"}
MQTT-->>OC: 7. sub (ack)
else ์๊ธฐ ์์น๋ฅผ ๋ชจ๋ฆ
SPOT-->>MQTT: 6. pub (ack) {status:"FAULT_NAV", code:"NOT_LOCALIZED"}
MQTT-->>OC: 7. sub (ack) โ ์ด์์ ํธ์ถ
end
| # | ์ ์ | ์ |
|---|---|---|
| 1 | ๋ชฉ์ ์ง๋ ์ด๋ฆ ๋ถ์ธ ์ง์ ๋ง ๋ณด๋ธ๋ค | ์๋ ์์ฑ ๊ฒฝ์ ์ง(waypoint_7)๋ ๊ธธ์ด์ง ์ฅ์๊ฐ ์๋๋๋ค. ๋ชฉ๋ก์ waypoints ํ ํฝ(retained)์ ์์ต๋๋ค |
| 2 | ๊ฒฝ๋ก๋ ๋ฐํ์๊ฐ ์ ํ์ง ์๋๋ค | ์ด๋ ๊ฒฝ์ ์ง๋ฅผ ๊ฑฐ์น ์ง๋ SPOT ์ด ๊ณ์ฐํฉ๋๋ค. ์ต์ข ๋ชฉ์ ์ง๋ง ์ฃผ๋ฉด ๋ฉ๋๋ค |
| 3 | NOT_LOCALIZED ๋ ์ฌ์๋ํ์ง ์๋๋ค |
๋ก๋ด์ด ์๊ธฐ ์์น๋ฅผ ๋ชจ๋ฅด๋ ์ํ๋ผ ๋ช ๋ฒ์ ๋ณด๋ด๋ ๊ฐ์ ์คํจ์ ๋๋ค. ์ฌ๋์ด ํ๊ทธ๊ฐ ๋ณด์ด๋ ๊ณณ์ผ๋ก ์ฎ๊ฒจ์ผ ํ๋ฆฝ๋๋ค |
| 4 | ๊ทธ ์ธ FAULT_NAV ๋ 1ํ ์ฌ์๋ ํ ๋ค๋ฅธ ๋ชฉ์ ์ง๋ก ์ฌ๊ณํ |
์ฌ๋์ด ๊ธธ์ ๋ง๊ณ ์๋ ๊ฒฝ์ฐ๊ฐ ๋๋ถ๋ถ์ด๋ผ ์ ์ ํ๋ฉด ํ๋ฆฝ๋๋ค |
| 5 | ์ด๋ ์ค ์ ์ด๋ ๋ช
๋ น์ BUSY ๋ก ๊ฑฐ์ ๋๋ค |
์ ๋ช ๋ น์ ์๋ฃ๋ฅผ ๋ฐ๊ณ ๋ค์์ ๋ณด๋ด์ฃผ์ธ์ |
์๋ โ ์ ์์ฅ ๊ธฐ๋ณธ 0.15 m/s ๋ก ๊ณ ์ ์ ๋๋ค. ๊ด๊ฐ ์ฌ์ด๋ฅผ ๋ค๋๋ฏ๋ก ๋ฐํ์๊ฐ ์ฌ๋ฆด ์ ์๊ฒ ํ์ต๋๋ค.
๋ค๋ก ๊ฑท์ง ์์ต๋๋ค โ ๋ฐฉํฅ์ด ์ ๋ง์ผ๋ฉด ํ์ ํด์ ์์ผ๋ก ๊ฐ๋๋ค. ๊ด๊ฐ ๋์ ๊ณ ์ฅ์ผ๋ก ๋ณด์ด๊ณ , ์งํ ๋ฐฉํฅ์ ์นด๋ฉ๋ผ๊ฐ ๋ชป ๋ณด๊ธฐ ๋๋ฌธ์ ๋๋ค.
sequenceDiagram
participant ํ๋ธ๋ฆฟ
participant MQTT
participant SPOT
participant OC as OC-SERVER
Note over MQTT,OC: ๊ด๋ฆฌ์ ๋ฐฑ์คํผ์ค๊ฐ scenarios (retained) ๊ตฌ๋
<br/>โ ์ ํ์ง์ scenario_id ํ๋ณด๋ฅผ ์ฑ์ด๋ค
Note over OC: ์ ํ์ง์ ์ค์ ๋ spot_action ยท scenario_id ๋ฅผ DB ์์ ์กฐํ
ํ๋ธ๋ฆฟ-->>MQTT: 1. pub (option/select) {option_id}
MQTT-->>OC: 2. sub โ ์ ํ์ง์ ๊ฑธ๋ฆฐ scenario_id ๋ฅผ DB ์์ ๊บผ๋ โ ํ
OC-->>MQTT: 3. pub (command) {action:"run_scenario", scenario_id:"guide"}
MQTT-->>SPOT: 4. sub (command)
SPOT-->>MQTT: 4. pub (ack) {status:"ACCEPTED"}
MQTT-->>OC: 5. sub (ack)
Note over SPOT: ์ด๋ค ๋์๋ค๋ก ์ด๋ฃจ์ด์ก๋์ง๋ SPOT ์ด ์๋ค<br/>๋ฐํ์๋ ์ด๋ฆ๋ง ๋ณด๋๋ค
SPOT-->>MQTT: 6. pub (plan) {step_index:0, total:3, status:"SUCCESS"}
MQTT-->>OC: 7. sub (plan) โ ์งํ๋ฅ ๊ฐฑ์
SPOT-->>MQTT: pub (plan) {step_index:1, โฆ}
MQTT-->>OC: sub (plan)
SPOT-->>MQTT: pub (plan) {step_index:2, โฆ}
MQTT-->>OC: sub (plan)
SPOT-->>MQTT: 8. pub (ack) {status:"SUCCESS"}
MQTT-->>OC: 9. sub (ack)
| # | ์ ์ | ์ |
|---|---|---|
| 1 | ์๋๋ฆฌ์ค ์ด๋ฆ๋ง ๋ณด๋ธ๋ค | "์ธ๋ถ ๋ก์ง์ ๋ก๋ด์์ ์ฒ๋ฆฌ" ์์น์ ์งํค๋ ๋ฐฉ๋ฒ์ ๋๋ค. ์ธ์ฌ ๋์ยท๋๊ธฐ ์๊ฐ ๊ฐ์ ๊ฑด ๋ฐํ์๊ฐ ๋ชฐ๋ผ๋ ๋ฉ๋๋ค |
| 2 | ์๋๋ฆฌ์ค ๋ชฉ๋ก์ scenarios ํ ํฝ(retained)์์ ๋ฐ๋๋ค |
๊ด๋ฆฌ์ UI ์์ ์๋๋ฆฌ์ค๋ฅผ ๊ณ ์น๋ฉด ์๋์ผ๋ก ๋ฐ์๋ฉ๋๋ค. ํ๋ธ๋ฆฟยท์๋ฒ ์ฝ๋๋ฅผ ๊ณ ์น ํ์๊ฐ ์์ต๋๋ค |
| 3 | ์งํ๋ฅ ์ plan ํ ํฝ์ผ๋ก ๋๊ฐ๋ค |
3๋จ๊ณ ์ค 2๋จ๊ณ๋ผ๋ ๊ฑธ ํ๋ธ๋ฆฟ์ ๋ณด์ฌ์ค ์ ์์ต๋๋ค. ์๋ฃ๋ง ๊ธฐ๋ค๋ฆฌ๋ฉด ๊ทธ ์ฌ์ด๊ฐ ๊น๊นํฉ๋๋ค |
| 4 | ์๋๋ฆฌ์ค ์์ ๋ฑ๊ฐ ๋์์ ack ๋ฅผ ์์ง ์๋๋ค |
๋ณด๋ด์ง ์์ ๋ช ๋ น์ ์๋ต์ด ์ค๋ฉด ํผ๋์ค๋ฝ์ต๋๋ค. ์๋๋ฆฌ์ค ์ ์ฒด์ ๋ํด ํ ๋ฒ๋ง ์ต๋๋ค |
| 5 | ๋ก๋ด์ด ๋ชป ํ๋ ๋์์ด ์์ฌ ์์ผ๋ฉด unsupported_steps ๋ก ์๋ฆฐ๋ค |
์กฐ์ฉํ ๋นผ๊ณ ์คํํ๋ฉด ์์ ํ ์ํ๋ ์ค ์๋๋ค |
๋ณ์ ์นํ โ ์๋๋ฆฌ์ค์ $spot ๊ฐ์ ์๋ฆฌ๊ฐ ์์ผ๋ฉด variables ๋ก ์ฑ์๋๋ค.
๋ฌด์์ผ๋ก ์ฑ์ธ์ง(ํ๋ธ๋ฆฟ์์ ๊ณ ๋ฅธ ๋ชฉ์ ์ง ๋ฑ)๋ ๋ฐํํ๋ ์ชฝ์ด ์ ํฉ๋๋ค.
sequenceDiagram
participant ํ๋ธ๋ฆฟ
participant MQTT
participant SPOT
participant OC as OC-SERVER
ํ๋ธ๋ฆฟ-->>MQTT: 1. pub (option/select) {option_id}
MQTT-->>OC: 2. sub โ DB ์กฐํ โ ํ
OC-->>MQTT: 3. pub (command) {action:"follow", mode:"start"}
MQTT-->>SPOT: 4. sub (command)
SPOT-->>MQTT: 4. pub (ack) {status:"ACCEPTED"}
MQTT-->>OC: 5. sub (ack)
Note over SPOT: ์ ์ผ ๊ฐ๊น์ด ์ฌ๋์ ์ก๊ณ ๋ฐ๋ผ๊ฐ๋ค<br/>์ข์ฐ๋ก ๋๋ฌ๋ณด๋ ์ค = ์์ง ๋ชป ์ฐพ์
alt ์๋์ด ๊ทธ๋ฅ ์๋ฆฌ๋ฅผ ๋ธ
Note over SPOT: 25์ด ๋์ ์ ๋ณด์ด๋ฉด ์ค์ค๋ก ์ข
๋ฃ
SPOT-->>MQTT: 6. pub (ack) {status:"SUCCESS", reason:"target_lost"}
else ํ๋ธ๋ฆฟ์์ ์ข
๋ฃ
ํ๋ธ๋ฆฟ-->>MQTT: pub (option/select) โ OC
OC-->>MQTT: pub (command) {action:"follow", mode:"stop"}
MQTT-->>SPOT: sub (command)
SPOT-->>MQTT: 6. pub (ack) {status:"SUCCESS"}
end
MQTT-->>OC: 7. sub (ack)
Note over SPOT: ์ข
๋ฃ ํ ์๊ธฐ ์์น๋ฅผ ๋ค์ ์ก๋๋ค<br/>์ถ์ข
์ ๋งต ๊ฒฝ๋ก๋ฅผ ์ ํ์ ์์น๊ฐ ํ๋ ค์ง๋ค
| # | ์ ์ | ์ |
|---|---|---|
| 1 | ๋์์ ์์ ์์ ์ ์ ์ผ ๊ฐ๊น์ด ์ฌ๋ | ์ผ๊ตด์ ๋ณด์ง ์์ผ๋ฏ๋ก "๋๊ตฌ"๋ฅผ ์ง์ ํ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ฌ ์ฌ๋์ด ๋ก๋ด ์์ ์๋ฉด ๋ฉ๋๋ค |
| 2 | ํ ๋ฒ ์ก์ผ๋ฉด ๋ค๋ฅธ ์ฌ๋์ผ๋ก ๋ฐ๋์ง ์๋๋ค | ๊ด๊ฐ์ด ์์ ์ค์ณ๋ ์ ์งํฉ๋๋ค. ์์ ํ ๋์ณ์ผ ๋ค์ ๊ณ ๋ฆ ๋๋ค |
| 3 | 25์ด ๋์ ์ฌ๋์ด ์ ๋ณด์ด๋ฉด ์ค์ค๋ก ๋๋ธ๋ค | ์๋์ด ๊ทธ๋ฅ ๊ฐ๋ฒ๋ฆฌ๋ ๊ฒ ์ ์์์ ๊ฐ์ฅ ํํฉ๋๋ค. ๋งค๋ฒ ์ข ๋ฃ ๋ช ๋ น์ ๋ณด๋ด์ฃผ๊ธฐ๋ฅผ ๊ธฐ๋ํ ์ ์์ต๋๋ค |
| 4 | ํ ๋ฒ์ ์ต๋ 5๋ถ | ์๊ณ ๋ฐฉ์น๋๋ ๊ฒ์ ๋ง์ต๋๋ค |
| 5 | ์ข ๋ฃ ํ SPOT ์ด ์ค์ค๋ก ์์น๋ฅผ ๋ค์ ์ก๋๋ค | ์ถ์ข ์ ๋งต ๊ฒฝ๋ก๋ฅผ ์ ํ์ ๋๋๋ฉด ์๊ธฐ ์์น๊ฐ ํ๋ ค์ง๋๋ค. ์ด๊ฑธ ์ ํ๋ฉด ๋ค์ ์ด๋ ๋ช ๋ น์ด ์กฐ์ฉํ ์คํจํฉ๋๋ค |
| 6 | ์ ์ง ๊ฑฐ๋ฆฌ 2m, ์ต๋ 0.2 m/s | ๋ฐํ์๊ฐ ๋ฐ๊ฟ ์ ์๊ฒ ํ์ต๋๋ค. ๊ด๊ฐ์๊ฒ ๋น ๋ฅด๊ฒ ์ ๊ทผํ๋ ์ผ์ด ์์ด์ผ ํฉ๋๋ค |
๊ด๊ฐ์ด ๋ณด๋ ์ ํธ โ ์ข์ฐ๋ก ํฌ๊ฒ ๋๋ฌ๋ณด๋ฉด "์์ง ๋ชป ์ฐพ์", ๋ฉ์ถ๊ณ ๋ฐ๋ผ์ค๋ฉด "์ก์์"์ ๋๋ค. ๋์์ ์ด ํ๋๋ฟ์ ๋๋ค. ์ฌ๋ฌ ๊ฐ๋ฅผ ๋๋ฉด ๊ด๊ฐ์ด ๊ตฌ๋ถํ์ง ๋ชปํฉ๋๋ค.
ํ๋ธ๋ฆฟ์ ๋๋ฅด์ง ์์๋ ๋ก๋ด์ด ์์ง์ด๋ ์ ์ผํ ๊ฒฝ๋ก. ๊ด๋๊ฐ์ด ๊ทธ ์ฅ์์ ๋์ฐฉํ๋ ๊ฒ๋ง์ผ๋ก ๋ฏธ๋ฆฌ ์ ํด๋ ๋ช ๋ น์ด ๋๊ฐ๋๋ค.
sequenceDiagram
participant V as Vision
participant MQTT
participant OC as OC-SERVER
participant SPOT
V-->>MQTT: vision/position/person {์ขํ, zone_id}
MQTT-->>OC: sub (๊ณ์ ๋ค์ด์จ๋ค)
Note over OC: zone โ ์ฅ์ ๋งคํ<br/>**์ฅ์๊ฐ ๋ฐ๋ ์๊ฐ๋ง** ์๋๋ก ์งํ
Note over OC: ์ด (์ฌ์ฉ์ยท์ฅ์ยทํ์คํฌ/์ด๋ฒคํธ) ์ ๊ฑธ๋ฆฐ ๊ท์น์ ์ฐพ๋๋ค<br/>๋ณด์ ์์ดํ
ยท ์ฒซ ๋ฐฉ๋ฌธ ์ฌ๋ถ ยท ์ฟจ๋ค์ด ๊ฒ์ฌ
OC-->>MQTT: pub (command) {action, params}
MQTT-->>SPOT: sub (command)
SPOT-->>MQTT: ack {status:"ACCEPTED"}
SPOT-->>MQTT: ack {status:"SUCCESS"}
MQTT-->>OC: sub (ack)
Note over OC: ์๋ฃ๋ฅผ ๋ฐ์ผ๋ฉด **๊ท์น ์์ ๋ค์ ์ก์
**์ ํ์ ๋ฃ๋๋ค<br/>(๋ก๋ดํยท๋ฐ๋ ค๋ก๋ดยทHub ๋ก ์ด์ด์ง ์ ์๋ค)
| ๋ฌด์์ด ๋ฐํํ๋ | ์ฅ์ ์์ฒด๊ฐ ์๋๋ผ (์ฌ์ฉ์, ์ฅ์, ํ์คํฌ/์ด๋ฒคํธ) ๋งคํ์ด ์ ํ๋ค. ๊ฐ์ "์ง"์ด๋ผ๋ ์ธ์ ๋ง๋ค ๋ค๋ฅด๋ค |
| ์ ๋๊ฐ๋ ๊ฒฝ์ฐ | ๊ท์น์ด ์๊ตฌํ๋ ์์ดํ
์ด ์์ผ๋ฉด missing_item, ๊ทธ ์ฅ์์ ๋๋ฐ์ด์ค๊ฐ ๋งคํ ์ ๋ผ ์์ผ๋ฉด no device ๋ก ๊ฑด๋๋ด๋ค |
| ๋ก๋ด์ด ์๋ ๊ฒ |
์๋ค. ๋ก๋ด์๊ฒ๋ ํ๋ฒํ robot/spot-01/command ๋ก ๋ณด์ธ๋ค |
๋ง์ง๋ง ์ค์ด ์์ ์ ๋๋ค โ ๋ก๋ด ์ชฝ์ ์ด ๊ธฐ๋ฅ์ด ์๊ฒจ๋ ๋ฐ๋ ๊ฒ์ด ์์ต๋๋ค.
sequenceDiagram
participant ์ด์์
participant SPOT
participant MQTT
participant OC as OC-SERVER
participant ํ๋ธ๋ฆฟ
Note over SPOT: ์ด๋ ์ค (command_id: cmd-0042)
์ด์์-->>SPOT: STOP (๊ด๋ฆฌ์ UI ๋๋ ๋ฌผ๋ฆฌ ๋ฒํผ)
Note over SPOT: MQTT ๋ฅผ ๊ฑฐ์น์ง ์๋ ์ต๋จ ๊ฒฝ๋ก๋ก ์ฆ์ ์ ์ง
SPOT-->>MQTT: 1. pub (estop, retained) {active:true, reason:"soft_stop"}
MQTT-->>OC: 2. sub (estop)
MQTT-->>ํ๋ธ๋ฆฟ: 3. sub (estop) โ ํ๋ฉด์ ์ ์ง ํ์
SPOT-->>MQTT: 4. pub (ack) {command_id:"cmd-0042", status:"ABORTED"}
MQTT-->>OC: 5. sub (ack)
Note over OC,ํ๋ธ๋ฆฟ: ๋ช
๋ น ๋ฐํ ์ค๋จ
์ด์์-->>SPOT: RESUME
SPOT-->>MQTT: 6. pub (estop, retained) {active:false}
MQTT-->>OC: 7. sub (estop)
MQTT-->>ํ๋ธ๋ฆฟ: 8. sub (estop) โ ์ ์ง ํ์ ํด์
| # | ์ ์ | ์ |
|---|---|---|
| 1 | ์ ์ง๋ MQTT ๋ฅผ ๊ฑฐ์น์ง ์๋๋ค | ๋ธ๋ก์ปค๊ฐ ์ฃฝ์ด๋ ๋ฉ์ถฐ์ผ ํฉ๋๋ค. MQTT ๋ก๋ "๋ฉ์ท๋ค"๋ ์ฌ์ค๋ง ์๋ฆฝ๋๋ค |
| 2 | ์ ์ง๋ ๋ฌด์๋ณด๋ค ์ฐ์ ํ๋ค |
BUSY ์ฌ๋ ๋ฐ์ต๋๋ค. ๋ค๋ฅธ ๋ช
๋ น์ด ๋๊ณ ์์ด๋ ์ฆ์ ๋ฉ์ถฅ๋๋ค |
| 3 | ๊ธฐ๋ณธ ์ ์ง๋ ์ ์์ ๋๋ ๊ฒ ์๋๋ค | ์ ์ฑ๋ก ๋ฉ์ถฅ๋๋ค. ๋ฐ๋ก ์ฌ๊ฐํ ์ ์์ต๋๋ค. ์ ์ ์ฐจ๋จ์ ๋ณ๋ ๋ฒํผ์ ๋๋ค |
| 4 | ์งํ ์ค์ด๋ ๋ช
๋ น์ ABORTED ๋ก ์ข
๋ฃ ๋ณด๊ณ ํ๋ค |
๊ทธ ๋ช ๋ น์ ๊ฒฐ๊ณผ๋ฅผ ์์ํ ๊ธฐ๋ค๋ฆฌ์ง ์๊ฒ |
| 5 | estop.active=true ๋์ ๋ช
๋ น ๋ฐํ์ ๋ฉ์ถ๋ค |
๋ณด๋ด๋ด์ผ ๊ฑฐ๋ถ๋๊ฑฐ๋, ๋ ๋์๊ฒ๋ ์ฌ๋์ด ๊ฐ์ ์ค์ธ๋ฐ ๋ค์ ์์ง์ ๋๋ค |
| 6 | ๋ณต๊ตฌ๋ ์ฌ๋์ด ํ๋ค | ์๋ ๋ณต๊ตฌ๋ฅผ ๋ฃ์ง ์์์ต๋๋ค. ์ ๋ฉ์ท๋์ง ์ฌ๋์ด ํ์ธํด์ผ ํฉ๋๋ค |
| 7 |
estop ์ retained ๋ก ๋ฐํํ๋ค |
ํ๋ธ๋ฆฟยท์๋ฒ๊ฐ ๋์ค์ ์ผ์ ธ๋ ์ง๊ธ ์ ์ง ์ํ์์ ์ฆ์ ์๋๋ค |
์ ์ง ํธ๋ฆฌ๊ฑฐ
| ํธ๋ฆฌ๊ฑฐ | ๋๊ฐ | ๊ฒฐ๊ณผ | ๋ณต๊ตฌ |
|---|---|---|---|
| STOP | ์ด์์ | ์ฆ์ ๋ฉ์ถค, ์ ์ฑ๋ก | RESUME |
| STOP + SIT | ์ด์์ | ๋ฉ์ถ๊ณ ์์ | RESUME |
| ํ๋ E-Stop | ์ด์์ | ๋ชจํฐ ์ ์ ์ฐจ๋จ | RESUME |
| ๋ช ๋ น ๋ง๋ฃ | ์๋ | ์กฐ์ข ์๊ฐ ์ฃฝ์ผ๋ฉด 3์ด ๋ค ์ ์ง | ์ฐ๊ฒฐ ๋ณต๊ตฌ ํ ์ฌ๋ช ๋ น |
| ๋ฐ๋๋งจ | ์๋ | ํต์ ๋์ 30์ด ๋ค ์๊ณ ์ ์ ์ฐจ๋จ | RESUME |
์ ์ ์ค ๊ด๋ฆฌ์๊ฐ ๋ก๋ด์ ์ง์ ๋ชฐ์์ผ ํ๋ ์ํฉ์ด ์๊น๋๋ค โ ์ฅ์ ๋ฌผ ์ ๊ฑฐ, ์์น ์กฐ์ ๋ฑ. ๋ก๋ด์ ํ ๋ฒ์ ํ ๋ช ๋ง ๋ชฐ ์ ์์ด์, ๊ด๋ฆฌ์๊ฐ ๊ฐ์ ธ๊ฐ๋ ๋์ ๋ฐํ๋ ๋ช ๋ น์ ์คํจํฉ๋๋ค.
sequenceDiagram
participant ๊ด๋ฆฌ์ as ๊ด๋ฆฌ์ ๋
ธํธ๋ถ
participant SPOT
participant MQTT
participant OC as OC-SERVER
participant ํ๋ธ๋ฆฟ
Note over MQTT,ํ๋ธ๋ฆฟ: ํ์์ โ state: commands_accepted=true
๊ด๋ฆฌ์-->>SPOT: ์ ์ด๊ถ ํ์ (ํ์ฅ์์ ์ง์ ์กฐ์ํ๋ ค๊ณ )
SPOT-->>MQTT: 1. pub (state, retained) {commands_accepted:false, lease_owner:"operator"}
MQTT-->>OC: 2. sub (state)
MQTT-->>ํ๋ธ๋ฆฟ: 3. sub (state) โ "์ ๊ฒ ์ค" ํ์
SPOT-->>MQTT: 4. pub (ack) {status:"FAULT_LEASE"}
MQTT-->>OC: 5. sub (ack)
Note over OC,ํ๋ธ๋ฆฟ: ๋ช
๋ น ๋ฐํ ์ค๋จํ๊ณ ๋๊ธฐ
๊ด๋ฆฌ์-->>SPOT: ์ ์ด๊ถ ๋ฐ๋ฉ (๋ฒํผ์ ๋๋ฌ์ผ ํจ โ ์๋ ๋ฐ๋ฉ ์์)
SPOT-->>MQTT: 6. pub (state, retained) {commands_accepted:true, lease_owner:"orchestration"}
MQTT-->>OC: 7. sub (state)
MQTT-->>ํ๋ธ๋ฆฟ: 8. sub (state) โ ์ ์ ํ์
| # | ์ ์ | ์ |
|---|---|---|
| 1 | ํ์ฅ ๊ด๋ฆฌ์๊ฐ ๋ฐํ์๋ณด๋ค ์ฐ์ ํ๋ค | ๋์ผ๋ก ๋ณด๊ณ ์๋ ์ฌ๋์ด ํ๋จํ ์ ์์ด์ผ ํฉ๋๋ค |
| 2 |
state ์ commands_accepted ๋ฅผ ๋ฃ๋๋ค. ์ ํ ํฝ์ ๋ง๋ค์ง ์๋๋ค |
์ด๋ฏธ ๊ตฌ๋
ํ๋ state(1Hz, retained)์ ๋ถ๋ฆฌ์ธ ํ๋๋ฉด ์ถฉ๋ถํฉ๋๋ค. ์๋ฒ๊ฐ lease_owned ๋ฅผ ํด์ํ ํ์ ์์ด "์ง๊ธ ๋ช
๋ น์ด ๋จน๋" ๋ฅผ ๋ฐ๋ก ์ ์ ์์ต๋๋ค |
| 3 |
commands_accepted:false ๋์ ๋ฐํ์ ๋ฉ์ถ๋ค |
๋ณด๋ด๋ฉด ์ ๋ถ FAULT_LEASE ๋ก ์คํจํฉ๋๋ค |
| 4 | ์งํ ์ค์ด๋ ๋ช
๋ น์ FAULT_LEASE ๋ก ์ข
๋ฃ ๋ณด๊ณ ํ๋ค |
๊ทธ ๋ช ๋ น์ ๊ฒฐ๊ณผ๋ฅผ ์์ํ ๊ธฐ๋ค๋ฆฌ์ง ์๊ฒ |
| 5 | ์๋ ๋ฐ๋ฉ์ ์๋ค. ๊ด๋ฆฌ์๊ฐ ์ง์ ๋ฐ๋ฉํด์ผ ํ๋ค | ํ์ด๋จธ๋ก ์๋ ๋ฐ๋ฉํ๋ฉด, ๊ด๋ฆฌ์๊ฐ ๋ก๋ด ์์์ ์กฐ์นํ๋ ์ค์ ์ ์ด๊ถ์ด ๋์ด๊ฐ ์ฌ๋ ์์์ ๋ก๋ด์ด ์์ง์ ๋๋ค |
commands_accepted๊ฐfalse๊ฐ ๋๋ ๊ฒฝ์ฐ โ ๊ด๋ฆฌ์ ์ ์ด๊ถ ํ์, ๋น์์ ์ง ์ค, ๋ฐฐํฐ๋ฆฌ ๋ถ์กฑ. ์ด์ ๋state์ ๋ค๋ฅธ ํ๋(lease_owner,estop_state,battery_pct)๋ก ๊ตฌ๋ถํ ์ ์์ต๋๋ค.
๊ด๋ฆฌ์๊ฐ ๋ฐ๋ฉ์ ์์ผ๋ฉด ์ ์๊ฐ ๋ฉ์ถฅ๋๋ค(๋ก๋ด์ ์ ์๋๋ฐ ๋ช ๋ น์ด ์ ๋ถ ๊ฑฐ๋ถ). ๊ด๋ฆฌ์ UI ์๋จ์ ์ ์ด๊ถ ๋ณด์ ๊ฐ ํญ์ ํ์๋๊ณ , ์ค๋ ์ฅ๊ณ ์์ผ๋ฉด ๊ฒฝ๊ณ ๊ฐ ๋น๋๋ค.
์๋๋ฆฌ์ค๋ฅผ ๊ฐ๋ฆฌ์ง ์๊ณ ์ ์ฉ๋ฉ๋๋ค.
SPOT ์ ๋ช
๋ น์ ํ๋์ฉ๋ง ์คํํฉ๋๋ค. ์คํ ์ค ์ ๋ช
๋ น์ BUSY ๋ก ๊ฑฐ์ ํฉ๋๋ค (STOP ์ ์ธ).
์ ์ โ ๋ฐํํ๋ ์ชฝ์ด ์์๋ฅผ ๊ด๋ฆฌํด์ฃผ์ธ์. ์ ๋ช ๋ น์ ์๋ฃ ์๋ต์ ๋ฐ์ ๋ค ๋ค์์ ๋ณด๋ด๋ ๋ฐฉ์์ด ๊ฐ์ฅ ๋จ์ํฉ๋๋ค.
ํ๋ธ๋ฆฟ๊ณผ OC ์๋ฒ๊ฐ ๋ ๋ค ๋ฐํํ ์ ์๋ค๋ฉด, ์๋ก ๋ชจ๋ฅด๋ ์ฑ๋ก ๋์์ ๋ณด๋ด๋ฉด ๋ค์ฃ๊ฒ์ด
BUSY๋ก ๊ฑฐ์ ๋ฉ๋๋ค. ๋๊ฐ ์์๋ฅผ ๊ด๋ฆฌํ ์ง ์ ํด์ผ ํฉ๋๋ค (์๋ ํ์ ์ฌํญ 1๋ฒ).
| ์์ค | SPOT ๋์ | ๋์ ์ ์ |
|---|---|---|
| 35% ์ดํ | ์ํ์ ํ์ | ๊ธด ์๋๋ฆฌ์ค๋ฅผ ์๋ก ์์ํ์ง ์๊ธฐ |
| 30% ๋ฏธ๋ง | ์ ์ ์ธ๊ฐ๊ฐ ๊ฑฐ๋ถ๋ ์ ์์ | ์ถฉ์ ์๋ด |
| 25% ์ดํ | ์ ์ด๋ ๋ช ๋ น ๊ฑฐ๋ถ | ์ด์์ ํธ์ถ |
3๋ถ ๋์ ๋ช ๋ น์ด ์์ผ๋ฉด SPOT ์ด ์ค์ค๋ก ์์ต๋๋ค. ๋ค์ ๋ช ๋ น์ ์๋์ผ๋ก ๋ค์ ์ผ์ด์ญ๋๋ค. ์ ์๋ ๊ฒ๋ง์ผ๋ก ๋ฐฐํฐ๋ฆฌ๊ฐ ๋น ๋ฅด๊ฒ ๋ณ๊ธฐ ๋๋ฌธ์ ๋๋ค. ๋ฐ๋ก ํ ์ผ์ ์์ต๋๋ค.
state ํ ํฝ์ connection:"offline" ์ด ๋น๋๋ค. SPOT ์ด ๋ฐํํ๋ ๊ฒ ์๋๋ผ ๋ธ๋ก์ปค๊ฐ
๋์ ๋ฐํํฉ๋๋ค(MQTT LWT). ๋ธ๋ก์ปค๊ฐ ์์์ฑ๋ ๋ฐ ์ต๋ 60์ด ๊ฑธ๋ฆฌ๋ฏ๋ก timestamp ๋ฅผ
๊ฐ์ด ๋ณด๊ณ ํ๋จํด์ฃผ์ธ์.
| # | ํญ๋ชฉ | ์ง๊ธ | ๋ฌผ์ด๋ณด๊ณ ์ถ์ ๊ฒ |
|---|---|---|---|
| 1 | ๋์ ๋ฐํ ์ ๋ฆฌ | ํ๋ธ๋ฆฟยทOC ์๋ฒ ๋ ๋ค robot/+/command ์ฐ๊ธฐ ๊ถํ ๋ณด์ (๋ธ๋ก์ปค ACL ํ์ธ) |
SPOT ์ ํ ๋ฒ์ ํ๋๋ง ์คํํ๊ณ , ์คํ ์ค ์ ๋ช
๋ น์ BUSY ๋ก ๊ฑฐ์ ํฉ๋๋ค. ๋์ด ์๋ก ๋ชจ๋ฅด๋ ์ฑ๋ก ๋ณด๋ด๋ฉด ๋ค์ฃ๊ฒ์ด ๊ฑฐ์ ๋ฉ๋๋ค. ๋๊ฐ ์์๋ฅผ ๊ด๋ฆฌํ ์ง ์ ํด์ผ ํฉ๋๋ค |
| 2 | ์๋๋ฆฌ์ค ๋ชฉ๋ก ๋ฐํ ์ฃผ์ฒด | ๊ด๋ฆฌ์ UI ๊ฐ scenarios ํ ํฝ(retained)์ผ๋ก ๋ฐํ |
์๋ฒ๊ฐ ์๋๋ฆฌ์ค๋ฅผ ๋ง๋ค๊ฑฐ๋ ๊ด๋ฆฌํ ๊ณํ์ด ์๋ค๋ฉด ๋ฐํ ์ฃผ์ฒด๋ฅผ ์ฎ๊ฒจ์ผ ํฉ๋๋ค. ์ง๊ธ ๊ณํ์ ์๋ ค์ฃผ์ธ์ |
์ ํด๋ณธ ๊ฒ์ ํ๋ค๊ณ ์ ์ผ๋ฉด ๊ทธ๊ฑธ ์ ์ ๋ก ๊ฐ๋ฐํ์๊ฒ ๋๋ฏ๋ก ๋๋ ์ ์์ต๋๋ค.
| ํญ๋ชฉ | ์ํ |
|---|---|
| ์ง์ ์ด๋ ์์ฃผ | โ 2026-08-07, MQTT ๊ฒฝ๋ก๋ก ์จ์ดํฌ์ธํธ 7๊ฐ ํต๊ณผ |
| ์๋๋ฆฌ์ค ์คํ | โ
3์คํ
์ ๋ถ ์ฑ๊ณต, session_id ๊ทธ๋๋ก ๋๋์์ด |
| ์ฌ๋ ์ถ์ข ์์ยท์ ์ง | โ |
| ์ถ์ข ์ค STOP | โ 1์ด ์์ ์ ์ง |
| 1Hz ์ํ ๋ฐํ | โ |
| ๋ชฉ์ ์ง ๋ชฉ๋ก(retained) | โ |
state.commands_accepted (5์ ์ ์) |
โฌ ์ ์ ๋จ๊ณ โ ๋ฏธ๊ตฌํ |
| ์ถฉ์ ์์น ๋ณต๊ท | โฌ ๋ฏธ๊ฒ์ฆ |
| ๋ก๋ดํ ์ฐ๋ ์ ์ฒด ํ๋ฆ | โฌ ๋ฏธ์ํ |