2009-02-13 11 views
5

Krótki opis wymagańProjektowanie dla akwizycji w czasie rzeczywistym i „kontrola”

(wiele dobrych odpowiedzi tutaj, dzięki wszystkim, będę aktualizować jeśli kiedykolwiek to Latający).

Detektor biegnie wzdłuż toru, mierząc kilka różnych parametrów fizycznych w czasie rzeczywistym (deterministycznym), w funkcji odległości krzywoliniowej. Użytkownik może kliknąć przycisk, aby "zaznaczyć" punkty trasy podczas tego procesu, a następnie użyć interfejsu GUI do wprowadzenia szczegółów dla każdego punktu nawigacyjnego (w czasie rzeczywistym, ale podczas gdy pobieranie danych trwa).

Następnie system przeprowadza serię obliczeń/filtrów/modyfikacji uzyskanych danych, biorąc pod uwagę ograniczenia wprowadzone dla każdego punktu trasy. Wynikiem tego procesu jest seria poprawek, również w funkcji krzywoliniowej odległości.

Trzecia część procesu polega na ponownym poruszaniu się po torze, ale tym razem wprowadzeniu poprawek do systemu fizycznego, który koryguje tor (nadal jako funkcja odległości krzywoliniowej).

Mój obecny pomysł na wprowadzenie/komentarze/ostrzeżeń

Co chcę, aby określić to, czy mogę to zrobić za pomocą komputera PC + FPGA. FPGA zrobiłaby "pozyskiwanie danych", użyłbym C# na PC, aby odczytać dane z bufora. Informacje o punkcie pośrednim można wprowadzić za pomocą aplikacji WPF/WinForms i przechowywać w bazie danych/pliku płaskim/dowolnym oczekującym "przetwarzaniu".

Do przetworzenia użyłbym F #.

FPGA zostanie użyty do "zapisania" informacji z powrotem do maszyny fizycznej.

Jedyny problem, jaki mogę obecnie przewidzieć, to to, czy algorytmy przetwarzania wymagają częstotliwości próbkowania, która powoduje, że ilość danych do buforowania jest zbyt duża. Oznaczałoby to odciążenie części przetwarzania na FPGA - przynajmniej te bity, które nie wymagają wkładu użytkownika. Niestety, jedynym algorytmem przetwarzania wstępnego jest filtr Kalmana, który jest trudny do implementacji z FPGA, z tego, co mam w Google.

Byłbym bardzo wdzięczny za wszelkie opinie, które chcesz przekazać.

aktualizacji (extra informacji tutaj dodać, jak i kiedy)

Przy wejściu do filtru Kalmana patrzymy raz na 1ms. Ale po drugiej stronie filtra Kalmana próbowaliśmy co 1m, co przy prędkościach, o których mówimy, wynosiłoby około 2 sekundy.

Więc myślę bardziej precyzyjnych pytań byłoby:

  1. wdrożenie Kalman filter na FPGA - seemsthatit's możliwe, ale nie rozumiem wystarczająco dużo o podlegających aby móc wypracować tylko jak możliwe, że jest.

  2. Nie jestem również pewien, czy implementacja FPGA Kalmana będzie w stanie wykonać cykl co 1 ms - choć wyobrażam sobie, że nie powinno to stanowić problemu.

  3. Jeśli dobrze zrozumiałem, układ FPGA nie ma ogromnej ilości pamięci. W trzeciej części procesu, w której wysyłałbym (około) tablicę podwójną o rozmiarze 4 x 400, która mogłaby służyć jako tablica wyników, czy jest to możliwe?

  4. Ponadto, zamiana pomiędzy tymi dwoma procesami (odczyt/zapis danych) implikuje ponowne programowanie FPGA za każdym razem, czy może być poinstruowana, aby przełączać się między nimi? (Możliwe, że wystarczy uruchomić oba równolegle i zignorować jedno lub drugie).

  5. Anotheroption Widziałem kompiluje F # do VHDL użyciu Avalda FPGA Developer, będę się starał, że wkrótce, myślę.

+1

Twoje pytanie jest niewiarygodnie szerokie. Czy w ogóle jest tam pytanie? Lepiej zacznij trochę tego i wróć do szczegółowych pytań, gdy zaczniesz! –

Odpowiedz

2

