Zalophus's DesignHouse

Internet 제어 Raspberry Pi Camera Rover (Robot) 본문

Raspberry Pi

Internet 제어 Raspberry Pi Camera Rover (Robot)

Zalophus Dokdo 2016. 6. 16. 15:06
반응형




소개


이 프로젝트의 아이디어는 상기 프로세서로 라즈베리 파이를 사용하여 인터넷을 통해 완전히 제어 로봇을 생성하는 것이다. 로봇은 HTML로 작성된 웹 페이지에 의해 직접 제어 턴에있는 쉘 스크립트 작성 저수준의 명령을 사용하여 제어된다. 우리는 예를 들면 파이썬 같은 고급 언어를 사용하는 사실은, 로봇이 페이지 (인터넷 속도가 느린 경우에도)에 의해 수신 된 명령에 빠르게 반응하도록 야기된다.


아래 링크에서는 어떻게 완성 된 프로젝트를 볼 수 있습니다


이 프로젝트는 두 부분으로 분할하고, 배울 것 1 부에서한다 :


설치 및 GPIO가 RPI를 제어하는 라이브러리 WiringPi를 사용

는 H-Bridge를 사용하여 제어 모터

웹 서버의 RPI 변형

인터넷을 통해 상기 로봇을 제어하기 위해 HTML (자바 스크립트)에 페이지를 만들기

더 나아가 로봇이 현실 세계의 "비전"을 가지고 있는지 확인하기 위해, 당신은 당신이 배울이 튜토리얼의 두 번째 부분에 갈 수 있습니다 :


물어와 비디오 스트림을 생성하는 방법

설치 및 라이브러리 ServoBlaster를 사용하는 방법

서보 모터를 제어하고, 카메라의 수직 및 수평 위치 (WFP / 틸트기구) 메커니즘을 구축하는 방법

인터넷을 통해 카메라의 위치를 제어하기 위하여 HTML 페이지를 작성

 


블록 다이어그램은 아래 날개 프로젝트의 두 부분에 대한 일반적인 생각을 보여줍니다



부 : 인터넷을 통해 조명 및 모터 제어


RPI는 웹 서버로 정의하고 HTML 페이지로부터 명령을 수신한다. 이러한 명령은 RPI 로봇 (방향과 속도)의 모터를 제어 일으키는 개의 GPIO의 상태를 변경 및 / 떨어져 LED에 (시뮬레이션 디지털 제어 시스템을 더)한다. 당신이 볼 수 있듯이, 로봇은 실제로 만약 IoT 프로젝트의 특별한 경우이다. 당신은 실제로 당신이 원하는 것을 제어 할 수 있으며,이 튜토리얼은 새로운 아이디어가 미래에 구현 될위한 출발점이 될하기위한 것입니다.


아래의 그림, 우리는이 첫 번째 부분에서 개발되는의 개요에서 :



자료의 목록


라즈베리 파이 모델 2 또는 3

H 브리지 L293-D

DC 모터 (2 배)

드라이버 9V 배터리

RPI에 배터리 5V

LED와 30 옴의 저항

브레드 보드 및 전선

아크릴 엔진 / 전자 제품에 대한 지원 (키트, CD를, 등을 할 수 있습니다)

도서관 WIRINGPI의 설치


WiringPi는 C로 작성된 라이브러리가 GPIO가의 RPI에 직접 액세스하는 데 사용됩니다. 매우 쉽게 쓸 수 있으며 크게 ( "embebeda 시스템") RPI 및 전자 관련된 모든 프로젝트를 단순화합니다.


라이브러리 WiringPi는 "GPIO"프로그램 및 GPIO 핀을 구성 할 수 있습니다 (wiringpi.com/the-gpio-utility)라는 유틸리티가 포함되어 있습니다. 당신은 읽기 및 / 또는 쉘 스크립트와 같은 명령의 RPI의 핀에 직접 작성하는 유틸리티를 사용할 수 있습니다. 당신은 GPIO 쉘 스크립트에 명령 정수를 사용하여 프로그램을 작성할 수 있습니다.


WiringPi를 설치하려면 :


    git clone git://git.drogon.net/wiringPi


    cd wiringPi


    ./build


유틸리티의 화면 버전을 표시하려면 다음 명령을 사용합니다 :


    gpio -v


일반적으로 액세스 모든 핀을 읽고 그 모드를 상호 참조 표를 작성하는 다른 포맷 (wiringPi, BCM_GPIO 핀 및 물리적)의 핀의 상태가 "GPIO의 ReadAll 메쏘드를"명령어를 사용할 수있는 테이블을 제시 현재 값을 표시합니다. 이 명령은 RPI와 파이에 적합한 인쇄도 소나무의 버전 / 모델을 감지합니다.


    gpio readall


모니터 화면 아래 위의 두 명령의 항목의 결과를 나타낸다.



예를 들면, 출력으로서 BCM_GPIO 방식을 사용하여 하나의 GPIO를 설정하는 명령을 사용하는 것 :


     gpio mode -g 10 out


