Sequence Diagram - addinedu-ros-8th/ros-repo-3 GitHub Wiki

1. ์‚ฌ์šฉ์ž ๋‹จ๋ง ์ดˆ๊ธฐํ™” ๋ฐ ์ธ์ฆ (user_authentication)

@startuml
title ์‚ฌ์šฉ์ž ๋‹จ๋ง ์ดˆ๊ธฐํ™” ๋ฐ ์ธ์ฆ ํ๋ฆ„ (๊ณตํ†ต)

actor ์‚ฌ์šฉ์ž as User
participant "GUI\n(Staff ๋˜๋Š” Manager)" as GUI
participant "Main Service" as Main
database "์‚ฌ์šฉ์ž DB" as DB

== GUI ์‹คํ–‰ ๋ฐ ์„œ๋ฒ„ ์—ฐ๊ฒฐ ==

User -> GUI : ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰
activate GUI
GUI -> Main : ์„œ๋ฒ„ ์—ฐ๊ฒฐ ์š”์ฒญ
activate Main
Main --> GUI : ์„œ๋ฒ„ ์—ฐ๊ฒฐ ์„ฑ๊ณต ์‘๋‹ต
deactivate Main

alt ์„œ๋ฒ„ ์—ฐ๊ฒฐ์ด ์„ฑ๊ณตํ•œ ๊ฒฝ์šฐ
    GUI -> GUI : ๋กœ๊ทธ์ธ ํ™”๋ฉด ํ‘œ์‹œ
    User -> GUI : ์•„์ด๋”” ๋ฐ ๋น„๋ฐ€๋ฒˆํ˜ธ ์ž…๋ ฅ
    GUI -> Main : ๋กœ๊ทธ์ธ ์š”์ฒญ ์ „๋‹ฌ
    activate Main

    Main -> DB : ์‚ฌ์šฉ์ž ์ •๋ณด ์กฐํšŒ
    activate DB
    DB --> Main : ์‚ฌ์šฉ์ž ์ •๋ณด ๋ฐ˜ํ™˜ (์—ญํ• , ์ธ์ฆ ์ •๋ณด ๋“ฑ)
    deactivate DB

    Main -> Main : ๋น„๋ฐ€๋ฒˆํ˜ธ ๊ฒ€์ฆ

    alt ๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ์ผ์น˜ํ•˜๋Š” ๊ฒฝ์šฐ
        alt ์‚ฌ์šฉ์ž๊ฐ€ Staff์ธ ๊ฒฝ์šฐ
            Main -> DB : GUI ๋ ˆ์ด์•„์›ƒ ๋ฐ์ดํ„ฐ ์กฐํšŒ
            activate DB
            DB --> Main : ๋ ˆ์ด์•„์›ƒ ๋ฐ์ดํ„ฐ ๋ฐ˜ํ™˜
            deactivate DB
            Main --> GUI : ๋กœ๊ทธ์ธ ์„ฑ๊ณต (์—ญํ• : Staff)
        else ์‚ฌ์šฉ์ž๊ฐ€ Manager์ธ ๊ฒฝ์šฐ
            Main -> DB : ๋Œ€์‹œ๋ณด๋“œ ๋ฐ์ดํ„ฐ ์กฐํšŒ
            activate DB
            DB --> Main : ๊ด€๋ฆฌ์ž ๋Œ€์‹œ๋ณด๋“œ ์ •๋ณด ๋ฐ˜ํ™˜
            deactivate DB
            Main --> GUI : ๋กœ๊ทธ์ธ ์„ฑ๊ณต (์—ญํ• : Manager)
        end
    else ๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ํ‹€๋ฆฐ ๊ฒฝ์šฐ
        Main --> GUI : ๋กœ๊ทธ์ธ ์‹คํŒจ (์‚ฌ์œ : ์ธ์ฆ ์‹คํŒจ)
    end

    deactivate Main
else ์„œ๋ฒ„ ์—ฐ๊ฒฐ์ด ์‹คํŒจํ•œ ๊ฒฝ์šฐ
    GUI -> GUI : ์—ฐ๊ฒฐ ์‹คํŒจ ๋ฉ”์‹œ์ง€ ํ‘œ์‹œ
end
deactivate GUI
@enduml

2. ์žฌ๊ณ  ์กฐํšŒ ๋ฐ ์š”์ฒญ (inventory_request_flow)

2-1. ์ƒํ’ˆ ์ •๋ณด ์กฐํšŒ

@startuml
title [IS] ์ƒํ’ˆ ์ •๋ณด ์กฐํšŒ ๋ฐ ์žฅ๋ฐ”๊ตฌ๋‹ˆ ๋‹ด๊ธฐ ํ๋ฆ„

