PROGRAM "MINI-SUMO ROBOT. 미니 스모 로봇 조립에 대한 최종 기사. 기사 "미니 스모 로봇용 섀시"의 첫 번째 부분에서 로봇 섀시를 만드는 방법에 대해 자세히 설명했습니다. 이 기사에서는 우리는 로봇을 위한 프로그램의 컴파일을 자세히 분석할 것입니다. 우리 로봇이 준비되어 있습니다. 섀시가 있고 "두뇌"의 기능은 마이크로 컨트롤러에 의해 수행되고 외부 세계와의 통신은 센서에 의해 수행됩니다. 그러나 , 이 모든 것에도 불구하고, 그것은 여전히 ​​​​테이블 위에 움직이지 않을 것입니다.그리고 이러한 일이 발생하지 않도록 우리의 창조 생활에 숨을 불어 넣어야 할 때입니다. 말하자면 완전히 "창조자"가 되는 것입니다. 로봇을 소생시킬 뿐만 아니라 링에서 의미 있고 논리적으로 행동하게 만듭니다.


1. 프로그램의 기본은 알고리즘입니다.

이전과 마찬가지로 계획 없이는 할 수 없습니다. 이전 기사에서 우리의 계획은 기본이었습니다. 회로도. 프로그래밍에서 계획을 알고리즘이라고 합니다. 뭔지 아시는 분, 방금 들어보신 분도 계시겠지만, 처음 들어보는 분도 계실 겁니다.

나는 과학적 용어를 사용하지 않을 것이며 알고리즘은 특정 동작의 시퀀스에 대한 설명이라고 간단히 말할 것입니다. 우리의 전체 삶은 다양한 행동입니다. 우리는 걷고, 말하고, 팔과 다리를 움직이고, 머리를 돌립니다. 이 모든 것에는 고유한 의미가 있습니다. 알고리즘, 즉 우리의 행동을 결정하는 시퀀스이며 컴파일하고 설명할 수 있습니다. 명확성을 위해 나는 삶의 예를 들어 줄 것입니다. 당신은 매일 아침 이를 닦습니다. 당신이 그것을 하는 방법, 당신 자신을 위한 프로그램을 작성하는 방법을 기술하십시오. 다음은 일어나는 일입니다. “우리는 칫솔을 가져갑니다. 페이스트를 짜내십시오. 우리는 좌우 움직임으로 이를 닦습니다. 입을 헹군다. 내 브러쉬."

원칙적으로 모든 것이 정확하지만 점심 시간, 저녁 또는 매 식사 후에 이 작은 프로그램을 수행할 수 있습니다. 그러나 우리의 모든 노력을 무효화할 수 있는 중요한 요소를 고려하지 않았습니다. 처음에 우리는 아침에 대해 이야기했습니다. 이것은 중요한 요소이며 이를 고려하지 않으면 침대에 누워 눈을 감고 양치질을 해야 합니다. 따라서 모든 프로그램에는 항상 주기를 반복할 수 있는 일종의 시작과 끝이 있어야 합니다. 사람에게 반복되는 주기는 다음날 다시 아침이 되고 이를 다시 칫솔질해야 하는 날입니다. 따라서 다음 알고리즘(동작 시퀀스)을 프로그램에 추가합니다.

"깨우다. 침대에서 나가...” 이 단계에서 알고리즘 생성을 중단하고 곧바로 양치질을 하면 프로그램이 중단(멈춤)됩니다. 왜요? 우리는 다시 모든 요인을 고려하지 않았기 때문입니다. 침실 한가운데에 서서 다음 명령을 실행할 수 없습니다. "우리는 칫솔을 가져갑니다." 브러시가 욕실에 있고 여전히 칫솔에 들어가야 합니다. 음, 화장실에서 자면 문제 없습니다. 프로그램이 실행됩니다! 그러나 대부분의 경우 일반 사람들은 다른 방에서 잔다. 이 접근 방식을 논리적이라고 하며 의미가 있습니다. 우리의 모든 행동은 합리적이고 특정한 의미를 포함해야 합니다. 그렇지 않으면 목표를 달성할 수 없습니다. 그래서 "일어나. 일어나 화장실에 가십시오."가 최선의 선택이 될 것입니다.

다시 일하러 갑시다. 이제 링에서 미니 스모 로봇의 행동을 어떻게 계획해야 할까요? 목표가 명확하게 표시된 규칙이 있습니다. "상대를 링 밖으로 밀어냅니다." 그러나 이를 달성하려면 특정 요소를 고려해야 합니다. 주된 요인은 원 자체를 넘어서지 않는 것, 더 정확히 말하면 원의 흰색 테두리를 넘어서지 않는 것입니다. 우리가 얻은 것은 다음과 같습니다.

쌀. 1 링에서 로봇의 행동 알고리즘.

그림 1에서 블록 다이어그램을 볼 수 있습니다. 모든 권리에 따르면 이것이 알고리즘을 구성하는 것이 관례입니다. 명확하고 이해할 수 있습니다.

첫 번째 블록은 "시작"입니다. 이 순간부터 프로그램은 로봇이 켜진 후 로봇의 동작을 실행하기 시작합니다. 그가 해야 할 첫 번째 일은 적인 "대상 검색" 블록을 찾는 것입니다. 우리 계획의 다음 블록은 마름모 형태의 "대상을 찾았습니까?"입니다. 이것은 우리가 특정 이벤트를 달성하기 위해 행동을 선택할 수 있음을 의미합니다. 목표가 발견되면(Yes) 프로그램을 계속 진행하고 "Attack" 프로그램의 다음 부분으로 이동하지만 목표를 찾지 못하면(No) 계속 검색하는 것이 가장 논리적입니다. . 프로그램은 로봇이 적을 감지할 때까지 이 순간을 반복합니다. 공격할 때 로봇은 상대를 향해 앞으로 나아가면서 링 밖으로 밀어내려고 하며, 이때 "링의 가장자리에 도달했습니까?"라는 블록이 생성되고, 링의 가장자리에 도달하지 않으면 공격합니다. 계속되지만 센서가 가장자리의 흰색 줄무늬를 감지하면 공격이 중지되고 프로그램은 다음 블록 "Drive back" 및 "Reversal"로 진행합니다. 턴이 끝나면 메인 프로그램의 사이클이 반복됩니다. 즉, 처음부터 시작하여 로봇이 다시 적을 찾고 있습니다. 이유가 있어서 그렇게 한 것입니다. 공격 당시 적이 우리 로봇에서 탈출했다면 우리는 링 가장자리를 떠나지 않고 그의 수색으로 돌아와야합니다. 이론이 있는 모든 것. 실습을 진행해 보겠습니다.

2. Arduino용 프로그램 작성 규칙.

이론적인 부분은 끝났다고 하지만 프로그램을 구성하는 원리를 공부해야 합니다 아두이노 마이크로컨트롤러, 이러한 원칙은 AVR 제품군의 다른 MK에도 적용됩니다.

쌀. 2 아두이노용 프로그램 작성 방법.

이 블록 다이어그램은 중요한 포인트, 그리고 프로그램을 작성할 때 준수해야 하는 순서.

