Pomiar czasu przemieszczenia za pomocą kamer USB.

Tematyka związana z tworzeniem aplikacji w LabVIEW do obsługi wizji oraz wszelkich operacji na obrazie.
monkej
Posty: 13
Rejestracja: 16 lis 2015 21:02
Wersja środowiska: LabVIEW 2013

Pomiar czasu przemieszczenia za pomocą kamer USB.

Post autor: monkej »

Witam.
Sytuacja wygląda następująco.
Mamy dwie kamery USB podłączone do komputera.
W momencie wykrycia ruchu przez kamerę nr 1 stoper rusza.
W momencie wykrycia ruchu przez kamerę nr 2 stoper zatrzymuje się.
Celem jest zmierzenie czasu jaki potrzebuje dowolny obiekt na przemieszczenie się pomiędzy kamerami umieszczonymi w pewnej odległości.
Program w załączniku pozwala na przechwycenie obrazu z kamer i sygnalizuje wykrycie ruchu poprzez zapalenie kontrolki.
Coś zacząłem robić odnośnie mierzenia czasu ale nie mam pomysłu. Proszę o pomoc i jakieś sugestie.
Załączniki
detekcja_ruchu_kamera.vi
(116.82 KiB) Pobrany 394 razy
Awatar użytkownika
aaddaas
Posty: 202
Rejestracja: 26 cze 2013 20:42
Wersja środowiska: LabVIEW 2015

Re: Pomiar czasu przemieszczenia za pomocą kamer USB.

Post autor: aaddaas »

Hej!
Wystarczy do tego Ci zwykły timer. Zobacz załącznik (jest to Snipped, czyli możesz przeciągnąć obrazek na swój Block Diagram i wstawi Ci się jako elementy labVIEW). Oczywiście można zrobic to inaczej, jest to tylko propozycja.
Osobiście zarówno rejestrację, jak i mierzenie czasu zrobiłbym w osobnych pętlach i je ze sobą skomunikował, ale jeśli to Ci działa jak chcesz, to Twoja wola;) W razie pytań jestem do dyspozycji
Załączniki
CZasomierz.png
CZasomierz.png (33.83 KiB) Przejrzano 11581 razy
Obrazek
monkej
Posty: 13
Rejestracja: 16 lis 2015 21:02
Wersja środowiska: LabVIEW 2013

Re: Pomiar czasu przemieszczenia za pomocą kamer USB.

Post autor: monkej »

Proszę otwórz załącznik.
Masz jakiś pomysł jak podłączyć taki wskaźnik.
Załączniki
detekcja_ruchu_kamera 2.vi
(104.19 KiB) Pobrany 424 razy
Awatar użytkownika
aaddaas
Posty: 202
Rejestracja: 26 cze 2013 20:42
Wersja środowiska: LabVIEW 2015

Pomiar czasu przemieszczenia za pomocą kamer USB.

Post autor: aaddaas »

Na szybko - zrób tak jak pokazałem Ci w przykładzie, tylko do kontrolek "pierwszy" oraz "drugi" daj swoje wskaźniki wykrycia ruchu. a pętla while to niech będzie ta Twoja główna pętla
Obrazek
monkej
Posty: 13
Rejestracja: 16 lis 2015 21:02
Wersja środowiska: LabVIEW 2013

Re: Pomiar czasu przemieszczenia za pomocą kamer USB.

Post autor: monkej »

Snippet z załącznika który wrzuciłeś daje się przenieść na Block Diagram ale nie mogę nic z nim zrobić. Nie daje się do niego nic podłączyć ani edytować.
Jest tak jakby obrazkiem na Block Diagram a nie poszczególnymi elementami programu. Nigdy wcześniej nie miałem ze Snippetem do czynienia.
Chciałem wiec zrobić ten timer sam i napotkałem następujące trudności:
1. Jak dodać elementy/co to są za elementy w Case Structure Resetowanie wskaźników ?
2. Nie mogę podłączyć jednej z lini.
3. Czy używasz wskaźników w trybie Bolonowskim ?
4. W miejscach przejścia lini przez Case Structure widoczne są inne symbole niż u Ciebie. U ciebie kwadraciki są zamalowane, a u mnie nie.
Co to oznacza? Nie wiem jak to zmienić.
Załączniki
czasomierz 2.vi
(7.39 KiB) Pobrany 399 razy
czasomierz 2.png
czasomierz 2.png (28.75 KiB) Przejrzano 11535 razy
Awatar użytkownika
aaddaas
Posty: 202
Rejestracja: 26 cze 2013 20:42
Wersja środowiska: LabVIEW 2015

Re: Pomiar czasu przemieszczenia za pomocą kamer USB.

Post autor: aaddaas »

