Back to Course

Quarky 및 파이썬을 사용한 로봇 공학 및 AI - 레벨 1

0% Complete
0/0 Steps
  1. 로봇 공학의 기초
    수업 1: Quarky 로봇의 기초
    5 Topics
  2. 수업 2: 로봇 동작의 기초
    3 Topics
  3. 수업 3: 무선 제어 로봇
    4 Topics
  4. 라인 팔로워
    수업 4: 라인 감지를 위한 IR 센서 보정
    3 Topics
  5. 수업 5: 로봇을 따라가는 라인
    4 Topics
  6. 로봇 공학을 이용한 AI
    수업 6: AI 배달 봇으로서의 Quarky - 파트 1
    3 Topics
  7. 수업 7: AI 배달 봇으로서의 Quarky - 파트 2
    4 Topics
  8. 수업 8: 자율주행차 - 파트 1
    4 Topics
  9. 수업 9: 로봇 애완동물
    4 Topics
  10. 수업 10: 제스처 기반 로봇 제어 - 1부
    3 Topics
  11. 수업 11: 제스처 기반 로봇 제어 - 파트 2
    3 Topics
  12. 캡스톤 프로젝트
    수업 12: 캡스톤 프로젝트
Lesson Progress
0% Complete

라인 팔로워 로봇 만들기 – 개요

우리는 이제 로봇이 무엇인지, 왜 유용한지 로봇에 대한 모든 것을 알고 있습니다. 자, 이제 우리만의 것을 만들 차례입니다!

다음 줄

먼저 트랙을 배치하고 논리를 이해한 다음 PictoBlox에서 스크립트를 만들어 실행을 지켜봅니다. 시작하자.

트랙 배치

트랙을 바닥에 놓습니다.

트랙에 3개의 수직선이 있는 것을 볼 수 있습니다. 다음 수업에서 이를 체크포인트로 사용할 것입니다.

논리 이해

라인 팔로우 로봇의 작동 논리는 간단합니다.

  1. 먼저 왼쪽 및 오른쪽 IR 센서 임계값을 설정합니다.
  2. 두 센서가 모두 활성화되면 로봇이 교차로에 있으므로 정지해야 함을 의미합니다.
  3. 왼쪽 센서만 활성화된 경우 로봇이 오른쪽으로 표류하고 있으며 다시 제자리로 가져와야 합니다. 따라서 약간 왼쪽으로 이동해야 합니다.
  4. 오른쪽 센서만 활성화되면 로봇이 왼쪽으로 표류하고 있음을 의미합니다. 따라서 약간 오른쪽으로 움직이게 해야 합니다.
  5. 센서 중 어느 것도 활성화되지 않은 경우 센서 사이에 검정색 선이 있고 로봇이 올바른 방향으로 가고 있음을 의미합니다. 그러므로 계속 앞으로 나아가야 한다.
  6. 2~5단계를 반복합니다.