프로그램의 맨 처음에 필요한 경우 추가 모듈이 연결됩니다. 그런 다음 전역 변수가 선언됩니다. 다음은 컨트롤러 초기화 블록입니다. 포트 할당, 입력 또는 출력 여부 및 기타 설정을 정의합니다. 이 블록에서 추가 보조 루틴을 호출할 수도 있습니다. 간단히 말해서 이 시점에서 프로그램은 다음을 생성합니다. 사전 설정제어 장치. 이 블록은 컨트롤러를 시작하거나 재부팅할 때 한 번 실행됩니다. "delay 5 seconds" 라인이 블록에 추가되었음을 유의하십시오. 에게 일반적인 규칙이것은 프로그램 작성에는 적용되지 않지만 미니 스모 로봇이 필요합니다. 규칙에 따르면 심판의 명령이 있은 후 로봇은 5초 후에 움직이기 시작해야 합니다. 이 지연은 프로그램의 메인 루프에서 수행할 수 없습니다. 지속적으로 반복될 것이고 로봇의 동작이 더 나은 방향으로 바뀌지 않을 것이기 때문입니다.

프로그램의 메인 사이클 블록에서 링에서 로봇의 동작에 대한 메인 알고리즘이 실행될 것이며, 이는 우리가 그림 4에서 고려한 것입니다. 1. 메인 루프가 작동하는 동안 서브루틴에 액세스할 수 있습니다. 프로그래머는 코드를 최적화하고 줄이기 위해 종종 서브루틴을 사용합니다. 예를 들어, 전진 또는 후진을 위한 프로그램은 다음을 선택하는 것이 더 논리적입니다. 개별 모듈, 프로그램의 본문에 포함되지 않습니다. 이것으로부터 그것은 거대해지고 완전히 읽을 수 없게 될 것이며, 오류를 찾거나 작은 변경을 하는 것은 매우 문제가 될 것입니다.

3. Arduino IDE 개발 도구.

Arduino.ru 웹 사이트에서 다운로드 최신 버전아두이노 IDE. 이 프로그램은 특별한 설치가 필요하지 않으며 아카이브의 내용을 압축 해제하는 것으로 충분합니다. 올바른 장소. 이 기사의 끝에는 초음파 거리계 라이브러리 파일이 있습니다. Libraries 폴더에 압축을 풀어야 합니다.

우리는 응용 프로그램을 시작합니다. 라이브러리의 올바른 설치를 확인하고 "파일" - "예제" 메뉴로 이동합니다. 거의 맨 아래에 초음파 항목이 그림과 같이 나타나야 합니다. 삼.

쌀. 3 초음파 라이브러리가 올바르게 설치되었는지 확인합니다.

모든 것이 정상이면 "서비스"- "지불"항목으로 이동하십시오. Arduino Pro Mini 5v라는 보드를 선택해야 합니다.

쌀. 4 컨트롤러 보드 설정

직렬 포트는 다음에 나타나는 포트를 선택해야 합니다. 아두이노 연결컴퓨터에. Arduino Pro Mini에 대해 조금 언급해야 합니다. Arduino 제품군의 다른 컨트롤러와 달리 Pro Mini에는 컴퓨터 연결 모듈이 내장되어 있지 않습니다. 별도의 보드로 제공됩니다. USB 어댑터 UART(TTL)에 연결하고 4개의 전선을 사용하여 컨트롤러 보드에 연결됩니다.

쌀. 5 USB-UART(TTL) 어댑터.

무화과에. 6은 컨트롤러와 어댑터를 올바르게 연결하는 방법을 보여줍니다.

쌀. 6. 컨트롤러를 USB-UART 어댑터에 연결합니다.

신호 라인의 수신 연결과 달리 RX-TX 및 TX-RX 대신 RX-RX, TX-TX 라인을 직접 연결해야 합니다. 어댑터를 컴퓨터에 처음 연결하면 장치 드라이버가 자동으로 설치를 시작합니다. 설치가 완료될 때까지 기다려야 합니다. 컨트롤러의 또 다른 기능은 소프트웨어가 없다는 것입니다. 초기화프로그래밍할 때. 물론 조금 불편하긴 하지만 Pro Mini를 거부할 정도는 아니다. "컴파일링"이 "다운로드"로 변경된 후 컨트롤러의 재설정 버튼을 누르는 것으로 충분합니다. 7.

쌀. 7. MK 프로그래밍 진행 상황에 대한 정보 표시.

4. 코드를 작성합니다.

이 장에서는 명령, 지시문 및 연산자에 대한 설명을 다루지 않을 것입니다. 기본 지식이 이미 있다고 가정합니다. 그렇지 않으면 공식 웹사이트의 문서나 네트워크의 다른 소스를 참조해야 합니다.우리가 컴파일한 계획이나 알고리즘에 따라 프로그램 코드를 명확하게 작성합니다. 알고리즘의 특정 블록에 코드를 추가했습니다. 이제 그림 1에서 더 자세히 살펴보겠습니다. 여덟.

쌀. 8. 프로그램의 초기 블록 쓰기.

첫 번째 블록: # 지시문은 모듈 제어 라이브러리를 프로젝트에 연결합니다.

두 번째 블록: 변수를 선언하고 0과 같은 초기 값을 씁니다. MK의 출력 포트에 대한 이름은 생성하지 않습니다. 쉽게 참고하실 수 있도록 일부러 디지털 형태로 남겨두었습니다. 회로도. 이 블록에서는 세 개의 변수만 선언합니다. 이들은 링의 왼쪽 및 오른쪽 센서(_ 및 _)이며 ADC 값을 저장합니다. 초음파 거리계(_)의 거리 변수와 함께 장애물까지의 거리를 센티미터 단위로 기록합니다.

Ultrasonic 초음파 (4, 2) 라인은 포함된 라이브러리의 예에서 가져온 초음파 거리 측정기의 변수 선언에 불과합니다. 괄호 안에는 센서 다리와 연결된 포트가 있습니다.

세 번째 블록: (), 여기에서 마이크로 컨트롤러의 모든 입력과 출력을 구성합니다. 포트 15, 17에서 들어오는 신호를 수신하므로 (입력)을 할당합니다. 엔진을 제어하는 ​​4개의 포트가 있습니다. 왼쪽 엔진에는 3.5개, 오른쪽 엔진에는 6.9개 포트를 출력으로 할당합니다.

하나의 엔진에 두 개의 포트를 사용하는 이유는 무엇입니까? 모든 것이 간단합니다. 모터 접점에 전압이 가해지면 시계 방향과 같은 방향 중 하나로 회전하기 시작합니다. 그러나 극성을 바꾸면 "플러스"와 "마이너스"를 변경하십시오. 모터 샤프트가 다른 방향으로 회전합니다. 우리는 이 속성을 본격적인 기동에 사용할 것입니다.

5. 메인 루프 루프.

이 싸이클에서 컨트롤러의 메인 프로그램이 실행됩니다. 완전히 빠져나올 수도, 완성할 수도 없습니다. 여기에서 소위 서브루틴이라고 하는 외부 프로시저에 대한 호출만 가능합니다.

그림 4의 알고리즘을 기반으로 한 사이클의 구조를 고려하십시오. 9

쌀. 9. 메인 루프 루프의 알고리즘.

처음부터 모든 센서의 판독값을 가져와야 합니다. 이를 위해 서브루틴을 호출합니다.

void check_sensor() // 센서 검사를 위한 서브루틴.

R_Sensor=analogRead(15); // 올바른 센서 판독값을 읽습니다.

L_Sensor=analogRead(17); // 왼쪽 센서의 판독값을 읽습니다.

지연(10); //ADC 변환 완료 지연

dist_cm = 초음파.Ranging(CM); // 초음파 거리계의 판독값을 읽습니다.

지연(10); // 변환 완료 지연

