์ค์ผ์คํธ๋ ์ด์ ๊ตฌ์ฑ์ ์ํ์ จ์ผ๋ฉด ์ค์ผ์คํธ๋ ์ด์ ๊ตฌ์ฑ๋ถํฐ ํด์ฃผ์๊ธธ ๋ฐ๋๋๋ค!
[์ค์ผ์คํฌ๋ ์ด์ ๊ตฌ์ฑ] => https://github.com/KopenSDI/SDI-Orchestration
- ๋ฆฌํฌ์งํฐ๋ฆฌ ๊ตฌ์กฐ
- ํ๊ฒฝ ์ค์ ๋ฐ ๋ฒ์
- ํ๋ก์ธ์ค ์ญํ
- ํ๋ก์ธ์ค ์ค์น
- ํ๋ก์ธ์ค ์คํ
- ์คํฌ๋ฆฝํธ ์ฌ์ฉ ๊ฐ์ด๋
- ์ฐธ๊ณ ๋ฌธ์
SDR_DEVICE/ # TurtleBot Raspberry Pi ์ธก ์ ์ฉ ๋๋ ํฐ๋ฆฌ
โโโ src/ # ์์ค ์ฝ๋
โ โโโ exporter.py # โณ ROS โ metric-collector ๋ธ๋ฆฟ์ง (Python 3 Node)
โโโ scripts/ # ์คํ ์คํฌ๋ฆฝํธ๋ค
โ โโโ etri-setup/ # โณ ETRI ํ๊ฒฝ ์ค์ ์คํฌ๋ฆฝํธ
โ โ โโโ k3s/ # โณ K3s ํด๋ฌ์คํฐ ์ค์ ๋ฐ ๊ด๋ฆฌ ์คํฌ๋ฆฝํธ
โ โ โ โโโ 01.sync-time-from-server.sh
โ โ โ โโโ 02.k3s-auto-join.sh
โ โ โ โโโ 03.load-docker-images.sh
โ โ โ โโโ save-docker-images.sh
โ โ โ โโโ remove-k3s.sh
โ โ โ โโโ README.md
โ โ โ โโโ CONFIGURATION.md
โ โ โโโ network/ # โณ ๋คํธ์ํฌ ์ธ๋ถ๋ง ์ฐจ๋จ/๋ณต๊ตฌ ์คํฌ๋ฆฝํธ
โ โ โ โโโ 01.block_network_option.sh
โ โ โ โโโ 04.restore_network_option.sh
โ โ โ โโโ README.md
โ โ โโโ turtlebot3/ # โณ TurtleBot3 ๊ด๋ จ ์คํฌ๋ฆฝํธ
โ โ โโโ bringup-turtlebot-discovery.sh
โ โ โโโ README.md
โ โ โโโ CONFIGURATION.md
โ โโโ run_exporter.sh # โณ ์คํ ๋ํผ: ENV ์ฃผ์
+ ROS setup + exporter ํธ์ถ
โโโ README.md # โณ (ํ์ฌ) ์ฌ์ฉ์ ๊ฐ์ด๋
| ํญ๋ชฉ | ๋ฒ์ / ์ธ๋ถ ์ ๋ณด |
|---|---|
| ROS 2 | ros2-jazzy |
| Operating System | Ubuntu 24.04.2 LTS |
| Kernel | Linux 6.8.0-1028-raspi |
| Architecture | arm64 |
| k3s | v1.32.5+k3s1 |
| Container Runtime | containerd://2.0.5-k3s1.32 |
| ๊ฒฝ๋ก | ์ ํ | ํต์ฌ ๊ธฐ๋ฅ |
|---|---|---|
| src/exporter.py | Python 3 | /battery_stateยท/amcl_pose ๊ตฌ๋
ย โย 5โฏ์ด๋ง๋ค metric-collector ๋ฐํย ย (ํ:ย turtlebot.telemetry) |
| scripts/run_exporter.sh | Bash | metric-collectorยทRobot ์๋ณ ENV๋ฅผ ์ค์ ํ๊ณ python3 ../src/exporter.py ์คํ |
| scripts/etri-setup/k3s/ | Shell | K3s ํด๋ฌ์คํฐ ์ค์ , ์๊ฐ ๋๊ธฐํ, Docker ์ด๋ฏธ์ง ๊ด๋ฆฌ ์คํฌ๋ฆฝํธ |
| scripts/etri-setup/network/ | Shell | ๋คํธ์ํฌ ์ธ๋ถ๋ง ์ฐจ๋จ ๋ฐ ๋ณต๊ตฌ ์คํฌ๋ฆฝํธ |
| scripts/etri-setup/turtlebot3/ | Shell | TurtleBot3 bringup ๋ฐ Discovery Server ์ค์ ์คํฌ๋ฆฝํธ |
| README.md | Markdown | ํ๋ก์ ํธ ์ ์ฒด ๊ฐ์ด๋ ๋ฐ ์คํฌ๋ฆฝํธ ์ฌ์ฉ๋ฒ |
- ๐ก run_exporter: ํฐํ๋ด์ ๋ฐฐํฐ๋ฆฌ ์ํ์ ์์น ์ ๋ณด๋ฅผ ์ค์๊ฐ์ผ๋ก ์์งํด Metric-Collector์ ์ ์กํ๋ ์ต์คํฌํฐ ํ๋ก์ธ์ค
ROS 2 ํ ํฝ (/battery_state & /amcl_pose)
โ (QoS ์ค์ BEST_EFFORT / RELIABLE)
โผ
ExporterNode (rclpy)
โ battery_callback โโ ์ ์ยทํผ์ผํธ ์ค์๊ฐ ์ ์ฅ
โ pose_callback โโ XยทY ์ขํ ์ ์ฅ
โ publish_telemetry() โโ 5ย ์ด๋ง๋ค metric-collector ๋ฐํ
โผ
metric-collectorย Queue โโ "turtlebot.telemetry" (durable)
- ๋ฉ์์ง ์์(JSON)*
git clone https://github.com/sungmin306/SDI-Turtlebot-Setting.git
cd SDI-Turtlebot-Setting/KETI_TURTLEBOT
sudo apt install -y python3-pika # ํฐํ๋ด ๋ฉํธ๋ฆญ ๋ฐ์ดํฐ ๊ด๋ จ ์์กด์ฑ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์นvi scripts/run_exporter.sh # ์ฃผ์ ์ฒ๋ฆฌ๋ ๋ถ๋ถ์ ๋ณธ์ธ ํ๊ฒฝ์ ๋ง๊ฒ ์์ (์ฃผ์ ์ค๋ช
์ฐธ๊ณ )/tfยท/amcl_pose ๋ฑ ์์น ๊ด๋ จ ROS ํ ํฝ์ ์ ์ ์์ ํ ์ ์๋ค.