Ponieważ poruszasz się po torze, muszę założyć, że częstotliwość próbkowania jest nie większa niż 10 kHz. Możesz łatwo odładować dane na komputer, nawet 12 Mb USB (pełna prędkość).

Do poważnego przetwarzania danych matematycznych Matlab jest drogą do zrobienia. Ale ponieważ nie słyszałem o F #, nie mogę komentować.

Podwójne 4 x 400 nie stanowi problemu. Nawet low-end FPGA mają 100 s kb pamięci.

Nie musisz zmieniać obrazów, aby zamienić między czytaniem a pisaniem. Odbywa się to cały czas w FPGA.

+0

@ Brian Carlton, dzięki za odpowiedź. F # jest językiem funkcjonalnym w .Net fold, myślę, że przewaga nad Matlab polega na tym, że jest on łatwiejszy do dystrybucji. Wadą jest to, że musisz sam rzucić większość, i to jest dość krwawiące. – Benjol

1

Jakie jest twoje połączenie z komputerem? .Net będzie dobrym rozwiązaniem, jeśli jest to połączenie sieciowe, ponieważ możesz wykorzystać strumienie, aby poradzić sobie z wprowadzaniem danych.

Moim jedynym ostrzeżeniem dla ciebie dotyczącym F # lub jakiegokolwiek języka programowania funkcjonalnego z dużymi zbiorami danych jest użycie pamięci. Są cudowne i matematycznie możliwe do udowodnienia, ale kiedy otrzymujesz wyjątek przepełnienia stosu do wielu rekursji, oznacza to, że twój program nie będzie działał, a ty stracisz czas i wysiłek.

C# będzie świetny, jeśli potrzebujesz opracować GUI, WinForm i GDI + powinny doprowadzić Cię do czegoś użytecznego bez monumentalnego wysiłku.

Podaj nam więcej informacji na temat szybkości transmisji danych i połączenia, a może możemy zaoferować dodatkową pomoc?

+0

Cóż, FPGA i PC będą w tym samym miejscu, więc można je podłączyć w dowolny sposób. Z tego, co powiedział Brian Carlton, USB brzmi całkiem nieźle. Patrząc teraz na stawki danych. – Benjol

+0

Punkt podchodzący do przepełnienia stosu, ale rekurencja ogona to jedna rzecz, którą * mam * zrozumiałam na temat F # (myślę), więc mam nadzieję, że uda mi się uniknąć tego konkretnego problemu. – Benjol

+0

F # może uzyskać bezpośredni dostęp do wskazań w tablicach; może mieć typy referencji i nie zawsze korzysta z semantyki kopiowania podczas wywoływania. W związku z tym będziemy przekazywać do każdego wywołania int, a nie kopię tablicy. Ponadto GDI + jest renderowane przez oprogramowanie, podczas gdy WPF jest renderowane przez GPU, więc GDI + jest WOLNIEJSZY! – Henrik

1

Może być coś pożytecznego w Microsoft Robotics Studio: link text szczególnie w aspekcie czasu rzeczywistego. Środowisko wykonawcze CCR - Concurrency Coordination Runtime ma już wiele takich przemyśleń, a narzędzia symulacyjne mogą pomóc w zbudowaniu modelu, który pomógłby w analizie.

1

Brzmi tak, jakbyś mógł wykonać całe przetwarzanie poza linią. Jeśli tak jest, to do zrobienia jest offline. Innymi słowy podzielić proces w 3 etapach:

  1. akwizycji danych
  2. Analiza danych
  3. fizyczne korekty systemu opartego na analizie danych.

Data Acquisition

Jeśli nie mogą zbierać dane przy użyciu standardowego interfejsu, to prawdopodobnie trzeba iść z interfejsem użytkownika. Trudno powiedzieć, czy powinieneś używać FPGA, nie wiedząc więcej o swoim interfejsie.Budowanie niestandardowych interfejsów jest drogie, więc powinieneś zrobić badanie kompromisu, aby wybrać podejście. W każdym razie, jeśli jest to oparte na FPGA, to utrzymuj FPGA w prostocie i używaj go do pozyskiwania danych surowych. Przy obecnej technologii dysków twardych możesz łatwo przechowywać 100 gigabajtów danych do przetwarzania końcowego, więc przechowuj surowe dane na dysku. Nie ma mowy, żebyś chciał wdrożyć nawet jeden wymiarowy filtr Kalmana w FPGA, jeśli nie musisz tego robić.