데이터를 받은 후 처리해야 합니다. 먼저 링 안에 있는지 여부에 관계없이 위치를 결정해야 합니다. 링에서 40cm 이내에 상대가 있는지 확인하고 상대가 없으면 왼쪽 절차로 돌려 그를 찾습니다.

void go_left() // 대상을 검색하거나 왼쪽으로 이동

analogWrite(5, 100); //왼쪽 모터

analogWrite(6, 100); //오른쪽 모터

모터의 출력 값은 거의 절반으로 줄어들고 너무 빨리 회전하면 관성에 의해 감지된 목표물을 빠져나갈 수 있습니다.

목표물이 감지되면 전속력으로 전진하여 공격해야 합니다.

void go_forward() //공격 - 앞으로 이동

아날로그 쓰기(3, 0); //왼쪽 모터

공격 당시 우리가 링의 가장자리에 부딪혀 흰색 줄무늬를 발견했다면 멈추고 뒤로 물러나 조금 앞으로 운전한 다음 검색을 다시 시작해야 합니다. 이렇게하려면 절차를 순서대로 호출하십시오.

go_stop(); // 멈추다

지연(100); //10ms 대기

go_back(); // 뒤로가

지연(1000); //1 초.

go_right(); //우회전

지연(300); //300ms

go_forward(); //앞으로 움직이다

지연(300); //300ms

void go_stop() //중지

analogWrite(5, 255); //왼쪽 모터

analogWrite(9, 255); //오른쪽 모터

void go_back() //돌아가기

analogWrite(3, 255); //왼쪽 모터

analogWrite(6, 255); //오른쪽 모터

analogWrite(9, 0); //오른쪽 모터

void go_right() //대상을 검색하거나 오른쪽으로 이동

analogWrite(3, 100); //왼쪽 모터

아날로그 쓰기(5, 0); //왼쪽 모터

analogWrite(6, 0); //오른쪽 모터

analogWrite(9, 100); //오른쪽 모터

void go_forward() //앞으로 이동 공격

아날로그 쓰기(3, 0); //왼쪽 모터

analogWrite(5, 255); //왼쪽 모터

analogWrite(6, 0); //오른쪽 모터

analogWrite(9, 255); //오른쪽 모터

절차 사이의 시간 지연은 서로 다른 이동 방향에서 엔진의 지속 시간을 결정합니다. 늘리거나 줄이면 달성할 수 있습니다. 다양한 각도회전 또는 다음 명령이 실행되기 전에 로봇이 이동할 거리.

다운로드를 위한 전체 스케치는 기사 끝에 있습니다.

물론 제시된 코드는 최종적이지 않거나 가장 올바른 옵션, 기사의 일반적인 본질은 초보자 로봇 공학자가 논리적이고 체계적으로 생각하고 사용 가능한 모든 리소스를 사용하여 작업을 올바르게 해결하도록 가르치는 것이기 때문에 각 사용자는 요구 사항에 따라 이를 보완하거나 수정할 권리가 있습니다.

아카이브 1

아카이브 2"미니스모 로봇의 프로그램" 기사로.

질문이 있는 경우 포럼이나 로봇에 대한 온라인 채팅에 글을 남겨주시면 논의해 드리겠습니다!

주목! 관리자의 허가 없이 자료의 전체 또는 일부를 복사하는 것을 금지합니다!

안녕하세요! 조립도 어렵지 않은 로봇을 조립하고 싶으신가요? 당신은 바로 이곳에 왔습니다! =) 우리 사이트에서 첫 번째 로봇뿐만 아니라 다른 많은 로봇의 단계별 조립에 대한 자세한 기사를 찾을 수 있으며 심지어 대회에 대해서도 볼 수 있습니다.

우리 기사가 로봇 초보자인 당신이 이 가장 흥미로운 영역을 마스터하고 이 방향으로 기술을 펌핑하는 데 도움이 될 것이라는 점을 매우 기쁘게 생각합니다. 우리는 또한 이 기사에 따르면 SERVODROID 웹사이트의 개발자인 우리가 수업을 무료우리는 모든 사람에게 BEAM 로봇 공학이 무엇인지 가르치고 말하는 것을 정말 좋아합니다.

우리 프로젝트를 도와주세요! 우리 웹사이트에 등록하고 온라인 채팅이나 포럼에 와서 공예와 진행 상황을 공유하십시오. 결국 초보자를 위한 로봇 공학에 점점 더 많은 관심을 끄는 것은 활동입니다. 그들은 당신의 성공을 보고 똑같이 멋있어지기를 원합니다. , 그리고 우리는 정말로 모든 것이 당신을 위해 잘 작동하는 것을 보는 것이 좋습니다. 문제가 해결되지 않으면 도와드리겠습니다.)

스모- 가장 흥미로운 것 중 하나 레고 Ev3 로봇 대회. 이 경쟁에서 로봇은 서클 자체를 벗어나지 않고 상대 로봇을 서클 밖으로 밀어내야 합니다.

경쟁이 시작될 때 로봇은 원의 중심에 배치되고 계층이 프로그램을 시작하고 로봇은 3초를 기다려야 합니다. 그 후 로봇은 원의 경계에 도달해야 합니다. 적을 공격할 기회. 포털에는 레고 스모 및 조립 지침용 로봇 구성표가 포함되어 있습니다.

기술하자 스모 알고리즘 및 프로그램 EV3 로봇용

1 조치.

로봇은 3초를 기다렸다가 원의 중심에서 경계까지 운전하고 앞으로 가고 회전하고 적을 찾고 적에게 가고 경계에서 운전하면 다시 운전합니다.

대기를 3초로 설정합니다.

2 조치. 우리는 다시 국경으로 운전합니다.


3 액션. 로봇이 경계까지 운전한 후에는 앞으로 나아가야 합니다. 앞으로 이동합니다.

4 조치. 우리는 무한 루프를 설정했습니다. 로봇은 적을 밀어내거나 경쟁 시간이 끝날 때까지 공격합니다.

초음파 센서가 있는 회전 주기를 넣었습니다. (적외선 센서를 사용할 수도 있습니다)


5 조치. 컬러 센서가 원의 테두리인 검은색 선을 볼 때까지 진행합니다.

6. 조치 국경을 본 후, 우리는 뒤로 운전합니다.

운동.

수업 1을 사용하여 출발을 다시 작성하십시오.

헤이 긱타임즈!

소개

우리는 로봇이 우리의 미래라는 것을 오랫동안 알고 있었습니다. 로봇 분야에는 여러 가지가 있습니다. 군사 개발, 사회, 엔터테인먼트 및 작업 로봇.
그러나 이번에는 MIRE의 대학 팀을 대신하여 경쟁 구성 요소에 대해 말하고자 합니다. 정확히는 스모 로봇에 대한 것입니다.

우리 팀에 대해 조금

우리는 2014년부터 존재했습니다. 대부분의 대회 Robofinist, Robofest, MIPT Spartakiad 및 소규모 토너먼트의 승자와 수상자, 그리고 우리는 미니 스모 지명에서 2016-2017년 러시아의 절대 챔피언입니다.

이 스모 로봇은 대체 누구입니까?

처음에 그런 대회에 대해 알게 되었을 때 스모 선수는 주로 레고로 만들어졌습니다. 그러나 이것은 매우 나쁜 생각입니다. 나중에 자세히 설명합니다.

