7
1 Systemy Wbudowane mgr inż. Marek Wilkus http://home.agh.edu.pl/~mwilkus Wydział Inżynierii Metali i Informatyki Przemysłowej AGH Kraków Raspberry Pi – Serwomechanizm, kamera, SPI (wersja 2020) 2 Serwomechanizm Możliwość dokładnego sterowania położenia (lub podobnej wartości) za pomocą układu ze sprzężeniem zwrotnym: – Zadajemy nowe położenie, – Układ zmierza ku położeniu, – Odbywa się ciągły pomiar położenia, – Gdy położenie osiągnie żądane, układ zatrzymuje się. • Problemy: – Bezwładność, – Niedokładność mechanizmu, – Oscylacje (zbyt wąska histereza) 3 Serwomechanizm z silnikiem krokowym Stosowany gdy pozycja wału silnika jest niewystarczająca do ustalenia położenia, Pomiar położenia odbywa się na ostatnim stadium (np. sterowanie kamerą – na samej obudowie kamery, nie wale silnika kilka przekładni wcześniej), Niezbędne układy pomiarowe, stały monitoring położenia (np. transoptor odbiciowy), nie tylko położeń krańcowych (wyłączniki krańcowe). • Zastosowanie: – Aparatura produkcyjna wysokiej precyzji, – Profesjonalne skanery, – Urządzenia wielkiej skali. 4 Serwomechanizm na silniku klasycznym Dodatkowe pomiary położenia za pomocą tarczy magnesów trwałych i czujnika (hallotron lub kontaktron), rzadziej stosowany jest pomiar wartości ciągłej (potencjometr). Często dostępne jako "wszystko w jednym", Możliwość użycia gotowych układów aparaturowych i modelarskich Potencjometr: 5 Nie tylko położenie... Jakkolwiek większość serwomechanizmów służy do regulacji położenia, możliwe jest zastosowanie regulatorów o sprzężeniu zwrotnym do regulacji i stabilizacji innych wielkości. Fotografia: Detektor prędkości silnika napędu taśmowego. Pomiar służy do stabilizacji prędkości i kompensacji niedokładności szybkości silnika. • Problemy: – Konieczna dokładność pomiarów – Szybki układ obsługi sprzężenia zwrotnego. 6 Regulator PID: Sprzężenie zwrotne, ale jak? Zapamiętujemy poprzednie wskazania i wyciągamy wnioski, Przewidujemy do przodu, Cały czas mamy aktualną pozycję i korygujemy ją, Poprawki nanosimy iteracyjnie, małymi krokami,

2020 W07 Pi3 - AGH University of Science and Technologyhome.agh.edu.pl/~mwilkus/sw/pi3-2020.pdf · 2020. 3. 18. · • I2C: Slave może na jakiś czas być urządzeniem Master, jeżeli

  • Upload
    others

  • View
    4

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 2020 W07 Pi3 - AGH University of Science and Technologyhome.agh.edu.pl/~mwilkus/sw/pi3-2020.pdf · 2020. 3. 18. · • I2C: Slave może na jakiś czas być urządzeniem Master, jeżeli

1

Systemy Wbudowane

mgr inż. Marek Wilkus http://home.agh.edu.pl/~mwilkusWydział Inżynierii Metali i Informatyki PrzemysłowejAGH Kraków

Raspberry Pi – Serwomechanizm, kamera, SPI(wersja 2020)

2

Serwomechanizm

• Możliwość dokładnego sterowania położenia (lub podobnej wartości) za pomocą układu ze sprzężeniem zwrotnym:– Zadajemy nowe położenie,– Układ zmierza ku położeniu,– Odbywa się ciągły pomiar położenia,– Gdy położenie osiągnie żądane, układ

zatrzymuje się.

• Problemy:– Bezwładność,– Niedokładność mechanizmu,– Oscylacje (zbyt wąska histereza)

3

Serwomechanizm z silnikiem krokowym

• Stosowany gdy pozycja wału silnika jest niewystarczająca do ustalenia położenia,

• Pomiar położenia odbywa się na ostatnim stadium (np. sterowanie kamerą – na samej obudowie kamery, nie wale silnika kilka przekładni wcześniej),

• Niezbędne układy pomiarowe, stały monitoring położenia (np. transoptor odbiciowy), nie tylko położeń krańcowych (wyłączniki krańcowe).