가능 GPIO 핀이 정의 모드가되면, 당신은 동일한의 논리 상태를 정의 할 수 있습니다. 예에서, 핀은 논리 하이 상태로 이동한다 :


     gpio write -g 10 1



그 양극과 GND 사이에 330ohm 저항을 부가 LED GPIO.10 핀의 음극을 설치 테스트합니다. 확실히 모든 것이 작동하는지 확인하기 위해 몇 가지 검사를 수행합니다.


출력 또는 입력으로 핀을 설정할 수있는 것 외에도 PWM 형식의 출력으로서 그 중 일부를 설정할 수있다. 이것은 물리적 핀 12 GPIO.18의 경우이다.


핀을 설정하려면 :


    gpio -g mode 18 pwm


또는


    gpio mode 1 pwm     참고 : ( "1") GPIO.18에 WPI ID입니다


PWM 값을 설정합니다 :


    gpio pwm 1 XXX     참고 : [XXX 0 사이의 값입니다 -> 1023]


예. :


    gpio pwm 1 512       참고 : (50 % 듀티 cicle)


이 핀 particularmante의 구성을 제거하려면 :


    gpio unexport 1


모든 핀 구성을 제거하려면 :


    gpio unexportall


라즈베리 PI 및 LIBRARY WIRINGPI WITH 제어 모터


이 시점에서, WiringPi 라이브러리가 설치되어 있고 당신은 당신의 RPI의 모니터에 명령 줄에서 직접 GPIO를 제어 할 수 있습니다. 다음 단계는 모터를 제어하기위한 로직을 생성하는 것이다. 이를 위해, 우리는 H-다리의 L-293-D를 사용합니다. 이 H- 브리지는 2 개의 모터를 제어 할 수 있고, 모터의 각각에 대해 입력 3 필수 :




왼쪽 엔진 : "활성화"; "모터 +"와 "모터 -"

모터 오른쪽 : "활성화"; "모터 +"와 "모터 -"


항목에서 두 엔진은 서로 연결되어 "사용"GPIO.18에 의해 제어된다. 이 핀은 속도 제어에 대한 책임이 있습니다. 만약, 속도를 제어하는 "1"로 핀을하게 할 필요가없는 경우, 예를 들어 (+ 5V에 연결).


우리는 왼쪽 엔진이 "앞으로"이동하려는 경우, 우리는 + 모터 (M의 +)를 설정해야합니다, 협약 "1"과 모터 - (M-) "0". 모터가 반대 방향으로 회전되도록 우리가 대향 할 것이다 : 엔진 + (M +)을 "0"으로 모터 - (M-) "1"이다. 실제로, 엔진의 방향을 정확하게 제어 입력을 정의하는 가장 좋은 방법은 동일한 조립하여 테스트하는 것이다.


우리는 항목의 다리에 개의 GPIO를 할당합니다 :


왼쪽 엔진 + : GPIO.5

왼쪽 모터 : GPIO.6

오른쪽 엔진 + : GPIO.13

오른쪽 엔진 - : GPIO.19

위의 가정에 기초하여, 논리는 GPIO를 테이블에 할당 될 수 수준 (표 화상을 참조)로 구축 할 수있다.


다음 단계는 엔진을 구동하기 위해 쉘 스크립트를 생성하는 것이다.


각 스크립트는 기본적으로 단순 텍스트 파일 형식이다. 텍스트 파일을 실행하려고하면, 운영 체제는 스크립트인지 아닌지를 결정하는 단서를 검색하며, 어떻게 적절하게 처리. 이 때문에, 당신이 알아야 할 몇 가지 지침이있다.


각 스크립트로 시작해야합니다 “#!/bin/bash”(해쉬 - 뱅 해킹}

각각의 새로운 라인은 새로운 명령입니다

주석 행은 #로 시작

명령은 ()에 의해 둘러싸여있다

운영체제 (쉘)은 텍스트 파일을 분석하면 스크립트의 첫 줄이 제작 될 때, 가장 직접적인 방법은 파일을 식별하기 #! / 빈이 / 떠들썩한 파티! 주석 행은 해시 (#)로 시작하지만 다음 OS를 강제 뱅 (!)와 쉘 경로를 추가하는 스크립트를 실행합니다.


예를 들어, "앞으로"이동합니다 모터를 제어하는​​ 쉘 스크립트를 작성하고, 위의 테이블을 기반으로, 우리는 텍스트 편집기를 수행해야하고 I를 사용하고 당신을 위해 가장 적합한 편집기를 사용하여 (아래의 파일을 생성 이것에 대한 NANO) :


     sudo nano forward.cgi


        #!/bin/bash


        gpio -g write 5 1


        gpio -g write 6 0


        gpio -g write 13 1


       gpio -g write 19 0



스크립트가 생성되면, 우리는 당신에게 실행할 수있는 권한을 부여해야합니다 :


    sudo chmod 755 forward.cgi


이제 스크립트를 실행합니다 :


    sudo ./forward.cgi


LED가 스크립트를 테스트하는 데 사용하고, 실제 엔진은 이후의 단계에서 첨가 될 것이다.