이 순간올바른 스모 선수는 매우 간단하게 설명됩니다. 바퀴가 달린 완전히 자율적인 철 조각, 두뇌와 한 쌍의 센서가 있는 이 철 조각은 비슷한 철 조각을 링 밖으로 두드리는 한 쌍의 센서입니다.

4가지 유형이 있습니다.

1. 메가 스모 선수
2. 미니 스모 선수
3. 마이크로 스모 선수
4. 나노 스모 선수

모든 사람은 외적으로 뿐만 아니라 내적으로도 다릅니다.

메가 - 가장 크고 가장 위험한 로봇. 최대 무게는 최대 3kg이며 다른 로봇에서는 허용되지 않는 다양한 "흡반"을 넣을 수 있습니다.

미니 - 최대 500g 10 x 10cm의 쾌적하고 작은 로봇 납땜이 어렵지 않고 설정 및 조립이 쉽습니다. 그들은 스모에서 가장 인기 있는 후보입니다.

마이크로 및 나노 - 축소된 미니 사본. 마이크로 5x5x5, 나노 2.5x2.5x2.5. 납땜 및 부품 픽업이 어렵습니다. 메가 스모보다 더 유명합니다.

무엇으로 만들어졌나요?

레고로 돌아가자. 아마도 여러분 중 많은 사람들이 프로그래밍 가능한 레고 생성자로 무언가를 하려고 시도했거나 최소한 어떻게 수행되는지 보았을 것입니다. 이러한 로봇 15 x 15에 대한 별도의 지명도 있지만 매우 지루하고 초심자 또는 소규모 로봇 공학자에게만 적합합니다. 집에서 만든 샘플과 비교할 때 조립의 복잡성을 제외하고는 모든 것을 잃습니다.

먼저 저속. 둘째, 규모가 크다. 셋째, 센서의 낮은 응답 속도입니다. 또한 컨트롤러 자체도 많이 부족합니다.

조립 및 포장에 대한 추가 정보

경쟁하는 스모 선수들은 arduino에서 하고 있습니다. 그들은 텍스톨라이트 보드, 납땜 센서, 컨트롤러, 드라이버 등을 사용합니다.적을 감지하는 센서도 다양하지만 적외선 또는 레이저 센서를 사용할 가치가 있습니다. 소나는 매우 느리고 부피가 크다. 물론 로봇이 움직이기 위해서는 엔진과 바퀴가 필요합니다. 무제한으로 넣을 수 있지만 연습을 통해 로봇은 뒤쪽에 있는 두 개의 바퀴를 가장 잘 타는 것으로 나타났습니다. 물론 로봇은 양동이와 갈고리 없이는 살 수 없습니다. 버킷은 보드 및 요소에 대한 케이스, 래퍼 및 보호입니다. 대부분 강철 또는 철입니다. 후크는 편지지 칼날로 만들어지지만 예를 들어 예리한 나무 자 또는 면모와 같이 비표준 접근 방식을 사용하는 경우가 있지만 이 접근 방식은 거의 사용되지 않습니다.

프로그래밍 외에 가장 어려운 것은 로봇을 설계하는 것입니다.

첫 단계



이것이 바로 첫 번째 단계인 엔진과 센서의 배치입니다. 여기에서 후크 앞에 두 개의 작은 센서를 관찰할 수도 있습니다. 이것이 라인 센서입니다.

링에서 우발적으로 떨어지는 것을 방지하기 위해 범위의 흰색 선을 감지하는 데 사용되지만 필수 구성 요소는 아니며 실제로 자주 사용되지는 않습니다. 고속종종 시간이 멈추는 것을 허용하지 않습니다.

두 번째 단계



그리고 여기에 컨트롤러, 드라이버, 스위치 및 배터리 커넥터가 이미 적용되어 있습니다.
남은 것은 자취를 인쇄하여 텍스토라이트 보드로 전송한 다음 트랙을 해결하는 것뿐입니다.

다음은 완성된 보드의 모습입니다.

완성판



실행할 준비가 된 로봇:

보시다시피 여기에는 특별히 복잡한 것이 없습니다. 아래 문제에 대해.

프로그래밍으로 넘어가자

가장 쉬운 방법은 arduino 또는 arduino 호환 컨트롤러를 사용하는 것입니다. 또한 Arduino IDE가 우리를 도와줍니다. 에 의해 표준 체계로봇에는 5개의 센서가 있습니다. 따라서 상태는 다음과 같을 수 있습니다.

측면 센서가 적을 동시에 보는 상황(이런 일이 발생할 수 없으며 발생하는 경우 센서 중 하나에 오작동이 있음)과 측면 및 전면 2개가 만나는 상황은 제외합니다. 센서는 0(즉, 참조)을 제공합니다. 이것은 또한 불가능하거나 기회가 너무 적습니다.

적에게 가려면 핀을 설치하고 모터에 전압을 인가하고 센서 판독값을 읽기만 하면 됩니다.

로봇 코드

// 센서용 핀 설정 int pin_left=10; int pin_center_left=11; int pin_center_right=4; int pin_center=12; int pin_right=7; // 모터에 대한 핀 int pin_motor_left_forward=9; int pin_motor_left_back=6; int pin_motor_right_forward=3; int pin_motor_right_back=5; // 센서 폴링 결과를 저장하기 위한 변수 int cl,cc,cr,l,r; // 센서 폴링을 위한 함수 void GLAZ() ( cl = digitalRead(pin_center_left); cc = digitalRead(pin_center); cr = digitalRead(pin_center_right); l = digitalRead(pin_left); r = digitalRead(pin_right); ) // 함수 이동, 각 모터에 공급하기 위해 0에서 255까지의 속도를 허용합니다. MOVE(int a, int b) ( if(a<0) { digitalWrite(pin_motor_left_forward,LOW); analogWrite(pin_motor_left_back,0-a); } else { analogWrite(pin_motor_left_forward,a); digitalWrite(pin_motor_left_back,LOW); } if(b<0) { digitalWrite(pin_motor_right_forward,LOW); analogWrite(pin_motor_right_back,0-b); } else { digitalWrite(pin_motor_right_back,LOW); analogWrite(pin_motor_right_forward,b); } } void setup() { pinMode (pin_center,INPUT);//центральный pinMode (pin_right, INPUT);//правый датчик pinMode (pin_left,INPUT);//левый датчик pinMode (pin_center_right, INPUT);//передний правый датчик pinMode (pin_center_left,INPUT);//передний левый датчик pinMode (pin_line_left, INPUT); pinMode (pin_line_right, INPUT); pinMode (pin_start,INPUT);//старт pinMode (13,OUTPUT);//старт digitalWrite(13,HIGH); pinMode (pin_motor_left_back, OUTPUT);//мотор лево назад pinMode (pin_motor_right_forward, OUTPUT);//мотор право вперед pinMode (pin_motor_right_back, OUTPUT);//мотор правый назад pinMode (pin_motor_left_forward,OUTPUT);//мотор лево вперед // ожидание сигнала к началу схватки while(!digitalRead(pin_start))continue; MOVE(200,200); } void loop() { GLAZ(); if(l && r) { if((cl + cc + cr) < 2 || !cc){ MOVE(255,255); } if(cc) { if(!cl && cr) MOVE(0-180,180); if(cl && !cr) MOVE(180,0-180); } } else if(cc + cr + cl == 3) { if(!l && r) MOVE(0-200,200); if(!r && l) MOVE(200,0-200); } else if(cc) { if(!l && !cl && cr && r) MOVE(0-150,150); if(l && cl && !cr && !r) MOVE(150,0-150); } if(!digitalRead(pin_start))while(1){MOVE(0,0);} }