์์ ๊ฐ์ด RViz์์ Initial Pose ํ ๋น ํ SLAM ๋งต์ ์์ฑํ๋ฉด
/amcl_poseํ ํฝ์ ์ขํ๊ฐ ๋ค์ด์ค๊ธฐ ์์ํ๋ค.
๊ฒฐ๊ณผ ์์:
# 1) ํฐํ๋ด bringup(ํฐํ๋ด์์ ์คํ)
ros2 launch turtlebot3_bringup robot.launch.py
# 2) SLAM ๋งต ํ๋(ํฐํ๋ด-Remote-PC์์ ์คํ)
ros2 launch turtlebot3_cartographer cartographer.launch.py # ๊ณต์ ๊ฐ์ด๋ ์ฐธ๊ณ
# 3) Navigation ํ์ฑํ(ํฐํ๋ด-Remote-PC ์์ ์คํ)
ros2 launch turtlebot3_navigation2 navigation2.launch.py # ๊ณต์ ๊ฐ์ด๋ ์ฐธ๊ณ
# 4) ๋ฐ์ดํฐ ์์ง ํ๋ก์ธ์ค ์คํ(ํฐํ๋ด์์ ์คํ)
./scripts/run_exporter.sh # SDI-์ค์ผ์ค๋ฌ ์ฌ์ฉ์ ๊ผญ ํ์ํฉ๋๋ค.์คํ ๊ฒฐ๊ณผ
์ค์ SLAM ๋จ๊ณ์์ ์์ฑํ ๋งต(.pgm & .yaml)์ ์ ์ฅํ ๋ค Navigation์ ์คํํด์ผ ์์น ํ ํฝ์ด ์ ์์ ์ผ๋ก ๊ฒ์๋๋ค.
K3s ํด๋ฌ์คํฐ ์ค์ ๋ฐ ๊ด๋ฆฌ๋ฅผ ์ํ ์คํฌ๋ฆฝํธ๋ค์ด scripts/etri-setup/k3s/ ๋๋ ํ ๋ฆฌ์ ์์ต๋๋ค.
์ฃผ์ ์คํฌ๋ฆฝํธ:
01.sync-time-from-server.sh: ์๋ฒ ์๊ฐ ๋๊ธฐํ02.k3s-auto-join.sh: K3s ํด๋ฌ์คํฐ ์๋ ์กฐ์ธ03.load-docker-images.sh: Docker ์ด๋ฏธ์ง ๋ก๋save-docker-images.sh: Docker ์ด๋ฏธ์ง ์ ์ฅremove-k3s.sh: K3s ์ ๊ฑฐ
์์ธํ ์ฌ์ฉ๋ฒ์ scripts/etri-setup/k3s/README.md ๋ฐ scripts/etri-setup/k3s/CONFIGURATION.md๋ฅผ ์ฐธ๊ณ ํ์ธ์.
๋คํธ์ํฌ ์ธ๋ถ๋ง ์ฐจ๋จ ๋ฐ ๋ณต๊ตฌ๋ฅผ ์ํ ์คํฌ๋ฆฝํธ๋ค์ด scripts/etri-setup/network/ ๋๋ ํ ๋ฆฌ์ ์์ต๋๋ค.
์ฃผ์ ์คํฌ๋ฆฝํธ:
01.block_network_option.sh: ์ธ๋ถ ๋คํธ์ํฌ ์ฐจ๋จ04.restore_network_option.sh: ๋คํธ์ํฌ ๋ณต๊ตฌ
์์ธํ ์ฌ์ฉ๋ฒ์ scripts/etri-setup/network/README.md๋ฅผ ์ฐธ๊ณ ํ์ธ์.
TurtleBot3 ๊ด๋ จ ์คํฌ๋ฆฝํธ๋ค์ด scripts/etri-setup/turtlebot3/ ๋๋ ํ ๋ฆฌ์ ์์ต๋๋ค.
์ฃผ์ ์คํฌ๋ฆฝํธ:
bringup-turtlebot-discovery.sh: Discovery Server๋ฅผ ์ฌ์ฉํ TurtleBot3 bringup
์์ธํ ์ฌ์ฉ๋ฒ์ scripts/etri-setup/turtlebot3/README.md ๋ฐ scripts/etri-setup/turtlebot3/CONFIGURATION.md๋ฅผ ์ฐธ๊ณ ํ์ธ์.
- ๊ฐ ์คํฌ๋ฆฝํธ ๋๋ ํ ๋ฆฌ์
CONFIGURATION.mdํ์ผ์์ IP ์ฃผ์ ์ค์ ๋ฐฉ๋ฒ์ ํ์ธํ์ธ์. - ํ๋์ฝ๋ฉ๋ IP ์ฃผ์๊ฐ ์๋ ๊ฒฝ์ฐ ํ๊ฒฝ์ ๋ง๊ฒ ์์ ํด์ผ ํฉ๋๋ค.
๋ค์ ํ์ผ๋ค์ .gitignore๋ก ์ธํด ์ ์ฅ์์ ํฌํจ๋์ง ์์ต๋๋ค. K3s ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด scripts/etri-setup/k3s/ ๋๋ ํ ๋ฆฌ์ ์ง์ ์ค์นํด์ผ ํฉ๋๋ค.
| ๊ฒฝ๋ก | ์ค๋ช | ์ค์น ๋ฐฉ๋ฒ |
|---|---|---|
scripts/etri-setup/k3s/k3s |
K3s ๋ฐ์ด๋๋ฆฌ ํ์ผ | K3s ๊ณต์ ๋ฆด๋ฆฌ์ค์์ arm64 ๋ฒ์ ๋ค์ด๋ก๋ |
scripts/etri-setup/k3s/k3s-airgap-assets-v1.33.4+k3s1-arm64/ |
Air-gap ์ค์น ํจํค์ง | ๋์ผ ๋ฆด๋ฆฌ์ค ํ์ด์ง์ airgap assets ๋ค์ด๋ก๋ ๋๋ ๋ด๋ถ ๋ฐฐํฌ ์๋ฒ์์ ๋ณต์ฌ |
์ฃผ์: ์ ํ์ผ๋ค์ด ์์ผ๋ฉด
02.k3s-auto-join.sh,03.load-docker-images.sh๋ฑ K3s ๊ด๋ จ ์คํฌ๋ฆฝํธ๊ฐ ์ ์ ๋์ํ์ง ์์ต๋๋ค.
| ์ฃผ์ | ๋งํฌ |
|---|---|
| SLAM ์ค์ | https://emanual.robotis.com/docs/en/platform/turtlebot3/slam/#run-slam-node |
| Navigation ์ค์ | https://emanual.robotis.com/docs/en/platform/turtlebot3/navigation/#run-navigation-nodes |
| SDI-Orchestration | https://github.com/KopenSDI/SDI-Orchestration |

{ "ts": 1719123456789012345, // epochโns "bot": "tb3-alpha", "type": "telemetry", "battery": { "percentage": 0.83, "voltage": 11.8, "wh": 16.583 }, "pose": { "x": 4.16, "y": -1.92 } }