ฉันจะบอกกล้องไปยังตำแหน่งใดโดยทางโปรแกรมได้อย่างไร


8

ตอนนี้ฉันไม่มีกล้องโดยเฉพาะฉันแค่อยากรู้ว่ามันเสร็จสิ้นแล้วได้อย่างไรเขียนโปรแกรม / เชิงคณิตศาสตร์

ฉันมีพื้นที่ 3 มิติเป็นรูปสี่เหลี่ยมผืนผ้าโดยมีกล้องติดมุมหนึ่งที่มองเข้าด้านใน
ฉันมีวัตถุที่เคลื่อนไหวในสี่เหลี่ยมนั้นที่ส่ง (x, y, z) พิกัดของตำแหน่งปัจจุบัน
ฉันต้องการใช้พิกัดเหล่านั้นและแปลมันเป็นคำแนะนำที่บอกให้กล้องชี้ไปที่ตำแหน่งนั้น
โดยทั่วไปการแปลนี้จะทำอย่างไร


คุณอาจต้องการดูว่านักพัฒนาเกมจัดการกับกล้องในเกมอย่างไร มันเป็นหลักการเดียวกันและพวกเขาต้องจัดการกับทุกสิ่งภายใต้ดวงอาทิตย์ดังนั้นต้องพูด
Harabeck

อาจเป็นเรื่องที่น่าสังเกตว่าวัตถุไม่จำเป็นต้องส่งพิกัดในพื้นที่ 3 มิติตามตัวอักษร แต่สามารถส่งผ่านโดยอยู่ใน FOV ของกล้อง จากนั้นคุณจะใช้การจดจำรูปแบบเพื่อค้นหาตำแหน่งของวัตถุที่อยู่ในเฟรมจากนั้นเลื่อนกล้องให้อยู่กึ่งกลางวัตถุ (หรือระบุเวกเตอร์การเคลื่อนไหวในแบบ 2D โดยติดตามการเปลี่ยนแปลงของตำแหน่งในหลาย ๆ เฟรมแล้วเคลื่อนที่ไปในทิศทางนั้น) . ตัวอย่างเช่นกล้อง PTZ ของฉันบนระเบียงสแกนระเบียงที่มองหาการเคลื่อนไหวที่ไม่ได้เกิดจากการเคลื่อนไหวปรากฎแล้วล็อคและติดตามรายการเคลื่อนไหวจนกว่าการเคลื่อนไหวจะหยุด
dannysauer

กรณีการใช้งานของฉันคือระบบวิเคราะห์กีฬาผู้เล่นแต่ละคนใส่แท็กที่ส่งตำแหน่งปัจจุบันความเร็ว ฯลฯ บนสนาม ดังนั้นเราจึงมีข้อมูลตำแหน่งแล้ว ฉันจะดูการจดจำรูปแบบแน่นอน ฟังดูมีประโยชน์
bot_bot

คำตอบ:


10

ตรีโกณมิติ!

กล้องของฉันเป็น DLink 5020-L และมีคำสั่ง / เอียงกระทะซึ่งจะได้รับผ่าน API นอกจากนี้ยังมีตำแหน่งที่กำหนดไว้ล่วงหน้าที่จะตั้งค่าและสามารถเรียกใช้ผ่าน API

Pre-init

  • กำหนดตำแหน่งของกล้องของคุณเป็น 0 °แพนและ 0 °เอียงในการอ้างอิงของคุณ => เราจะเรียกตำแหน่งนี้ Position 1

ในนั้น

  • ย้ายกล้องของคุณไปที่ Position 1
  • จัดเก็บบางส่วนของกล้อง / เอียงของคุณไม่ว่าจะเป็นตัวแปรที่กำหนดค่าเริ่มต้น 0 หรือผ่าน API ของคุณ

ดูวัตถุ

  • ค้นหาวัตถุของคุณในระนาบสองระนาบ X, Y และ Y, Z
  • คุณสามารถดูมุม (ซ้าย / ขวา) (สูตรคณิตศาสตร์ omg ใน IoT SE!)

$$ \ arctan \ Bigg (\ frac {y} {x} \ Bigg) $$

  • คุณสามารถรับมุมเอียง (ขึ้น / ลง)

$$ \ arctan \ Bigg (\ frac {Z} {y} \ Bigg) $$

  • อย่าลืมบันทึก / อัพเดทค่าการแพน / เอียงใหม่เนื่องจากคุณอาจทำงานกับการเคลื่อนไหวที่สัมพันธ์กัน ...

คุณอาจลบล้างผลลัพธ์ก่อนหน้าโดยขึ้นอยู่กับการวางกล้องของคุณ

(ฉันจะเพิ่มแผนงานเมื่อมีเวลา)


2
พ่ายแพ้โดย @hardillb;) และเขามีสูตรการมองที่ดีกว่า ...
Goufalite

2
น่าเสียดายที่การสนับสนุน LaTeX ไม่สามารถใช้ได้ในเว็บไซต์นี้ คุณสามารถส่งออกได้จากที่ใดที่หนึ่งเช่นCodeCogsแม้ว่าจะเป็นภาพแทนหากคุณต้องการ (ฉันได้ทำสิ่งนี้ให้คุณแล้วสามารถแก้ไขได้ตามต้องการหรือลบออกถ้าคุณไม่ต้องการมัน!)
Aurora0001

ขอบคุณทั้งคู่สำหรับความช่วยเหลือของคุณ นี่คือสิ่งที่ฉันกำลังมองหา
bot_bot