actor ์‚ฌ์šฉ์ž as User
participant "Staff ์ „์šฉ GUI" as Staff
participant "Main Service" as Main
database "์ƒํ’ˆ ๊ด€๋ จ DB\n(QR์ฝ”๋“œ, ์žฌ๊ณ , ๋ชจ๋ธ, ์œ„์น˜)" as DB

== QR ์Šค์บ” ๋ฐ ์ƒํ’ˆ ์กฐํšŒ ==

User -> Staff : QR์ฝ”๋“œ ์Šค์บ”
activate Staff
Staff -> Staff : QR์ฝ”๋“œ ๋ฐ์ดํ„ฐ ํŒŒ์‹ฑ (์˜ˆ: QR20250430X001)

Staff -> Main : QR์ฝ”๋“œ ๊ธฐ๋ฐ˜ ์ƒํ’ˆ ์กฐํšŒ ์š”์ฒญ
activate Main
Main -> DB : ์ƒํ’ˆ ์ •๋ณด, ์žฌ๊ณ , ์œ„์น˜ ์ •๋ณด ์กฐํšŒ
activate DB
DB --> Main : ์ƒํ’ˆ๋ช…, ์‚ฌ์ด์ฆˆ, ์ƒ‰์ƒ, ์žฌ๊ณ  ์ˆ˜๋Ÿ‰, ๋ณด๊ด€ ์œ„์น˜ ๋ฐ˜ํ™˜
deactivate DB
Main --> Staff : ์ƒํ’ˆ ์ƒ์„ธ ์ •๋ณด ์‘๋‹ต
deactivate Main

Staff -> Staff : ํ™”๋ฉด์— ์ƒํ’ˆ ์ •๋ณด ํ‘œ์‹œ

== ์žฅ๋ฐ”๊ตฌ๋‹ˆ ๋‹ด๊ธฐ ==

User -> Staff : "์žฅ๋ฐ”๊ตฌ๋‹ˆ ๋‹ด๊ธฐ" ์„ ํƒ
Staff -> Staff : ์žฅ๋ฐ”๊ตฌ๋‹ˆ ๋ชฉ๋ก์— ํ•ญ๋ชฉ ์ถ”๊ฐ€
Staff -> Staff : ์žฅ๋ฐ”๊ตฌ๋‹ˆ UI ๊ฐฑ์‹ 

deactivate Staff
@enduml

2-2. ์ƒํ’ˆ ์š”์ฒญ

@startuml
title [๋ฐฐ์†ก] ๋กœ๋ด‡์„ ํ†ตํ•œ ์žฌ๊ณ  ํ”ฝ์—… ๋ฐ ์‘๋‹ต ํ๋ฆ„ (์ˆ˜์ •๋จ)

actor ์‚ฌ์šฉ์ž as User
participant "Staff GUI" as GUI
participant "Main Service" as Main
participant "Mobile Controller" as Robot
database "RosCars DB\n(์ž‘์—…, ๋ฐฐ์†ก, ์‹ ๋ฐœ ๋ชจ๋ธ, ์œ„์น˜)" as DB

== ์žฌ๊ณ  ์š”์ฒญ ์‹œ์ž‘ ==

User -> GUI : "๋ฐฐ์†ก ์š”์ฒญ" ๋ฒ„ํŠผ ํด๋ฆญ
activate GUI
GUI -> Main : ์žฌ๊ณ  ์š”์ฒญ ์ „๋‹ฌ (์ƒํ’ˆ ๋ชฉ๋ก ํฌํ•จ)
activate Main

note right of Main
์˜ˆ์‹œ:
- ๋‚˜์ดํ‚ค 101 ๋ชจ๋ธ, ์ˆ˜๋Ÿ‰ 2๊ฐœ, ์œ„์น˜ 1  
- ๋‚˜์ดํ‚ค 103 ๋ชจ๋ธ, ์ˆ˜๋Ÿ‰ 1๊ฐœ, ์œ„์น˜ 2
end note

Main -> DB : ์ƒˆ๋กœ์šด ๋ฐฐ์†ก ์š”์ฒญ ์ƒ์„ฑ (์ƒํƒœ: ์ค€๋น„ ์ค‘)
activate DB
DB --> Main : ์ƒ์„ฑ๋œ ๋ฐฐ์†ก ID ๋ฐ˜ํ™˜ (์˜ˆ: DEL-501)
deactivate DB

== ๋ฐฐ์†ก ์ž‘์—… ์ƒ์„ฑ ==

loop ์ƒํ’ˆ ๋ชฉ๋ก ๋ฐ˜๋ณต
    loop ์ˆ˜๋Ÿ‰๋งŒํผ ๋ฐ˜๋ณต
        Main -> DB : ๋ฐฐ์†ก ์ž‘์—…(Task) ์ •๋ณด ์š”์ฒญ (๋ฐฐ์†ก ID ํฌํ•จ)
        activate DB
        DB --> Main : ์ž‘์—… ID ๋ฐ˜ํ™˜
        deactivate DB
    end