파일 확장자와 같은 것을 사용 .cgi로 참고. CGI는 "공용 게이트웨이 인터페이스"를 의미합니다. 이 웹 서버는 동적 웹 페이지를 생성하는 서버에 설치 실행 프로그램과 상호 작용하는 표준 방법입니다. 이러한 프로그램은 CGI하거나 CGI를 스크립트로 알려져 있습니다; 그들은 일반적으로 스크립팅 언어로 기술되지만, 임의의 프로그래밍 언어로 기록 될 수있다.


계속해서, 같은 아이디어는 상기 테이블의 다른 조합에 적용한다 :


    sudo nano stop.cgi


         #!/bin/bash


         gpio -g write 5 0

         gpio -g write 6 0

         gpio -g write 13 0

         gpio -g write 19 0



    sudo nano reverse.cgi


         #!/bin/bash


         gpio -g write 5 0

         gpio -g write 6 1

         gpio -g write 13 0

         gpio -g write 19 1



    sudo nano left.cgi


        #!/bin/bash


        gpio -g write 5 0

        gpio -g write 6 1

        gpio -g write 13 1

        gpio -g write 19 0



    sudo nano right.cgi


         #!/bin/bash


         gpio -g write 5 1

         gpio -g write 6 0

         gpio -g write 13 0

         gpio -g write 19 1


스크립트를 작성하면 forward.cgi으로 수행되었을 때, 당신은 그들에게 동일하게 실행할 수있는 권한을 부여해야합니다


    sudo chmod 755 stop.cgi

    sudo chmod 755 reverse.cgi

    sudo chmod 755 left.cgi

    sudo chmod 755 right.cgi


 이제 모든 것이 작동하는지 확인하기 위해 몇 가지 테스트를 실행합니다 :


    ./forward.cgi

    ./left.cgi

    ./reverse.cgi

    ./right.cgi

    ./stop.cgi


좋은 방법은 자주 사용하는 프로그램에 대한 특정 디렉토리가 있고 "빈"을 호출하는 것입니다. 그래서, 우리는 프로젝트에서 사용하는 스크립트를 저장하려면, 우리는 예를 들어, 모든 실행 스크립트를 포함하는 CGI-빈 (또는 바이너리 파일)에 대해 디렉토리를 작성해야합니다.


우리가 우리의 웹 사이트가 위치하며 "VAR"에서 "WWW"디렉토리를 만들어 보자 그 아래, 스크립트 디렉토리 "CGI - bin에"


    sudo mkdir /var/www

    sudo mkdir /var/www/cgi-bin


