Saya tidak memiliki kamera tertentu dalam pikiran saat ini, saya hanya ingin tahu bagaimana ini dilakukan, secara pemrograman / matematis.
Saya memiliki ruang 3D, persegi panjang, dengan kamera di satu sudut melihat ke dalam.
Saya memiliki objek bergerak dalam persegi panjang yang mentransmisikan (x, y, z) koordinat posisi saat ini.
Saya ingin mengambil koordinat itu dan menerjemahkannya ke dalam instruksi yang memberitahu kamera untuk menunjuk pada posisi itu.
Bagaimana terjemahan ini biasanya dilakukan?
Jawaban:
Trigonometri!
Kamera saya adalah DLink 5020-L dan memiliki perintah pan / tilt yang dapat diberikan melalui API . Ini juga memiliki posisi yang telah ditentukan untuk ditetapkan dan juga dapat dipicu melalui API
Pra-init
Position 1
Init
Position 1
Lihatlah objek
Anda mungkin meniadakan hasil sebelumnya tergantung pada bagaimana kamera Anda ditempatkan
(Saya akan menambahkan beberapa skema ketika saya punya waktu)
sumber
Jawaban yang luar biasa, saya hanya ingin menambahkan beberapa hal lain yang harus Anda pertimbangkan. Seperti hardlib dan Goufalite telah sebutkan, cara untuk melakukan ini adalah trigonometri. Saya telah membuat gambar 2-d dari kamera dan objek IoT:
Seperti yang Anda lihat, bidang pandang kamera akan lebih besar dari objek - jika tidak dalam jarak dekat, ketika objek bergerak lebih jauh.
Sekarang, Anda mungkin ingin kamera selalu terpusat pada objek. Dalam hal ini, Anda cukup mengambil perhitungan yang dirujuk oleh hardlib:
... yang akan menjadi sudut berlawanan arah jarum jam dari sumbu x, per konvensi. Anda juga membutuhkan sudut menjauh dari level:
Jelas, Anda harus menghitung berdasarkan posisi kamera yang berada di titik asal dalam ketiga sumbu.
Di sisi lain, Anda mungkin memilih untuk tidak membuat kamera bergerak lebih dari yang diperlukan, yaitu membuat kamera hanya bergerak setelah objek tampak akan keluar dari bingkai. Dalam hal ini, Anda mungkin menginginkan variabel "tekanan" yang akan membuat kamera lebih cenderung untuk mengubah sudutnya berdasarkan seberapa dekat objek dengan tepi bingkai.
Jika Anda memilih rute itu, Anda harus mengetahui sudut bidang pandang kamera di kedua bidang pandang tersebut, sehingga Anda dapat menentukan di mana objek dibandingkan dengan bidang pandang kamera.
sumber
Ini biasanya dilakukan dengan trigonometri dasar .
Mulailah dengan bekerja pada bidang datar 2d tunggal dengan kamera di titik asal (0,0) dan objek di (x, y)
Mengingat bahwa jarak x akan menjadi sisi yang berdekatan dari segitiga dan jarak y akan menjadi kebalikan yang Anda dapatkan:
sehingga sudut pan dapat ditemukan dengan
Anda juga dapat mengetahui jarak garis lurus (sisi miring) antara kamera dan objek dengan:
Memberi:
Sekarang Anda dapat menggunakan jarak h dengan ketinggian z untuk menghitung sudut kemiringan dengan cara yang sama.
Setelah Anda memiliki sudut, Anda dapat mengumpankan ini ke apa yang mengontrol pan / tilt pada kamera.
sumber