📦

모듈과 패키지 활용

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 스타일의 코드 에디터를 사용해보세요! 모듈, 클래스, 함수가 자동으로 색칠됩니다.

실행 버튼을 눌러 모듈 코드를 실행해보세요! 💡 코드 에디터에서 다음 기능들을 확인해보세요: • import 문이 파란색으로 표시됩니다 • 클래스와 함수가 자동으로 색칠됩니다 • 문자열과 주석이 초록색으로 표시됩니다 • 라인 번호가 표시됩니다

🤖 실제 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. 1. 🎲 랜덤 동작 시스템: random 모듈로 무작위 동작 실행
  2. 2. 📐 거리 계산기: math 모듈로 두 점 사이 거리 계산
  3. 3. ⏰ 동작 타이머: time과 datetime으로 시간 관리
  4. 4. 🤖 종합 시스템: 모든 모듈을 조합한 스마트 기능

💡 힌트: import문을 사용하고 각 모듈의 함수들을 활용해보세요!

📝 정리

✅ 핵심 내용

  • • 모듈(Module): 하나의 .py 파일, 특정 기능을 담은 코드 파일
  • • 패키지(Package): 여러 모듈을 모아놓은 폴더, 관련 기능들의 집합
  • • import 방법: import 모듈명, from 패키지 import 모듈
  • • MechDog 패키지들: HW_MechDog (로봇 제어), Hiwonder (입출력), Hiwonder_IIC (I2C 센서)
  • • 활용 예시: 여러 패키지의 모듈들을 조합하여 복잡한 로봇 동작 구현
← 이전 다음 →