end

== ๋กœ๋ด‡ ๋ช…๋ น ์ „๋‹ฌ ๋ฐ ์ด๋™ ==

Main -> Robot : ํ”ฝ์—… ๋ช…๋ น ์ „์†ก (๋ฐฐ์†ก ID, ์ž‘์—… ID ๋ชฉ๋ก ํฌํ•จ)
activate Robot
Robot -> DB : ๊ฒฝ๋กœ ์ด๋™ ๋ฐ ์žฌ๊ณ  ์ •๋ณด ์—…๋ฐ์ดํŠธ
activate DB
DB --> Robot : ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ ์‘๋‹ต
deactivate DB
Robot -> Main : ๋„์ฐฉ ๋ณด๊ณ  (๋ฐฐ์†ก ์™„๋ฃŒ ์ƒํƒœ ์ „๋‹ฌ)
deactivate Robot

== ์‘๋‹ต ๋ฐ UI ์ฒ˜๋ฆฌ ==

Main --> GUI : ๋ฐฐ์†ก ์‘๋‹ต ์ „์†ก (๋ฐฐ์†ก ID, ์ž‘์—… ์ƒํƒœ ํฌํ•จ)
deactivate Main
GUI -> GUI : ๋ฐฐ์†ก ์ƒํƒœ ํ‘œ์‹œ (์˜ˆ: ๋ฐฐ์†ก์ค‘)
GUI -> GUI : ์žฅ๋ฐ”๊ตฌ๋‹ˆ ๋น„์šฐ๊ธฐ ๋ฐ UI ๊ฐฑ์‹ 
deactivate GUI

@enduml

3. ์ž‘์—… ์ƒ์„ฑ ๋ฐ ๋กœ๋ด‡ ํ• ๋‹น (task_assignment_flow)

@startuml
title [๋ฐฐ์†ก] ์ž‘์—… ์ƒ์„ฑ ๋ฐ ๋กœ๋ด‡ ํ• ๋‹น ํ๋ฆ„

actor ์‚ฌ์šฉ์ž as User
participant "Staff GUI" as Staff
participant "Main Service" as Main
participant "Mobile Controller" as Mobile
database "RosCars DB\n(Task, Delivery, RosCars)" as DB

== ์ž‘์—… ์š”์ฒญ ์‹œ์ž‘ ==

User -> Staff : "์ž‘์—… ์š”์ฒญ" ํด๋ฆญ
activate Staff
Staff -> Main : ์ž‘์—… ์ƒ์„ฑ ์š”์ฒญ (์•„์ดํ…œ, ์ถœ๋ฐœ์ง€, ๋„์ฐฉ์ง€ ํฌํ•จ)
deactivate Staff

activate Main
Main -> DB : ๋ฐฐ์†ก ๋ฐ ์ž‘์—… ์ •๋ณด ๋“ฑ๋ก (์ƒํƒœ: ๋Œ€๊ธฐ ์ค‘)
activate DB
DB --> Main : ๋ฐฐ์†ก ID, ์ž‘์—… ID ๋ฐ˜ํ™˜
deactivate DB

== ๋กœ๋ด‡ ํ• ๋‹น ==

Main -> DB : ๋Œ€๊ธฐ ์ค‘์ธ ๋กœ๋ด‡ ์กฐํšŒ
activate DB
DB --> Main : ์‚ฌ์šฉ ๊ฐ€๋Šฅ ๋กœ๋ด‡ ๋ชฉ๋ก ๋ฐ˜ํ™˜ (์˜ˆ: RB01, RB02)
deactivate DB

Main -> Main : ์ตœ์  ๋กœ๋ด‡ ์„ ์ • (์˜ˆ: RB01)

Main -> Mobile : ์ž‘์—… ํ• ๋‹น ์š”์ฒญ (์ž‘์—… ID, ๊ฒฝ๋กœ ์ •๋ณด ํฌํ•จ)
activate Mobile
Mobile -> Main : ์ž‘์—… ์ˆ˜๋ฝ ์—ฌ๋ถ€ ์‘๋‹ต

alt ๋กœ๋ด‡์ด ์ž‘์—… ์ˆ˜๋ฝํ•œ ๊ฒฝ์šฐ
    Main -> DB : ์ž‘์—… ๋ฐ ๋ฐฐ์†ก ์ƒํƒœ ๊ฐฑ์‹  (์ง„ํ–‰ ์ค‘)
    activate DB
    DB --> Main : ์™„๋ฃŒ
    deactivate DB