코드를 개선하기만 하면 됩니다.

중요한!
센서는 아무것도 보이지 않으면 1을 반환하고 장애물이 있으면 0을 반환합니다.

USB를 통해 코드를 다운로드하면 로봇이 경쟁할 준비가 된 것입니다.

고려할 가치

먼저 요소가 있습니다. 우리가 사용하는 센서(sharp 340)는 매우 드물거나 존재하지 않습니다. 따라서 가능하면 한 번에 많이 취하거나 매개 변수 측면에서 적합한 아날로그를 찾아야합니다.

둘째, 적 로봇에 치명적인 손상을 입히거나 예를 들어 자석을 사용하여 픽업할 수 없습니다. 이것은 투쟁을 위한 수단의 선택에서 우리를 약간 제한합니다.

또한 바퀴를 잊지 마십시오. 곡선, 가늘고 슬라이딩이 작동하지 않고 단순히 기동할 수 없으며 힘의 순간이 충분하지 않습니다. 타이어를 반드시 테스트하십시오.

엔진으로 작업할 때는 최대 부하에서 작동해야 하며 매우 자주 연소된다는 점을 염두에 두십시오.

이동식 배터리를 만드는 것도 의미가 있기 때문입니다. 로봇은 상당히 빨리 방전되고 충전하는 데 오랜 시간이 걸립니다.

필요한 구매 목록:

1. 납땜 인두, 땜납, 플럭스(옵션)
2. Textolite 보드 (에칭하려면 모든 트랙을 닫은 다음 몇 시간 동안 과산화수소 + 구연산 + 소금 용액에 모두 넣은 다음 트랙이 있던 종이를 찢어야합니다. 숨겨진)
3. 샤프 340 센서
4. 엔진은 취향에 따라 선택하고 rpm이 높을수록 좋습니다.
다음 중 하나를 선택하는 것이 좋습니다: polulu. (추가)
5. 배터리(리튬폴리머 사용 권장) + 충전소
6. 키(스위치 버튼, 기판에 납땜) 및 전기소자(그림에 흔적 있음)
7. 드라이버
8. 컨트롤러, 우선 Polulu A-Star 32u4 micro를 사용해 보고 arduino 부트로더를 업로드할 수 있습니다.
9. 본체용 금속판
10. 보드에 구멍 뚫기
11. 런처 및 스타터 모듈
추신 내가 놓친 것이 있다면 - 쓰십시오. 수정하겠습니다.

경쟁

다음 대회는 로보피니스트 상트페테르부르크에서 열릴 예정이니 지금 열심히 준비하고 있으며 참가를 원하시면 모든 것을 명확하고 빠르게 진행하셔야 합니다.

그러나이 대회가 유일한 것은 아니며 러시아에는 상당히 많은 대회가 있으며 가장 큰 대회는 모스크바에서 열립니다. 한 달에 한두 번 정도는 행복을 경험하고 경쟁할 수 있습니다.

해외에서 이러한 경쟁은 드문 일이 아니며 우리도 거기에 가고 싶습니다. 다음은 전 세계 대회의 대략적인 지도입니다.

우리는 로봇 스모가 우리나라에서만 발전하기를 진심으로 희망하며 모든 사람이 로봇 제작에 참여하도록 초대합니다. 일부 로봇에서 조각이 날아갈 때 매우 서사적으로 보입니다.

이것으로 소개 기사를 마치며 로봇 분야에서 여러분 모두의 성공을 기원합니다. 대회에서 뵙게 되어 기쁩니다!

1. 일반적인 규칙

1.1. 로봇은 상대 로봇을 검은색 선 밖으로 밀어야 합니다(범위를 벗어남).

1.2. 대회 시작 후 로봇은 충돌할 때까지 서로를 향해 움직여야 합니다.

1.3. 충돌 후 로봇은 서로 접촉을 시도해야 합니다.

1.4. 경기 중 팀원이 로봇을 만지면 안 됩니다.

1.5. 두 개의 자율 로봇이 링(둥근 필드)에 배치됩니다. 로봇은 상대를 링 밖으로 밀어내려고 합니다.

1.6. 가장 많은 라운드에서 승리한 로봇이 경기에서 승리합니다.

1.7. "각각"을 플레이할 때 최고의 로봇이 가장 많은 경기에서 승리한 것으로 간주됩니다.

1.8. 참가자가 많은 경우 "올림픽 시스템"(출발 용)에 따라 순위를 구성 할 수 있습니다.

2. 로봇

2.1. 로봇은 LEGO Mindstorms 부품만 사용하여 제작해야 합니다.

2.2. 전체 라운드 동안:

로봇의 크기는 25x25x25cm를 넘지 않아야 합니다.

로봇의 무게는 1kg을 초과하지 않아야 합니다.

2.3. 심사위원의 판단에 따르면, 의도적으로 다른 로봇을 손상시키거나 경기장 표면을 손상시킨 로봇은 대회 기간 동안 실격 처리됩니다.

2.4. 로봇 설계에 사용하는 것은 엄격히 금지되어 있습니다.

접착제.

2.5. 경기 전에 로봇의 치수와 무게를 확인합니다.

2.6. 로봇은 오퍼레이터가 각 라운드를 선택할 수 있는 복수의 프로그램을 가질 수 있습니다.

2.7. 경기 사이에 로봇의 디자인과 프로그램을 변경할 수 있습니다.

3. 필드

3.1. 5cm 두께의 검은색 테두리가 있는 지름 1m의 흰색 원.

3.2. 원에서 로봇의 시작 영역은 빨간색 줄무늬로 표시됩니다.

3.3. 빨간 점은 원의 중심을 표시합니다.

3.4. 필드는 16mm 높이의 연단에 배치됩니다.

4. 대회 개최

4.1. 대회는 일련의 경기로 구성됩니다. 경기에 참여하는 두 로봇 중 가장 강한 로봇이 결정됩니다. 경기는 30초씩 3라운드로 진행된다. 경기는 가장 많은 라운드에서 승리한 로봇이 승리합니다. 판사는 분쟁 상황을 명확히 하기 위해 추가 라운드를 사용할 수 있습니다.

4.2. 라운드는 순차적으로 진행됩니다.

4.3. 라운드가 시작될 때 로봇은 시작 영역의 빨간색 줄무늬 뒤에(링 중앙에서) 배치되며 필드에 닿는 로봇의 모든 부분은 시작 영역 안에 있어야 합니다.

4.4. 심판의 명령에 따라 로봇을 시작하라는 신호가 주어지고 로봇의 운영자는 로봇에서 프로그램을 시작하고 5초 이내에 필드에서 1미터 이상 떨어져야 합니다. 같은 5초 동안 로봇은 일직선으로 이동하며 서로 충돌해야 합니다.

4.5. 초보자용: 충돌 후 로봇은 링 주위를 움직일 수 없습니다.

4.6. 경험자: 충돌 후 로봇은 원하는 대로 링 주위를 움직일 수 있습니다.

4.7. 로봇이 라운드 시작 후 5초 이내에 충돌하지 않으면 심판이 판단하기에 충돌이 없는 로봇은 라운드의 패자로 간주됩니다. 로봇이 직선으로 이동 중이고 5초 안에 충돌할 시간이 없으면 시작 영역에 가장 가까운 로봇이 라운드의 패자로 간주됩니다.

5. 우승자 선정 규칙

5.1. 로봇이 10초 이상 다른 로봇과 접촉하지 않고 움직이지 않으면 라운드의 패자로 간주됩니다.