코딩하자!

  1. 우리는 이 활동에서 Quarky를 사용하고 있으므로 quarky 관련 함수도 작성하고 그러한 함수를 작성하려면 quarky에 대한 객체를 정의해야 합니다.
    quarky = Quarky()
  2. 이제 사용자 정의 함수 “LED_FeedBack()”을 정의합니다.
    def LED_FeedBack():

    함수 구문

    def NAME ([PARAMETER1, PARAMETER2, …..]): #대괄호는 다음을 포함합니다.
    문(들) #문의 선택적 부분

  3. 함수 내부의 if-else 문을 사용하고 특정 LED를 빛나게 설정하여 IRL이 활성인지 비활성인지 결정하는 조건을 추가합니다.
    if quarky.getirstate("IRL"):
    	quarky.setled(1, 1, [0, 255, 0], 100)
    else:
    	quarky.setled(1, 1, [255, 0, 0], 100)
  4. 마찬가지로 함수 내부의 if-else 문을 사용하여 IRR이 활성인지 비활성인지 확인하고 특정 LED를 발광하도록 설정합니다.
    if quarky.getirstate("IRR"):
    	quarky.setled(7, 1, [0, 255, 0], 100)
    else:
    	quarky.setled(7, 1, [255, 0, 0], 100)
  5. 다음으로 IRL과 IRR 모두에 대한 임계값을 설정하려고 합니다. 이전 활동에서 그래프를 그리는 방법과 임계값을 찾는 방법을 배웠습니다. 해당 값이 여기에 삽입됩니다.
    # Define Threshold Values	
    quarky.setirthreshold("IRL",3000)
    quarky.setirthreshold("IRR",2700)
  6. 코드는 다음과 같습니다.
    quarky = Quarky() 
    
    # User Defined Functions
    def LED_FeedBack():
    	if quarky.getirstate("IRL"):
    		quarky.setled(1, 1, [0, 255, 0], 100)
    	else:
    		quarky.setled(1, 1, [255, 0, 0], 100)
    	
    	if quarky.getirstate("IRR"):
    		quarky.setled(7, 1, [0, 255, 0], 100)
    	else:
    		quarky.setled(7, 1, [255, 0, 0], 100)
    
    # Define Threshold Values	
    quarky.setirthreshold("IRL",3000)
    quarky.setirthreshold("IRR",2700)
  7. 이제 조건을 while True로 제공하여 while 루프를 작성할 것입니다. 이는 주어진 부울 조건이 False로 평가될 때까지 루프가 계속 실행되어야 함을 의미합니다. while True라고 쓰면 루프가 영원히 실행됩니다. 그런 다음 LED_FeedBack() 함수를 호출합니다.
    while True:
    	LED_FeedBack()
    1. 다음으로 if-else논리 연산자를 사용하여 다음 조합에서 두 센서의 조건을 확인합니다.
      1. 사례 1: 두 센서 모두 활성화 – 두 센서가 모두 활성화되면 쿼키를 중지합니다.
        if (quarky.getirstate("IRL") and quarky.getirstate("IRR")):
        	quarky.stoprobot()
      2. 사례 2: 왼쪽 센서만 활성화 – 왼쪽 센서만 활성화되면 쿼키가 왼쪽으로 회전하도록 합니다.
        if (quarky.getirstate("IRL") and  not (quarky.getirstate("IRR"))):
        	quarky.runmotor("R","FORWARD",30)
        	quarky.runmotor("L","BACKWARD",20)
      3. 사례 3: 오른쪽 센서만 활성화 – 오른쪽 센서만 활성화되면 쿼키를 만들어 우회전합니다.
        if ( not (quarky.getirstate("IRL")) and quarky.getirstate("IRR")):
        	quarky.runmotor("L","FORWARD",30)
        	quarky.runmotor("R","BACKWARD",20)
      4. 사례 4: 두 센서 모두 비활성화 – 두 센서가 모두 비활성화되면 쿼키가 앞으로 이동하도록 합니다.
        quarky.runrobot("FORWARD",30)

        참고: 사례 2, 3, 4는 else 부분에서 정의됩니다.

  8. 전체 코드는 다음과 같습니다.
    quarky = Quarky() 
    
    # User Defined Functions
    def LED_FeedBack():
    	if quarky.getirstate("IRL"):
    		quarky.setled(1, 1, [0, 255, 0], 100)
    	else:
    		quarky.setled(1, 1, [255, 0, 0], 100)
    	
    	if quarky.getirstate("IRR"):
    		quarky.setled(7, 1, [0, 255, 0], 100)
    	else:
    		quarky.setled(7, 1, [255, 0, 0], 100)
    
    # Define Threshold Values	
    quarky.setirthreshold("IRL",3000)
    quarky.setirthreshold("IRR",2700)
    
    # Line Following Code
    while True:
    	LED_FeedBack()
    	
    	# Both Sensors are Active
    	if (quarky.getirstate("IRL") and quarky.getirstate("IRR")):
    		quarky.stoprobot()
    	
    	else:
    	  # Left Sensor is Active - Turn Left
    		if (quarky.getirstate("IRL") and  not (quarky.getirstate("IRR"))):
    			quarky.runmotor("R","FORWARD",30)
    			quarky.runmotor("L","BACKWARD",20)
    		
    		else:
    			# Right Sensor is Active - Turn Right
    			if ( not (quarky.getirstate("IRL")) and quarky.getirstate("IRR")):
    				quarky.runmotor("L","FORWARD",30)
    				quarky.runmotor("R","BACKWARD",20)
    			
    			else:
    				# Both Sensors are Inactive - Go Forward
    				quarky.runrobot("FORWARD",30)

과제 업로드

과정을 마친 후 수료증을 받으려면 과제를 제출해야 합니다.

과제를 업로드하려면 아래 단계를 따르세요.

  1. 먼저 Pictoblox 파일을 선택해야 하므로 Browse를 클릭합니다.
  2. .sb3 파일을 선택합니다.
  3. 그리고 Upload 버튼을 클릭합니다.

행운을 빕니다! ????