Actions

KAmod IMX477 (PL): Difference between revisions

From Kamamilabs.com - Wiki

No edit summary
 
(28 intermediate revisions by the same user not shown)
Line 1: Line 1:
__jzpdf__
__jzpdf__
====Opis====
===Opis===
 
'''KAmod IMX477 - moduł kamery 12,3 MPx do Raspberry Pi'''
'''KAmod IMX477 - moduł kamery 12,3 MPx do Raspberry Pi'''


Moduł jest wyposażony w przetwornik obrazu typu IMX477 o rozdzielczości 12,3 MPx oraz obiektyw z mocowaniem M12 o kącie widzenia 160°. Umożliwia nagrywanie filmów z rozdzielczością 1080p30, 720p60 lub 640x480p60/90. Interfejs MIPI CSI-2 lane jest kompatybilny z komputerami Raspberry Pi i wyprowadzony na 15-stykowe złącze FPC/FFC. Płytka ma niewielkie wymiary 26 x 25 mm, dzięki czemu znakomicie sprawdzi się jako czujnik w dronach, robotyce czy aplikacjach do rozpoznawania twarzy.
Moduł jest wyposażony w przetwornik obrazu typu IMX477 o rozdzielczości 12,3 MPx oraz obiektyw z mocowaniem M12 o kącie widzenia 160°. Umożliwia nagrywanie filmów z rozdzielczością 1080p30, 720p60 lub 640x480p60/90. Interfejs MIPI CSI-2 lane jest kompatybilny z komputerami Raspberry Pi i wyprowadzony na 15-stykowe złącze FPC/FFC. Płytka ma niewielkie wymiary 26 x 25 mm, dzięki czemu znakomicie sprawdzi się jako czujnik w dronach, robotyce czy aplikacjach do rozpoznawania twarzy.


<center>
[[File:KAmod_IMX477_1.jpg|none|900px|thumb|center]]
</center>


----
----
===Podstawowe parametry===


====Podstawowe parametry====
;'''Moduł z przetwornikiem obrazu'''
'''Moduł z przetwornikiem obrazu'''
*Typ: IMX477
*Typ: IMX477
*Rozdzielczość: 4056 x 3040, 12,3 MP
*Rozdzielczość: 4056 x 3040, 12,3 MP
Line 21: Line 25:




'''Obiektyw'''
;'''Obiektyw'''
*Ogniskowa (BFL): 5,96
*Ogniskowa (BFL): 5,96
*Format optyczny: 1/2,8″
*Format optyczny: 1/2,8″
Line 28: Line 32:
*Czułość IR: wbudowany filtr IR
*Czułość IR: wbudowany filtr IR
*Standard obiektywu: M12 (S-mount)
*Standard obiektywu: M12 (S-mount)
====Wyposażenie standardowe====
 
 
----
===Wyposażenie standardowe===
 
