Sistema di visione e mappatura a telecamera singola


17

Qualche tempo fa ho visto una demo di un piccolo "carro armato giocattolo" con una singola telecamera montata su di esso. Questo carro armato è stato in grado di guidare intorno al pavimento e rilevare oggetti e quindi muoversi / sterzare per evitarli. La parte interessante era che utilizzava un sistema di visione a telecamera singola e, per quanto mi ricordo, stava sfruttando il pavimento piatto. e quindi usando la velocità con cui una caratteristica si muoveva nella scena rispetto ai motori e alle direzioni di viaggio per valutare e quindi mappare la scena.

Qualcuno può inviarmi puntatori cosa cercare per ottenere ulteriori informazioni su questo, o alcuni puntatori a codebase che possono fare questo.

Il motivo per cui lo chiedo è che si trattava di un sistema a telecamera singola di diversi anni fa (5+) e quindi (da quello che ricordo) era un carico di calcolo relativamente basso. Avevo intenzione di provare questo su un Raspberry PI per costruire un'auto / serbatoio che mappasse una stanza o un insieme di stanze.


2
Benvenuti nella robotica Ben. Dai un'occhiata a Come chiedere e in tour per alcuni suggerimenti su come scrivere domande pratiche e rispondenti sulla base dei problemi reali che stai affrontando . Grazie,
Mark Booth

Risposte:


4

È difficile dire esattamente cosa stessero facendo, ma i termini che potresti desiderare qui sono " flusso ottico " e " egomotion ". Sembra che ci sia stata una certa rilevazione e corrispondenza delle caratteristiche (qualcosa come SURF o SIFT) o anche la segmentazione di primo piano / sfondo.

OpenCV è probabilmente la base di codice più utilizzata per la visione artificiale, hanno molte funzionalità per l'analisi del movimento . OpenCV dovrebbe funzionare su Raspberry Pi, anche se i tuoi algoritmi potrebbero essere limitati dalla potenza di calcolo.


4

Basandosi sulla risposta di WildCrustcean , un'altra possibilità sarebbe la visione stereo . Mentre spesso pensiamo alla visione stereo come all'uso di due telecamere, le tecniche in realtà richiedono solo immagini spostate nello spazio e un modello di spostamento. In altre parole, posso prendere un'immagine, spostare, quindi scattare un'altra immagine. Finché conosco la trasformazione tra queste due immagini, posso quindi utilizzare le tecniche di visione stereo per calcolare la distanza da un punto dell'immagine.


2
Penso che la tecnica di cui stai parlando si chiama "Struttura dal movimento".
Kozuch,

1

Avrebbe potuto usare Parellel Tracking and Mapping PTAM . PTAM è un'implementazione del problema di localizzazione e mappatura simultanea (SLAM) che utilizza una singola telecamera per costruire una mappa 3D del mondo e localizzarla monitorando le funzionalità visive.

Una volta il mio team ha sperimentato l'uso del pacchetto PTAM in ROS .

Stavamo eseguendo Ubuntu su un Intel Atom e, per quanto ricordo, non ha granché del processore. Non abbiamo finito per usarlo, principalmente perché non siamo riusciti a trovare abbastanza funzionalità nell'ambiente in cui il nostro robot sarebbe in esecuzione.


0

In generale non è possibile estrarre misure di distanza metriche da una singola immagine, a meno che non si disponga di ulteriori informazioni sul mondo. Ad esempio, se sai che il mondo è planare (o puoi rilevare il pavimento, che è una regione planare), puoi stimare un'omografia.

Un'omografia è una trasformazione proiettiva tra piani (matrice 3x3). Data la calibrazione intrinseca della fotocamera, è possibile scomporre questa omografia indotta dal piano in una rotazione e una traduzione. La traduzione è in scala. Puoi risolvere questa ambiguità di scala conoscendo la distanza dalla telecamera al pavimento (piano).

Una volta ottenuta l'omografia, è possibile rilevare oggetti che non si trovano sul piano. L'omografia consente di deformare la prima immagine sulla seconda. Gli oggetti sul piano si allineano e presentano un piccolo errore. Gli oggetti non sul piano non si allineeranno. Questo si chiama parallasse.

Un modo per implementare questo potrebbe essere

  1. Estrai funzioni da entrambe le immagini.
  2. Abbina le funzionalità o monitorale.
  3. Stimare l'omografia usando RANSAC.
  4. Decomporre l'omografia in una rotazione e traduzione usando la calibrazione.
  5. Trasforma la prima immagine nella
    seconda. I pixel con errori di grandi dimensioni non si trovano sul pavimento e potrebbero essere
    ostacoli.

La maggior parte dei blocchi predefiniti sono implementati in opencv (vedi http://docs.opencv.org/modules/calib3d/doc/camera_calibration_and_3d_reconstruction.html ).

In bocca al lupo.

PS la decomposizione dell'omografia ti darà anche la normale dell'aereo. Ma, dato che stai assumendo che questo sia il piano di base, abbiamo il normale puntamento verso l'alto. Una soluzione più precisa può essere realizzata nella procedura di calibrazione. Puoi usare un bersaglio a scacchiera e stimarne la posa. La posa avrà un piano normale e una distanza dalla telecamera.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.