วิธีการเลือกกล้องสำหรับระบบวิชันสเตอริโอ


18

ฉันกำลังอยู่ระหว่างการสร้างระบบการมองเห็นแบบสเตอริโอเพื่อใช้กับ UGV ระบบนี้ใช้สำหรับหุ่นยนต์ที่จะใช้ในการแข่งขันซึ่งหุ่นยนต์นั้นถูก teleoperated เพื่อค้นหาหินสีที่มีขนาดค่อนข้างเล็กในสนามกลางแจ้งขนาดใหญ่ ฉันเข้าใจวิธีการปรับเทียบระบบดังกล่าวและประมวลผลข้อมูลสำหรับระบบการมองเห็นสเตอริโอ อย่างไรก็ตามฉันไม่ทราบวิธีเลือกกล้องสำหรับระบบดังกล่าว แนวทางปฏิบัติที่ดีที่สุดในการเลือกกล้องสำหรับระบบวิชันสเตอริโอคืออะไร

คำตอบ:


11

จากด้านบนของหัวของฉันฉันจะไปตามเกณฑ์การเลือกต่อไปนี้

  • color / b & w - โดยปกติแล้ว b & w จะดีกว่าเนื่องจากอัลกอริธึมสเตอริโอใช้เพียงหนึ่งแชนเนลเท่านั้น
  • พื้นฐาน - สิ่งนี้ขึ้นอยู่กับฉาก ด้วยพื้นฐานที่คุณควบคุมความแม่นยำที่คุณได้รับกับระยะทาง พื้นฐานที่กว้างขึ้นส่งผลให้ค่าความแตกต่างสูงขึ้นและทำให้เสียงรบกวนน้อยลงในการประมาณระยะทาง พื้นฐานที่สูงกว่าก็หมายความว่าคุณจะได้รับการทับซ้อนที่ลดลงระหว่างมุมมองของคุณ สิ่งที่สำคัญที่สุดคือยิ่งการจับคู่ระหว่างมุมมองทั้งสองกว้างขึ้น ดังนั้นคุณภาพของผลลัพธ์จึงลดลง
  • shutter - ใช้ชัตเตอร์ระดับโลกสำหรับทุกสิ่งที่มีวิสัยทัศน์คอมพิวเตอร์บนหุ่นยนต์มือถือ
  • ความละเอียด - อัลกอริธึมสเตอริโอส่วนใหญ่มีราคาแพง และคุณอาจไม่ต้องการคะแนน 3 มิติจำนวนมาก ในสนามใกล้ความหนาแน่นของการสุ่มตัวอย่างมักจะเพียงพอและสนามที่ไกลจากความคลาดเคลื่อนของคุณจากความไม่เสมอภาคต่ำนั้นมีปัญหามากกว่าความหนาแน่นของการสุ่มตัวอย่าง 640x480 นั้นใช้ได้ในกรณีส่วนใหญ่ ชิปบางตัวมีอัตราส่วนกว้างกว่าซึ่งเหมาะสำหรับการซ้อนทับกัน แต่คุณสามารถทำได้เหมือนกันโดยใช้หน้าต่างย่อยของชิปของคุณ
  • วัตถุประสงค์ / มุมมอง - สำหรับหุ่นยนต์กลางแจ้งมือถือฉันชอบมุมมองที่กว้างกว่าวัตถุประสงค์ที่แคบ มากหรือน้อยด้วยเหตุผลเดียวกับความละเอียด ตรวจสอบให้แน่ใจว่าวัตถุประสงค์ของคุณเข้มงวดและมีวิธีในการแก้ไขส่วนที่เคลื่อนไหวเช่นความยาวโฟกัสที่ปรับได้ ในกรณีส่วนใหญ่ความยาวโฟกัสคงที่ก็ดีอยู่แล้วเนื่องจากคุณถูก จำกัด โดยการเลือกพื้นฐานของคุณ
  • ทริกเกอร์ - เมื่อคุณสร้างแท่นขุดเจาะสเตอริโอของคุณเองกล้องของคุณควรรองรับทริกเกอร์ฮาร์ดแวร์
  • framerate - ในความเห็นของฉันการพิจารณาที่สำคัญน้อยที่สุด ถ้าคุณไม่มีพลังในการประมวลผลมากมายคุณจะไม่ได้รับอะไรมากไปกว่า 5 Hz ดังนั้นอัลกอริทึมของคุณมีแนวโน้มที่จะเป็นคอขวดมากกว่าชิปหรือการเชื่อมต่อ
  • อินเตอร์เฟส - กล้องส่วนใหญ่มาพร้อมกับ Firewire / USB2 / USB3 / Ethernet USB2 นั้นไร้ประโยชน์เพราะมันใช้ CPU มาก Firewire เป็นสิ่งที่ดีถ้าคุณมีพอร์ต แต่ฉันคิดว่ามันน่าจะลดลงเมื่อเทียบกับ USB3 ในปัจจุบัน ยังไม่ได้มีประสบการณ์มากกับ USB3 อีเธอร์เน็ตค่อนข้างดีเพราะคุณมีแนวโน้มที่จะหาระบบฝังตัวที่มี GigEthernet มากกว่า USB3 ในขณะนี้
  • ที่อยู่อาศัย - เข้มงวดเท่าที่จะทำได้ การปรับเทียบใหม่เป็นขั้นตอนที่น่ารำคาญ