• Zastosowanie:– Aparatura produkcyjna wysokiej precyzji,– Profesjonalne skanery,– Urządzenia wielkiej skali.

4

Serwomechanizm na silniku klasycznym

• Dodatkowe pomiary położenia za pomocą tarczy magnesów trwałych i czujnika (hallotron lub kontaktron), rzadziej stosowany jest pomiar wartości ciągłej (potencjometr).

• Często dostępne jako "wszystko w jednym",

• Możliwość użycia gotowych układów aparaturowych i modelarskich

Potencjometr:

5

Nie tylko położenie...

• Jakkolwiek większość serwomechanizmów służy do regulacji położenia, możliwe jest zastosowanie regulatorów o sprzężeniu zwrotnym do regulacji i stabilizacji innych wielkości.

• Fotografia: Detektor prędkości silnika napędu taśmowego. Pomiar służy do stabilizacji prędkości i kompensacji niedokładnościszybkości silnika.

• Problemy:– Konieczna dokładność pomiarów– Szybki układ obsługi sprzężenia

zwrotnego.

6

Regulator PID: Sprzężenie zwrotne, ale jak?

• Zapamiętujemy poprzednie wskazania i wyciągamy wnioski,

• Przewidujemy do przodu,• Cały czas mamy aktualną pozycję i

korygujemy ją,• Poprawki nanosimy iteracyjnie, małymi

krokami,

Page 2: 2020 W07 Pi3 - AGH University of Science and Technologyhome.agh.edu.pl/~mwilkus/sw/pi3-2020.pdf · 2020. 3. 18. · • I2C: Slave może na jakiś czas być urządzeniem Master, jeżeli

7

Regulator PID

u(t) – zmiany które trzeba uwzględnićr(t) – cel do osiągnięciae(t) – błąd w danym momenciey(t) – efekt wprowadzanych zmian

8

Skład PID:

Człon proporcjonalny

Człon całkujący

Człon różniczkujący

e(t) = r(t) – y(t)

u(t) – zmiany które trzeba uwzględnićr(t) – cel do osiągnięciae(t) – błąd w danym momenciey(t) – efekt wprowadzanych zmian

9

… i efekt (w zależności od K):

Kp Ki

Kd 10

Serwomechanizm – podłączenie do RPi

• Sterowany dedykowanym układem konwertującym ws. wypełnienia PWM na położenie,

• Niezbędne 3 linie na każdy serwomechanizm: Zasilanie (z reguły 5V), GND, sygnał sterujący,

• Niektóre serwomechanizmy o dużym momencie wymagają osobnego zasilania silników.

11

Podłączenie servo do RPi

Ground

PWM

5V

12

Konwersja PWM->Położenie

0.45/20*100%=2.25%

1.5/20*100%=7.5%

2.5/20*100%=12.5%

0o

90o

180o

Page 3: 2020 W07 Pi3 - AGH University of Science and Technologyhome.agh.edu.pl/~mwilkus/sw/pi3-2020.pdf · 2020. 3. 18. · • I2C: Slave może na jakiś czas być urządzeniem Master, jeżeli

13

Oprogramowanie

14

Oprogramowanie

0% → 0o → 0.45/20*100% = 2.25%

50% → 90o → 1.5/20*100% = 7.5%

100% → 180o → 2.5/20*100% = 12.5%

PWM

15

Magistrala SPI

16

Magistrala SPI

• Szeregowa magistrala służąca do komunikacji między elementami układu,

• Linie:– SCK – Zegar– MISO – Master In, Slave Out– MOSI – Master Out, Slave In– /Select

• Wiele urządzeń – wiele linii /SELECT.– /SELECT – Active LOW (urządzenie jest wybrane gdy stan niski)

• Zaproponowana przez firmę Philips, zaadaptowana do przetworników pomiarowych, pamięci, a nawet programowania mikrokontrolerów (AVR!)

17

SPI vs I2C

• SPI: Dwie linie dla dwóch kierunków• I2C: Jedna linia dwukierunkowa.

• SPI: Wybór układu kolejnymi liniami adresów• I2C: wybór układu przez jego zdres, inne układy ignorują

komunikat.

• I2C: Slave może na jakiś czas być urządzeniem Master, jeżeli nic temu nie przeszkadza,

