python --version→
Python 3.10.x 와 같이 나오면 OK
cd d:\data\study\AI\자율주행\auto_car python -m venv .venv .\.venv\Scripts\Activate.ps1
Activate.ps1 실행 정책 오류 시:Set-ExecutionPolicy -Scope CurrentUser RemoteSigned활성화되면 프롬프트 앞에 (.venv)가 붙습니다.
pip install opencv-python==4.8.1.78 numpy==1.24.3
speed = 100
steering = 90
print(f"속도: {speed}, 조향각: {steering}")
f"..." 포맷 문자열 안에 {변수}를 쓰면 그 자리에 값이 들어갑니다.speed = 50
if speed > 100:
print("빠름")
elif speed > 30:
print("보통")
else:
print("느림")
for angle in range(45, 135, 10): # 45, 55, 65, ..., 125
print(f"조향각: {angle}도")
def calculate_steering(error, kp):
"""오차를 입력받아 조향각을 계산한다."""
steering = 90 + kp * error
if steering < 45:
steering = 45
if steering > 135:
steering = 135
return steering
result = calculate_steering(error=20, kp=0.5)
print(result) # 100.0
angles = [45, 90, 135]
print(angles[1]) # 90
angles.append(180)
print(len(angles)) # 4
config = {"speed": 100, "steering": 90}
print(config["speed"]) # 100
config["speed"] = 150
UDP(User Datagram Protocol)는 네트워크 통신 방식 중 하나로, 빠르지만 도착 보장이 없는 통신입니다. 자율주행 명령처럼 빠른 전송이 중요하고 한 번 놓쳐도 다음 패킷이 오면 되는 상황에 적합합니다.
노트북 ──[UDP 패킷 {"speed":100,"steering":90}]──→ ESP32
매 50ms마다 새 패킷 송신
import socket
import json
# UDP 소켓 만들기
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 보낼 메시지
message = {"speed": 0, "steering": 90} # 정지, 직진
data = json.dumps(message).encode('utf-8')
# 보내기
ESP32_IP = "192.168.137.74" # 본인 ESP32 IP로 변경
ESP32_PORT = 4210
sock.sendto(data, (ESP32_IP, ESP32_PORT))
print(f"보냄: {message}")
sock.close()
Received: {"speed":0,"steering":90}이 보이면 성공!다음 명령을 실행하고 결과를 캡처하시오.
python --version pip list
opencv-python, numpy가 보이면 OK.
다음 빈칸을 채워 함수를 완성하시오.
def speed_to_korean(speed):
"""속도(0~200)를 한국어 표현으로 바꾼다."""
# TODO: speed가 0이면 "정지" 반환
# TODO: 0 < speed <= 50 이면 "느림" 반환
# TODO: 50 < speed <= 150 이면 "보통" 반환
# TODO: speed > 150 이면 "빠름" 반환
pass
# 검증
print(speed_to_korean(0)) # 정지
print(speed_to_korean(30)) # 느림
print(speed_to_korean(100)) # 보통
print(speed_to_korean(200)) # 빠름
학생용 프로그램 단계4_파이썬기초.py를 열고:
ESP32_IP를 본인 차량 IP로 수정# TODO 부분을 채워 완성3초 간격으로 다음 시퀀스를 보내는 프로그램을 작성하시오.
1초: 정지 (speed=0, steering=90) 2초: 앞으로 (speed=100, steering=90) 3초: 좌회전 (speed=80, steering=60) 4초: 우회전 (speed=80, steering=120) 5초: 정지
힌트: import time 후 time.sleep(1) 사용.
| 개념 | 설명 |
|---|---|
| 가상환경 | 프로젝트별로 패키지를 분리해서 관리하는 공간 |
| pip | Python 패키지 설치 도구 |
| f-string | f"..{변수}.." 형태의 문자열 포맷팅 |
| 함수 | 입력을 받아 처리 후 출력하는 코드 묶음 |
| UDP | 빠르지만 도착 보장 없는 네트워크 통신 |
| JSON | {"key": "value"} 형식의 데이터 표현 |
| socket | 네트워크 통신을 위한 Python 표준 라이브러리 |
| 항목 | 1 | 2 | 3 | 4 | 5 |
|---|---|---|---|---|---|
| 가상환경을 스스로 만들고 활성화할 수 있다 | |||||
| 함수를 정의하고 호출할 수 있다 | |||||
| ESP32에 UDP 메시지를 보낼 수 있다 | |||||
| 어려울 때 검색·문제해결 문서를 활용했다 |