6

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

นอกเหนือจากนั้นมีคุณสมบัติที่หลากหลายที่ทำให้ตัวเลือกยากขึ้น / น่าสนใจ กล้องที่แตกต่างกัน (โดยเฉพาะกล้องเครือข่ายเช่นแกน) ช่วยให้คุณสามารถเปลี่ยนคุณภาพของภาพหรือเพื่อระบุบิตเรตสูงสุดสำหรับสตรีมรูปภาพ กล้องบางตัวยังให้คุณเลือกความเร็วชัตเตอร์ที่ช่วยให้คุณชอบเวลาการเปิดรับแสงคงที่หรือการส่องสว่างเฉลี่ยคงที่ในภาพ กล้องบางตัวมีความไวมากกว่ากล้องอื่น (ครั้งสุดท้ายที่ฉันทำงานกับเรื่องนี้คือในปี 2009 และเราสังเกตเห็นว่า PS3 Eye ทำงานได้ดีในสภาพแสงน้อย)

อาจเป็นสิ่งที่ดีที่สุดที่คุณสามารถทำได้คือใช้อัลกอริธึมการประมวลผลภาพในรูปแบบสแตติกที่คุณถ่ายด้วย DSLR จากนั้นลองลดขนาดเฟรมและคุณภาพเพื่อดูว่าสิ่งใดเริ่มแตกหัก


6

บางสิ่งที่คุณควรระวัง:

  • โดยทั่วไปแล้วชัตเตอร์ทั่วโลกหมายถึงพิกเซลทั้งหมดจะถูกจับในเวลาเดียวกันซึ่งต่างจากการกดชัตเตอร์ซึ่งจะถูกถ่ายภาพต่อเนื่องตามลำดับในการสแกนเส้น เนื่องจาก UGV ของคุณจะเคลื่อนที่ไปรอบ ๆ และดำเนินการอัลกอริธึมสเตอริโอเหนือภาพที่คุณถ่ายคุณอาจหลีกเลี่ยงความผิดปกติที่เกิดขึ้นเมื่อกล้องเคลื่อนที่เช่นสิ่งที่เห็นในภาพด้านล่าง (ถ่ายจากWikipedia )