else ๋กœ๋ด‡์ด ์ˆ˜๋ฝ ๊ฑฐ๋ถ€ํ•œ ๊ฒฝ์šฐ
    Main -> Main : ์žฌํ• ๋‹น ์‹œ๋„ ๋˜๋Š” ๋Œ€๊ธฐ์—ด ๋“ฑ๋ก
end
deactivate Mobile

== ์ž‘์—… ์ง„ํ–‰ ์ค‘ ==

loop ์ž‘์—… ์ง„ํ–‰ ์ค‘ ๋ฐ˜๋ณต
    Mobile -> Main : ์ž‘์—… ์œ„์น˜ ๋ฐ ์ง„ํ–‰๋ฅ  ์—…๋ฐ์ดํŠธ
    Main -> DB : ์ž‘์—… ์ •๋ณด ๊ฐฑ์‹ 
end

== ์ •๋ฐ€ ์ •์ง€ ์š”์ฒญ ๋ฐ ์ฒ˜๋ฆฌ ==

Mobile -> Main : ์ •๋ฐ€ ์ •์ง€ ์š”์ฒญ (์ž‘์—… ID, ์œ„์น˜)
Main -> Mobile : ์ •๋ฐ€ ์ •์ง€ ๋ช…๋ น ์ „๋‹ฌ (๋ชฉํ‘œ ์œ„์น˜, ํ—ˆ์šฉ ์˜ค์ฐจ ํฌํ•จ)
Mobile -> Mobile : ์ •๋ฐ€ ์ •์ง€ ์ œ์–ด ์ˆ˜ํ–‰

alt ์ •๋ฐ€ ์ •์ง€ ์„ฑ๊ณต
    Mobile -> Main : ์ •๋ฐ€ ์ •์ง€ ์„ฑ๊ณต ์‘๋‹ต
else ์ •๋ฐ€ ์ •์ง€ ์‹คํŒจ
    Mobile -> Main : ์ •๋ฐ€ ์ •์ง€ ์‹คํŒจ ์‘๋‹ต (ํŽธ์ฐจ ํฌํ•จ)
    Main -> Main : ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๋˜๋Š” ์ˆ˜๋™ ๊ฐœ์ž… ๋กœ์ง ์‹คํ–‰
end

== ์ž‘์—… ์™„๋ฃŒ ์ฒ˜๋ฆฌ ==

Mobile -> Main : ์ž‘์—… ์™„๋ฃŒ ๋ณด๊ณ  (์„ฑ๊ณต ์—ฌ๋ถ€ ํฌํ•จ)
Main -> DB : ์ž‘์—… ๋ฐ ๋ฐฐ์†ก ์ƒํƒœ ์™„๋ฃŒ๋กœ ๊ฐฑ์‹ , ์™„๋ฃŒ ์‹œ๊ฐ„ ์ €์žฅ
DB --> Main : ์ €์žฅ ์™„๋ฃŒ

Main --> Staff : ์ž‘์—… ์ƒ์„ฑ ๊ฒฐ๊ณผ ์‘๋‹ต (์ž‘์—… ID, ์„ฑ๊ณต ์—ฌ๋ถ€)
deactivate Main

@enduml


4. ๋กœ๋ด‡ ์ƒํƒœ ๋ชจ๋‹ˆํ„ฐ๋ง ๋ฐ ๊ด€๋ฆฌ (roscar_monitoring_and_management)

@startuml
title [๊ด€๋ฆฌ์ž ๊ธฐ๋Šฅ] ๋กœ๋ด‡ ์ƒํƒœ ํ™•์ธ / ๋“ฑ๋ก / ์‚ญ์ œ ๋ฐ ์œ„์น˜ ์‹ค์‹œ๊ฐ„ ํ™•์ธ

actor ๊ด€๋ฆฌ์ž as Manager
participant "Manager GUI" as GUI
participant "Main Service" as Main
participant "Mobile Controller" as Mobile
database "RosCars DB" as DB

== ๋กœ๋ด‡ ์ƒํƒœ ํ™•์ธ, ๋“ฑ๋ก, ์‚ญ์ œ ์š”์ฒญ ==

Manager -> GUI : ๋ฉ”๋‰ด ํด๋ฆญ ๋˜๋Š” ์ •๋ณด ์ž…๋ ฅ
activate GUI
GUI -> Main : ์š”์ฒญ ์ „์†ก (์ข…๋ฅ˜ ๋ฐ ๋ฐ์ดํ„ฐ ํฌํ•จ)
deactivate GUI

