3과: 두 개의 큐브 이동
이전 수업에서는 팔레트 위에 큐브를 집어 올리고 놓기 위해 6축 팔을 코딩하는 방법을 배웠습니다. 이 수업에서는 여러 개의 큐브를 팔레트로 옮기는 방법을 배운 내용을 바탕으로 학습합니다. 다음 방법을 배우게 됩니다.
- 팔레트에 놓을 큐브의 버리는 위치를 계획하세요.
- 6축 암에 코드를 입력하여 두 개의 큐브를 팔레트로 성공적으로 옮기세요.
수업이 끝날 무렵에는 활동에서 팔레트 위에 4개의 큐브를 집어 올려 놓는 프로젝트를 진행하게 됩니다.

팔레트 위치 지정에 대한 고려
이전 수업에서는 큐브 하나를 팔레트로 옮겨 중앙에 놓았습니다. 팔레트를 이용해 대량의 품목을 운송하는 이점 중 하나는 한 번에 많은 물건을 운송할 수 있다는 것입니다. 이를 효과적으로 수행하려면 회사에서 운송하는 각 팔레트에 더 많은 물건을 포장할 수 있도록 해당 물건을 효율적인 방식으로 배열해야 합니다.
팔레트를 사용하면 한두 개의 작은 물건을 옮기는 데 비효율적이고 비용이 많이 드는 방법이 될 수 있습니다. 예를 들어 팔레트 중앙에 큐브 하나를 놓는 경우가 그렇습니다. 그러나 팔레트에 큐브를 더 많이 놓으면 운송이 더 효율적이고 비용 효과적이 됩니다. 
이를 위해서는 각 큐브를 팔레트의 어느 위치에 놓을지 생각해야 합니다. 이 수업에서는 여러 개의 큐브를 이동하고 팔레트에 효과적으로 함께 놓기 위해 6축 암을 코딩하는 방법을 알아봅니다.
첫 번째 큐브를 놓으세요
2과에서 배운 프로젝트에서 큐브 하나를 팔레트의 중심 로 옮겼습니다. 여러 개의 큐브를 배치하기 위한 첫 번째 단계는 첫 번째 큐브의 배치 위치를 조정하는 것입니다. 즉, 팔레트의 모서리 에 큐브를 배치하는 것입니다.
VEXcode EXP에서 레슨 2의 프로젝트를 엽니다.

프로젝트 이름을 Unit 7 Lesson 3,바꾸고 장치에 저장하세요.

팔레트 모서리에 큐브를 놓으세요.
6축 암을 수동으로 움직여 자석이 큐브 상단에 닿도록 합니다.

6축 암이 VEX코드에 연결되어 있는지 확인하세요.
도구 모음에서 모니터 아이콘을 선택하여 모니터를 엽니다.

엔지니어링 노트북에 모니터 콘솔의 x 및 y 좌표를 기록합니다. 이는 큐브를 놓는 위치의 x 및 y 좌표입니다.
큐브를 팔레트로 옮기기 전에 6축 암이 드롭 오프 위치 위로 이동한다는 점을 기억하세요. 즉, z값을 기록할 필요가 없습니다.

프로젝트에 새로운 하차 위치의 x, y 좌표를 입력합니다. z 좌표는 동일하게 유지되어야 하므로 6축 암이 떨어지는 위치 위에 있어야 합니다.
여기에 표시된 좌표는 예시일 뿐이며, 실제로 기록한 좌표와 다를 수 있으므로 좌표를 꼭 사용하세요.

6축 암이 VEX코드에 연결되었고 큐브가 로딩 구역에 배치되었는지 확인하세요.
프로젝트를 실행하여 테스트해 보세요. 6축 암의 동작을 관찰하세요. 의도한 대로 팔레트 모서리에 큐브를 집어 올려 놓나요? 왜 그럴까? 아니면 왜 그렇지 않을까?

6축 암이 더 이상 움직이지 않으면 프로젝트를 중지합니다. 엔지니어링 노트에 관찰 내용을 기록하세요.