การเคลื่อนย้ายรถยนต์ที่ถ่ายด้วยโทรศัพท์กล้อง CMOS แสดงการเอียง ภาพถ่ายแสดงการรับแสงบางส่วน  สภาพแสงเปลี่ยนไประหว่างการเปิดรับแสงของส่วนบนและส่วนล่างของภาพถ่าย ภาพของใบพัดเทอร์โบ

  • การซิงโครไนซ์กล้องในฮาร์ดแวร์ทำได้โดยกล้องบางตัวโดยเฉพาะอย่างยิ่งกล้อง FireWire AFAIK ที่สามารถปรับปรุงผลลัพธ์ของสเตอริโอได้อย่างมากเมื่อสิ่งต่าง ๆ เคลื่อนไปรอบ ๆ

  • ควรทำการติดตั้งด้วยวิธีที่เปลี่ยนแปลงในพารามิเตอร์ภายนอก (สัมพัทธ์ระหว่างกล้อง) สำหรับคู่สเตอริโอจะไม่เปลี่ยนแปลงหลังจากการสอบเทียบ ในอุปกรณ์ของคุณที่อาจมีความสำคัญมากกว่าเนื่องจาก UGV อาจเผชิญกับภูมิประเทศที่ไม่สม่ำเสมอและสิ่งต่างๆจะสั่นสะเทือน

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

ตามปกติยิ่งคุณยินดีจ่ายผลลัพธ์ที่ดีกว่า ตามจริงแล้วถ้าคุณสามารถซื้อกล้องสเตอริโอแบบเต็มรูปแบบเช่นBumblebee2นั่นคือสิ่งที่ฉันทำ ไม่อย่างนั้นถ้าคุณอยู่ในด้านที่ถูกกว่าฉันก็แค่ไปกับKinect : มันไม่น่าเป็นไปได้ที่คุณจะได้รับระบบที่มีประสิทธิภาพสูงกว่าในราคาเดียวกัน


คำถามคือสำหรับระบบกลางแจ้ง สิ่งนี้มีผลบังคับใช้กับ Kinect นอกจากนี้เราพบว่าอัลกอริทึมที่มาพร้อมกับ Bumblebee นั้นเหมาะสมที่สุด
Jakob

ฉันอยู่กับคุณในความคิดเห็น Kinect แต่อัลกอริธึมสเตอริโอที่มาพร้อมกับ Bumblebee ไม่สามารถถูกแทนที่ด้วยรหัสของคุณเองหรือ ข้อได้เปรียบที่ใหญ่ที่สุดที่ฉันระบุคือฮาร์ดแวร์จริงไม่ใช่ซอฟต์แวร์ที่มาพร้อมกับมัน
georgebrindeiro

ใช่ว่าเป็นเรื่องจริง คุณสามารถใช้มันเหมือนกับกล้องธรรมดาสองตัวและมันมีข้อดีของตัวเรือนแบบแข็ง
Jakob

ไม่เพียงเท่านั้น แต่ยังมีชัตเตอร์ระดับโลกเลนส์ที่ดีและสินค้าอื่น ๆ อีกมากมาย
georgebrindeiro

4

นั่นเป็นหัวข้อที่น่าสนใจและไม่ใช่เรื่องง่ายที่จะเข้าใจในการลองครั้งแรก จากประสบการณ์นี้สิ่งที่สำคัญที่สุดคือ

  • การประสานข้อมูล กล้องจะต้องซิงค์ 100% ตัวอย่างเช่นสมมติว่า UGV กำลังขับรถในระดับเล็กน้อยที่ 36Km / ชม. (10m / s) และเฟรมการบันทึกที่ 30 เฟรมต่อวินาที นั่นคือในทุกเฟรม UGV จะครอบคลุม 3m ตอนนี้บอกว่าการซิงค์ของคุณปิดลง 1 มิลลิวินาทีกล้องตัวใดตัวหนึ่งจะปิดลงที่ ~ 0.3m ซึ่งไม่ดี [แค่ปิดส่วนบนของหัวฉัน] ปัญหาการซิงค์ทำให้ตรวจจับได้ยากมาก

  • δZ=Z2BfδdδZBfδZδdδd1/2δd

  • คาบเกี่ยวกัน คุณต้องการซ้อนทับกันระหว่างกล้องกับสเตอริโอ ดังนั้นคุณต้องเลือกการรวมกันของความยาวโฟกัสของเลนส์ (มุมมองภาพ) และพื้นฐานเพื่อให้คุณมีการซ้อนทับที่เพียงพอสำหรับแอปพลิเคชัน โดยทั่วไปแล้วตรีโกณมิติจะทำงานบนกระดานหรือสคริปต์แบบ matlab / python อย่างรวดเร็ว

