데이크루 5기

라즈베리 파이로 연동시키는 객체인식 프로그래밍

2023.05.26 16:24 1,153 조회

라즈베리파이를 이용한 객체인식 프로그래밍




[목차]

1.개요

2.필요 라이브러 설명

3.프로그래밍

4.코딩해석(chatgpt)




1.개요

차량이 주행 또는 좌/우회전할 때, 사람, 사물을 인식하는 '객체인식' 학습을 시켜

사람,사물이 있으면 비켜가거나, 멈춤을 수행할 수 있다.

이 프로그래밍은 사람, 사물이 존재할 시 일정속도로 줄이거나 멈춘다.




2.필요 라이브러리


  • import pixy2
  • import time
  • import RPi.GPIO as GPIO




3.프로그래밍

#주석을 통해 간략한 설명을 추가했습니다.


import pixy2

import time

import RPi.GPIO as GPIO


# Pixy2 객체 생성

pixy2.init()

pixy2.change_prog("color_connected_components")


# GPIO 핀 설정

GPIO.setmode(GPIO.BCM)

GPIO.setwarnings(False)


# 모터 제어 핀 설정

motor1_pin1 = 17

motor1_pin2 = 18

motor2_pin1 = 27

motor2_pin2 = 22


# 초음파 센서 제어 핀 설정

trigger_pin = 23

echo_pin = 24


GPIO.setup(motor1_pin1, GPIO.OUT)

GPIO.setup(motor1_pin2, GPIO.OUT)

GPIO.setup(motor2_pin1, GPIO.OUT)

GPIO.setup(motor2_pin2, GPIO.OUT)

GPIO.setup(trigger_pin, GPIO.OUT)

GPIO.setup(echo_pin, GPIO.IN)


# 초음파 센서 거리 측정 함수

def measure_distance():

  GPIO.output(trigger_pin, True)

  time.sleep(0.00001)

  GPIO.output(trigger_pin, False)


  start_time = time.time()

  stop_time = time.time()


  while GPIO.input(echo_pin) == 0:

    start_time = time.time()


  while GPIO.input(echo_pin) == 1:

    stop_time = time.time()


  elapsed_time = stop_time - start_time

  distance = (elapsed_time * 34300) / 2


  return distance


# 모터 제어 함수

def control_motor(left_speed, right_speed):

  if left_speed >= 0:

    GPIO.output(motor1_pin1, GPIO.HIGH)

    GPIO.output(motor1_pin2, GPIO.LOW)

  else:

    GPIO.output(motor1_pin1, GPIO.LOW)

    GPIO.output(motor1_pin2, GPIO.HIGH)


  if right_speed >= 0:

    GPIO.output(motor2_pin1, GPIO.HIGH)

    GPIO.output(motor2_pin2, GPIO.LOW)

  else:

    GPIO.output(motor2_pin1, GPIO.LOW)

    GPIO.output(motor2_pin2, GPIO.HIGH)


  left_speed = abs(left_speed)

  right_speed = abs(right_speed)


  # 모터 속도 제어를 위한 추가 로직이 필요함.

  # 이 부분은 사용하는 모터 드라이버에 따라 달라짐.

  # 모터 속도를 PWM 신호로 제어하는 방법을 사용하는 것이 일반적임.


# 객체 인식 및 자동차 제어 루프

while True:

  # 객체 인식

  count = pixy2.ccc_get_blocks(100, blocks)


  if count > 0:

    print('객체 인식됨')

    # 첫 번째 인식된 객체에 대해서만 처리

    block = blocks[0]


위 프로그래밍을 메모장, 편집기에 입력후 py파일로 확장합니다.

이후, 명령프롬포트를 통해 실행시킵니다.



4.코딩해석(chatgpt)





이상으로 라즈베리파이를 이용한 자동차의 객체인식 프로그래밍 글을 마무리하겠습니다.


또한, 아두이노 기초-->크리스마스트리 전구 구성-----> 내연기관과 전기자동차의 이상감지 센서---->자동차 객체인식

순으로 데이콘크루 5기 활동을 마무리하겠습니다.


감사합니다.