<center>
<center>
{| class="wikitable" style="width: 1020px;"
{| class="wikitable" style="width: 1020px;"
Line 50: Line 58:


</center>
</center>
<center>
[[File:KAmod_IMX477_2a.jpg|none|900px|thumb|center]]
</center>
----
===Złącze sygnałowe===
'''KAmod IMX477''' zawiera interfejs MIPI CSI-2 lane ze złączem do taśm FPC/FFC 15-pin/1mm. Rozmieszczenie sygnałów zostało pokazane na rysunku.
<center>
[[File:KAmod_IMX477_signal_.png|none|800px|thumb|center]]
</center>
----
===Podłączenie modułu===
Komputery SBC zawierają dwa typy złącz kamery:
*FPC/FFC 15-pinów/1 mm, np. RPi3, RPi4, Jetson Nano
*FPC/FFC 22-piny/0,5 mm, np. RPi5, RPi Zero 2 W, Jetson Orin
W zestawie '''KAmod IMX477''' znajdują się taśmy połączeniowe pasujące do obu standardów. Podczas podłączania należy upewnić się, że metaliczne styki taśmy połączeniowej są skierowane w stronę styków złącza, zarówno w module '''KAmod IMX477''', jak i na płytce komputera.
Właściwe ustawienie styków zostało pokazane na rysunkach.
Podłączenie taśmy do modułu KAmod IMX477
<center>
[[File:KAmod_IMX477_con.png|none|600px|thumb|center]]
</center>
Podłączenie taśmy do Raspberry Pi 5
<center>
[[File:KAmod_IMX477_conn_rpi5.jpg|none|560px|thumb|center]]
</center>
Podłączenie taśmy do Raspberry Pi 4
<center>
[[File:KAmod_IMX477_conn_rpi4.jpg|none|600px|thumb|center]]
</center>
Podłączenie taśmy do Nvidia Jetson Orin Nano
<center>
[[File:KAmod_IMX477_Nvidia.png|none|700px|thumb|center]]
</center>
----
===Uruchomienie modułu w systemie Raspberry Pi===
Moduł kamery '''KAmod IMX477''' należy podłączyć do złącza <code>CAM/DISP0</code> lub <code>CAM/DISP1</code>, zgodnie z wcześniejszymi wskazówkami.
Nowy system Raspberry Pi OS (Bookworm/Trixie) ma już wbudowane wsparcie dla sensora  IMX477, dlatego nie wymaga żadnych dodatkowych sterowników. Po uruchomieniu systemu Raspberry Pi 5 należy tylko edytować plik <code>config.txt</code>. W pierwszej kolejności należy wpisać polecenie:
<div style="background: #f8f9fa; border: 1px solid #a2a9b1; padding: 10px; border-radius: 4px; width: 1100px">
<syntaxhighlight lang="sh">
sudo nano /boot/firmware/config.txt
</syntaxhighlight>
</div>
Teraz należy znaleźć w pliku linijkę: <code>camera_auto_detect=1</code>
i zmienić jej wartość na 0: <code>camera_auto_detect=0</code>
Następnie, na końcu pliku w sekcji [all] należy dopisać
<code>dtoverlay=imx477,cam0</code>
lub
<code>dtoverlay=imx477,cam1</code>
w zależności od tego, do którego złącza dołączono moduł kamery. Jeśli dołączono dwa moduły kamery, należy wpisać obie linie.
Na końcu należy zapisać plik kombinacją klawiszy CTRL + O (potwierdzamy klawiszem Enter) oraz zamknąć edytor za pomocą CTRL + X (potwierdzamy klawiszem Enter). Po ponownym uruchomieniu poleceniem <code>sudo reboot</code> minikomputer jest gotowy do pracy.
Podgląd obrazu z kamery można uruchomić poleceniem:
<code>rpicam-hello -t 0 –camera 0</code>
lub
<code>rpicam-hello -t 0 –camera 1</code>
w zależności od tego, do którego złącza dołączony jest moduł. Aby zakończyć to zadanie należy wcisnąć kombinację klawiszy CTRL + C.
Więcej informacji o module rpicam można znaleźć tu:
[https://www.raspberrypi.com/documentation/computers/camera_software.html Raspberry Pi Camera software]
----
===Uruchomienie modułu kamery KAmod IMX477 na platformie NVIDIA Jetson===
'''Testowana konfiguracja Jetson Orin Nano:'''
*NVIDIA Jetson Orin Nano Developer Kit Super
*Jetson Linux R39.2.1
*Linux kernel 6.8.12-1021-tegra
*Kamera KAmod IMX477
*Taśma połączeniowa
====<mark style="background-color: #FFCC99 ;">Wsparcie dla oryginalnego Jetson Nano</mark>====
Kamera jest obsługiwana przez sterowniki Waveshare IMX477-160 dedykowane dla oryginalnej płyty NVIDIA Jetson Nano. W przypadku wersji JetPack 4.6 i nowszych przeznaczonych dla oryginalnego Jetson Nano, konfigurację kamery przeprowadza się za pomocą narzędzia <code>Jetson-IO</code>:
<div style="background: #f8f9fa; border: 1px solid #a2a9b1; padding: 10px; border-radius: 4px; width: 400px">
<syntaxhighlight lang="sh">
sudo /opt/nvidia/jetson-io/jetson-io.py
</syntaxhighlight>
</div>
Ścieżka w menu programu wygląda następująco:
Configure Jetson Nano CSI Connector
→ Configure for compatible hardware
→ Camera IMX477 Dual
Dla przetestowania strumienia w rozdzielczości 1920×1080 przy 20 FPS, Waveshare udostępnia następujący potok GStreamer:
<div style="background: #f8f9fa; border: 1px solid #a2a9b1; padding: 10px; border-radius: 4px; width: 900px">
<syntaxhighlight lang="sh">
DISPLAY=:0.0 gst-launch-1.0 \
  nvarguscamerasrc sensor-id=0 ! \
  'video/x-raw(memory:NVMM),width=1920,height=1080,format=NV12,framerate=20/1' ! \
  nvoverlaysink -e
</syntaxhighlight>
</div>
Pełna instrukcja producenta dostępna jest na stronie [https://www.waveshare.com/wiki/IMX477-160_12.3MP_Camera Waveshare IMX477-160 12.3MP Camera wiki].
Powyższe instrukcje dotyczą oryginalnego Jetson Nano oraz (według Waveshare) Jetson Xavier NX. System JetPack 4.6 nie obsługuje platformy Jetson Orin Nano i nie można go na niej zainstalować.
<br><br>
====<mark style="background-color: #FFCC99;">Natywna obsługa IMX477 na Jetson Orin Nano</mark>====
Przed użyciem kamery na platformie Jetson Orin Nano należy wykonać wstępną konfigurację za pomocą narzędzia NVIDIA Jetson-IO:
<div style="background: #f8f9fa; border: 1px solid #a2a9b1; padding: 10px; border-radius: 4px; width: 400px">
<syntaxhighlight lang="sh">
sudo /opt/nvidia/jetson-io/jetson-io.py
</syntaxhighlight>
</div>
Na płytce Jetson Orin Nano Developer Kit należy wybrać kolejno:
Configure Jetson 22pin CSI Connector
→ Configure for compatible hardware
→ Camera IMX477 Dual
→ Save pin changes
→ Save and reboot to reconfigure pins
Dokładna nazwa złącza w menu może się nieznacznie różnić w zależności od wydania Jetson Linux.
<div style="background:  #FFCCCC; border: 1px solid #FF0000; padding: 10px; border-radius: 4px; width: 1100px">
'''Uwaga: '''
Kamera musi być podłączona przy '''wyłączonym''' zasilaniu płytki Jetson. Nie wolno podłączać ani odłączać kamery MIPI CSI, gdy płytka jest podłączona do zasilania!
</div>
Wybranie opcji <code>Camera IMX477 Dual</code> włącza definicje przetwornika IMX477 dla złączy kamer. Konfiguracja ta '''nie wymaga''' fizycznego podłączenia dwóch kamer.
Po zapisaniu konfiguracji przez Jetson-IO należy zrestartować system:
<div style="background: #f8f9fa; border: 1px solid #a2a9b1; padding: 10px; border-radius: 4px; width: 120px">
<syntaxhighlight lang="sh">
sudo reboot
</syntaxhighlight>
</div>
Jeśli narzędzie Jetson-IO zgłosi błąd, poinformuje o braku pasującego pliku DTB lub utworzy konfigurację uniemożliwiającą rozruch, zapoznaj się z sekcją dotyczącą problemów na Jetson Orin Nano Super.
<br>
====<mark style="background-color: #FFCC99 ;">Możliwe problemy z Jetson-IO na Jetson Orin Nano Super</mark>====
Na niektórych instalacjach Jetson Orin Nano Super wykonanie polecenia:
<div style="background: #f8f9fa; border: 1px solid #a2a9b1; padding: 10px; border-radius: 4px; width: 400px">
<syntaxhighlight lang="text">
sudo /opt/nvidia/jetson-io/jetson-io.py
</syntaxhighlight>
</div>
może zakończyć się błędem. Jednym ze znanych komunikatów jest:
<div style="background: #f8f9fa; border: 1px solid #a2a9b1; padding: 10px; border-radius: 4px; width: 900px ">
<syntaxhighlight lang="text">
RuntimeError: No DTB found for NVIDIA Jetson Orin Nano Engineering Reference Developer Kit Super!
</syntaxhighlight>
</div>
Problem ten występuje, gdy profil płytki, oprogramowanie układowe UEFI/QSPI, zainstalowane wydanie Jetson Linux oraz pliki DTB nie są ze sobą zgodne. Zjawisko to zaobserwowano zwłaszcza w przypadku wersji JetPack 6.2 oraz Jetson Linux R36.4.3.
Dyskusję na forum NVIDIA dotyczącą tego problemu można znaleźć pod adresem:
[https://forums.developer.nvidia.com/t/no-dtb-found-for-nvidia-jetson-orin-nano-engineering-reference-developer-kit-super/321861 NVIDIA Developer Forums — No DTB found for NVIDIA Jetson Orin Nano Engineering Reference Developer Kit Super]
'''Zalecana procedura naprawcza:'''
*Wgraj (sflashuj) spójne oprogramowanie układowe QSPI/UEFI oraz obraz systemu operacyjnego pochodzące z tego samego wydania Jetson Linux.
*Nie łącz obrazu systemu z karty SD lub dysku NVMe pochodzącego z jednej wersji BSP z oprogramowaniem QSPI z innej wersji.
*Zaleca się użycie nowszego wydania Jetson Linux, w którym narzędzie Jetson-IO poprawnie obsługuje profil Super.
*Przed zmianą konfiguracji kamery warto wykonać kopię zapasową:
<div style="background: #f8f9fa; border: 1px solid #a2a9b1; padding: 10px; border-radius: 4px; width: 300px ">
<syntaxhighlight lang="text">
/boot/extlinux/extlinux.conf
/boot/dtb/
</syntaxhighlight>
</div>
Jeśli Jetson-IO utworzy nieprawidłową konfigurację rozruchową, a UEFI wyświetli komunikat:
<div style="background: #f8f9fa; border: 1px solid #a2a9b1; padding: 10px; border-radius: 4px; width: 300px ">
<syntaxhighlight lang="text">
Attempting Recovery Boot
</syntaxhighlight>
</div>
należy wejść do menu UEFI, wciskając klawisz <code>Esc</code>, a następnie wybrać:
Device Manager
→ NVIDIA Configuration
→ L4T Configuration
→ OS chain A status
→ Normal
Jeśli dostępna jest opcja dla drugiej partycji, należy również ustawić:
OS chain B status → Normal
Następnie wybrać:
L4T Boot Mode → ExtLinux
Zapisz zmiany i zrestartuj system. Jest to oficjalna procedura odzyskiwania opisana przez NVIDIA:
[https://docs.nvidia.com/jetson/archives/r36.5/DeveloperGuide/SD/Bootloader/UEFI.html#set-the-system-to-normal-boot-from-the-recovery-kernel-boot NVIDIA Jetson Linux — Set the system to normal boot from recovery kernel boot]
Unikaj ręcznego zmieniania nazw lub kopiowania losowych plików DTB jako pierwszego rozwiązania. Plik DTB niedostosowany do konkretnego modułu, płytki nośnej i wydania BSP może całkowicie zablokować uruchomienie systemu.
<br>
====<mark style="background-color: #FFCC99 ;">Natywne wsparcie IMX477 na Jetson Orin Nano (Sterownik)</mark>====
Pakiet Jetson Linux dla Jetson Orin Nano zawiera natywny sterownik dla przetwornika IMX477:
<syntaxhighlight lang="text">
nv_imx477
</syntaxhighlight>
</div>
Po włączeniu odpowiedniej konfiguracji kamera pojawia się jako urządzenie V4L2. W testowanym systemie R39.2.1 interfejs Argus udostępnia następujące tryby pracy:
<syntaxhighlight lang="text">
3840×2160 przy 30 FPS
1920×1080 przy 60 FPS
</syntaxhighlight>
</div>
Sterownik inicjalizuje przetwornik, a moduły NVCSI/VI rozpoczynają odbiór klatek. Jednakże podczas testów na wersji R39.2.1 zaobserwowano problem w momencie, gdy Argus automatycznie kontroluje wzmocnienie (gain) przetwornika i ISP.
<br><br>
====<mark style="background-color: #FFCC99 ;">Problem z automatycznym wzmocnieniem (Auto Gain)</mark>====
Dla domyślnych ustawień <code>nvarguscamerasrc</code> pierwsze klatki obrazu mogą być prawidłowe. Gdy Argus rozpoczyna automatyczną regulację, obraz staje się zielony i pojawiają się na nim pionowe lub poziome pasy.
Problem powtarzał się w sytuacjach, gdy Argus automatycznie zwiększał:
*analogowe wzmocnienie przetwornika (sensor analog gain),
*cyfrowe wzmocnienie ISP (ISP digital gain).
Jeśli parametr <code>gainrange</code> zostanie pominięty, Argus może użyć pełnego zakresu zgłaszanego przez sterownik (w testowanej konfiguracji aż do około 22.25×). Wyższe, automatycznie dobrane wartości prowadziły do uszkodzenia przechwytywanych klatek.
Obraz pozostaje stabilny po ograniczeniu zarówno wzmocnienia przetwornika, jak i cyfrowego wzmocnienia ISP.
NVIDIA wyjaśnia, że mechanizm automatycznej ekspozycji Argus w sposób ciągły wywołuje funkcje sterownika kamery. Nieprawidłowe wartości lub błędy w obsłudze funkcji takich jak <code>set_exposure()</code> oraz <code>set_gain()</code> mogą uszkodzić przechwytywanie Argus, nawet jeśli podstawowa komunikacja V4L2 z przetwornikiem działa poprawnie.
Więcej szczegółów w dokumentacji NVIDIA:
[https://docs.nvidia.com/jetson/archives/r39.2/DeveloperGuide/SD/CameraDevelopment/ArgusFramework/CameraSoftwareDevelopmentSolution.html#isp-configuration NVIDIA Camera Software Development Solution — ISP Configuration]
<br><br>
====<mark style="background-color: #FFCC99 ;">Obejście problemu (Workaround)</mark>====
Praktycznym rozwiązaniem problemu jest:
*pozostawienie włączonej automatycznej ekspozycji,
*ustawienie stałego analogowego wzmocnienia przetwornika,
*zablokowanie cyfrowego wzmocnienia ISP na wartości 1×,
*pozostawienie włączonego automatycznego balansu bieli.
Kluczowe parametry konfiguracyjne:
<syntaxhighlight lang="text">
aelock=false
gainrange='4 4'
ispdigitalgainrange='1 1'
awblock=false
wbmode=1
</syntaxhighlight>
</div>
<div style="background:  #EEEEEE ; border: 1px solid #222222 ; padding: 10px; border-radius: 4px; width: 1100px">
'''Ważne:''' Nie należy pomijać parametru <code>gainrange</code>. Jeśli zostanie pominięty, Argus może ponownie ustawić zbyt wysokie wzmocnienie, co doprowadzi do pojawienia się zielonego lub uszkodzonego obrazu.
</div>
====<mark style="background-color: #FFCC99 ;">Tryb 1920×1080 przy 60 FPS====
Przykład stabilnego potoku GStreamer:
<div style="background: #f8f9fa; border: 1px solid #a2a9b1; padding: 10px; border-radius: 4px; width: 800px">
<syntaxhighlight lang="sh">
gst-launch-1.0 \
  nvarguscamerasrc \
    sensor-id=0 \
    aelock=false \
    exposuretimerange='1000000 16000000' \
    gainrange='4 4' \
    ispdigitalgainrange='1 1' \
    awblock=false \
    wbmode=1 ! \
  'video/x-raw(memory:NVMM),width=1920,height=1080,framerate=60/1' ! \
  queue ! nvvidconv ! \
  'video/x-raw(memory:NVMM),format=RGBA' ! \
  nv3dsink sync=false
</syntaxhighlight>
</div>
Wartości czasu ekspozycji podawane są w nanosekundach:
<syntaxhighlight lang="text">
1 000 000 ns  = 1 ms
16 000 000 ns = 16 ms
</syntaxhighlight>
Przy płynności 60 FPS czas trwania jednej klatki wynosi około 16.67 ms. Maksymalny limit czasowy ekspozycji został więc ustawiony na 16 ms.
Jeśli wzmocnienie 4× <code>(gainrange='4 4')</code>okaże się niestabilne lub zbędne, należy rozpocząć testy od wartości 1×:
<code>
gainrange='1 1'
</code>
A następnie sprawdzać kolejne stałe wartości:
<code>
gainrange='2 2'
gainrange='4 4'
</code>
<br><br>
====<mark style="background-color: #FFCC99 ;">Tryb 3840×2160 przy 30 FPS====
Tryb 4K pozwala na wydłużenie czasu ekspozycji:
<div style="background: #f8f9fa; border: 1px solid #a2a9b1; padding: 10px; border-radius: 4px; width: 800px">
<syntaxhighlight lang="sh">
gst-launch-1.0 \
  nvarguscamerasrc \
    sensor-id=0 \
    aelock=false \
    exposuretimerange='1000000 32000000' \
    gainrange='4 4' \
    ispdigitalgainrange='1 1' \
    awblock=false \
    wbmode=1 ! \
  'video/x-raw(memory:NVMM),width=3840,height=2160,framerate=30/1' ! \
  queue ! nvvidconv ! \
  'video/x-raw(memory:NVMM),format=RGBA' ! \
  nv3dsink sync=false
</syntaxhighlight>
</div>
Przy 30 FPS jedna klatka trwa około 33.33 ms. Praktyczna maksymalna wartość ekspozycji wynosi około 32–33 ms:
<code>
exposuretimerange='1000000 32000000'
</code>
Asekuracyjna (zachowawcza) konfiguracja dla trybu 4K z użyciem wzmocnienia 1×:
<div style="background: #f8f9fa; border: 1px solid #a2a9b1; padding: 10px; border-radius: 4px; width: 800px">
<syntaxhighlight lang="sh">
gst-launch-1.0 \
  nvarguscamerasrc \
    sensor-id=0 \
    aelock=false \
    exposuretimerange='1000000 32000000' \
    gainrange='1 1' \
    ispdigitalgainrange='1 1' \
    awblock=false \
    wbmode=1 ! \
  'video/x-raw(memory:NVMM),width=3840,height=2160,framerate=30/1' ! \
  queue ! nvvidconv ! \
  'video/x-raw(memory:NVMM),format=RGBA' ! \
  nv3dsink sync=false
</syntaxhighlight>
</div>
Dobraną stałą wartość wzmocnienia (gain) należy zweryfikować dla konkretnego egzemplarza modułu kamery, warunków oświetleniowych, wybranego trybu pracy przetwornika oraz wersji systemowej Jetson Linux.
----
===Wymiary modułu===
Wymiary płytki modułu to 26 x 25 mm, wysokość wraz z obiektywem to ok. 27 mm. Na płytce znajdują się otwory umożliwiające zamontowanie płytki, ich rozmieszczenie zostało pokazane na rysunku.
<center>
[[File:KAmod_IMX477_dim.png|none|800px|thumb|center]]
</center>
----
----
===Linki===


====Złącze sygnałowe====
*[https://wiki.kamamilabs.com/images/8/8a/IMX477-DS.pdf Karta katalogowa przetwornika obrazu IMX477]
====Podłączenie modułu====
*[https://wiki.kamamilabs.com/images/a/a8/KAmod_IMX477_lens.jpg Karta katalogowa obiektywu]
====Uruchomienie modułu w systemie Raspberry Pi====
*[https://wiki.kamamilabs.com/images/9/95/KAmod-IMX477_3d.zip Model CAD (STEP)]
====Wymiary modułu====

Latest revision as of 18:01, 1 September 2026

Opis

KAmod IMX477 - moduł kamery 12,3 MPx do Raspberry Pi

Moduł jest wyposażony w przetwornik obrazu typu IMX477 o rozdzielczości 12,3 MPx oraz obiektyw z mocowaniem M12 o kącie widzenia 160°. Umożliwia nagrywanie filmów z rozdzielczością 1080p30, 720p60 lub 640x480p60/90. Interfejs MIPI CSI-2 lane jest kompatybilny z komputerami Raspberry Pi i wyprowadzony na 15-stykowe złącze FPC/FFC. Płytka ma niewielkie wymiary 26 x 25 mm, dzięki czemu znakomicie sprawdzi się jako czujnik w dronach, robotyce czy aplikacjach do rozpoznawania twarzy.


Podstawowe parametry

Moduł z przetwornikiem obrazu
  • Typ: IMX477
  • Rozdzielczość: 4056 x 3040, 12,3 MP
  • Rozmiar czujnika: przekątna 7,9 mm
  • Rozmiar piksela: 1,55 μm x 1,55 μm
  • Interfejs: MIPI CSI-2 lane, złącze 15-pinów, raster 1 mm
  • Domyślne mocowanie obiektywu: gwint M12x0,5
  • Format obrazu: 1080p30, 720p60 i 640 × 480p60/90
  • Zasilanie: 3,3 V
  • Wymiary: 26 x 25 mm, wysokość z obiektywem ok. 27 mm


Obiektyw
  • Ogniskowa (BFL): 5,96
  • Format optyczny: 1/2,8″
  • Przysłona (F): 3,0
  • Pole widzenia (FOV): 160°(D) 120°(H) 86°(V)
  • Czułość IR: wbudowany filtr IR
  • Standard obiektywu: M12 (S-mount)



Wyposażenie standardowe

Komponent Opis
KAmod IMX477
  • Zmontowany i uruchomiony moduł z zamontowanym obiektywem
FPC 15-pin/1mm do 22-pin/0,5mm
  • Taśma połączeniowa o długości ok. 200 mm do komputerów ze złączem 22-pinowym, np. RPi5
FFC 15-pin/1mm do 15-pin/1mm
  • Taśma połączeniowa o długości ok. 200 mm do komputerów ze złączem 15-pinowym, np. RPi4

Złącze sygnałowe

KAmod IMX477 zawiera interfejs MIPI CSI-2 lane ze złączem do taśm FPC/FFC 15-pin/1mm. Rozmieszczenie sygnałów zostało pokazane na rysunku.


Podłączenie modułu

Komputery SBC zawierają dwa typy złącz kamery:

  • FPC/FFC 15-pinów/1 mm, np. RPi3, RPi4, Jetson Nano
  • FPC/FFC 22-piny/0,5 mm, np. RPi5, RPi Zero 2 W, Jetson Orin

W zestawie KAmod IMX477 znajdują się taśmy połączeniowe pasujące do obu standardów. Podczas podłączania należy upewnić się, że metaliczne styki taśmy połączeniowej są skierowane w stronę styków złącza, zarówno w module KAmod IMX477, jak i na płytce komputera.

Właściwe ustawienie styków zostało pokazane na rysunkach.


Podłączenie taśmy do modułu KAmod IMX477


Podłączenie taśmy do Raspberry Pi 5

Podłączenie taśmy do Raspberry Pi 4

Podłączenie taśmy do Nvidia Jetson Orin Nano


Uruchomienie modułu w systemie Raspberry Pi

Moduł kamery KAmod IMX477 należy podłączyć do złącza CAM/DISP0 lub CAM/DISP1, zgodnie z wcześniejszymi wskazówkami.


Nowy system Raspberry Pi OS (Bookworm/Trixie) ma już wbudowane wsparcie dla sensora IMX477, dlatego nie wymaga żadnych dodatkowych sterowników. Po uruchomieniu systemu Raspberry Pi 5 należy tylko edytować plik config.txt. W pierwszej kolejności należy wpisać polecenie:


sudo nano /boot/firmware/config.txt


Teraz należy znaleźć w pliku linijkę: camera_auto_detect=1

i zmienić jej wartość na 0: camera_auto_detect=0


Następnie, na końcu pliku w sekcji [all] należy dopisać

dtoverlay=imx477,cam0

lub

dtoverlay=imx477,cam1

w zależności od tego, do którego złącza dołączono moduł kamery. Jeśli dołączono dwa moduły kamery, należy wpisać obie linie.


Na końcu należy zapisać plik kombinacją klawiszy CTRL + O (potwierdzamy klawiszem Enter) oraz zamknąć edytor za pomocą CTRL + X (potwierdzamy klawiszem Enter). Po ponownym uruchomieniu poleceniem sudo reboot minikomputer jest gotowy do pracy.


Podgląd obrazu z kamery można uruchomić poleceniem:

rpicam-hello -t 0 –camera 0

lub

rpicam-hello -t 0 –camera 1

w zależności od tego, do którego złącza dołączony jest moduł. Aby zakończyć to zadanie należy wcisnąć kombinację klawiszy CTRL + C.


Więcej informacji o module rpicam można znaleźć tu: Raspberry Pi Camera software


Uruchomienie modułu kamery KAmod IMX477 na platformie NVIDIA Jetson

Testowana konfiguracja Jetson Orin Nano:

  • NVIDIA Jetson Orin Nano Developer Kit Super
  • Jetson Linux R39.2.1
  • Linux kernel 6.8.12-1021-tegra
  • Kamera KAmod IMX477
  • Taśma połączeniowa


Wsparcie dla oryginalnego Jetson Nano

Kamera jest obsługiwana przez sterowniki Waveshare IMX477-160 dedykowane dla oryginalnej płyty NVIDIA Jetson Nano. W przypadku wersji JetPack 4.6 i nowszych przeznaczonych dla oryginalnego Jetson Nano, konfigurację kamery przeprowadza się za pomocą narzędzia Jetson-IO:


sudo /opt/nvidia/jetson-io/jetson-io.py


Ścieżka w menu programu wygląda następująco:

Configure Jetson Nano CSI Connector
→ Configure for compatible hardware
→ Camera IMX477 Dual


Dla przetestowania strumienia w rozdzielczości 1920×1080 przy 20 FPS, Waveshare udostępnia następujący potok GStreamer:

DISPLAY=:0.0 gst-launch-1.0 \
  nvarguscamerasrc sensor-id=0 ! \
  'video/x-raw(memory:NVMM),width=1920,height=1080,format=NV12,framerate=20/1' ! \
  nvoverlaysink -e


Pełna instrukcja producenta dostępna jest na stronie Waveshare IMX477-160 12.3MP Camera wiki.

Powyższe instrukcje dotyczą oryginalnego Jetson Nano oraz (według Waveshare) Jetson Xavier NX. System JetPack 4.6 nie obsługuje platformy Jetson Orin Nano i nie można go na niej zainstalować.

Natywna obsługa IMX477 na Jetson Orin Nano

Przed użyciem kamery na platformie Jetson Orin Nano należy wykonać wstępną konfigurację za pomocą narzędzia NVIDIA Jetson-IO:


sudo /opt/nvidia/jetson-io/jetson-io.py


Na płytce Jetson Orin Nano Developer Kit należy wybrać kolejno:


Configure Jetson 22pin CSI Connector
→ Configure for compatible hardware
→ Camera IMX477 Dual
→ Save pin changes
→ Save and reboot to reconfigure pins


Dokładna nazwa złącza w menu może się nieznacznie różnić w zależności od wydania Jetson Linux.


Uwaga:

Kamera musi być podłączona przy wyłączonym zasilaniu płytki Jetson. Nie wolno podłączać ani odłączać kamery MIPI CSI, gdy płytka jest podłączona do zasilania!


Wybranie opcji Camera IMX477 Dual włącza definicje przetwornika IMX477 dla złączy kamer. Konfiguracja ta nie wymaga fizycznego podłączenia dwóch kamer.


Po zapisaniu konfiguracji przez Jetson-IO należy zrestartować system:


sudo reboot


Jeśli narzędzie Jetson-IO zgłosi błąd, poinformuje o braku pasującego pliku DTB lub utworzy konfigurację uniemożliwiającą rozruch, zapoznaj się z sekcją dotyczącą problemów na Jetson Orin Nano Super.


Możliwe problemy z Jetson-IO na Jetson Orin Nano Super

Na niektórych instalacjach Jetson Orin Nano Super wykonanie polecenia:


sudo /opt/nvidia/jetson-io/jetson-io.py


może zakończyć się błędem. Jednym ze znanych komunikatów jest:


RuntimeError: No DTB found for NVIDIA Jetson Orin Nano Engineering Reference Developer Kit Super!


Problem ten występuje, gdy profil płytki, oprogramowanie układowe UEFI/QSPI, zainstalowane wydanie Jetson Linux oraz pliki DTB nie są ze sobą zgodne. Zjawisko to zaobserwowano zwłaszcza w przypadku wersji JetPack 6.2 oraz Jetson Linux R36.4.3.


Dyskusję na forum NVIDIA dotyczącą tego problemu można znaleźć pod adresem:

NVIDIA Developer Forums — No DTB found for NVIDIA Jetson Orin Nano Engineering Reference Developer Kit Super


Zalecana procedura naprawcza:

  • Wgraj (sflashuj) spójne oprogramowanie układowe QSPI/UEFI oraz obraz systemu operacyjnego pochodzące z tego samego wydania Jetson Linux.
  • Nie łącz obrazu systemu z karty SD lub dysku NVMe pochodzącego z jednej wersji BSP z oprogramowaniem QSPI z innej wersji.
  • Zaleca się użycie nowszego wydania Jetson Linux, w którym narzędzie Jetson-IO poprawnie obsługuje profil Super.
  • Przed zmianą konfiguracji kamery warto wykonać kopię zapasową:


/boot/extlinux/extlinux.conf
/boot/dtb/


Jeśli Jetson-IO utworzy nieprawidłową konfigurację rozruchową, a UEFI wyświetli komunikat:


Attempting Recovery Boot


należy wejść do menu UEFI, wciskając klawisz Esc, a następnie wybrać:


Device Manager
→ NVIDIA Configuration
→ L4T Configuration
→ OS chain A status
→ Normal


Jeśli dostępna jest opcja dla drugiej partycji, należy również ustawić:

OS chain B status → Normal


Następnie wybrać:

L4T Boot Mode → ExtLinux


Zapisz zmiany i zrestartuj system. Jest to oficjalna procedura odzyskiwania opisana przez NVIDIA:

NVIDIA Jetson Linux — Set the system to normal boot from recovery kernel boot

Unikaj ręcznego zmieniania nazw lub kopiowania losowych plików DTB jako pierwszego rozwiązania. Plik DTB niedostosowany do konkretnego modułu, płytki nośnej i wydania BSP może całkowicie zablokować uruchomienie systemu.


Natywne wsparcie IMX477 na Jetson Orin Nano (Sterownik)

Pakiet Jetson Linux dla Jetson Orin Nano zawiera natywny sterownik dla przetwornika IMX477:


nv_imx477


Po włączeniu odpowiedniej konfiguracji kamera pojawia się jako urządzenie V4L2. W testowanym systemie R39.2.1 interfejs Argus udostępnia następujące tryby pracy:


3840×2160 przy 30 FPS
1920×1080 przy 60 FPS


Sterownik inicjalizuje przetwornik, a moduły NVCSI/VI rozpoczynają odbiór klatek. Jednakże podczas testów na wersji R39.2.1 zaobserwowano problem w momencie, gdy Argus automatycznie kontroluje wzmocnienie (gain) przetwornika i ISP.

Problem z automatycznym wzmocnieniem (Auto Gain)

Dla domyślnych ustawień nvarguscamerasrc pierwsze klatki obrazu mogą być prawidłowe. Gdy Argus rozpoczyna automatyczną regulację, obraz staje się zielony i pojawiają się na nim pionowe lub poziome pasy.


Problem powtarzał się w sytuacjach, gdy Argus automatycznie zwiększał:

  • analogowe wzmocnienie przetwornika (sensor analog gain),
  • cyfrowe wzmocnienie ISP (ISP digital gain).


Jeśli parametr gainrange zostanie pominięty, Argus może użyć pełnego zakresu zgłaszanego przez sterownik (w testowanej konfiguracji aż do około 22.25×). Wyższe, automatycznie dobrane wartości prowadziły do uszkodzenia przechwytywanych klatek.


Obraz pozostaje stabilny po ograniczeniu zarówno wzmocnienia przetwornika, jak i cyfrowego wzmocnienia ISP.


NVIDIA wyjaśnia, że mechanizm automatycznej ekspozycji Argus w sposób ciągły wywołuje funkcje sterownika kamery. Nieprawidłowe wartości lub błędy w obsłudze funkcji takich jak set_exposure() oraz set_gain() mogą uszkodzić przechwytywanie Argus, nawet jeśli podstawowa komunikacja V4L2 z przetwornikiem działa poprawnie.


Więcej szczegółów w dokumentacji NVIDIA:

NVIDIA Camera Software Development Solution — ISP Configuration

Obejście problemu (Workaround)

Praktycznym rozwiązaniem problemu jest:

  • pozostawienie włączonej automatycznej ekspozycji,
  • ustawienie stałego analogowego wzmocnienia przetwornika,
  • zablokowanie cyfrowego wzmocnienia ISP na wartości 1×,
  • pozostawienie włączonego automatycznego balansu bieli.


Kluczowe parametry konfiguracyjne:

aelock=false
gainrange='4 4'
ispdigitalgainrange='1 1'
awblock=false
wbmode=1


Ważne: Nie należy pomijać parametru gainrange. Jeśli zostanie pominięty, Argus może ponownie ustawić zbyt wysokie wzmocnienie, co doprowadzi do pojawienia się zielonego lub uszkodzonego obrazu.


Tryb 1920×1080 przy 60 FPS

Przykład stabilnego potoku GStreamer:

gst-launch-1.0 \
  nvarguscamerasrc \
    sensor-id=0 \
    aelock=false \
    exposuretimerange='1000000 16000000' \
    gainrange='4 4' \
    ispdigitalgainrange='1 1' \
    awblock=false \
    wbmode=1 ! \
  'video/x-raw(memory:NVMM),width=1920,height=1080,framerate=60/1' ! \
  queue ! nvvidconv ! \
  'video/x-raw(memory:NVMM),format=RGBA' ! \
  nv3dsink sync=false


Wartości czasu ekspozycji podawane są w nanosekundach:

1 000 000 ns  = 1 ms
16 000 000 ns = 16 ms


Przy płynności 60 FPS czas trwania jednej klatki wynosi około 16.67 ms. Maksymalny limit czasowy ekspozycji został więc ustawiony na 16 ms. Jeśli wzmocnienie 4× (gainrange='4 4')okaże się niestabilne lub zbędne, należy rozpocząć testy od wartości 1×:


gainrange='1 1'


A następnie sprawdzać kolejne stałe wartości:


gainrange='2 2'

gainrange='4 4'



Tryb 3840×2160 przy 30 FPS

Tryb 4K pozwala na wydłużenie czasu ekspozycji:

gst-launch-1.0 \
  nvarguscamerasrc \
    sensor-id=0 \
    aelock=false \
    exposuretimerange='1000000 32000000' \
    gainrange='4 4' \
    ispdigitalgainrange='1 1' \
    awblock=false \
    wbmode=1 ! \
  'video/x-raw(memory:NVMM),width=3840,height=2160,framerate=30/1' ! \
  queue ! nvvidconv ! \
  'video/x-raw(memory:NVMM),format=RGBA' ! \
  nv3dsink sync=false


Przy 30 FPS jedna klatka trwa około 33.33 ms. Praktyczna maksymalna wartość ekspozycji wynosi około 32–33 ms:


exposuretimerange='1000000 32000000'


Asekuracyjna (zachowawcza) konfiguracja dla trybu 4K z użyciem wzmocnienia 1×:

gst-launch-1.0 \
  nvarguscamerasrc \
    sensor-id=0 \
    aelock=false \
    exposuretimerange='1000000 32000000' \
    gainrange='1 1' \
    ispdigitalgainrange='1 1' \
    awblock=false \
    wbmode=1 ! \
  'video/x-raw(memory:NVMM),width=3840,height=2160,framerate=30/1' ! \
  queue ! nvvidconv ! \
  'video/x-raw(memory:NVMM),format=RGBA' ! \
  nv3dsink sync=false


Dobraną stałą wartość wzmocnienia (gain) należy zweryfikować dla konkretnego egzemplarza modułu kamery, warunków oświetleniowych, wybranego trybu pracy przetwornika oraz wersji systemowej Jetson Linux.



Wymiary modułu

Wymiary płytki modułu to 26 x 25 mm, wysokość wraz z obiektywem to ok. 27 mm. Na płytce znajdują się otwory umożliwiające zamontowanie płytki, ich rozmieszczenie zostało pokazane na rysunku.



Linki