Analiza danych

Gdy masz dane na dysku twardym, a następnie masz wiele opcji do analizy danych. Jeśli znasz już F #, a następnie przejdź do F #. Python i Matlab mają dostęp do wielu bibliotek analizy danych.

Takie podejście znacznie ułatwia testowanie oprogramowania do analizy danych niż rozwiązanie, w którym trzeba wykonać całe przetwarzanie w czasie rzeczywistym. Jeśli wyniki nie wydają się właściwe, możesz ponownie uruchomić analizę bez konieczności ponownego zbierania danych.

Korekty system fizyczny

Take wyniki analizy danych i uruchomić detektor wzdłuż toru znowu karmienie go odpowiednich wejść za pośrednictwem karty interfejsu.

1

Zrobiłem wiele inżynierii wbudowanej, w tym systemy hybrydowe, takie jak opisane. Przy szybkościach i rozmiarach danych, które musisz przetworzyć, wątpię, czy potrzebujesz FPGA ... po prostu znajdź system gromadzenia danych z półki, aby podłączyć go do komputera.

Myślę, że największy problem, który napotkasz, jest bardziej powiązany z powiązaniami językowymi dla interfejsów API sprzętu. W przeszłości musiałem opracować wiele mojego oprogramowania w C i montażu (a nawet niektórych Forth), ponieważ był to najprostszy sposób na uzyskanie danych ze sprzętu.

3

Nie wspominając swoje cele, klientów, budżet, niezawodności lub terminów, więc jest trudno odpowiedzieć, ale ...

Zapomnij FPGA. Uprość swój projekt, środowisko programistyczne i interfejsy, chyba że wiesz, że spełnisz wymagania w czasie rzeczywistym innym rozwiązaniem.

Jeśli masz budżet, najpierw przyjrzę się LabView.

http://www.ni.com/labview/

http://www.ni.com/dataacquisition/

LabView nie daje system akwizycji danych i interfejs graficzny użytkownika wszystko na jednym komputerze. Z mojego doświadczenia wynika, że ​​programiści nie wybierają LabView, ponieważ nie czują się "prawdziwym" środowiskiem programistycznym, ale zdecydowanie poleciłbym go dla opisanego problemu.

Jeśli chcesz korzystać ze skompilowanych języków, powinienem wyizolować komponent pozyskiwania danych w czasie rzeczywistym do osadzonego obiektu docelowego z systemem plików RTOS, a najlepiej taki, który wykorzystuje MMU do planowania i izolowania wątków oraz pozwala pisać w C. Jeśli otrzymasz rzeczywisty czas RTOS, powinieneś być w stanie realistycznie zaplanować procesy, które muszą być uruchomione, a także móc je debugować, jeśli zajdzie taka potrzeba! System ten powinien być tak prosty, jak to tylko możliwe, ze zdefiniowanymi interfejsami. Zrób to tak, aby uzyskać potrzebne dane.

Następnie zaimplementowałem interfejsy z powrotem do GUI komputera, używając wspólnego pliku interfejsu do konserwacji. Używaj standardowych interfejsów do przesyłania danych do komputera, na przykład USB2 lub Ethernet. Chipy FTDI są świetne do tego typu rzeczy.

+0

Myślę, że to znaczy, że labview cię nie interesuje? :) – BenB

+0

LabView jest obecnie analizowany jako możliwa alternatywa dla prototypowania. – Benjol

2

Oto propozycja.

Zrzuć koncepcję FPGA. Uzyskaj tablicę ewaluacyjną DSP od TI Wybierz jedną z wystarczającą liczbą gigaflopów, aby cię zadowolić. Wystarczająca ilość pamięci RAM do przechowywania zestawu roboczego.

Programuj to w C. TI dostarcza małe jądro RT.

Mówi do komputera, powiedzmy portu szeregowego lub sieci Ethernet, cokolwiek.

Wysyła dane z gotowaniem na PC z uzgadnianiem, aby dane nie zostały utracone. Jest wystarczająco dużo pamięci RAM w DPS, aby przechowywać dane, gdy komputer ma momenty seniora.

Brak problemów z wydajnością w DSP.

Bit Realtime działa w czasie rzeczywistym z MP pamięci RAM. Przetwarzanie jest szybkie, a GUI nie jest krytyczny czasowo.

Powiązane problemy