5.2. 로봇의 검은색 테두리 너머에 있는 부분(로봇에 부착되지 않은 부분도 포함)을 만지면 로봇이 라운드를 잃게 됩니다.

5.3. 라운드가 끝날 때 로봇이 원 밖으로 밀려나지 않으면 원의 중심에 가장 가까운 로봇이 라운드의 승자로 간주됩니다.

5.4. 위의 방법으로 승자를 결정할 수 없는 경우에는 경기의 심판이 승패를 결정한다.

6. 심판

6.1. 주최측은 이러한 변경으로 인해 팀 중 하나에 이점이 없는 경우 대회 규칙을 변경할 권리가 있습니다.

6.2. 통제 및 요약은 위의 규칙에 따라 심사 위원단이 수행합니다.

6.3. 심사 위원은 모든 대회에서 모든 권한을 가집니다. 모든 참가자는 자신의 결정을 따라야 합니다.

6.4. 심판에 대한 이의가 있는 경우 팀은 현재 라운드가 종료되기 전까지 심판의 결정에 대해 조직위원회에 구두로 항소할 권리가 있습니다.

6.5. 재경기는 로봇이 외부의 간섭으로 무대를 마치지 못한 경우, 경기장 상태가 좋지 않아 오작동이 발생한 경우, 선수의 실수로 인해 심판의 결정으로 진행될 수 있다. 심사위원단.

6.6. 팀원과 리더는 자신이 속한 팀의 로봇이나 상대방의 로봇의 행동을 물리적으로든 멀리서든 방해해서는 안 됩니다. 방해는 즉각적인 실격으로 이어집니다.

6.7. 주심은 로봇이 10초 이내에 계속 움직일 수 없는 경우 재량에 따라 경기를 종료할 수 있습니다.

12.2. 경쟁 "스모"를 위한 로봇의 디자인.

기본 로봇 동작 "스모"로봇의 행동과 매우 흡사하다. "케겔링". 로봇은 또한 필드 내부에서 물체를 찾아 원 밖으로 밀어내야 합니다. 차이점은 평소와 같이 세부 사항에 있습니다. 이제 이 개체는 차례로 우리 로봇을 찾고 있으며 가능한 한 빨리 로봇을 밀어내고자 합니다.

그럼에도 불구하고 우리의 목표에 집중합시다. 멀리 있는 물체(적외선 또는 초음파)를 감지할 수 있는 센서 중 하나는 여전히 상대를 찾는 데 도움이 될 것이며 컬러 센서를 사용하여 필드의 검은색 경계를 적시에 결정할 것입니다. 따라서 스모 로봇 프로그램을 만들고 디버그하려면 Lesson #11 - Kegelring에서 준비한 것과 동일한 로봇을 사용하는 것이 좋습니다.

전방에 위치한 센서를 적과의 상호작용으로부터 보호하기 위해 범퍼를 제작하여 로봇에 고정합니다. 다음은 가정 및 교육용 레고 마인드스톰 EV3에 대한 자세한 조립 지침입니다. 자유롭게 실험하고 나만의 디자인을 생각해 보세요.

레고 마인드스톰 EV3 홈

레고 마인드스톰 EV3 교육

결과 요소를 로봇의 전면 빔에 고정합니다.

레고 마인드스톰 EV3 홈

레고 마인드스톰 EV3 교육

훈련 로봇이 준비되었습니다. 스모 로봇 프로그램을 만들어 봅시다. 다른 로봇을 사용하여 프로그램을 디버깅할 수 있는 기회가 있으면 좋습니다! 그렇지 않은 경우 괜찮습니다. 예를 들어 무선 조종 자동차 모델이나 Kegelring의 동일한 스키틀즈와 같이 상대방으로 사용할 수 있습니다.

12.3. 대회 "스모"를 위한 프로그램 제작.

가장 먼저 떠오르는 생각은 프로그램을 사용하여 "케겔링"약간의 미용적 변화와 함께. 실제로 로봇 행동 알고리즘은 "케겔링"그리고 안에 "스모"굉장히 유사한. 그들은 개체에 대한 검색을 구현하고 필드 밖으로 밀어냅니다. 스모 선수에게 프로그램을 다운로드할 수 있습니다. "케겔링"그러나 그러한 스모 선수는 매우 효율적으로 작동하지 않습니다. 그러나 이전 단원에서 얻은 지식은 이제 우리에게 유용할 것입니다.

이제 프로그래밍 환경에 프로젝트를 업로드할 시간입니다. "교시-2", 새 프로그램을 만듭니다. 12과로봇을 프로그래밍 환경에 연결합니다.

스모 선수의 행동 모델은 두 부분으로 나눌 수 있습니다. 상대를 찾아라그리고 상대의 공격. 첫 번째 부분의 구현부터 시작하겠습니다. 상대를 찾아라.

상대가 필드에서 감지될 때 로봇의 동작 순서를 자세히 설명하겠습니다.

  1. 전면에 위치한 센서가 상대를 감지할 때까지 축을 중심으로 회전합니다.
  2. 상대방 앞에서 멈춥니다.

이 일련의 동작은 다음에서 스키틀즈에 대한 로봇의 검색 알고리즘을 완전히 반복합니다. "케겔링", 그러나 로봇 사이의 거리 때문에 "스모"로봇에서 핀까지의 거리를 초과할 수 있으므로 사용된 센서에 대해 다른 임계값을 선택해야 합니다.

아래 그림과 같이 서로 반대편 필드에 상대를 설정합니다.

이 위치는 실제로 경쟁 중 로봇 간의 최대 거리에 해당하므로 상대와의 거리를 측정하는 센서의 현재 판독값을 임계값으로 취할 수 있습니다. 중요한: 문턱값이 충분히 커질 것이기 때문에 로봇이 작동하는 동안 필드 밖 약 1m 거리에서 검색을 방해할 수 있는 이물질도 없어야 합니다.

"하드웨어 페이지", 프로그래밍 환경의 오른쪽 하단에 있는 탭을 선택합니다. "포트 뷰"(그림 1, 2 위치 1)판독값의 적절한 표시 모드를 설정하여 상대방과의 거리를 결정하는 센서의 판독값을 가져옵니다.

우리의 경우 초음파 센서가 모드에 있습니다. "센티미터 단위의 거리"가치를 보여줍니다 - 56.1 (그림 1 위치 2) 57 .

쌀. 하나

모드의 적외선 센서 "근사"가치를 보여줍니다 - 68 (그림 2 위치 2). 임계 값에 대해 우리는 숫자를 취합니다. 70 .

쌀. 2

와 유추하여 "케겔링"로봇을 프로그래밍하여 상대를 찾도록 프로그래밍할 수 있습니다. 이전 수업에서 약간 거리를 두려면 로봇의 회전 방향을 반대 방향으로 변경합니다.

초음파 센서

  1. "그린 팔레트" "켜다" "비"동일하게 설정 -30 , 포트의 전력 값 "씨"동일하게 설정 30 (그림 3 pos.1).
  2. 상대를 검색하려면 모드에서 프로그램 블록을 사용하십시오. "초음파 센서 - 비교 - 거리(센티미터)" 57 (그림 3 위치 2).
  3. 모터를 끄다 (그림 3 위치 3).

쌀. 삼