• SPI: Jedno urządzenie Master.

• I2C: Urządzenie slave może spowolnić komunikację.• SPI: Zegar jest zawsze nadawany przez urządzenie Master.

18

Wiele urządzeń SPI

Page 4: 2020 W07 Pi3 - AGH University of Science and Technologyhome.agh.edu.pl/~mwilkus/sw/pi3-2020.pdf · 2020. 3. 18. · • I2C: Slave może na jakiś czas być urządzeniem Master, jeżeli

19

Konfiguracja CPOL i CPHA

20

Przykład

21

Przykładowe podłączenie

• Przetwornik Analogowo-cyfrowy (ADC) MCP3008

21 22

MCP3008 - Komunikacja

MOSI

MISO

SS

SCK

23

Oprogramowanie

#include <iostream>#include <stdint.h>

// some code here ...

int main() { // some code here ...

uint8_t buffer[ 3 ]; buffer[ 0 ] = 1; buffer[ 1 ] = ( differential ? 0 : ( 1 << 7 ) ) | ( channel << 4 ); buffer[ 2 ] = 0;

if( transfer( buffer, 3 ) ) { uint16_t hi = ( buffer[ 1 ] << 8 ) & 0x0300; uint16_t lo = ( buffer[ 2 ] << 0 ) & 0x00FF; uint16_t value = hi | lo;

cout << 100.0 * ( (double)value / 1023.0 ); }

return 0;}

24

Oprogramowanie (2)

uint8_t mode = SPI_MODE_0;uint8_t bpw = 8; // bits per worduint32_t speed = 500000;

int handle = -1;

bool open() { handle = ::open( "/dev/spidev0.0", O_RDWR );

if( handle < 0 ) return false;

if( ::ioctl( handle, SPI_IOC_WR_MODE, &mode ) < 0 || ::ioctl( handle, SPI_IOC_RD_MODE, &mode ) < 0 || ::ioctl( handle, SPI_IOC_WR_BITS_PER_WORD, &bpw ) < 0 || ::ioctl( handle, SPI_IOC_RD_BITS_PER_WORD, &bpw ) < 0 || ::ioctl( handle, SPI_IOC_WR_MAX_SPEED_HZ, &speed ) < 0 || ::ioctl( handle, SPI_IOC_RD_MAX_SPEED_HZ, &speed ) < 0 ) { ::close( handle ); return false; } return true;}

Page 5: 2020 W07 Pi3 - AGH University of Science and Technologyhome.agh.edu.pl/~mwilkus/sw/pi3-2020.pdf · 2020. 3. 18. · • I2C: Slave może na jakiś czas być urządzeniem Master, jeżeli

25

Oprogramowanie (3)

bool transfer( uint8_t *data, uint16_t length ){ struct ::spi_ioc_transfer pack;

pack.tx_buf = (unsigned long)data; // transmit from "data" pack.tx_nbits = 8; pack.rx_buf = (unsigned long)data; // receive into "data" pack.rx_nbits = 8; pack.len = length; pack.delay_usecs = 0; pack.speed_hz = speed; // 500000 pack.bits_per_word = bpw; // 8 pack.cs_change = 0; // 0 or 1 for RPi

// data transmission if( ::ioctl( handle, SPI_IOC_MESSAGE( 1 ), &pack ) < 0 ) return false;

return true;}

26

Systemy Wbudowane

mgr inż. Marek Wilkus http://home.agh.edu.pl/~mwilkusWydział Inżynierii Metali i Informatyki PrzemysłowejAGH Kraków

Raspberry Pi – Kamera(wersja 2019)

27

Kamera

• Połączona szybkim różnicowym złączem szeregowym,• Pełne wsparcie systemu oraz bibliotek.

27

8MPx

5MPx NoIR

5MPx Szerokokątna

5MPx Szerokokątna (175o)+LED Board

5MPx

28

Interfejs

DP/DN – Data positive/negativeD[p,n]0/1 – Lane 0, 1CN/CP – Clock negative/positive (z kamery).GPIO/CLK – optional GPIO and CLK (lub SDA/SCL)

29

Na co SDA/SCL?

• Sterowanie kamerą• Ekspandery GPIO• Multipleksery kamer• Dodatkowe urządzenia• Sterowanie kamerami o

szczególnych właściwościach (np. IR)

30

Włączanie modułu kamery