두 번째 큐브 이동
이제 첫 번째 큐브가 새로운 드롭오프 위치에 놓였으므로 팔레트에 추가 큐브를 놓을 공간이 생겼습니다. 첫 번째 큐브를 움직이는 데 사용된 것과 동일한 동작이 두 번째 큐브를 움직이는 데에도 반복됩니다. 6축 암은 동일한 픽업 위치로 이동하여 자석을 작동시키고, 큐브를 팔레트로 이동시킨 후 큐브를 놓아야 합니다.
두 큐브를 성공적으로 옮기는 데 도움이 되는 여러 가지 코딩 전략을 시도해 볼 수 있습니다.
반복 블록 추가
일련의 행동이 반복될 것이라는 것을 알고 있다면, 가장 먼저 시도해 볼 전략은 반복 블록을 사용하는 것입니다. 이전 단원에서 배웠듯이 반복 블록은 프로젝트에서 블록이나 블록을 반복하는 데 유용합니다.
이 영상에서 보여지는 것처럼 프로젝트에 Set end effector 블록 아래에 Repeat 블록을 추가합니다.
이 영상에서 보여지는 것처럼 팔레트의 큐브 이동 블록을 반복 블록으로 끌어다 놓습니다. 이렇게 하면 이후의 모든 블록도 반복 블록으로 끌어옵니다.
이제 픽업 위치에서 팔레트 모서리까지 큐브를 집어 올려 놓는 데 필요한 모든 블록을 반복할 수 있습니다.
반복 블록의 매개변수를 2로 설정합니다.
두 개의 큐브를 팔레트로 옮기려고 하므로 동작이 두 번 반복됩니다.

작성한 코드를 읽고, 프로젝트가 실행될 때 6축 암이 무엇을 할지 예측해 보세요.
엔지니어링 노트에 예측 내용을 기록하세요. 6축 암의 경로를 스케치하거나 팔레트 위에 큐브를 놓을 위치를 그려보세요.

6축 암이 VEX코드에 연결되어 있는지 확인하세요.
프로젝트를 실행하여 테스트해 보세요. 프로젝트가 실행될 때 6축 암의 동작을 관찰하세요.

6축 암의 움직임이 끝나면 프로젝트를 중지합니다. 엔지니어링 노트에 관찰 내용을 기록하세요.
6축 암이 두 큐브를 팔레트로 성공적으로 옮겼나요? 왜 그럴까? 아니면 왜 그렇지 않을까?

이로 인해 두 번째 큐브가 의도한 대로 움직이지 않아 오류가 발생했습니다. 첫 번째 큐브가 해당 위치에 배치되었으므로 두 번째 큐브도 같은 위치에 배치될 수 없습니다. 6축 암이 해당 위치에 도달할 수 없어 오류가 발생했습니다.
팔레트에 두 번째 큐브를 놓으려면 이 큐브를 팔레트의 열린 위치로 옮겨야 합니다.
첫 번째 큐브를 기준으로 두 번째 큐브 이동
팔레트에서 첫 번째 큐브의 위치를 알면 다음 큐브를 첫 번째 큐브를 기준으로 배치할 수 있습니다. 이전 단원에서 상대적 이동에 대해 배웠고, 이제 그 개념을 적용하여 두 번째 큐브를 배치할 수 있습니다.
팔레트의 다음 모서리에 도달하려면 6축 암이 y축을 따라 양의 방향으로 움직여야 합니다. 
큐브의 크기에 대해 알려진 정보를 사용하여 두 번째 큐브를 배치하는 데 필요한 오프셋을 결정할 수 있습니다. 오프셋은 객체의 현재 위치와 원하는 위치 사이의 차이입니다. 팔레트에서 두 번째 큐브의 오프셋은 첫 번째 큐브의 중심과 원하는 위치에 있는 두 번째 큐브의 중심 사이의 거리입니다.
큐브의 너비가 25mm라고 가정하면 오프셋은 50mm라고 추정할 수 있습니다.
이제 상대적 이동에 필요한 거리와 방향을 알았으므로 이 정보를 프로젝트에 추가할 수 있습니다.
이 영상에서 보여지는 것처럼 블록의 팔레트로 큐브 이동 주석 섹션 중앙에 도구 모음에서 끌어와서증가 위치블록을 추가합니다.
y 매개변수를 50으로 설정합니다. 이는 y축을 따라 50mm의 상대적 이동을 나타냅니다.

