1

1.3: 비행 이동: 롤과 피치

이 레슨을 마치면 다음을 할 수 있어야 합니다.

  • 롤과 피치가 공중에서 드론의 움직임을 어떻게 변화시키는지 설명하세요.
  • 함수를 사용할 때 매개변수와 인수의 차이점을 설명합니다.
  • 롤 및 피치 스로틀 명령을 사용하여 드론이 선택한 경로를 탐색하도록 합니다.
  • 섬 1에서 완전한 프로그램을 만드는 지식을 통합하여 이착륙을 포함한 무인 항공기의 전체 비행 경로를 구축하세요.

이 단원에서는 다음 단계를 완료합니다. 각 단계 후에 완성된 코드를 선생님에게 확인 받습니다.

  1. 시작하기
  2. 이동하기! 항공기가 움직이는 방법
    1. 롤 (Roll)
    2. 피치 (Pitch)
  3. 사각으로 비행하기
  4. 챌린지: 비행 연습!

드론이 어떻게 움직이는지 배우기 전에 움직임을 테스트하기위한 프로그램을 만들어야 합니다. 이렇게 하려면 아래 단계를 따르세요.

  1. 파이참 실행
  2. 코드론 EDU 디렉토리 클릭
  3. 마우스 오른쪽 버튼을 클릭하고 New -> Directory 를 선택합니다.
  4. 표시되는 이름 상자에 1b_flight_directions 를 입력합니다.
  5. 이제 코드론 EDU 디렉토리 아래에 1a_flight_events1b_flight_directions라는 두 개의 폴더가 있어야 합니다.
  6. 방금 만든 1b_flight_directions 폴더를 마우스 오른쪽 버튼으로 클릭하고 New -> Python 파일을 클릭합니다.
  7. 파일을 roll.py 로 이름을 지정합니다.
  8. 이전 레슨에서 배운 명령어를 입력하여 드론과 페어링, 이착륙을 합니다. (❗힌트: 기억이 나지 않는 경우 이전 강의 폴더로 돌아가서 작성한 내용을 볼 수 있습니다.)

이제 드론으로 몇 가지 움직임을 테스트할 준비가 되었습니다! 😀항공기는 차량과 약간 다르게 움직입니다. 차량은 2차원(X와 Y라고 부를 수 있음)에서 작동하기 때문에 앞뒤 또는 좌우로만 움직입니다. 그러나 항공기는 3차원 공간(X, Y, Z)에서 움직입니다. 즉, 지상 차량과 같은 방향으로 움직일 뿐만 아니라 위아래로 움직이며 회전할 수 있습니다. 이 때문에 아래에서 볼 수 있는 것처럼 항공기가 하늘을 통과하는 방법을 설명하는 다른 용어가 있습니다. ✈️

이동 명령

핵심 용어

매개변수(Parameter): 함수 안에서 사용할 값을 표시합니다. 이를 통해 사용자는 함수가 제대로 작동하는 데에 값이 필요하다는 것을 알 수 있습니다.

인수(Argument): 함수가 호출될 때 사용자가 함수에 넣는 실제 값입니다. 예를 들어, 코드 drone.set_roll(25) 에서 값 25는 이 함수의 인수입니다.

드론이 올바르게 작동하도록 하기 위해 지정할 드론의 각 움직임에는 세 가지 구성 요소가 있습니다.

  1. 드론이 만들고자 하는 움직임 (롤 Roll, 피치 Pitch, 요 Yaw, 스로틀 Throttle )
  2. 움직임에 적용할 출력 (움직임이 얼마나 빠르기를 원하는지)
  3. 이동을 실행하거나 지속할 시간⏱️

위 이미지에서 볼 수 있듯이 각 이동 명령은 동일한 형식을 따릅니다. 이동하려는 드론 객체를 지정하고, 수행할 이동 명령을 지정한 다음, 이동하기를 원하는 방향과 속도를 설정합니다. 속도와 방향을 설정할 때 명령에 -100에서 100 사이의 인수 값을 입력합니다. 값 0-100은 사용하려는 드론의 모터 출력 비율입니다. 0은 출력이 없는 상태이고 100은 최대 출력(100%)입니다. 인수 값이 양수 인지 음수인지에 따라 드론의 방향이 결정됩니다. 예를 들어 -50과 50은 같은 속도로 움직이지만 반대 방향으로 움직입니다.

