모듈과 패키지 활용
MechDog의 강력한 기능들을 모듈로 관리하고 활용하기
🎯 학습 목표
- • 모듈 import와 패키지 사용법 이해하기
- • MechDog 실제 코드에서 모듈 활용 방법 배우기
- • 시간, 수학, 랜덤 모듈 활용하기
- • 센서 데이터 처리를 위한 모듈 조합 사용법
📖 모듈과 패키지 배우기
🤔 모듈이란 무엇일까요?
모듈은 다른 파일의 코드를 가져와서 사용하는 기능입니다. 마치 친구가 만든 레시피를 빌려와서 요리하는 것처럼, 다른 사람이 만든 코드를 가져와서 사용할 수 있습니다.
🏠 실생활 비유
- • 도서관: 필요한 책을 빌려와서 사용
- • 공구함: 필요한 도구를 꺼내서 사용
- • 부품상자: 필요한 부품을 찾아서 조립
📦 패키지란 무엇일까요?
패키지는 여러 모듈들을 모아놓은 폴더입니다. 마치 도서관의 책들이 주제별로 서가에 정리되어 있는 것처럼, 관련된 모듈들을 하나의 패키지로 묶어서 관리합니다.
📚 모듈 vs 패키지
- • 모듈: 하나의 .py 파일 (예: math.py)
- • 패키지: 여러 .py 파일이 담긴 폴더
- • 예시: HW_MechDog 패키지 안에 여러 모듈들
🗂️ MechDog 패키지 구조
HW_MechDog/ # 패키지 폴더
├── __init__.py # 패키지 초기화 파일
├── MechDog.py # MechDog 클래스 모듈
├── actions.py # 동작 관련 모듈
└── sensors.py # 센서 관련 모듈
💡 패키지 사용 예시
# 패키지에서 특정 모듈 가져오기
from HW_MechDog import MechDog # HW_MechDog 패키지의 MechDog 모듈
from Hiwonder_IIC import I2CSonar # Hiwonder_IIC 패키지의 I2CSonar 모듈
# 패키지 전체 가져오기
import HW_MechDog # 패키지 전체를 가져옴
dog = HW_MechDog.MechDog() # 패키지명.클래스명으로 사용
🤔 파이썬에는 헤더 파일이 없나요?
파이썬은 헤더 파일(.h)이 없습니다! C/C++과 달리 파이썬은 더 간단한 방식을 사용합니다.
📄 C/C++ 방식
// math.h (헤더 파일)
int add(int a, int b);
// math.c (구현 파일)
#include "math.h"
int add(int a, int b) {
return a + b;
}
// main.c (사용)
#include "math.h"
선언과 구현이 분리됨
🐍 Python 방식
# math.py (모듈 파일)
def add(a, b):
return a + b
# main.py (사용)
import math
result = math.add(1, 2)
하나의 파일에 모든 것이 포함됨
✨ 파이썬의 장점
- • 간단함: 헤더 파일 없이 바로 import로 사용
- • 자동 처리: 컴파일 과정 없이 인터프리터가 자동으로 처리
- • 동적 타입: 타입 선언 없이 유연하게 사용 가능
- • __init__.py: 패키지 초기화 파일이 헤더 파일과 비슷한 역할
📊 모듈과 패키지 완벽 정리
| 구분 | 모듈 (Module) | 패키지 (Package) |
|---|---|---|
| 정의 | 하나의 .py 파일 | 여러 모듈을 담은 폴더 |
| 예시 | math.py, time.py | HW_MechDog/, Hiwonder_IIC/ |
| 구조 | 단일 파일 | 폴더 + __init__.py + 여러 .py 파일 |
| import | import module_name |
from package import module |
| 용도 | 특정 기능 구현 | 관련 기능들을 체계적으로 관리 |
💡 핵심 포인트: 모듈은 레고 블록 하나, 패키지는 레고 블록 세트입니다!
🤖 MechDog 모듈과 패키지 활용
실제 MechDog 코드에서는 이런 모듈들을 사용합니다:
📝 기본 모듈들
import Hiwonder # 로봇 제어
import time # 시간 관리
from HW_MechDog import MechDog # 로봇 클래스
🎯 센서 모듈들
import Hiwonder_IIC # I2C 통신
from HW_MechDog import MechDog
import math # 수학 계산
📥 import 방법들과 실제 사용 예시
모듈을 가져오는 방법은 여러 가지가 있습니다:
📝 전체 가져오기
import math
import time
# 사용 예시
result = math.sqrt(16)
time.sleep(1)
모듈명.함수명으로 사용
🎯 부분 가져오기
from math import sqrt, pi
from time import sleep
# 사용 예시
result = sqrt(16)
sleep(1)
함수명만으로 바로 사용
🏷️ 별명 사용하기
import numpy as np
import pandas as pd
# 사용 예시
arr = np.array([1, 2, 3])
df = pd.DataFrame()
긴 이름을 짧게 줄여서 사용
🌟 실제 사용 예시: 다양한 import 방법 조합
1️⃣ 전체 모듈 가져오기
import math
import time
import random
# 사용법: 모듈명.함수명
distance = math.sqrt(3**2 + 4**2)
print(f"거리: {distance}")
time.sleep(1)
number = random.randint(1, 100)
모듈 전체를 가져와서 모듈명.함수명으로 사용
2️⃣ 특정 함수만 가져오기
from datetime import datetime, timedelta
from random import choice, shuffle
# 사용법: 함수명만으로 바로 사용
now = datetime.now()
tomorrow = now + timedelta(days=1)
colors = ["빨강", "파랑", "초록"]
selected = choice(colors)
필요한 함수만 가져와서 함수명으로 바로 사용
3️⃣ 별명 사용하기
import math as m
import datetime as dt
# 사용법: 별명.함수명
result = m.pi * m.sqrt(16)
current = dt.datetime.now()
print(f"결과: {result:.2f}")
print(f"현재: {current}")
긴 모듈명을 짧은 별명으로 줄여서 사용
4️⃣ 패키지에서 가져오기
# MechDog 패키지 예시
from HW_MechDog import MechDog
import Hiwonder
from Hiwonder_IIC import I2CSonar
# 사용법: 패키지 구조 활용
mechdog = MechDog()
sensor = Hiwonder.LightSensor()
sonar = I2CSonar()
패키지 폴더에서 필요한 모듈/클래스만 선택해서 가져오기
✨ 핵심 팁: 상황에 맞게 4가지 방법을 조합해서 사용하세요!
자주 사용하는 함수는 from import, 긴 이름은 as 별명을 활용하면 편리합니다.
💻 MechDog 모듈 실습
✨ VSCode 스타일의 코드 에디터를 사용해보세요! 모듈, 클래스, 함수가 자동으로 색칠됩니다.
🤖 실제 MechDog 코드 중 모듈 사용 예시
📦 MechDog 모듈 시스템
MechDog는 모듈화된 구조로 각 기능을 담당하는 모듈들을 조합하여 사용합니다:
🤖 HW_MechDog 모듈
로봇 본체 제어 핵심
- • 움직임 제어 (앞/뒤/좌/우)
- • 자세 변경 (몸체 높이, 각도)
- • 저장된 액션 실행
🔧 Hiwonder 모듈
입출력 장치 제어
- • 버튼, 부저, 조도센서
- • 디스플레이 제어
- • 기본 센서 입력
📡 Hiwonder_IIC 모듈
I2C 센서 통신
- • 초음파 거리 센서
- • 카메라 모듈 연결
- • 음성 인식 모듈
👁️ ESP32S3Cam 모듈
비전 인식 기능
- • 얼굴 인식
- • 색상 추적
- • 라인 추적
1️⃣ HW_MechDog 모듈 (로봇 제어 핵심)
from HW_MechDog import MechDog # 모듈에서 클래스 불러오기
mechdog = MechDog() # 로봇 객체 생성
mechdog.set_default_pose() # 기본 자세로 초기화
mechdog.move(50, 0) # 앞으로 5cm/s 속도로 이동
mechdog.transform([0, 0, 20], [0, 0, 0], 1000) # 몸체를 위로 20mm 이동
mechdog.action_run("left_foot_kick") # 저장된 액션 실행
➡ 움직임, 자세, 액션 같은 로봇 본체 제어 담당
2️⃣ Hiwonder 모듈 (입출력 장치)
import Hiwonder
adc = Hiwonder.LightSensor() # 조도 센서
brightness = adc.read() # 밝기 값 읽기
beep = Hiwonder.Buzzer() # 부저 객체 생성
beep.playTone(800, 100, True) # 800Hz, 0.1초 소리
btn = Hiwonder.Button(2) # 버튼 객체
btn.Clicked(lambda: print("버튼 눌림"))
➡ 센서/출력 장치를 단순 호출 API로 제공
3️⃣ Hiwonder_IIC 모듈 (I2C 장치)
import Hiwonder_IIC
i2c1 = Hiwonder_IIC.IIC(1) # I2C 포트 생성
i2csonar = Hiwonder_IIC.I2CSonar(i2c1) # 초음파 센서 객체
distance = i2csonar.getDistance() # 거리 측정
i2csonar.setRGB(0, 255, 0, 0) # LED 빨간색
➡ I2C 기반 센서(초음파, 카메라, 음성 모듈) 연결용
4️⃣ ESP32S3Cam 모듈 (비전 모듈)
iic2 = Hiwonder_IIC.IIC(2)
cam = Hiwonder_IIC.ESP32S3Cam(iic2)
if cam.face_recognition(): # 얼굴 인식되면
mechdog.action_run("scrape_a_bow") # 인사 동작 실행
➡ 비전(얼굴/색상/라인) 인식 기능
📝 정리
- • HW_MechDog → 로봇 본체 제어
- • Hiwonder → 버튼, 부저, 조도 센서, 디스플레이
- • Hiwonder_IIC → I2C 센서(초음파, 카메라, 음성)
- • ESP32S3Cam → 얼굴, 색상, 선 인식
💡 이러한 모듈들을 조합하여 복잡한 로봇 동작을 구현할 수 있습니다!
🎮 실제 예제: 스마트 펫 모드
# 모든 모듈을 조합한 스마트 펫 동작
import Hiwonder
import Hiwonder_IIC
from HW_MechDog import MechDog
import time
import random
# 객체 초기화
mechdog = MechDog()
i2c1 = Hiwonder_IIC.IIC(1)
sonar = Hiwonder_IIC.I2CSonar(i2c1)
beep = Hiwonder.Buzzer()
# 스마트 펫 동작
while True:
distance = sonar.getDistance()
if distance < 20: # 가까이 있으면
mechdog.action_run("scrape_a_bow") # 인사
sonar.setRGB(0, 0x00, 0xff, 0x00) # 초록 LED
beep.playTone(800, 100, True) # 삑 소리
else:
mechdog.move(20, 0) # 천천히 앞으로
sonar.setRGB(0, 0x00, 0x00, 0xff) # 파랑 LED
time.sleep(0.1)
🎯 실제 예제: 장애물 회피
# 센서를 활용한 장애물 회피
import Hiwonder_IIC
from HW_MechDog import MechDog
import time
import math
mechdog = MechDog()
i2c1 = Hiwonder_IIC.IIC(1)
sonar = Hiwonder_IIC.I2CSonar(i2c1)
def avoid_obstacle():
distance = sonar.getDistance()
if distance < 15:
# 너무 가까우면 후진
mechdog.move(-30, 0)
time.sleep(0.5)
# 랜덤하게 좌우 회전
turn_angle = math.radians(45)
mechdog.transform([0, 0, 0],
[0, 0, turn_angle], 1000)
else:
# 안전하면 전진
mechdog.move(50, 0)
# 메인 루프
while True:
avoid_obstacle()
time.sleep(0.1)
🎯 도전 과제
배운 모듈들을 활용해서 MechDog 기능을 완성해보세요:
- 1. 🎲 랜덤 동작 시스템: random 모듈로 무작위 동작 실행
- 2. 📐 거리 계산기: math 모듈로 두 점 사이 거리 계산
- 3. ⏰ 동작 타이머: time과 datetime으로 시간 관리
- 4. 🤖 종합 시스템: 모든 모듈을 조합한 스마트 기능
💡 힌트: import문을 사용하고 각 모듈의 함수들을 활용해보세요!
📝 정리
✅ 핵심 내용
- • 모듈(Module): 하나의 .py 파일, 특정 기능을 담은 코드 파일
- • 패키지(Package): 여러 모듈을 모아놓은 폴더, 관련 기능들의 집합
- • import 방법:
import 모듈명,from 패키지 import 모듈 - • MechDog 패키지들: HW_MechDog (로봇 제어), Hiwonder (입출력), Hiwonder_IIC (I2C 센서)
- • 활용 예시: 여러 패키지의 모듈들을 조합하여 복잡한 로봇 동작 구현