코드를 읽고 6축 암의 동작을 예측해 보세요.
엔지니어링 노트에 예측 내용을 기록하세요. 이 프로젝트를 통해 두 큐브를 원하는 위치에 성공적으로 배치할 수 있을 것 같나요? 왜 그럴까? 아니면 왜 그렇지 않을까?

6축 암이 VEX코드에 연결되어 있는지 확인하세요. 프로젝트를 실행하여 테스트해 보세요.
6축 암의 동작을 관찰하세요.

6축 암의 움직임이 끝나면 프로젝트를 중지합니다. 엔지니어링 노트에 관찰 내용을 기록하세요.
당신의 관찰 결과가 예측과 일치했나요? 두 개의 큐브가 팔레트의 의도된 위치로 옮겨졌나요? 왜 그럴까? 아니면 왜 그렇지 않을까?

예상하셨겠지만, 이 프로젝트에서도 두 개의 큐브를 원래 위치로 옮기지는 않습니다. 증가 위치블록은 6축 암을 두 번째 큐브의 원하는 위치로 올바르게 이동시켰습니다. 하지만 모든 동작이 반복되었기 때문에큐브개 모두 이 위치로 이동되었습니다. 이는 이전 프로젝트와 동일한 오류를 생성했지만 팔레트의 위치가 달랐습니다.
목표는 팔레트의 첫 번째 큐브를 첫 번째 위치에 놓고 두 번째 큐브를 두 번째 위치에 놓는 것입니다. 이를 성공적으로 수행하려면 프로젝트에서 어떤 Cube가 이동되는지 추적해야 합니다. 첫 번째 큐브를 옮기는 경우 첫 번째 위치로 이동해야 합니다. 두 번째 큐브를 옮기는 경우, 두 번째 위치에 놓을 수 있습니다.
변수와 If then 블록을 사용하여 두 개의 큐브 이동
어떤 큐브가 움직이는지 추적하기 위해 변수를 만들어 프로젝트에서 사용하면 큐브가 조작될 때 큐브의 개수를 기본적으로 '계산'할 수 있습니다. 변수를 사용하여 어떤 큐브가 옮겨지는지에 대한 정보를 저장할 수 있습니다. 이 정보는 프로젝트 내에서 결정을 내리는 데 사용될 수 있습니다.6축 암이 두 번째 큐브를 이동시키고,이면팔레트의 두 번째 위치로 이동시켜야 합니다.
변수를 만들고 이름을 CubeCount로 지정합니다. 변수를 생성하려면 제출 선택하세요.
VEXcode에서 변수를 만드는 방법에 대한 자세한 내용은 단원 6과 2장 을 다시 참조하세요.

이 영상에서 보여지는 것처럼 반복 블록 위에 있는 프로젝트에 변수 블록을 추가합니다.
매개변수를 1로 설정합니다. 드롭다운에서 CubeCount 변수가 선택되어 있는지 확인하세요.
프로젝트가 시작되면 첫 번째 Cube가 픽업됩니다. 이 변수의 목적은 움직이는 큐브에 번호를 매기는 것이므로 시작하려면 '1'로 설정해야 합니다.