activate Main
alt ์ƒํƒœ ํ™•์ธ ์š”์ฒญ์ธ ๊ฒฝ์šฐ
    Main -> Mobile : ๋กœ๋ด‡ ์ƒํƒœ ์š”์ฒญ (๋กœ๋ด‡ ID)
    activate Mobile
    Mobile --> Main : ๋กœ๋ด‡ ์ƒํƒœ ์ •๋ณด ์‘๋‹ต
    deactivate Mobile
    Main --> GUI : ์ƒํƒœ ์ •๋ณด ์ „๋‹ฌ
elseif ๋“ฑ๋ก ์š”์ฒญ์ธ ๊ฒฝ์šฐ
    Main -> DB : ๋กœ๋ด‡ ์ •๋ณด ๋“ฑ๋ก
    activate DB
    DB --> Main : ๋“ฑ๋ก ์™„๋ฃŒ
    deactivate DB
    Main --> GUI : ๋“ฑ๋ก ๊ฒฐ๊ณผ ์‘๋‹ต (์„ฑ๊ณต)
elseif ์‚ญ์ œ ์š”์ฒญ์ธ ๊ฒฝ์šฐ
    Main -> DB : ๋กœ๋ด‡ ์ •๋ณด ์‚ญ์ œ
    activate DB
    DB --> Main : ์‚ญ์ œ ์™„๋ฃŒ
    deactivate DB
    Main --> GUI : ์‚ญ์ œ ๊ฒฐ๊ณผ ์‘๋‹ต (์„ฑ๊ณต)
end
deactivate Main

== ๋กœ๋ด‡ ์œ„์น˜ ์‹ค์‹œ๊ฐ„ ํ™•์ธ ==

Manager -> GUI : ์œ„์น˜ ํ™•์ธ ํƒญ ํด๋ฆญ

loop ์ผ์ • ์ฃผ๊ธฐ ๋ฐ˜๋ณต (์˜ˆ: 5์ดˆ๋งˆ๋‹ค)
    GUI -> Main : ๋กœ๋ด‡ ์œ„์น˜ ์š”์ฒญ (๋กœ๋ด‡ ID)
    activate Main
    Main -> Mobile : ํ˜„์žฌ ์œ„์น˜ ์š”์ฒญ
    activate Mobile
    Mobile --> Main : ์œ„์น˜ ์ •๋ณด ์‘๋‹ต (X, Y, Z ์ขŒํ‘œ)
    deactivate Mobile
    Main --> GUI : ์œ„์น˜ ์ •๋ณด ์ „๋‹ฌ
    deactivate Main
end
@enduml


5. ๋กœ๊ทธ ๋ฐ ๊ธฐ๋ก ์กฐํšŒ ํ๋ฆ„ (log_and_audit_flow)

@startuml
title [๊ด€๋ฆฌ์ž ๊ธฐ๋Šฅ] ๋กœ๊ทธ ๋ฐ ๊ธฐ๋ก ์กฐํšŒ ํ๋ฆ„

actor ๊ด€๋ฆฌ์ž as Manager
participant "Manager GUI" as GUI
participant "Main Service" as Main
database "Log DB\n(์ž‘์—…, ์žฌ๊ณ , ๋กœ๋ด‡, ์ถœ๊ณ  ๋กœ๊ทธ ํฌํ•จ)" as DB

loop ๋กœ๊ทธ ํƒญ ํด๋ฆญ ์‹œ๋งˆ๋‹ค
    Manager -> GUI : ๋กœ๊ทธ ํƒญ ์„ ํƒ (์˜ˆ: ์ž‘์—…/์žฌ๊ณ /๋กœ๋ด‡/์ถœ๊ณ )
    activate GUI
    GUI -> Main : ๋กœ๊ทธ ์กฐํšŒ ์š”์ฒญ (์ข…๋ฅ˜, ๊ธฐ๊ฐ„, ํ‚ค์›Œ๋“œ ๋“ฑ)
    deactivate GUI

    activate Main
    Main -> DB : ๋กœ๊ทธ ๋ฐ์ดํ„ฐ ๊ฒ€์ƒ‰ ์š”์ฒญ (์กฐ๊ฑด: ๊ธฐ๊ฐ„, ์ข…๋ฅ˜, ํ‚ค์›Œ๋“œ)
    activate DB
    DB --> Main : ๋กœ๊ทธ ๊ฒฐ๊ณผ ๋ฐ˜ํ™˜ (์˜ˆ: 12๊ฑด)
    deactivate DB

    Main --> GUI : ๋กœ๊ทธ ์กฐํšŒ ์‘๋‹ต ์ „๋‹ฌ (๋กœ๊ทธ ์ข…๋ฅ˜ ๋ฐ ๊ฑด์ˆ˜ ํฌํ•จ)
    deactivate Main

    activate GUI
    GUI -> GUI : ๋กœ๊ทธ ํ…Œ์ด๋ธ” ์‹œ๊ฐํ™” ๋ฐ ํ‘œ์‹œ
    deactivate GUI