to wrzucam vi:)
1. Jest to tzw Propety node, ale możesz zastąpić je zmienną lokalną (local variable)
2. Patrz załącznik
3. Tak, zasymulowałem je zwykłym przełącznikiem
4. Czy nie chodzi Ci o pętlę while przypadkiem? Jeśli tak, to jest shift register (rejestr przesuwny), który przetrzymuje wartość z poprzedniego obiegu. Dodajesz je klikając PPM na obwódkę pętli i wybierając z menu podręcznego.
Załączniki
Untitled 1.vi
(8.25 KiB) Pobrany 416 razy
Obrazek
monkej
Posty: 13
Rejestracja: 16 lis 2015 21:02
Wersja środowiska: LabVIEW 2013

Re: Pomiar czasu przemieszczenia za pomocą kamer USB.

Post autor: monkej »

Dziękuje za zainteresowanie tematem.
Obejrzałem Twój czasomierz i nie działa on dobrze.
1. Za każdym razem daje wynik 4294966. Czasami tylko końcówka jest inna.
2. W jakiej jednostce mierzy on czas ?
3. Program który wykrywa ruch sygnalizuje zmianę stanu kontrolką. Gdy wykryje ruch kontrolka świeci (True). Gdy nie wykrywa kontrolka nie świeci (False).
W momencie przemieszczania się obiektu z małą prędkością w polu widzenia kamery czasami kontrolka miga, mimo że, obiekt cały czas się przesuwa.
Myślę, że jest to związane z zbyt subtelnymi zmianami w obrazie co program chwilowo uznaje za brak ruchu (przypominam, że obiekt cały czas się przesuwa).
Więc według tego co napisałem wyżej pomiar wygląda następująco:
A. Obiekt przemieszcza się.
B. W pewnym momencie pojawia się w polu widzenia kamery nr 1. Program wykrywa ruch. Kontrolka nr 1 zaczyna migać (True i False na zmianę, o różnej
długości każdego z stanów). W momencie pierwszego zapalenia się kontrolki nr 1 (pierwsze True) pomiar powinien się rozpocząć i trwać nadal pomimo jej migania ( False i True na zmianę).
C. Obiekt wychodzi poza obszar widzenia kamery nr 1 i przez chwile nie jest widziany również przez kamerę nr 2. Kontrolka nr 1 i nr 2 nie świecą się
(obie są False). Pomiar nadal trwa.
D. Obiekt wchodzi w pole widzenia kamery nr 2.Program wykrywa ruch. Kontrolka nr 2 zaczyna migać (True i False na zmianę, o różnej
długości każdego z stanów). W momencie pierwszego zapalenia się kontrolki nr 2 (pierwsze True) pomiar powinien się zakończyć i nie zostać wznowiony pomimo jej migania ( False i True na zmianę).
Wynik ma pozostać widoczny w celu jego odczytania nawet po zatrzymaniu czasomierza i resetować się w momencie ponownego uruchomienia.
Czasomierz wysłany przez ciebie aby działać wymaga: kontrolka nr 1 True (zaczyna odmierzać) i jednocześnie kontrolka nr 2 True (zatrzymuje się).
Taki stan podczas działania programu wykrywającego ruch nie zachodzi. Gdyby czasomierz nawet działał to po podłączeniu do kontrolek i tak by czasu nie zmierzył.
4. Znasz morze jakiś sposób na zrobienie podtrzymania tak aby kontrolka w momencie pierwszego True zapalała się i nie gasła pomimo pojawiania się False
aż do momentu zatrzymania programu.

Trochę źle napisałem w całym tekście. Nie chodzi mi o zapalanie się kontrolki tylko o zmiany sygnału (True lub False). Zapalanie się kontrolki
jest tylko wizualizacją tego sygnału.
Awatar użytkownika
aaddaas
Posty: 202
Rejestracja: 26 cze 2013 20:42
Wersja środowiska: LabVIEW 2015

Re: Pomiar czasu przemieszczenia za pomocą kamer USB.

Post autor: aaddaas »

Faktycznie, bloczek Tick count raczej nie zda tutaj egzaminu (bo mierzy zapętlający się czas w przedziale od 0 do 2^32-1 ms), dlatego używam Get Date/Time in Seconds.
Jeśli chcesz przetrzymywać pierwszą wartość czasu zapalenia się kontrolki, proponuję wykorzystanie tablicy array (patrz załącznik). Pamiętaj, by nie zapomnieć zresetować wartości kontrolek po wykryciu True na drugim czujniku, bo wartość Ci przepradnie
Załączniki
Untitled 1.vi
(8.96 KiB) Pobrany 409 razy
Obrazek
monkej
Posty: 13
Rejestracja: 16 lis 2015 21:02
Wersja środowiska: LabVIEW 2013

Re: Pomiar czasu przemieszczenia za pomocą kamer USB.

Post autor: monkej »

Po wprowadzeniu wszystkich sugestii i dorzuceniu jeszcze paru innych rzeczy program uzyskał taki kształt jaki chciałem. Dziękuje za wszystkie odpowiedzi aaddaasowi. Temat zamykam.
ODPOWIEDZ