이전에는 6축 암을 두 번째 드롭 오프 위치로 이동하기 위해증가 위치블록이 추가되었습니다. 첫 번째 큐브를 버리는 위치로 옮기려면 이 블록을 삭제해야 합니다.
이 영상에서 보여지는 것처럼, 증가 위치블록을 마우스 오른쪽 버튼으로 클릭하고 삭제합니다.
이 영상에서 보여지는 것처럼 반복 블록의 맨 아래에 변경 변수 블록을 추가합니다.
프로젝트가 실행되면 첫 번째 큐브가 드롭 오프 위치로 이동됩니다. 여기에 변경 변수 블록을 추가하면 첫 번째 Cube가 전달된 후 CubeCount 증가합니다. 반복 블록이 두 번째 큐브를 집어 올리기 위해 되돌아갈 때 변수가 '2' 증가하여 두 번째 큐브가 이동된다는 것을 나타냅니다.
이제 프로젝트에서 큐브의 개수에 대한 정보를 저장하고 있으므로 해당 정보를 사용하여 결정을 내릴 수 있습니다. If then 블록을 사용하면 프로젝트 내에서 질문을 하고, 정보(변수 값 등)를 사용하여 결정을 내릴 수 있습니다. 
If then 블록은 부울 리포터 블록을 조건으로 허용하는 C 블록입니다. 부울 블록은 조건을 TRUE 또는 FALSE로 반환하며 육각형 입력이 있는 모든 블록에 들어맞습니다. 조건이 TRUE로 보고되면 C-블록 내의 블록이 실행됩니다. 조건이 FALSE로 보고되면 프로젝트에서 If then 블록이 건너뜁니다.
이 경우 우리가 찾는 조건은 CubeCount 변수가 2가 되는 것입니다. CubeCount 변수 2이면,6축 암은 팔레트의 두 번째 위치로 이동해야 합니다.
프로젝트의 어느 부분에서 그러한 결정을 내려야 할지 생각해 보겠습니다. 이 프로젝트는 적재 구역에서 큐브를 픽업한 다음, 하차 위치 위로 이동합니다. CubeCount가 2이면 2이고,이면축 암은 두 번째 팔레트 위치로 이동하기 위해 추가 동작을 수행해야 합니다. 
여기에 표시된 대로 프로젝트에 If then 블록을 추가합니다.

이 영상에서 보여지는 것처럼 If then 블록의 육각형 공간에 Equal to 블록을 추가합니다.
Equal to 연산자의 왼쪽에 CubeCount 변수를 추가합니다. 이 영상에서 보여지는 것처럼 = 연산자의 오른쪽을 2로 설정합니다.
CubeCount 변수가 2와 같으면 부울 조건이 TRUE로 보고됩니다. CubeCount 2가 아니면 부울 조건은 FALSE로 보고됩니다.
이 영상에서 보여지는 것처럼 C 블록 내부에 증가 위치블록을 추가합니다.
증가 위치 블록의 y 매개변수를 50으로 설정합니다.
If then 블록의 조건이 충족되면 If then 블록 내부의 Increment position 블록이 실행됩니다. 즉, CubeCount 이 2이면 6축 암은 팔레트의 두 번째 위치로 상대적으로 이동합니다.

코드를 읽고 프로젝트가 실행될 때 6축 암이 무엇을 할지 예측해 보세요.
엔지니어링 노트에 예측 내용을 기록하세요.

6축 암이 VEX코드에 연결되어 있는지 확인하세요. 프로젝트를 실행하여 테스트해 보세요.
프로젝트가 실행되는 동안 6축 암의 동작을 관찰합니다.

6축 암의 움직임이 완료되면 프로젝트를 중지합니다. 엔지니어링 노트에 관찰 내용을 기록하세요.
6축 암이 예상대로 움직였나요? 두 큐브 모두 의도한 대로 팔레트로 옮겨졌나요? 왜 그럴까? 아니면 왜 그렇지 않을까?