end

note right of DB
์˜ˆ์‹œ ๋กœ๊ทธ ๋ฐ์ดํ„ฐ:

[์ž‘์—… ๋กœ๊ทธ]
- TASK-1001 : ์ž‘์—… ์ทจ์†Œ๋จ
- TASK-1010 : ์ž‘์—… ์ทจ์†Œ๋จ

[๋กœ๋ด‡ ์ด๋ฒคํŠธ]
- RB-01 : ๋น„์ƒ ์ •์ง€
- RB-03 : ์ถฉ๋Œ ํšŒํ”ผ
end note
@enduml


6. ๋กœ๋ด‡ ์„ผ์„œ ๋ฐ ์ƒํƒœ ๋ณด๊ณ  ํ๋ฆ„ (sensor_and_state_reporting)

@startuml
title [๋กœ๋ด‡] ์„ผ์„œ ๋ฐ ์ƒํƒœ ๋ณด๊ณ  ํ๋ฆ„

participant "Mobile Controller" as Mobile
participant "Main Service" as Main
participant "Staff PC" as StaffPC
participant "Manager PC" as ManagerPC
database "roscar_status_log\n(๋กœ๋ด‡ ์ƒํƒœ ๊ธฐ๋ก DB)" as DB

== ๋กœ๋ด‡ ์ƒํƒœ ๋ณด๊ณ  ==

activate Mobile
Mobile -> Main : ์„ผ์„œ ๋ฐ ์ƒํƒœ ์ •๋ณด ์ „์†ก\n(๋กœ๋ด‡ ID, ๋ฐฐํ„ฐ๋ฆฌ, ์ƒํƒœ, ์„ผ์„œ, ์••๋ ฅ ๋“ฑ)
deactivate Mobile

activate Main
Main -> Main : ๋‚ด๋ถ€ ์ƒํƒœ ์ •๋ณด ๊ฐฑ์‹  ์ฒ˜๋ฆฌ

Main -> DB : ๋กœ๋ด‡ ์ƒํƒœ ๊ธฐ๋ก ์š”์ฒญ (๋กœ๊ทธ ์ €์žฅ)
activate DB
DB --> Main : ์ €์žฅ ์™„๋ฃŒ
deactivate DB

== ์ƒํƒœ ์ „ํŒŒ ==

Main -> StaffPC : ๋กœ๋ด‡ ์ƒํƒœ ์ •๋ณด ์ „์†ก (TCP ๋ฐฉ์‹)\n์˜ˆ: ๋ฐฐํ„ฐ๋ฆฌ, ์ฃผํ–‰ ์ƒํƒœ, ์••๋ ฅ
Main -> ManagerPC : ์„ผ์„œ ๋ฐ ์œ„์น˜ ์ •๋ณด ์ „์†ก (ROS2 ๋ฐฉ์‹)\n์˜ˆ: ์„ผ์„œ ์ •์ƒ, ์œ„์น˜ ์ขŒํ‘œ
deactivate Main

note right of DB
์˜ˆ์‹œ ๋ณด๊ณ  ๋‚ด์šฉ:
- ๋กœ๋ด‡ ID: RB02
- ์ž‘์—… ID: TASK-101
- ๋ฐฐํ„ฐ๋ฆฌ: 72%
- ์ƒํƒœ: ์ฃผํ–‰ ์ค‘ (DRIVING)
- ์„ผ์„œ ์ƒํƒœ: ์ •์ƒ (OK)
- ๋ณด๊ณ  ์‹œ๊ฐ: 14:03:22
end note
@enduml


7. AI ๊ธฐ๋ฐ˜ ์ธ์‹ ๋ฐ ์ถ”๋ก  ํ๋ฆ„ (ai_perception_pipeline)

@startuml
title [AI ๊ธฐ๋Šฅ] ์ธ์‹ ๋ฐ ์ถ”๋ก  ์ฒ˜๋ฆฌ ํ๋ฆ„

participant "Video Sender" as Video
participant "Object Detector" as Detector
participant "AI Module" as AI
participant "Main Service" as Main
database "InferenceResult DB" as DB

== ํ”„๋ ˆ์ž„ ์ˆ˜์‹  ๋ฐ ๋ถ„์„ ์š”์ฒญ ==

activate Video
Video -> Detector : ์˜์ƒ ํ”„๋ ˆ์ž„ ์ˆ˜์‹  (๋กœ๋ด‡ ID, ํ”„๋ ˆ์ž„ ID, ์‹œ๊ฐ„ ํฌํ•จ)
deactivate Video

activate Detector
Detector -> AI : ํ”„๋ ˆ์ž„ ๋ถ„์„ ์š”์ฒญ
deactivate Detector