이제, 우리는 새로운 디렉토리에있는 모든 파일을 이동 :


    sudo mv /*.sgi /var/www/cgi-bin

    cd /var/www/cgi-bin


ls 명령을 사용하여 만든 파일을 볼 수 있습니다 :



/ 오프 LED 및 제어 엔진 속도 ON (선택 사항)


우리는 H 브리지 모터 제어를위한 oL293-D로 사용하기 때문에, 우리는 방향을 넘어, 우리는 또한 속도를 제어 할 것인지 여부를 결정해야합니다.


두 가지 가능성이 여기에 :


고정 속도 : 두 개의 저항으로 전압 분배기를 사용하여 연결 핀 1과 + 5V (최대 속도) 또는 다른 비례 값의 다리 (활성화) 9

나무 딸기 파이 GPIO.18에 연결 핀 1과 9 (PWM 출력)

우리는 우리가 조향 제어를 설정했던 것과 같은 방식으로 스크립트의 그룹을 생성합니다 :


     sudo nano nospeed.cgi


           #!/bin/bash


           gpio pwm 1 0



    sudo nano lowspeed.cgi


          #!/bin/bash


          gpio pwm 1 250



    sudo nano regularspeed.cgi


         #!/bin/bash


         gpio pwm 1 512



     sudo noano highspeed.cgi


           #!/bin/bash


           gpio pwm 1 1023


스크립트가 생성되면, 당신은 그들에게 실행할 수있는 권한을 부여해야합니다 :


    sudo chmod 755 nospeed.cgi

    sudo chmod 755 lowspeed.cgi

    sudo chmod 755 regularspeed.cgi

    sudo chmod 755 highspeed.cgi


자, 그냥 모든 것이 작동하는지 확인하기 위해 몇 가지 테스트를 실행합니다 :


    ./lowspeedcgi

    ./regularspeed.cgi

    ./highspeed.cgi

    ./nospeedcgi


테스트를 위해, 우리는 그의 섬광의 강도는 명령이 작동 볼 수 GPIO.18에 LED를 연결합니다.


마지막으로, 우리는 예를 들어, 나 램프를 끄려면 사용되는 디지털 출력을 제어하는​​ 별도의 스크립트를 생성합니다. 우리는이에 대한 GPIO.10을 사용합니다 :


     sudo nano llighton.cgi


         #!/bin/bash


         gpio -g write 10 1



     sudo nano llightoff.cgi


           #!/bin/bash


           gpio -g write 10 0



    sudo chmod 755 lighton.cgi

    sudo chmod 755 lightoff.cgi


 마지막 한가지 다른 단계로 이동하기 전에. 당신이 RPI를 다시 시작하면 개의 GPIO는 입력 기본 상태로 돌아갑니다. 그래서 우리는 모든 부팅의 시작 부분에 실행을 /etc/rc.local 스크립트를 변경해야합니다.


그냥 스크립트의 마지막 명령 (종료 0) 전에 GPIO가 모드 설정 명령을 포함합니다 :


     sudo nano /etc/rc.local


            …

           gpio -g mode 5 out

           gpio -g mode 6 out

           gpio -g mode 13 out

           gpio -g mode 19 out

           gpio -g mode 10 out

           gpio mode 1 pwm

           exit 0


"출구 0"직전의 커맨드 라인으로서 PWM 명령을 갖는 것이 좋다.




RPI를 시작할 때마다 이제 영사 출력을 제어 할 준비가 될 것이다.


즐길 이제 시스템을 다시 부팅합니다


  sudo reboot


설치하기 WEBSERVER


매우 가볍고 빠른 웹 서버입니다 lighttpd를 설치합니다 (예를 들어 대신 아파치 사용할 수 있습니다). 그 위키 페이지에 기재된 바와 같이 "이 Lighttpd 고성능 환경에 최적화 빠르고 유연한 보안 웹 서버가있다. 그것은 다른 웹 서버에 비해 낮은 메모리 풋 프린트를 가지고 있으며, 너무 CPU를로드 할주의하십시오.


이제이 Lighttpd 및 해당 구성 요소를 설치하자 :


    sudo apt-get -y install lighttpd

    sudo lighttpd-enable-mod cgi

    sudo lighttpd-enable-mod fastcgi


기본적으로,이 Lighttpd 디렉토리에 index.html 페이지를 찾을 경우 : / var / www /에서 HTML을. index.html을이 폴더에 직접 저장할 수 있도록하자,이를 변경하자의 경우 : / var / www가. 이를 위해, 당신은이 Lighttpd 구성 파일을 편집해야합니다 :


    sudo nano /etc/lighttpd/lighttpd.conf


변경:

             server.document-root =“/var/www/html”

으로:

             server.document-root =“/var/www”


 이 변경 사항을 적용하기 위해 중지하고 웹 서버를 다시 시작해야합니다 :


    sudo /etc/init.d/lighttpd stop

    sudo /etc/init.d/lighttpd start


이때, 웹 서버가 실행되고 index.html 페이지는 단지 IP 어드레스를 입력 RPI,은 / var / www가, 우리는 브라우저로부터 액세스 할 수 있습니다.


우리는 테스트 목적으로 간단한 페이지를 작성합니다.


첫째, 우리는 페이지 이미지를 저장하는 디렉토리를 작성 :


    mkdir /var/www/images


(시험, 난 이미 디렉토리 (/images/robot52.png)에 나에게 .PNG 파일을 보낸 있습니다 :


    cd / var / www


    sudo index.html nano


<html>

<head>

</head>

<style>

  body {background-color: lightyellow}

  h1 {color:blue}

</style>

<body>

<div style="text-align:center">

  <h1>MJRoBot RPi Web Robot Control</h1>

  <br><br>

  <img src="/images/robot52.png">

</body>

</html>


페이지를 편집 완료 후, 저장 및 사용 권한을 변경 :


    sudo chmod 755 index.html


지금 내 경우 예를 들어, IP 주소 라즈베리 파이를 브라우저를 열고 입력 : 10.0.0.31을

최종 결과는 아래에 볼 수있다 :




로봇을 제어하기 ONE PAGE의 HTML을 생성하기


의 우리의 웹 사이트를위한 심플한 디자인을 생각하자. 무엇을 할 수 명령?


lighton.cgi 및 lighoff.cgi : 두 개의 버튼은 ==> 스크립트로 작동 켜고 불을 끕니다

모터 제어 방향 다섯 버튼 ==> 스크립트로 작동합니다 forward.cgi, stop.cgi, left.cgi, right.cgi 및 reverse.cgi

모터 속도 제어를위한 네 개의 버튼 ==> escripts 작동합니다 : nospeed.cgi, lowspeed.cgi, regularspeed.cgi 및 highspeed.cgi

우리가 마지막 단계에서 생성 된 HTML의 index.html 파일을 사용하여, 우리는 자신의 스크립트 구현을위한 통화 기능을 설정 버튼이 포함됩니다.


예를 들어,이 LED (GPIO.10)을 점등하는 버튼을 만들 수 있습니다 :


button {

 color: blue;

 background:lightgrey;

 border: 1px solid #000;

 border-radius: 8px;

 position: center;

}


<button style="height: 50.0px;width: 100.0px;"><img src="/images/lighton.png" style="height: 40.0px;"></button>



HTML 코드는 위의와 둥근 버튼을 만들 것 "밝은 빛."


버튼을 누를 때, 명령 "의 onclick = LIGHTON는 ()"은 "LIGHTON는 ()"함수를 호출하기 때문에 :


function lighton()

    {

        xmlhttp.open("GET","cgi-bin/lighton.cgi",true

        xmlhttp.send();

    }


LIGHTON () 함수가 호출되기 때문에 그리고, 스크립트가 lighton.cgi와 "짜잔는"LED가 켜집니다 실행됩니다.


동일한 절차가 다른 버튼을 사용한다. 외관을 구성하고 페이지를 작성하는 데 사용되는 다른 HTML 태그가있다.





HTML 소스 파일 (이전 단계에서 사용되는 LED의 구성의 테스트 페이지)에서 볼 수있다 :


HTML 페이지에 링크


ROBOT BODY ASSEMBLY


우선 플랫폼을 찾는 것입니다. 나는 4 DC 모터와 4WD 키트를하기로 결정했다. 이동성 분석은 4WD가 (코너링을 위해) 여기에서 생각하기 때문에 제어가 용이 아니라고하지 않습니다 실현, 우리는 완전한 로봇을 설정하지만, 실제 테스트는 나는 "코스터"를 추가하여 후륜을 사용 just'll 전면에 ( "rolon"와 같은 탈취제 남아).



몸과 엔진이 제자리에 후에는, 브레드 보드를 포함 모터 연결하고 테스트하는 시간이다. 각각의 모터를 테스트하기 위해 외부 배터리를 사용합니다.



아래 그림과 같이 엔진은 H 브리지 D-L293에 의해 제어됩니다



이 시점에서, 당신은 또한 RPI의 GPIO가 시뮬레이션, 다리의 입력에 + 5V와 GND를 사용하여 모터를 제어, 테스트를 수행 할 수 있습니다.


RPI 설치


모든 corretamante 작동되면, 그것은 라즈베리 파이를 추가하는 시간이다. 전체 회로는 다음과 같습니다 :



작은 섀시와 엔진 사이의 RPI 5V 배터리를 설치합니다. RPI는 상단에 있습니다.


은 RPI를 켜기 전에 모든 케이블 연결을 확인합니다.




이전의 모든 단계가 OK 인 경우에, 당신은 IP 주소 RPI를 사용하여 로봇을 제어 할 수 있습니다.



당신의 마음에 드는 웹 브라우저와 안전한 여행을 엽니 다!


이하, 로봇이 웹 페이지를 사용하여 테스트가 비디오 :



파트 2 : 인터넷 카메라의 비디오 스트리밍 및 원격 제어 (팬 / 틸트)


도입에서 설명하고있는 바와 같이, 로봇은 사물의 인터넷 사업을 개발하는 변명은 거의이다. 우리가 여기 짓을하면 거기에서, 우리는 거의 모든 것을 제어 할 수 있습니다 Internet.The를 통해 GPIO가 RPI를 제어하는 것입니다!


이 두 번째 부분에서, 우리는 고통을 탐구 비디오를 스트리밍하는 방법도 서보 모터를 사용하여 카메라의 위치를 제어하는 방법을 찾을 수 있습니다. 인터넷을 통해 카메라를 제어하는 것은 보안에 사용하기 위해 포함, 여러 용도를 가질 수 있습니다.


궁극적 인 목적은 상기 프로젝트의 두 부분을 결합 만이 인터넷을 통해 제어 할 수없는 로봇을 만들뿐만 아니라, 스트리밍 비디오를 전송하는 것이다.


블록 다이어그램은이 프로젝트의 두 번째 부분의 개념을 도시한다.



RPI는 웹 서버로 프로그래밍 및 HTML 페이지로부터 명령을 수신한다. 이 명령은 위치는 서보 모터 (팬 / 틸트와 수평 / 수직)를 통해 파고, GPIO가 RPI를 제어합니다.


자료리스트


이전 재료의 목록, 우리는 고통과 두 개의 미니 서보 180도를 추가합니다. 그것은 Voltagen 6V 레귤레이터 (7806)는 엔진 전원 같은 이미 설치된 9V 배터리를 사용할 수있게하는 것이 필요하다.


스트리밍 비디오


튜토리얼을 기반으로 비디오 트리머 물기를 설치합니다 :


엘 모타 (업데이트 2014년 1월 19일)가 개발 라즈베리 파이 보드 카메라 비디오 스트리밍.


먼저, 운영 체제를 업데이트 할 수 있도록 :



    sudo apt-get update

    sudo apt-get upgrade

버전 dev에 libjpeg를 설치합니다 :

     sudo apt-get install libjpeg62-turbo-dev 

 참고 : libjpeg62-DEV는 현재 무효이며,)이로 대체되었습니다

cmake를 설치합니다 :

    sudo apt-get install cmake

플러그인 raspicam와 MJPG - 유영 다운로드 :

    git clone https://github.com/jacksonliam/mjpg-streamer.git ~/mjpg-streamer

디렉토리를 변경 :

    make clean all

이전  jpg-streamer를 장착합니다 :

    sudo rm -rf /opt/mjpg-streamer

    sudo mv ~/mjpg-streamer/mjpg-streamer-experimental /opt/mjpg-streamer

    sudo rm -rf ~/mjpg-streamer

전송을 시작합니다

    LD_LIBRARY_PATH=/opt/mjpg-streamer/ /opt/mjpg-streamer/mjpg_streamer -i “input_raspicam.so -fps 15 -q 50 -x 640 -y 480” -o “output_http.so -p 9000 -w /opt/mjpg-streamer/www” &

모니터에서는 스트리밍에 대한 정보를 볼 수 있습니다

MJPG Streamer Version.: 2.0

i: fps.............: 15

i: resolution........: 640 x 480

i: camera parameters..............:

Sharpness 0, Contrast 0, Brightness 50, Saturation 0,

ISO 400, Video Stabilisation No, Exposure compensation 0

Exposure Mode 'auto', AWB Mode 'auto',

Image Effect 'none', Metering Mode 'average',

Colour Effect Enabled No with U = 128, V = 128

Rotation 0, hflip No, flip No

www-folder-path...: /opt/mjpg-streamer/www/

HTTP TCP port.....: 9000

username:password.: disabled

commands..........: enabled

Starting Camera

Encoder Buffer Size 81920

카메라가 작동되어야한다. 브라우저 및 유형으로 이동

    http : // 당신의 IP 주소 : 9000 / stream.html

것과 같은 테스트 페이지 아래 (카메라에 의해 촬영 된 이미지) 표시됩니다.



참고 당신은 당신을 위해 가장 적합한 하나, 통신 포트를 변경하면 RPI 모니터를 입력 한 명령 줄에서 매개 변수 "9000"를 변경하려는 경우. 우리 15 초당 프레임 수 (fps) 640 × 480의 해상도로 작업합니다. 또한 명령 행에 이러한 매개 변수를 변경할 수 있습니다.


당신은 당신이하는 /etc/rc.local 스크립트에 명령을 포함하지 않으면 다음과 같이 드라이브를 시스템이 다시 시작할 때마다 (재부팅)을 시작하려면 위의 명령 줄을 다시 입력해야합니다 :



    sudo nano /etc/rc.local


            …


            LD_LIBRARY_PATH=/opt/mjpg-streamer/ /opt/mjpg-streamer/mjpg_streamer -i “input_raspicam.so -fps 15 -q 50 -x 640 -y 480” -o “output_http.so -p 9000 -w /opt/mjpg-streamer/www” &

            …


웹 서버가 이미 설치되어있는 반면, 우리는 우리의 페이지에 표시하는 비디오를 스트리밍 다음 줄을 입력해야합니다 :


<iframe src="http://Your IP Adress:9000/javascript_simple.html" frameborder="0" align="middle" width="640" height="480" align="middle" scrolling="no">$


위의 라인을 포함하여 아래, 우리는 간단한 HTML 페이지를 볼 수 있습니다


<html>


<head>


</head>


<style>


body {background-color: lightyellow}


h1 {color:blue}


</style>


<body>


<div style="text-align:center">


<h1> MJRoBot RPi Web Robot Control   <img style="height: 100px"src="/images/robot52.png"> </h1>


<br><br>


<iframe src="http://10.0.1.31:9000/javascript_simple.html" frameborder="0" align="middle" width="640" height="480" align="middle" scrolling="no">$


</body>


</html>


브라우저에서 RPI IP를 입력, 우리는 결과 아래에 도달 :



SERVOBLASTER 라이브러리 설치


큰 라이브러리가 서보 모터를 제어하기 위해 사용될 수있다 ServoBlaster


이는 GPIO 핀을 통해 복수의 서보 모터를 제어하기위한 인터페이스를 제공 라즈베리 파이위한 특정 소프트웨어이다. 사용자는, 출력의 펄스 폭을 변경 명령​​을 전송하여 종의 위치를​​ 제어한다. GPIO는 이전 값을 변경하는 새로운 명령을 전달하는 당신에게 펄스 폭을 유지합니다.


기본적으로 ServoBlaster 8 서보 모터를 제어하도록 구성되어 있지만 21 서보로 설정 일반적으로 펄스 폭의 위치를​​ 제어 0.5 밀리 초 2.5 밀리 초 사이 어딘가에 활성 펄스를 필요로 할 수 있습니다 종. 주파수가 중요하지는 않지만 펄스는 약 20 밀리 초마다 반복한다. 펄스는이 서보 위치로 직접 번역이기 네, 그것은 중요 폭.


서보 제어에 더하여, ServoBlaster은 적합한 예를 들면 최대 21 개의 LED의 밝기를 제어하게 0 ~ 100 % (듀티) 사이의 펄스 폭을 생성하도록 구성 될 수있다.


ServoBlaster 당신이 명령을 보낼 수있는 장치 파일은 / dev / servoblaster을 만듭니다. 이 명령의 형식은 다음과 같습니다


[서보 번호] = [서보 위치]


(Ex .: echo P1-11 = 80% >/dev/servoblaster)


또는


P [header] – [pin] = [servo-position]


(Ex: echo P0 = 80% >/dev/servoblaster)


첫째, clonemos는 GitHub의 프로젝트를 Richardghirst :


    cd /


    sudo git clone https://github.com/richardghirst/PiBits


디렉토리를 변경 :


   cd PiBits


   cd ServoBlaster


   cd user


내용을 나열하고 디렉토리 파일 "servod.c"를 포함하는지 확인


   ls


컴파일하고 servod.c 파일을 설치합니다 :


    sudo make servod


    sudo make install


이 때, servod 프로그램이 설치됩니다. 권한을 변경하고 테스트 할 수 있도록 프로그램을 실행합니다 :


    sudo chmod 755 servod


    sudo ./servod


모든 것이 OK 경우, 모니터, 다음의 정보에 표시되어야합니다 :


Board model:                     2


GPIO configuration:            P1 (40 pins)


Using hardware:                PWM


Using DMA channel:              14


Idle timeout:             Disabled


Number of servos:                8


Servo cycle time:            20000us


Pulse increment step size:      10us


Minimum width value:            50 (500us)


Maximum width value:           250 (2500us)


Output levels:              Normal


Using P1 pins:               7,11,12,13,15,16,18,22


Servo mapping:


     0 on P1-7           GPIO-4


     1 on P1-11          GPIO-17


     2 on P1-12          GPIO-18


     3 on P1-13          GPIO-27


     4 on P1-15          GPIO-22


     5 on P1-16          GPIO-23


     6 on P1-18          GPIO-24


     7 on P1-22          GPIO-25


위의 종의 매핑을합니다. 우리는 기본 서보 모터에 의해 구성되어 있지만 카메라 제어의 경우, 예를 들어 단지 우리가에 사용되는 핀을 제한해야하며, (2) 필요 8. 그냥 생각 :


GPIO.17 (P1-11)이 TILT에 사용되는 (수직 제어)

GPIO.23 (P1-16)는 PAN에 사용되는 (수평 제어)

구성 할 핀을 설정하려면 다음 매개 변수를 입력 :


    sudo ./servod –p1pins = 11,16


위의 명령을 실행하면, 모니터는 이제 하단에 표시한다 :


사용 P1 핀 : 11.16


서보 매핑 :


0 on P1-11 GPIO-17


1 on P1-16 GPIO-23


또한 당신은 RPI를 다시 시작하면, 설정이 손실 될 수 있습니다, 그래서 /etc/rc.local에의 마지막 명령을 포함하는 것이 중요하다


    sudo nano /etc/rc.local 



            cd /PiBits/ServoBlaster/user


            sudo ./servod –p1pins=11,16


            cd


            …



아래의 스크립트를 변경하는 것도 중요하다 :


    sudo nano /etc/init.d/servoblaster


          …


          case “$1” in

start)


          /usr/local/sbin/servod $OPTS >/dev/null


change to:


          /usr/local/sbin/servod –p1pins=11,16 $OPTS >/dev/null


참조에 대한 전체 스크립트 아래 :


#!/bin/sh


### BEGIN INIT INFO


# Provides:          servoblaster


# Required-Start:    hostname $local_fs


# Required-Stop:


# Should-Start:


# Default-Start:     2 3 4 5


# Default-Stop:      0 1 6


# Short-Description: Start/stop servod.


# Description:       This script starts/stops servod.


### END INIT INFO


PATH=/sbin:/usr/sbin:/bin:/usr/bin


. /lib/init/vars.sh


OPTS="--idle-timeout=2000"


STATUSFILE="/tmp/servoblaster-status"


if [ $( id -u ) != 0 ]; then


        echo "ERROR: Must be run as root"


        exit 1


fi


case "$1" in


  start)


        /usr/local/sbin/servod --p1pins=11,16 $OPTS >/dev/null<br>        ;;


  restart|reload|force-reload)


        killall servod


        /usr/local/sbin/servod $OPTS >/dev/null


        ;;


  stop)


        killall servod


        ;;


  status)


        if [ ! -e /dev/servoblaster ]; then


                echo "ERROR: /dev/servoblaster does not exist"


                exit 2


        fi


        rm -f $STATUSFILE


        echo "status $STATUSFILE" > /dev/servoblaster


        sleep 0.2


        if [ ! -e $STATUSFILE ]; then


                echo "ERROR: servod not responding"


                exit 3


        elif grep -q "^OK" $STATUSFILE; then


                echo "OK"


                exit 0


        elif grep "^ERROR:" $STATUSFILE; then


                exit 4


        else


                echo "ERROR: No status from servod"


                exit 5


        fi


        ;;


  *)


        echo "Usage: servoblaster [start|stop|status]" >&2


        exit 6


        ;;


esac


exit 0


변경 사항을 영구적 될 수 있도록 지금 시스템을 다시 시작


    sudo reboot


이게 다예요. 서보 블래스터가 설치됩니다. 이 순간부터, ServoBlaster이 두 종을 인식 할 수 있습니다 :


servo 0 ==> p1-11

servo 1 ==> p1-16


에코 명령은 동일한 결과로, 위의 형식 중 하나로 실행할 수 있습니다 :


    echo P1-11=40% >/dev/servoblaster


    echo P1-16=60% >/dev/servoblaster


or


    echo 0=40% >/dev/servoblaster


    echo 1=60% >/dev/servoblaster


기구 조립 PAN / TILT


이 시장에 여러 팬 / 틸트 메커니즘이 있지만, 난 그냥 종을 묶는 당신이 아래의 사진에서 볼 수 있듯이 물린 함께 매우 간단한을 넣어하기로 결정했다 :




서보를 RPI에 설치하기



위와 같이, RPI에 종의 데이터 케이블을 연결합니다.

은 RPI에 별도의 전압 소스에 + V 두 종을 연결합니다 (물론, GNDS이 연결되어 있어야합니다). 당신이 로봇의 팬 / 틸트 메커니즘을 설치합니다 후에는 DC 모터에 사용 된 것과 동일한 배터리 (9V)를 사용할 수 있습니다. 이 경우에있어서, 6V의 전압 레귤레이터가 요구된다.

서보을 테스트하려면, Servoblaster의 명령 "에코"를 사용합니다. 당신은 백분율로 어느 각도 값을 사용할 수 있습니다. 당신의 팬 / 틸트 메커니즘 최선의 범위를 테스트 :




TILT Servo:


    echo P1-11=20% >/dev/servoblaster (looking down)


    echo P1-11=60% >/dev/servoblaster (looking front)


    echo P1-11=90% >/dev/servoblaster (looking up)


PAN Servo:


    echo P1-16=30% >/dev/servoblaster


    echo P1-16=62% >/dev/servoblaster


    echo P1-16=90% >/dev/servoblaster


우리는 쉽게 스크립트는 종의 위치를​​ 제어 할 수 있습니다. 예를 들어, 우리는 아래의 파일을 작성해야합니다 발견 된 값을 기준으로 카메라 "기대"를 위치 쉘 스크립트를 만들 수 있습니다 :



    sudo nano cam_view_front.cgi


           #!/bin/bash


           echo P1-11=60% >/dev/servoblaster


           echo P1-16=62% >/dev/servoblaster


스크립트가 생성되면, 우리는 당신에게 실행할 수있는 권한을 부여해야합니다 :



    sudo chmod 755 cam_view_front.cgi



이제 스크립트를 실행합니다 :


    ./cam_view_front.cgi


에코 명령을 사용하여 임의의 위치에 카메라를 이동 한 다음 새 스크립트를 실행합니다. 당신은 카메라가 자동으로 위치 "정면"으로 돌아갑니다 것을 볼 수 있습니다.


계속해서, 같은 아이디어는 다른 가능한 카메라 위치에 도포한다.


내 페이지를 생성하기 위해, 나는 TILT 5 중간 위치 및 이동하려면 5 중간 위치를 만들하기로 결정했습니다. 당신은 또한 더 단단한 위치의 변화에​​ 대해 "슬라이더"를 사용하도록 선택할 수 있습니다. 당신이 결정한다.


스크립트 "cam_view_front.cgi"에 기재 한 바와 같이 10 개의 새로운 스크립트를 작성, 같은 원리를합니다 사용 :


leftpan.cgi                 ==> 90%

leftcenterpan.cgi     ==> 76%

centerpan.cgi            ==> 62%

rightcenterpan.cgi  ==> 46%

rightpan.cgi               ==> 30%

downtilt.cgi               ==> 20%

downcentertilt.cgi   ==> 40%

centertilt.cgi              ==> 60%

upcentertilt.cgi         ==> 75%

uptilt.cgi                     ==> 90%


카메라를 제어 ONE PAGE의 HTML을 생성하기


우리는 카메라의 스트리밍 만든 index.html을 사용, 우리가 이전에 만든 스크립트를 실행하는 함수를 호출 10 버튼이 포함됩니다.



이하, 전체 HTML 코드 페이지를 만들 수 있습니다 :


index.html을 페이지에 HTML 코드



로봇에 카메라와 종들을 포용.


이제 우리는 우리의 RPI 스트리밍 비디오가 인터넷을 통해 카메라를 배치 할 수 있습니다, 우리는 첫 번째 부분에서 만든 로봇 프로젝트의 두 번째 부분을 통합 할 것이다.


포스트의 선두의 블록도, 프로젝트가 통합 될 수있는 방법을 설명하고 아래 회로 접속 방법을 보여



이어서 두 번째 부분 및 부분의 추가 버튼 및 모터의 제어를위한 제 1 생성 함수로 개발 된 웹 페이지를 가지고.


최종 HTML 페이지로 링크




ROBOT FULL은 생명을 걸립니다!


마지막 단계는 통합기구가 PAN / 로봇의베이스를 기울이다 :



아래 동영상은 어떻게 완전한 로봇을 설명합니다.


...

반응형

'Raspberry Pi' 카테고리의 다른 글

Setting up the Arduino IDE on Raspbian  (0) 2017.12.20
Comments