주의 하세요! 드론의 출력을 100%로 설정하면 드론이 매우 빠르게 움직여 물체와 충돌하게 됩니다. 드론이 얼마나 빨리 움직이는지 확인하려면 더 낮은 출력 설정에서 시작해서 값을 높여가는 것이 좋습니다.

함수를 호출하면 1단계와 2단계는 처리되지만 3단계는 처리되지 않습니다. 이동 명령에는 이동 시간을 드론에게 알려주는 매개 변수가 없습니다. 이동 명령이 모두 설정(SET)하는 명령이기 때문입니다. 이것은 변수(이동)의 값을 새로운 값으로 변경하는 것을 의미합니다. setter 및 getter 명령의 차이점과 이후 단원에서 변수가 무엇인지 배울 것입니다. 이동 명령으로 드론의 속도와 방향만 설정하거나 변경하기 때문에 이동해야 하는 시간을 드론에 알려주는 move() 라는 별도의 함수가 있습니다.

move(int or decimal seconds) # int는 정수의 약자입니다.
drone.move(1)   # 드론이 1초 동안 움직이게 합니다.
drone.move(2.5) # 드론이 2.5초 동안 움직이게 합니다.

이동 명령과 이동 명령을 결합하여 일정 시간 동안 특정 방향으로 드론을 움직이게 할 수 있습니다. 따라서 이동 명령 중 하나를 프로그래밍할 때마다 move() 명령과도 짝을 이루는 것을 잊지 마세요!이 기능은 코드론 EDU의 수평 또는 좌우 이동을 제어합니다. 양수 값의 롤은 코드론 EDU를 오른쪽으로 움직이게 하고 음수 값의 롤은 드론을 왼쪽으로 움직이게 합니다. 이것은 드론이 왼쪽이나 오른쪽으로 미끄러지는 것처럼 보일 것입니다. 잠시 시간을 내어 드론의 프로펠러가 추력(드론을 띄우는 힘)을 생성하는 방법을 생각해봅시다. 드론이 오른쪽이나 왼쪽으로 움직일 때 무슨 일이 일어나고 있다고 생각하나요⁉️이 명령의 일반 형식은 다음에서 볼 수 있습니다.

drone.set_roll(power) # power는 100%를 최대로 볼 때의 모터 출력을 나타냅니다.
                      # power는 -100 에서 100 사이입니다.

이 코드를 테스트하려면 이륙 및 착륙 기능 사이의 roll.py 파일 에 다음 코드를 입력하십시오 .

drone.set_roll(10) # 롤 값을 10으로 설정
drone.move(1)      # 드론이 1초 동안 변경된 롤 값으로 움직입니다.

무엇을 관찰했나요? 드론은 1초 동안 오른쪽으로 천천히 이동했어야 합니다. 드론을 2초 동안 왼쪽으로 움직여보세요. 그럼 코드는 어떻게 작성해야 할까요?코드론 EDU의 전후좌우 기울기입니다. 양수 값의 피치는 코드론 EDU를 기울여 앞으로 움직이게 하고 음수 값의 피치는 코드론 EDU를 기울여 뒤로 움직이게 합니다.

drone.set_pitch(power) # power는 100%를 최대로 볼 때의 모터 출력을 나타냅니다.                          

                       # power는 -100에서 100 사이입니다.

이 코드를 테스트하려면 roll.py 파일의 복사본을 만들고 이름을 pitch.py라고 합니다. 이제 set_roll() 을   set_pitch() 로 변경합니다. 다른 모든 값은 그대로 둘 수 있습니다. 따라서 코드는 다음과 같아야 합니다.

drone.set_pitch(25) # 피치 값을 25로 설정                       
drone.move(1)       # 드론이 1초 동안 변경된 피치 값으로 움직입니다.