ฉันคิดว่าคุณลืมที่จะคำนึงถึงความจริงที่ว่าอาร์คตันสำหรับมุมเอียงจะต้องเกี่ยวกับองค์ประกอบ z ด้านตรงข้ามมุมฉาก: การวางองค์ประกอบส่วน y สามารถเพิ่ม / ลดกล้องของคุณไม่ได้เนื่องจากกล้องกำลังจะ ชี้ไปที่ด้านตรงข้ามมุมฉากของสามเหลี่ยมมุมฉากระหว่างองค์ประกอบ y และองค์ประกอบ x ไม่ใช่ตามแกน y ช่วยแก้ให้ด้วยนะถ้าฉันผิด. :) คำตอบที่ดีแม้ว่า
anonymous2

@ anonymous2 นั่นเป็นความคิดของฉันเช่นกัน ฉันไม่คิดว่าคำตอบใด ๆ ที่นำเสนอนั้นถูกต้อง แต่จริง ๆ แล้วฉันไม่มีแบนด์วิดท์ที่จะแสดงอย่างนั้นในตอนนี้ - ดูเหมือนว่าคุณจำเป็นต้องมีรูปสามเหลี่ยมสองรูปและพิกัดทั้งสามเพื่อรับตัวแปร (เลื่อนหรือเอียง) คุณสามารถพิสูจน์ได้ด้วยตัวเองโดยการเห็นภาพตัวอย่างที่แตกต่างกันสองแบบ: x, y, z ของ 1,1,999 จะให้กระทะที่แตกต่างกันมากและเอียงแตกต่างกันมากกว่า 1,1,1 คำตอบของ Goufalite ให้ทั้งกระทะเดียวกันสำหรับทั้งคู่
dwizum

6

คำตอบที่ยอดเยี่ยมอยู่แล้วฉันต้องการเพิ่มอีกสองสามสิ่งที่คุณควรคำนึงถึง เช่นเดียวกับ hardlib และ Goufalite ที่ได้กล่าวไปแล้ววิธีการทำเช่นนี้คือตรีโกณมิติ ฉันวาดภาพสองมิติของกล้องและวัตถุ IoT:

ป้อนคำอธิบายรูปภาพที่นี่

อย่างที่คุณเห็นมุมมองของกล้องจะใหญ่กว่าวัตถุ - หากไม่อยู่ในระยะใกล้เมื่อวัตถุเคลื่อนที่ไปไกลกว่า

ตอนนี้คุณอาจต้องการให้กล้องอยู่กึ่งกลางวัตถุเสมอ ในกรณีนี้คุณสามารถทำการคำนวณที่ hardlib อ้างอิงได้:

ϴ = arctan(y/x)

... ซึ่งจะเป็นมุมทวนเข็มนาฬิกาจากแกน x ตามแบบแผน คุณจะต้องใช้มุมที่ห่างจากระดับ:

α = arctan(z / ((y^2+x^2)^1/2))

เห็นได้ชัดว่าคุณจะต้องคำนวณตามตำแหน่งกล้องที่จุดกำเนิดในทั้งสามแกน

ในทางกลับกันคุณอาจไม่ต้องการให้กล้องเคลื่อนไหวเกินความจำเป็นกล่าวคือทำให้กล้องเคลื่อนที่เฉพาะเมื่อวัตถุดูเหมือนว่ากำลังจะเคลื่อนที่ออกจากเฟรม ในกรณีนี้คุณอาจต้องการตัวแปร "ความดัน" ซึ่งจะทำให้กล้องมีแนวโน้มที่จะเปลี่ยนมุมโดยขึ้นอยู่กับว่าวัตถุอยู่ใกล้กับขอบของเฟรมมากน้อยเพียงใด

หากคุณไปเส้นทางนั้นคุณจะต้องรู้มุมของมุมมองของกล้องในมุมมองทั้งสองเพื่อให้คุณสามารถกำหนดว่าวัตถุนั้นถูกนำไปเปรียบเทียบกับมุมมองของกล้อง


มันเยี่ยมมาก! ขอบคุณในขณะนี้ฉันจะต้องการให้วัตถุอยู่กึ่งกลางในมุมมองของกล้อง
bot_bot

2
เมื่อฉันเลื่อน / เอียงกล้องฉันมีเวลาแฝงอยู่ (ประมาณ 0.5 วินาที) ระหว่างการสั่งซื้อแต่ละครั้งระวังว่าเมื่อขยับกล้องของคุณ
Goufalite

จุดดี - เป็นสิ่งที่ต้องพิจารณาอย่างแน่นอน
anonymous2

5

ซึ่งจะดำเนินการตามปกติที่มีพื้นฐานตรีโกณมิติ

เริ่มต้นด้วยการทำงานบนระนาบเดียวแบน 2d กับกล้องที่จุดกำเนิด (0,0) และวัตถุที่ (x, y)

ระบุว่าระยะ x จะเป็นด้านที่อยู่ติดกันของรูปสามเหลี่ยมและระยะทาง y จะเป็นด้านตรงข้ามที่คุณได้รับ:

ผิวสีแทน (มุม) = y / x

ดังนั้นสามารถพบมุมกระทะได้ด้วย

มุม = invTan (y / x)

นอกจากนี้คุณยังสามารถคำนวณระยะทางเส้นตรง (ด้านตรงข้ามมุมฉาก) ระหว่างกล้องกับวัตถุด้วย:

h ^ 2 = x ^ 2 + y ^ 2

ให้:

h = sqrt (x ^ 2 + y ^ 2)

ตอนนี้คุณสามารถใช้ระยะทาง h กับความสูง z เพื่อคำนวณมุมเอียงได้ในลักษณะเดียวกัน

เมื่อคุณมีมุมที่คุณสามารถป้อนสิ่งเหล่านี้กับสิ่งที่เคยควบคุมกระทะ / เอียงในกล้อง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.