귀하의 정보를 위해
6축 암이 움직일 때 실행되는 블록에 주의를 기울일 수 있도록 프로젝트를 여러 번 실행하는 것이 좋습니다. 프로젝트에서 블록이 실행될 때 블록 주변의 강조 표시를 살펴보면 If then 블록이 실행되는 시점을 더 잘 이해하는 데 도움이 됩니다. 단계 기능을 사용하면 프로젝트를 한 번에 한 블록씩 실행하여 If then 블록을 통한 프로젝트 흐름을 보다 명확하게 볼 수 있습니다. 
프로젝트가 실행되는 동안 CubeCount 값을 확인하는 데 도움이 되는 변수를 모니터에 추가할 수 있다는 점을 기억하세요. 모니터에 변수를 추가하려면 이 영상에서 보여주는 것처럼 작업 공간의 모니터 아이콘으로 변수를 끌어다 놓습니다. 프로젝트를 실행할 때 모니터에서 변수를 살펴보세요. 이를 통해 변수 값과 프로젝트 흐름 간의 연결을 파악하는 데 도움이 됩니다.
프로젝트 검토
팔레트에 두 개의 큐브를 놓는 과제를 해결하는 데 사용된 문제 해결 과정을 살펴보겠습니다. 6축 암이 두 큐브를 의도한 대로 움직일 수 있도록 프로젝트를 여러 번 반복했습니다.
- 큐브를 집어 올리고, 옮기고, 팔레트에 올리는 데 필요한 동작을 반복하기 위해 반복 블록이 추가되었습니다.
- 두 번째 큐브를 팔레트의 열린 위치로 이동하기 위해증가 위치블록이 추가되었습니다.
- 큐브의 개수를 세는 변수가 추가되어 어떤 큐브를 움직이는지에 따라 결정을 내릴 수 있게 되었습니다.
- 변수의 값에 따라 결정을 내리기 위해 If then 블록이 추가되었습니다.
이러한 모든 반복을 통해 두 큐브를 모두 성공적으로 구현하고 제공하는 프로젝트가 탄생했습니다. 두 번째 큐브를 집어 올렸을 때, 6축 암은 다시 큐브를 팔레트의 원래 떨어뜨린 위치 위로 옮겼습니다. 그러자 결정이 내려졌습니다.
CubeCount가 '2'이므로 If then 블록 내부의 블록이 실행되어 Cube를 y축을 따라 팔레트의 원하는 위치로 이동합니다.
이 수업에서 진행한 반복적인 프로세스는 6축 암을 사용하여 과제를 해결할 때마다 계속 수행하게 될 것입니다. 대부분의 코딩 문제는 첫 번째 시도에서 완벽하게 해결되지 않을 것이라는 점을 기억하는 것이 중요합니다. 계획, 구축, 테스트, 평가의 이러한 과정은 귀하의 그룹이 창의적인 솔루션을 찾는 데 도움이 될 수 있습니다. 대부분의 과제는 여러 가지 방법으로 해결할 수 있으므로, 이 과정에 협력적으로 참여하면 그룹에 가장 적합한 전략을 찾을 수 있습니다.
활동
이제 두 개의 큐브를 적재 구역에서 팔레트로 옮겼으니, 이러한 기술을 연습해 보겠습니다. 이 활동에서는 이 수업에서 배운 프로젝트를 바탕으로 6축 팔을 사용하여 4개의 큐브를 팔레트로 옮기는 코드를 작성합니다.
활동:6축 팔을 코딩하여 하나의 팔레트에 4개의 큐브를 놓습니다.
- 6축 팔을 코딩하여 적재 구역에서 추가 큐브를 들어올리고 그룹과 함께 팔레트에 놓을 수 있도록 프로젝트를 어떻게 구축할지 계획하세요. 프로젝트 편집을 시작하기 전에 모두가 접근 방식에 동의했는지 확인하세요.
- 엔지니어링 노트북에 계획을 기록하세요.
- 프로젝트 편집을 시작하기 전에 프로젝트 이름을Unit 7 Lesson 3 Activity로 바꾸고 장치에 저장하세요.
- 귀하의 그룹이 합의한 계획에 맞게 VEXcode에서 프로젝트를 편집하세요.
- 프로젝트를 실행하여 테스트해 보세요. 각 큐브를 배치한 후 두 번째, 세 번째, 네 번째 큐브를 수동으로 로딩 구역에 배치합니다.
- 6축 암이 의도한 대로 큐브를 성공적으로 이동시키나요? 팔레트 위에 큐브가 4개 있어야 합니다. 그렇지 않은 경우, 4개의 큐브를 모두 성공적으로 배치할 때까지 프로젝트 편집을 계속하세요.
이해도 확인
다음 수업으로 넘어가기 전에 엔지니어링 노트에 있는 다음 질문에 답하여 이 수업의 개념을 이해했는지 확인하세요.
이해도 확인 질문 >(Google Doc / .docx / .pdf)
다음 >선택하여 모두 합치기 활동으로 넘어가세요.