== AI ์ถ”๋ก  ๋ฐ ๊ฒฐ๊ณผ ์ „๋‹ฌ ==

activate AI
AI -> AI : YOLOv8 ์ถ”๋ก  ์ˆ˜ํ–‰
AI --> Detector : ์ธ์‹ ๊ฒฐ๊ณผ ๋ฐ˜ํ™˜ (์˜ˆ: ์‚ฌ๋žŒ, 91%)
deactivate AI

== ๊ฒฐ๊ณผ ์ „์†ก ๋ฐ ํŒ๋‹จ ==

activate Detector
Detector -> Main : ์ธ์‹ ๊ฒฐ๊ณผ ์ „๋‹ฌ (๊ฐ์ฒด, ์‹ ๋ขฐ๋„, ์œ„์น˜ ํฌํ•จ)
deactivate Detector

activate Main
Main -> Main : ๊ฐ์ฒด ๊ธฐ๋ฐ˜ ์ƒํ™ฉ ํŒ๋‹จ

alt ๊ฐ์ฒด๊ฐ€ ์‚ฌ๋žŒ์ผ ๊ฒฝ์šฐ
    Main -> MobileController : ๊ธด๊ธ‰ ์ •์ง€ ์š”์ฒญ
else ๊ฐ์ฒด๊ฐ€ ํ˜‘์—…๋กœ๋ด‡์ผ ๊ฒฝ์šฐ
    Main -> MobileController : ์ผ์‹œ ์ •์ง€ ์š”์ฒญ
else ๊ธฐํƒ€ ๊ฐ์ฒด
    Main -> Main : ์ž‘์—… ์ƒํƒœ ๊ฐฑ์‹ 
end

Main -> DB : ์ธ์‹ ๊ฒฐ๊ณผ ์ €์žฅ
deactivate Main
@enduml


8. ๋กœ๋ด‡ ์ œ์–ด ๋ฐ ๋™์ž‘ ํ๋ฆ„ (roscar_control_and_motor_flow)

@startuml
title [๋กœ๋ด‡] ์ œ์–ด ๋ฐ ๋™์ž‘ ์ฒ˜๋ฆฌ ํ๋ฆ„

participant "Main Service" as Main
participant "Mobile Controller" as Mobile
participant "Motor Controller" as Motor
participant "Staff PC" as Staff
participant "Manager PC" as Manager

== ์ด๋™ ๋ช…๋ น ์‹œ์ž‘ ==

activate Main
Main -> Mobile : ๋กœ๋ด‡ ์ด๋™ ๋ช…๋ น ์ „์†ก (๋กœ๋ด‡ ID, ๋ชฉ์ ์ง€, ์†๋„)
deactivate Main

activate Mobile
Mobile -> Motor : ๊ฒฝ๋กœ ์ด๋™ ๋ช…๋ น ์‹คํ–‰ (์ด๋™ ๊ฒฝ๋กœ ํฌํ•จ)
deactivate Mobile

== ์ด๋™ ์ค‘ ์žฅ์• ๋ฌผ ๊ฐ์ง€ ==

loop ์ด๋™ ์ค‘ ๋ฐ˜๋ณต ๊ฐ์‹œ
    activate Motor
    Motor -> Mobile : ์žฅ์• ๋ฌผ ๊ฐ์ง€ ์•Œ๋ฆผ (๊ฑฐ๋ฆฌ, ๋ฐฉํ–ฅ)
    deactivate Motor

    activate Mobile
    Mobile -> Main : ์žฅ์• ๋ฌผ ์ƒํ™ฉ ๋ณด๊ณ  (๋กœ๋ด‡ ID, ๊ฑฐ๋ฆฌ, ๋ฐฉํ–ฅ)
    deactivate Mobile

    activate Main
    Main -> Mobile : ํšŒํ”ผ ๋ช…๋ น ์ „์†ก (ํšŒ์ „ ๋ฐฉํ–ฅ ๋“ฑ)
    deactivate Main

    activate Mobile
    Mobile -> Motor : ํšŒํ”ผ ๋™์ž‘ ์‹คํ–‰ ์š”์ฒญ
    deactivate Mobile
end

== ์ด๋™ ์™„๋ฃŒ ๋ฐ ํ”ผ๋“œ๋ฐฑ ์ฒ˜๋ฆฌ ==

activate Motor
Motor -> Mobile : ์ด๋™ ๊ฒฐ๊ณผ ๋ฐ ์œ„์น˜ ํ”ผ๋“œ๋ฐฑ ์ „์†ก
deactivate Motor

activate Mobile
Mobile -> Main : ๋ช…๋ น ์‹คํ–‰ ๊ฒฐ๊ณผ ๋ณด๊ณ  (๋กœ๋ด‡ ID, ์„ฑ๊ณต ์—ฌ๋ถ€)
deactivate Mobile