สำหรับ UGV นั้นมีสองวิธีสำหรับสเตอริโอ

  1. การนำทางและการประมาณแบบ Poseในกรณีนี้คุณอาจต้องการพื้นฐานขนาดใหญ่ + ความยาวโฟกัสยาว สิ่งนี้ทำให้สเตอริโอสามารถมองเห็นและแก้ไขความลึกได้ดีขึ้นและไกลขึ้น

  2. การตรวจจับสิ่งกีดขวางและการหลีกเลี่ยงคุณอาจจำเป็นต้องใช้พื้นฐานที่สั้นกว่าและเลนส์ที่กว้างกว่า (ทางยาวโฟกัสที่น้อยกว่า) เพื่อที่คุณจะสามารถโฟกัสไปที่สิ่งที่อยู่ใกล้คุณมาก

UGV บางตัวอาจมีทั้งการตั้งค่าระบบสเตอริโอมุมมองพื้นฐานที่แคบสำหรับการนำทางและอีกหนึ่งหรือสองตัวเพื่อหลีกเลี่ยงสิ่งกีดขวาง

ระวังสิ่งที่คุณซื้อ บริษัท บางแห่งเสนอการตั้งค่าระบบสเตอริโอในตัว สิ่งเหล่านั้นยอดเยี่ยมในด้านความแข็งแกร่งของสิ่งต่าง ๆ พวกเขาไม่ได้ทำการสอบเทียบอย่างหลวม ๆ และซิงค์กันอยู่เสมอ ปัญหาคือว่าคนที่มีอยู่ในเชิงพาณิชย์มีพื้นฐานขนาดเล็ก ถ้าคุณต้องการสร้างของคุณเอง ฉันคาดเดาว่าคุณจะต้องทำเช่นนั้นตรวจสอบให้แน่ใจว่ากล้องนั้นสามารถซิงค์ได้ Firewire ยอดเยี่ยมสำหรับเรื่องนี้กล้องสองตัวบนบัสเดียวกันจะซิงค์กับความแม่นยำ 125 ไมโครวินาทีออกมาจากกล่อง! แคม USB และ Gige เจ็บปวดในการซิงค์ เมื่อคุณรวมทุกอย่างเข้าด้วยกันคุณต้องการให้แน่ใจว่าเลนส์จะไม่เคลื่อนไหวเลยและพื้นฐานนั้นแข็งแกร่งและแข็งแกร่งมากสำหรับการใช้งาน

ระมัดระวังในการเลือกเลนส์ด้วย เลนส์บางรุ่นอาจใช้งานไม่ได้กับกล้องทุกรุ่น เลนส์ก็มีความละเอียดเช่นกัน นี่เป็นอีกหัวข้อหนึ่งที่นี่เป็นบทความสั้น ๆ เกี่ยวกับhttp://www.qualitymag.com/articles/90642-qa--selecting-lenses-for-machine-vision-systemsนี้


4
การคำนวณการซิงโครไนซ์ของคุณผิด 30 FPS ที่ 10m / s ให้ระยะห่าง 33 ซม. (ไม่ใช่ 3M) ต่อเฟรม 1ms ที่ความเร็วนี้หมายถึงระยะ 1 ซม. (โดยไม่คำนึงถึง FPS) ดังนั้นการซิงโครไนซ์บนระดับ ms จึงเป็นผลลัพธ์ที่ยอดเยี่ยมมากสำหรับความเร็วดังกล่าว!
Kozuch
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.