Page 6: 2020 W07 Pi3 - AGH University of Science and Technologyhome.agh.edu.pl/~mwilkus/sw/pi3-2020.pdf · 2020. 3. 18. · • I2C: Slave może na jakiś czas być urządzeniem Master, jeżeli

31

Obsługa z poziomu konsoli

• Przechwytywanie obrazu• Strumień wideo (Full HD, 10s)

raspivid -w 1092 -h 1080 -t 10000 -o ~/Desktop/test.h264raspivid -p 0,0,1920,1080 -t 10000 # podgląd – wymagany monitor!raspivid -w 1092 -h 1080 -t 10000 –o - > ~/Desktop/test.h264raspivid -w 640 -h 480 -t 10000 -o - | nc -l 6000 # strumieniowanie przez sieć

• Zdjęcia JPEG

raspistill -w 1092 -h 1080 -n -o image.jpgraspistill -w 1092 -h 1080 -n -o - > image.jpg

• Zdjęcia YUV

raspiyuv -w 1092 -h 1080 -o image.imgraspiyuv -w 1092 -h 1080 –o - > image.img

32

Raspistill – szybsze zrobienie zdjęcia

• Zmniejszenie rozdzielczości:

parametry: -w [szerokość] -h [wysokość]

• Skrócenie czasu pomiaru światła do 500ms:

parametr: -t 500

• Czyli np.:

• raspistill -w 800 -h 600 -t 500 -n -o image.jpg

33

C++ - biblioteka

• Pobieranie biblioteki:

$ wget http://sourceforge.net/projects/raspicam/files/raspicam-0.1.3.zip/download $ unzip download$ cd raspicam-0.1.3$ mkdir build$ cd build$ cmake ..$ make$ sudo make install

Kompilacja kodu ze wsparciem dla kamery:$ g++ camera.cpp -o camera -I/usr/local/include -L"/opt/vc/lib/" -lraspicam -lmmal -lmmal_core -lmmal_util$ chmod +x camera$ ./camera

34

Format PPM

• Prymitywny format obrazu dla tekstowych platform Uniksowych,

• Pliki ASCII opisujący wartości R, G, B.

- Duże pliki- Toporny sposób zapisu,- maksimum 256 kolorów, paletyzowane+ Brak metadanych.+ Niskie wymagania (przeglądarki na MC68000)+ Łatwy do przesyłu pocztą, a nawet teleksem / radioteleksem (RTTY).

35

Kamera i pobieranie do PPMa

unsigned char *data = … // dane w postaci bajtów:R G B R G B R G B R G B R G B …

36

Programy do strumieniowania z kamery

raspivid -vf -t 0 -fps 25 -b 2000000 -o - \ | ffmpeg -i - -vcodec copy -an -r 25 -f flv rtmp://x220/myapp/mystream

lub

raspivid -t 9999999 -w 960 -h 540 -fps 25 -b 500000 -vf -o - \ | ffmpeg -i - -vcodec copy -an -f flv -metadata streamName=myStream tcp://0.0.0.0:1818

lub

ffmpeg -i "source.h264" -c:v copy -f mp4 "myOutputFile.mp4"

raspivid ffmpeg netcat

Lub (prosty streaming):

Page 7: 2020 W07 Pi3 - AGH University of Science and Technologyhome.agh.edu.pl/~mwilkus/sw/pi3-2020.pdf · 2020. 3. 18. · • I2C: Slave może na jakiś czas być urządzeniem Master, jeżeli

37

v4l – Video for Linux

• Uniwersalna warstwa abstrakcji dla kamer, skanerów, tunerów, kolorymetrów, urządzeń pozyskiwania obrazu.

• Przykład użycia:

modprobe bcm2835-v4l2

/dev/video0 # video 4 linux device

# Capture a JPEG image v4l2-ctl --set-fmt-video=width=2592,height=1944,pixelformat=3 v4l2-ctl --stream-mmap=3 --stream-count=1 --stream-to=somefile.jpg

38

Konwersja formatów

• Program convert:

convert plik1.ppm plik1.png

• Inne opcje, m.in.:-resize 800x600 – skalowanie-resize 50% - zmniejsz o połowę-thumbnail 200x200 – miniaturka-quality – jakość dla JPEG

• Pomoc: https://imagemagick.org/script/command-line-options.php