== ๊ฒฐ๊ณผ ์ฒ˜๋ฆฌ ==

activate Main
alt ์ด๋™์ด ์„ฑ๊ณตํ•œ ๊ฒฝ์šฐ
    Main -> Main : ์ƒํƒœ ๊ฐฑ์‹  ๋ฐ ์™„๋ฃŒ ์ฒ˜๋ฆฌ
else ์ด๋™์ด ์‹คํŒจํ•œ ๊ฒฝ์šฐ
    par Manager ๋ฐ Staff์—๊ฒŒ ์—๋Ÿฌ ๋ณด๊ณ 
        Main -> Manager : ์—๋Ÿฌ ์ •๋ณด ์ „์†ก (๋กœ๋ด‡ ID, ์˜ค๋ฅ˜ ๋‚ด์šฉ, ์‹œ๊ฐ„)
        Main -> Staff : ์—๋Ÿฌ ์ •๋ณด ์ „์†ก (๋กœ๋ด‡ ID, ์˜ค๋ฅ˜ ๋‚ด์šฉ, ์‹œ๊ฐ„)
    end
end
deactivate Main
@enduml

9. ์žฌ๊ณ  ํŒŒ์•… ๋ชจ๋“œ ๋ฐ ์ˆ˜๋™ ๊ฒ€์ˆ˜ ๊ธฐ๋Šฅ (inventory_verification_mode)

@startuml
title [๊ด€๋ฆฌ์ž ๊ธฐ๋Šฅ] ์žฌ๊ณ  ํŒŒ์•… ๋ชจ๋“œ ๋ฐ ์ˆ˜๋™ ๊ฒ€์ˆ˜ ํ๋ฆ„

actor ๊ด€๋ฆฌ์ž as Manager
participant "Manager GUI" as GUI
participant "Main Service" as Main
participant "Mobile Controller" as Mobile
database "Inventory DB\n(QR์ฝ”๋“œ, ์žฌ๊ณ , ์‹ ๋ฐœ ๋ชจ๋ธ, ๋กœ๊ทธ ํฌํ•จ)" as DB

== ์žฌ๊ณ  ํŒŒ์•… ๋ชจ๋“œ ์‹œ์ž‘ ==

Manager -> GUI : [์žฌ๊ณ  ํŒŒ์•… ๋ชจ๋“œ ์‹คํ–‰] ํด๋ฆญ
activate GUI
GUI -> Main : ์žฌ๊ณ  ํŒŒ์•… ๋ชจ๋“œ ์‹œ์ž‘ ์š”์ฒญ (๊ด€๋ฆฌ์ž ID ํฌํ•จ)
deactivate GUI

activate Main
Main -> Mobile : ์ž๋™ ์žฌ๊ณ  ์Šค์บ” ๋ช…๋ น ์ „์†ก (๋ชจ๋“œ: AUTO_SCAN)
deactivate Main

== ๋กœ๋ด‡์˜ ์Šค์บ” ๋ฐ ์กฐํšŒ ==

activate Mobile
Mobile -> Mobile : QR ๋˜๋Š” ArUco ๋งˆ์ปค ์Šค์บ” ์ˆ˜ํ–‰

Mobile -> DB : ์ƒํ’ˆ ์ •๋ณด ์กฐํšŒ ์š”์ฒญ (์Šค์บ”๋œ ์ฝ”๋“œ ๊ธฐ๋ฐ˜)
activate DB
DB --> Mobile : ์ƒํ’ˆ๋ช…, ์‚ฌ์ด์ฆˆ, ์ˆ˜๋Ÿ‰, ๋ณด๊ด€ ์œ„์น˜ ๋“ฑ ์‘๋‹ต
deactivate DB

Mobile -> DB : ์žฌ๊ณ  ์ด๋ฒคํŠธ ๊ธฐ๋ก (์Šค์บ” ๊ฒฐ๊ณผ ์ €์žฅ)
activate DB
DB --> Mobile : ๊ธฐ๋ก ์™„๋ฃŒ
deactivate DB

Mobile -> Main : ์žฌ๊ณ  ์Šค์บ” ๊ฒฐ๊ณผ ์ „๋‹ฌ (์ƒํ’ˆ ์ƒ์„ธ ์ •๋ณด ํฌํ•จ)
deactivate Mobile

== ๊ฒฐ๊ณผ ํ‘œ์‹œ ==

activate Main
Main -> GUI : ์Šค์บ” ๊ฒฐ๊ณผ ์‘๋‹ต ์ „๋‹ฌ (ํ™”๋ฉด์— ํ‘œ์‹œํ•  ์ •๋ณด ํฌํ•จ)
deactivate Main
@enduml