무엇을 관찰했나요? 드론은 1초 동안 천천히 앞으로 이동했어야 합니다. 드론이 1.5초 동안 뒤로 움직이도록 해 보세요. 코드는 어떻게 작성해야 할까요?이제 피치 및 롤 동작의 기본 사항을 알았으므로 사각형과 같은 간단한 모양을 만들 수 있습니다! 비행 움직임을 설정할 때 특정 움직임을 멈추고 싶을 때 다시 0으로 재설정하는 것이 중요합니다. 예를 들어 아래에서 코드의 일부분을 살펴보겠습니다. 먼저, 드론은 1초 동안 전진할 것입니다. 그러나 피치를 0으로 재설정하지 않았기 때문에 드론은 두 번째 이동 명령에서는 드론이 피치와 롤을 조합하여 1초간 대각선 이동을 하게됩니다.↗️

drone.set_pitch(30)
drone.move(1)
drone.set_roll(30)
drone.move(1)

올바르게 앞으로 나아가기 위해 오른쪽으로 이동하여 정사각형을 만들려면 피치를 다음과 같이 0으로 재설정해야 합니다.

drone.set_pitch(30)
drone.move(1)
drone.set_pitch(0)
drone.set_roll(30)
drone.move(1)

자신이 있다고 생각되면 나머지 사각형을 완료해보세요! 완료할 수 없는 경우 아래에서 완성된 정사각형 코드를 확인하세요.

from codrone_edu.drone import *
drone = Drone()
drone.pair()

drone.takeoff()

drone.set_pitch(30)  # 피치 전진 설정

drone.move(1)  # 1초 전진 이동!

drone.set_pitch(0)  # 피치를 0으로 재설정

drone.set_roll(30)  # 롤을 오른쪽으로 설정

drone.move(1)  # 오른쪽으로 1초 이동!

drone.set_roll(0)  # 롤을 0으로 설정

drone.set_pitch(-30)  # 피치 후진 설정

drone.move(1)  # 1초 후진 이동!

drone.set_pitch(0)  # 피치를 0으로 재설정

drone.set_roll(-30)  # 롤을 왼쪽으로 설정

drone.move(1)  # 왼쪽으로 1초 이동!

drone.land()

drone.close()

이 도전을 위해 종이 두 장과 테이프를 찾으세요. 테이프가 없어도 괜찮아요! 무거운 종이를 찾거나 교과서와 같은 무거운 물체를 사용하세요. 이 수업에서는 두 장의 종이가 이륙 구역 또는 착륙 구역을 표시합니다. 각 구역의 위치를 결정했으면 테이프를 사용하여 착륙 구역을 바닥에 고정합니다. 이 영역이 더 멀리 떨어져 있을수록 더 큰 도전이 될 것입니다!🏆 피치와 롤에 대한 새로운 지식을 바탕으로 이러한 새로운 비행 동작을 연습할 수 있는 프로그램을 작성할 것입니다!

  1. 드론이 이륙구역에서 착륙구역으로 날아가는 프로그램을 작성하세요. 드론이 착륙 지점을 향하도록 내려 놓고 시작합니다.
  2. 드론이 이륙 구역에서 착륙 구역으로 날아가는 프로그램을 작성하세요. 이 연습에서는 드론이 착륙 지점을 향하지 않고 멀리 떨어지도록 합니다. 현재 드론이 향하고 있는 종이에 방향을 표시를 하세요. 이렇게 하면 매번 같은 위치에서 시작할 수 있습니다. (힌트: 이번에는 롤을 사용해야 합니다!)
  3. 드론이 이륙 구역에서 착륙 구역으로 날아가는 프로그램을 작성하세요. 이 연습에서는 이륙 구역과 착륙 구역 사이에 장애물을 설치하세요. 드론은 어떤 방향으로도 시작할 수 있습니다. (힌트: 장애물과 충돌하지 않으려면 피치와 롤을 모두 사용해야 합니다!)

이번 레슨에서는 롤 및 피치 명령을 보내는 방법을 배웠습니다. 다음 레슨에서는 드론을 위, 아래로 날리고 회전하는 방법을 배우게 됩니다!