적외선 센서

  1. 로봇이 축을 중심으로 회전하도록 하기 위해 프로그램 블록을 사용합니다. "독립 모터 제어" "그린 팔레트", 블록 동작 모드 설정 "켜다", 포트의 전력 값 "비"동일하게 설정 -30 , 포트의 전력 값 "씨"동일하게 설정 30 (그림 4 위치 1).
  2. 상대를 찾기 위해 우리는 프로그램 블록을 사용합니다 "기다려" "오렌지 팔레트"모드에서 "적외선 센서 - 비교 - 근사",센서 작동의 임계값은 다음과 같습니다. 70 (그림 4 위치 2).
  3. 로봇이 상대방과 마주한 후 프로그램 블록을 사용하여 "독립 모터 제어" "그린 팔레트"모터를 끄다 (그림 4 위치 3).

쌀. 네

이 알고리즘을 디버깅하는 단계에서 값을 선택해야 합니다. "힘"모터 "비"그리고 "씨"센서의 임계값뿐만 아니라 로봇에서 정확한 감지를 달성하고 상대 앞에서 직접 정지합니다. 그 후에야 공격 알고리즘의 소프트웨어 구현을 진행할 수 있습니다.

상대를 찾는 경우 "스모"의 스키틀즈 검색과 매우 유사합니다. "케겔링", 그리고 상대를 밀어내는 것은 중요한 차이가 있습니다! 공격을 시작하면 가장 먼저 모터의 최대 파워로 감지된 상대를 향해 직진하며 링 테두리 감지를 컬러 센서로 확인한다. 하지만 상대도 움직일 수 있다! 따라서 상대방이 우리의 공격 방향에서 물러날 가능성이 큽니다. 이 경우 놓친 우리 로봇은 링의 경계로 이동하여 상대방과 귀중한 시간을 잃게됩니다.

따라서 우리는 직선 이동 중에 두 센서를 모두 분석하고 로봇이 공격을 중지하면 상대를 잃을 것이다 또는 로봇은 링의 경계에 도달합니다. 따라서 프로그램 블록 사용을 중지해야 합니다. "기다려" "오렌지 팔레트" 2개의 센서의 판독값을 수신하고 처리하는 사이클에서 독립적으로.

알고리즘의 단계적 구현을 ​​진행해 보겠습니다. 상대방의 공격: 이를 위해 프로젝트에서 임시 프로그램을 생성합니다. 수업-12-1프로그램 블록으로 채우기 시작합니다.

  1. 프로그램 블록을 가져 가자 "사이클" "오렌지 팔레트".
  2. 블록 내부 "주기"프로그램 블록을 넣어 "독립 모터 제어" "그린 팔레트" "켜다" (그림 5 위치 1), 모터 파워 "비"그리고 "씨"최대값으로 설정 - 100 (그림 5 2번 위치).

쌀. 5

  1. 블록 뒤에 "독립 모터 제어"프로그램 블록을 배치하십시오. 차단 작동 모드를 다음으로 설정하십시오. "비교 - 반사광 강도" (그림 6)

쌀. 6

이 모드에서 프로그램 블록 "색상 센서" "노란색 팔레트"소프트웨어 블록과 시각적으로 매우 유사 "기다려" "오렌지 팔레트"모드에서 "컬러 센서 - 비교 - 반사광 강도". 하지만 블록과 달리 "기대", 이 프로그램 블록은 매개변수로 지정된 조건을 기다리지 않습니다. "비교 유형"(그림 7 위치 1)그리고 "임계값"(그림 7 위치 2), 즉시 부울 값을 제공합니다( "진실"또는 "거짓말하다") 출력 매개변수의 측정값 및 출력 매개변수의 측정값 "조명"(그림 7 위치 4).

옵션 "비교 유형"그리고 "한계점"쌀. 7포지션 12 "비교 결과"(그림 7 위치 3)부울 값을 주었다 "진실"컬러 센서가 링의 검은색 경계를 넘을 때.

쌀. 7

  1. 유닛 뒤에 초음파 센서를 사용하는 경우 "컬러 센서"소프트웨어 블록 설치 "초음파 센서" "노란색 팔레트". 차단 작동 모드를 다음으로 설정하십시오. "비교 - 센티미터 단위의 거리"(그림 8 위치 1). 매개변수 "비교 유형"(그림 8 위치 2), 매개변수 "임계값"(그림 8 위치 3)출력 매개변수가 "비교 결과"(그림 8 위치 4)부울 값을 주었다 "진실"

쌀. 여덟

기기 뒤에 적외선 센서를 사용하는 경우 "컬러 센서"소프트웨어 블록 설치 "적외선 센서" "노란색 팔레트". 차단 작동 모드를 다음으로 설정하십시오. "비교 - 근사치"(그림 9 위치 1). 매개변수 "비교 유형"(그림 9 위치 2), 매개변수 "임계값"(그림 9 위치 3)출력 매개변수가 "비교 결과"(그림 9 위치 4)부울 값을 주었다 "진실"상대방의 로봇에 의해 시력을 상실한 경우.

쌀. 9

공격 알고리즘의 중간 코드를 다시 한 번 분석해 보겠습니다. 모터를 최대 전력으로 켜고 앞으로 나아가면서 주기적으로 센서를 지속적으로 폴링합니다. 로봇이 링 테두리의 검은색 선을 넘으면 출력 매개변수의 값이 "비교 결과" "컬러 센서"의미를 가질 것이다 "진실". 로봇이 상대를 잃으면 출력 매개변수의 값이 "비교 결과"상대를 추적하는 센서도 값을 취합니다. "진실". 이러한 경우에는 루프를 종료하여 공격을 중지해야 합니다. 프로그램 블록이 이를 도와줄 것입니다. 이 블록에 대해 더 자세히 알아보자: 프로그램 블록 "논리 연산"논리적 데이터에 대한 작업을 수행하도록 설계됨 (그림 10).

쌀. 십

선택된 프로그램 블록 모드 "논리 연산" "빨간색 팔레트"부울 데이터에 대한 네 가지 연산 중 하나를 정의합니다. "그리고 (그리고)", "또는 (또는)", "XOR"그리고 "예외(NOT)". 디 VA 입력 매개변수 "ㅏ"그리고 "비"(작동을 위해 "예외(NOT)"- 하나의 입력 매개변수 "ㅏ") 입력 값을 프로그램 블록에 전달하고 결과 값은 출력 매개변수에 의해 생성됩니다. "결과". 이전에 논리 연산을 접한 적이 없다면 스포일러 아래에 첨부된 도움말에서 기본 지식을 익힐 수 있습니다.

부울 연산

논리 연산은 논리값이기도 한 논리값(데이터)에 대해서만 수행됩니다. 부울 값은 다음 두 가지 상태 중 하나일 수 있습니다. "진실"또는 "거짓말하다". 논리 연산은 매우 자주 다음과 같은 표 형식으로 작성됩니다. "입력 매개변수 1" - "입력 매개변수 2" = "결과". 프로그램 블록에 의해 구현된 논리 연산 "논리 연산" "빨간색 팔레트"표 형식으로 다음과 같이 작성할 수 있습니다.

논리 연산 "AND(AND)"

논리 연산의 결과 "그리고 (그리고)"가치가있을 것입니다 "진실" "진실" "거짓말하다".

"ㅏ" 작업 "비" 결과
"거짓말하다" "그리고 (그리고)" "거짓말하다" = "거짓말하다"
"거짓말하다" "그리고 (그리고)" "진실" = "거짓말하다"
"진실" "그리고 (그리고)" "거짓말하다" = "거짓말하다"
"진실" "그리고 (그리고)" "진실" = "진실"

