Bölüm bitiminde aşağıdaki konularda deneyim kazanacaksınız
- Gemstone Obsidyen geliştirme kartına fiziksel CSI kamera bağlantısı yapmak.
- Overlay ekleyerek yazılım bağlantısını sağlamak
CSI Nedir?
CSI (Camera Serial Interface), mobil cihazlarda ve gömülü sistemlerde yüksek çözünürlüklü kameralar için tasarlanmış
bir seri veri yoludur. Bu arayüz, MIPI (Mobile Industry Processor Interface) ittifakı tarafından geliştirilmiş
olup, işlemci ile kamera sensörü arasında yüksek hızda, güvenilir bir şekilde görüntü ve video verisi aktarımını
sağlar. Genellikle akıllı telefonlar, dronlar ve mini cep bilgisayarlarla kullanılan kameralarda tercih edilir.
Adımlar
Kablo Bağlantısının Yapılması
Kamera ile Gemstone Obsidyen geliştirme kartı arasındaki kablonun doğru bir şekilde bağlanması gerekmektedir.
Overlay Eklenmesi
CSI kameranın çalışması için boot partition’da yer alan uEnv.txt dosyasına ilgili overlay eklenmelidir.
Kartın Yeniden Başlatılması
Tüm bu adımları tamamladıktan sonra kartı yeniden başlatmak yeterli olacaktır.
1. Kablo Bağlantısının Yapılması
Kamera ile Gemstone Obsidyen geliştirme kartı arasındaki kablonun doğru bir şekilde bağlanması için aşağıda yer alan
fotoğraftaki gibi bir bağlantı yapmanız gerekmektedir. İki sokete de CSI kablosunu bağlayabilirsiniz burada önemli
olan taktığınız soketin CSI’ını etkinleştiren overlayi eklemeniz gerekmektedir.
- Kablonun bakır yollarının yer aldığı kısım soketin beyaz kısmına bakmalıdır.
- Ethernet soketine uzak olan konnektör CSI0, yakın olan konnektör ise CSI1’dir.
Kamera Kablosunun Karta Bağlanması
2. Overlay Eklenmesi
Desteklenen kameraların overlaylerini aşağıdaki komut ile listeleyebilirsiniz.
ls /boot/overlays/ | grep "csi"
Terminal arayüzünden nano
isimli metin editörünü kullanarak boot klasöründe yer alan uEnv.txt
dosyasını açınız.
Komutu sudo ile kullandığımız için şifre soracaktır. Değiştirmediyseniz Gem-Imager ile imajı yazarken belirlemiş
olduğunuz şifreyi kullanmalısınız.
uEnv.txt
dosyasının içinde bu tarz tanımlamalar bulunacaktır.
firstboot=0
overlays=k3-am67a-t3-gem-o1-spidev0-2cs.dtbo k3-am67a-t3-gem-o1-i2c1-400000.dtbo
bootpart=1:1
initrdaddr=0x90000000
fdtoverlayaddr=0x89000000
get_kern_mmc=load mmc ${bootpart} ${loadaddr} Image
get_fdt_mmc=load mmc ${bootpart} ${fdtaddr} k3-am67a-t3-gem-o1.dtb;fdt addr ${fdtaddr};fdt resize 8192
get_initrd_mmc=load mmc ${bootpart} ${initrdaddr} gemstone-image-rd-t3-gem-o1.cpio.gz
get_overlays=for o in ${overlays}; do load mmc ${bootpart} ${fdtoverlayaddr} overlays/${o};fdt apply ${fdtoverlayaddr}; done
args_mmc=setenv bootargs console=${console} ${optargs} root=/dev/mmcblk1p2 rw rootfstype=btrfs bootpart=/dev/mmcblk1p1 firstboot=${firstboot} init_fatal_sh=1
boot_mmc=run get_kern_mmc;run get_fdt_mmc;run get_overlays;run get_initrd_mmc;booti ${loadaddr} ${initrdaddr}:${filesize} ${fdtaddr}
distro_bootcmd=run args_mmc;run boot_mmc
Bir önceki komutla elde ettiğiniz dosya adını overlays=
satırının sonuna boşluk bırakarak ekleyin. Örneğin
CSI0 (ethernete uzak olan konnektör) konnektörüne IMX219 kamerasını
bağladığınızda k3-am67a-t3-gem-o1-csi0-imx219.dtbo
dosya adını kullanmalısınız.
uEnv.txt
dosyasının son hali böyle olacaktır. Uygun dosya adını <dosya-adi>
kısmına yerleştirmeniz gerekmektedir.
firstboot=0
overlays=k3-am67a-t3-gem-o1-spidev0-2cs.dtbo k3-am67a-t3-gem-o1-i2c1-400000.dtbo <dosya-adi>
bootpart=1:1
initrdaddr=0x90000000
fdtoverlayaddr=0x89000000
get_kern_mmc=load mmc ${bootpart} ${loadaddr} Image
get_fdt_mmc=load mmc ${bootpart} ${fdtaddr} k3-am67a-t3-gem-o1.dtb;fdt addr ${fdtaddr};fdt resize 8192
get_initrd_mmc=load mmc ${bootpart} ${initrdaddr} gemstone-image-rd-t3-gem-o1.cpio.gz
get_overlays=for o in ${overlays}; do load mmc ${bootpart} ${fdtoverlayaddr} overlays/${o};fdt apply ${fdtoverlayaddr}; done
args_mmc=setenv bootargs console=${console} ${optargs} root=/dev/mmcblk1p2 rw rootfstype=btrfs bootpart=/dev/mmcblk1p1 firstboot=${firstboot} init_fatal_sh=1
boot_mmc=run get_kern_mmc;run get_fdt_mmc;run get_overlays;run get_initrd_mmc;booti ${loadaddr} ${initrdaddr}:${filesize} ${fdtaddr}
distro_bootcmd=run args_mmc;run boot_mmc
3. Kartın Yeniden Başlatılması
reboot
komutu ile kart yeniden başlatılmalı.
4. gem-camera-setup
Scriptinin Çalıştırılması
Aşağıdaki komut aracılığıyla karta bağlı olan kameraların kurulumu sağlanmalıdır.
sudo /usr/local/bin/gem-camera-setup
Yukarıdakine benzer bir çıktı almanız durumunda karta kamerayı başarıyla bağlamışsınızdır.
5. Kamera Ayarları
Başlangıçta aşağıdaki komut, bir kamera sensörünün çekirdek sürücüsü (kernel driver) ile kullanıcı
alanı (user space) uygulamaları arasında doğru bir iletişim kurulmasını sağlamak için kullanılır.
Komut çalıştırıldığında, IMX219 kamera sensörünün video çıkışı 640x480 çözünürlüğe ve SRGGB8 formatına ayarlanır.
Bu ayar, sonraki aşamada bu veri akışını kullanacak olan uygulamaların (örneğin, bir kamera uygulaması veya gstreamer)
doğru veriyi almasını sağlar.
media-ctl -V '"imx219 5-0010":0[fmt:SRGGB8_1X8/640x480 field:none]'
Kameranın desteklediği formatlara aşağıdaki komuttan ulaşabilirsiniz.
v4l2-ctl -d /dev/video-imx219-cam0 --list-formats
/dev/video-imx219-cam0
kısmına gem-camera-setup
scriptinin çıktısında belirtilen cihazı girmelisiniz.
Aşağıda yer alan ayarlar, kameranın kazanç ve pozlama değerlerini makul bir varsayılan değere ayarlar.
Görüntünüzün soluk, çok karanlık veya hatta boş olduğunu fark ederseniz, kendi aydınlatma ortamınıza göre bu
parametreleri ayarlamanız gerekebilir. Görüntüyü düzgün gözlemlemiyorsanız, bu ayarların yanlış
olduğunun bir işareti olabilir.
v4l2-ctl -d /dev/v4l-subdev2 --set-ctrl=digital_gain=2048
v4l2-ctl -d /dev/v4l-subdev2 --set-ctrl=analogue_gain=230
v4l2-ctl -d /dev/v4l-subdev2 --set-ctrl=exposure=1750
v4l2-ctl -d /dev/v4l-subdev2 --set-ctrl=digital_gain=1000
v4l2-ctl -d /dev/v4l-subdev2 --set-ctrl=analogue_gain=100
v4l2-ctl -d /dev/v4l-subdev2 --set-ctrl=exposure=1000
6. Fotoğraf Çekme
Aşağıdaki komutu çalıştırarak .jpg formatında görüntü yakalayabilirsiniz.
gst-launch-1.0 -v v4l2src num-buffers=5 device=/dev/video-imx219-cam0 io-mode=dmabuf ! \
video/x-bayer, width=1920, height=1080, framerate=30/1, format=rggb ! \
bayer2rgb ! videoconvert ! jpegenc ! \
multifilesink location="imx219-image-%d.jpg"
7. Video Çekme
Aşağıdaki komutu çalıştırarak .mp4 formatında bir video kaydı (100 kare) çekebilirsiniz.
gst-launch-1.0 v4l2src device=/dev/video-imx219-cam0 num-buffers=100 io-mode=dmabuf ! \
video/x-bayer, width=640, height=480, format=rggb,depth=8 ! \
queue ! bayer2rgb ! queue ! videoconvert ! video/x-raw,format=NV12 ! \
queue ! v4l2h264enc ! queue ! h264parse ! mp4mux ! filesink location=t3-gem-o1.mp4