논리 연산 "OR(OR)"

논리 연산의 결과 "또는 (또는)"가치가있을 것입니다 "거짓말하다"두 입력 값이 동일한 경우에만 "거짓말하다", 다른 모든 경우에 연산 값은 "진실".

"ㅏ" 작업 "비" 결과
"거짓말하다" "또는 (또는)" "거짓말하다" = "거짓말하다"
"거짓말하다" "또는 (또는)" "진실" = "진실"
"진실" "또는 (또는)" "거짓말하다" = "진실"
"진실" "또는 (또는)" "진실" = "진실"

논리 연산 "XOR"

논리 연산의 결과 "XOR"가치가있을 것입니다 "진실"입력 값 중 하나가 동일한 경우에만 "진실", 다른 모든 경우에 연산 값은 "거짓말하다".

"ㅏ" 작업 "비" 결과
"거짓말하다" "XOR" "거짓말하다" = "거짓말하다"
"거짓말하다" "XOR" "진실" = "진실"
"진실" "XOR" "거짓말하다" = "진실"
"진실" "XOR" "진실" = "거짓말하다"

논리 연산 "예외(NOT)"

부울 연산 "예외(NOT)"하나의 입력 값에만 적용됩니다. 논리 연산의 결과 "예외(NOT)"입력 값 위의 값은 반대 값입니다.

  1. 프로그래밍 블록 뒤에 "초음파 센서"또는 "적외선 센서"프로그램 블록을 넣어 "논리 연산" "빨간색 팔레트".
  • 출력 매개변수 "비교 결과"프로그램 블록 "컬러 센서"(그림 11, 12 위치 1) "ㅏ"프로그램 블록 "논리 연산" (그림 11, 12 위치 4).
  • 출력 매개변수 "비교 결과"프로그램 블록 "초음파(적외선) 센서"(그림 11, 12 위치 2)입력 매개변수와 연결 "비"프로그램 블록 "논리 연산" (그림 11, 12 위치 5).
  • 프로그램 블록 동작 모드 "논리 연산"에 설정 "또는 (또는)" (그림 11, 12 위치 3). 이 경우 논리 연산의 결과는 다음 값을 취합니다. "진실", 다음 조건 중 하나가 충족되는 경우에만: 컬러 센서가 검은색 선을 넘고 로봇은 상대를 잃습니다.
  • 프로그램 차단 모드를 설정하여 "주기"의미로 "부울 값" (그림 11, 12 위치 7), 출력 매개변수 "결과"프로그램 블록 "논리적 연산"(그림 11, 12 위치 6)입력 매개변수와 연결 "진실이 될 때까지"프로그램 블록 "주기" (그림 11, 12 위치 8). 이 설정은 다음과 같은 경우 주기를 완료합니다. "진실"논리 연산의 결과.

쌀. 열하나


쌀. 12

결과 공격 알고리즘을 테스트하자! 이를 위해 우리는 로봇을 링 안에 배치하고 반대로 움직이지 않는 상대를 설치하고 실행을 위해 공격 프로그램을 시작합니다. 우리 로봇은 자신 있게 상대를 링 밖으로 밀어내고 필드의 검은색 테두리 위에서 멈춰야 합니다. 일어난? 따라서 우리의 스모리스트는 링의 경계를 올바르게 제어합니다.

두 번째 실험을 수행해 보겠습니다. 다시 로봇 앞에 움직이지 않는 적을 설치하고 공격 프로그램을 시작합니다. 우리 로봇이 적에게 돌진하여 충분히 가까워지면 우리는 상대방을 옆으로 날카롭게 제거합니다. 우리 로봇은 상대를 잃은 후 멈춰야 합니다.

요약하자면, 우리는 상대 검색 알고리즘을 구현하고 성공적으로 테스트했으며 공격 알고리즘도 테스트했습니다.

스모 선수의 완성된 프로그램은 끝없는 루프에서 상대를 순차적으로 검색한 다음 상대를 공격해야 합니다. 하나의 작은 추가 사항이 아니라면 프로그램의 두 부분을 결합하는 것이 가능합니다. 로봇이 링 경계 위에서 멈춘 경우 검색을 시작하기 전에 로봇은 약간 뒤로 물러난 후 링 내부로 돌아와야 합니다. 공격 프로그램을 다음 코드로 보완할 것입니다. 공격 루프 외부에서 프로그램 블록 " "오렌지 팔레트" 전환. 블록 작동 모드 "스위치"에 설정 "컬러 센서 - 비교 - 반사광 강도".옵션 "비교 유형"그리고 "한계점"프로그램 블록에서 이전에 사용한 것과 같은 방식으로 설정 "색상 센서" "노란색 팔레트". 따라서 로봇이 검은색 선 위에서 멈춘 경우 실행은 프로그램 블록의 상위 컨테이너로 전송됩니다. "스위치". 프로그램 블록을 배치하는 것은 상단 컨테이너에 있습니다. "조향" "그린 팔레트", 로봇이 모터의 한 회전 뒤로 이동하도록 하는 매개변수 설정이 있습니다. 프로그램 블록의 맨 아래 컨테이너로 "스위치"모터를 끄는 프로그램 블록 배치 (그림 13). 공격 알고리즘을 다시 테스트한 후 스모 로봇이 상대를 링 밖으로 밀어낸 후 약간 돌아오는지 확인할 것입니다.

쌀. 13

이제 스모 로봇용 프로그램 개발을 완료할 수 있습니다. 무한루프 내부에 적을 탐색하는 프로그램을 차례로 내포한 후, 상대를 공격하는 프로그램을 중첩시킨다. 솔루션을 들여다보지 않고 직접 이 작업을 수행하십시오.

결론:

이 단원에서 논의한 프로그램은 스모 로봇의 동작에 대해 단 하나의 직접 힘 알고리즘을 구현합니다. 직접적인 권력 대결에서 로봇은 반드시 상대를 물리쳐야 한다는 의미다. 그러나 우리의 훈련 로봇은 물론 근육질의 스모 선수와는 다릅니다. 이 경쟁에서 자신있게 수행하려면 무엇보다도 로봇 설계에 가장 세심한 주의를 기울여야 하며, 견고하고 보호된 플랫폼을 만들고 다음의 도움으로 링 표면의 견인력을 증가시켜야 합니다. 추가 구동 바퀴 또는 트랙. 인기 있는 비디오 호스팅 유튜브닷컴요청 시 "스모 레고 로봇"실제 로봇 대회에서 많은 비디오를 찾을 수 있으며, 이 비디오에서 흥미로운 아이디어를 끌어내어 자신의 디자인에 구현할 수 있습니다.

이 강의의 주요 목표는 실제 예를 사용하여 한 쌍의 센서에서 판독값을 지속적으로 처리하는 방법을 보여주는 것입니다. 우리 프로그램을 개선할 수 있습니까? 틀림없이! 예를 들어 프로그램 블록을 사용하여 "임의 값" "빨간색 팔레트", 로봇의 무작위 회전을 왼쪽 또는 오른쪽으로 설정하여 상대를 혼란스럽게 하는 방식으로 상대 찾기 알고리즘을 변경합니다. 이 추가 코드를 우리 프로그램에 직접 빌드해 보십시오. 또한 흰색 테두리가 있는 검은색 링에서 경쟁하는 경우 프로그램을 변경해야 할 사항에 대해 생각해 보십시오. 자신만의 개선 아이디어가 있을 수 있습니다. 수업에 대한 의견에 공유하십시오!