Wallace Autonomous Robot - ตอนที่ 4 - เพิ่มระยะ IR และเซ็นเซอร์ "Amp": 6 ขั้นตอน
Wallace Autonomous Robot - ตอนที่ 4 - เพิ่มระยะ IR และเซ็นเซอร์ "Amp": 6 ขั้นตอน
Anonim
Image
Image
เพิ่มวงจรรองรับ (MCP3008)
เพิ่มวงจรรองรับ (MCP3008)

สวัสดี วันนี้เราเริ่มขั้นตอนต่อไปของการปรับปรุงความสามารถของ Wallace โดยเฉพาะอย่างยิ่ง เรากำลังพยายามปรับปรุงความสามารถในการตรวจจับและหลีกเลี่ยงสิ่งกีดขวางโดยใช้เซ็นเซอร์ระยะอินฟราเรด และยังใช้ประโยชน์จากความสามารถของตัวควบคุมมอเตอร์ Roboclaw ในการตรวจสอบกระแสไฟและเปลี่ยนสิ่งนั้นเป็น "เซ็นเซอร์" เสมือน (ซอฟต์แวร์) สุดท้าย เราจะมาดูวิธีการนำทางโดยไม่ใช้ SLAM (ตำแหน่งและการทำแผนที่พร้อมกัน) (สำหรับตอนนี้) เนื่องจากหุ่นยนต์ยังไม่มีเซ็นเซอร์ IMU (หน่วยวัดความเฉื่อย) หรือ ToF (เวลาบิน)

โดยการนำทาง ในขั้นต้นจะเป็นเพียงสองเป้าหมายหลัก:

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

โปรเจ็กต์นี้เริ่มต้นด้วยชุดหุ่นยนต์และการเคลื่อนไหวขั้นพื้นฐานในการทำงานโดยใช้แป้นพิมพ์และการเชื่อมต่อ ssh

ขั้นตอนที่สองคือการเพิ่มวงจรรองรับที่เพียงพอเพื่อเตรียมการเพิ่มเติมสำหรับเซ็นเซอร์จำนวนมาก

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

แม้ว่าจะใช้งานได้ดีในห้องครัวและโถงทางเดินที่มีพื้นผิวเรียบและแข็งแรง แต่เมื่อเข้าใกล้ห้องรับประทานอาหารจะทำให้ตาบอดโดยสิ้นเชิง ทำให้ไม่สามารถ "มองเห็น" ขาโต๊ะและเก้าอี้ได้

การปรับปรุงอย่างหนึ่งคือการติดตามกระแสมอเตอร์ทั่วไป และหากค่ากระโดด แสดงว่าหุ่นยนต์ต้องชนอะไรบางอย่าง เป็น "แผน B" ที่ดีหรือแม้แต่ C แต่นั่นไม่ได้ช่วยนำทางไปรอบ ๆ พื้นที่รับประทานอาหารจริงๆ

(อัปเดต: จริงๆ แล้ว สำหรับตอนนี้ การตรวจสอบปัจจุบันคือแผน A เมื่อย้อนกลับ เนื่องจากฉันได้ถอดและเซ็นเซอร์จากด้านหลังออกชั่วคราว)

วิดีโอสำหรับส่วนนี้ถือเป็นขั้นตอนสุดท้ายของเซ็นเซอร์การหลีกเลี่ยงสิ่งกีดขวาง

สิ่งที่คุณเห็นในวิดีโอคือเซ็นเซอร์เสียง HCSR04 ด้านหน้าหกตัว และเซ็นเซอร์ Sharp IR สองตัว เซ็นเซอร์ IR ไม่ได้เข้ามามีบทบาทมากนักในวิดีโอ จุดแข็งของพวกเขาคือส่วนใหญ่เมื่อหุ่นยนต์พบว่าตัวเองอยู่ในพื้นที่รับประทานอาหารโดยหันขาโต๊ะและเก้าอี้

นอกจากเซ็นเซอร์แล้ว จอภาพปัจจุบันยังเข้ามามีบทบาทโดยเฉพาะในระหว่างการถอยกลับ เผื่อในกรณีที่มีการกระแทกบางอย่าง

ในที่สุด มันใช้ประวัติของการเคลื่อนไหว 100 ครั้งสุดท้ายและการวิเคราะห์พื้นฐานเพื่อตอบคำถามหนึ่งข้อ:

“เมื่อเร็ว ๆ นี้มีความก้าวหน้าจริง ๆ (หรือมันติดอยู่ในการเต้นซ้ำ ๆ) หรือไม่?

ดังนั้นในวิดีโอ เมื่อคุณเห็นการเดินหน้า-ถอยหลังซ้ำแล้วซ้ำเล่า มันกลับกลายเป็น หมายความว่ามันรู้จักรูปแบบการเดินหน้า-ถอยหลัง จึงลองอย่างอื่น

เป้าหมายที่ตั้งโปรแกรมไว้เพียงอย่างเดียวของซอฟต์แวร์เวอร์ชันนี้คือพยายามทำให้ก้าวหน้าอย่างต่อเนื่อง และพยายามหลีกเลี่ยงอุปสรรค

ขั้นตอนที่ 1: เพิ่มวงจรรองรับ (MCP3008)

เพิ่มวงจรรองรับ (MCP3008)
เพิ่มวงจรรองรับ (MCP3008)
เพิ่มวงจรรองรับ (MCP3008)
เพิ่มวงจรรองรับ (MCP3008)
เพิ่มวงจรรองรับ (MCP3008)
เพิ่มวงจรรองรับ (MCP3008)

ก่อนที่เราจะสามารถเพิ่มเซ็นเซอร์ IR ได้ เราจำเป็นต้องมีวงจรอินเทอร์เฟซระหว่างพวกมันกับ Raspberry Pi

เราจะเพิ่มตัวแปลงอนาล็อกเป็นดิจิตอล MCP3008 มีแหล่งข้อมูลออนไลน์มากมายในการเชื่อมต่อชิปนี้กับ Raspberry Pi ดังนั้นฉันจะไม่พูดถึงเรื่องนี้มากนัก

โดยพื้นฐานแล้วเรามีทางเลือก หากรุ่นของเซ็นเซอร์ IR ทำงานที่ 3V MCP3008 ก็สามารถทำได้ และเราสามารถเชื่อมต่อกับ Raspberry ได้โดยตรง

[3V เซ็นเซอร์ IR] - [MCP3008] - [Raspberrry Pi]

ในกรณีของฉัน ฉันใช้ไฟ 5V เป็นส่วนใหญ่ นั่นหมายถึงตัวเปลี่ยนระดับแบบสองทิศทาง

[เซ็นเซอร์ IR 5V] -- [MCP3008] -- [บัสสองทิศทาง 5V-to-3V] -- [Raspberry Pi]

หมายเหตุ: มีเพียงหนึ่งสัญญาณเอาต์พุตจากเซ็นเซอร์ IR โดยจะตรงไปยังหนึ่งในสายสัญญาณอนาล็อกอินพุตของ MCP3008 จาก MCP3008 มี 4 สายข้อมูลที่เราจำเป็นต้องเชื่อมต่อ (ผ่านบัสสองทิศทาง) กับ Raspberry Pi

ในขณะนี้ หุ่นยนต์ของเราจะวิ่งโดยใช้เซ็นเซอร์ IR เพียงสองตัว แต่เราสามารถเพิ่มเข้าไปได้อย่างง่ายดาย MCP3008 แปดช่องสัญญาณอนาล็อก

ขั้นตอนที่ 2: ติดตั้งเซนเซอร์ IR

Mount IR Sensors
Mount IR Sensors
Mount IR Sensors
Mount IR Sensors
Mount IR Sensors
Mount IR Sensors
Mount IR Sensors
Mount IR Sensors

Sharp สร้างเซ็นเซอร์ IR ที่แตกต่างกันหลายตัว และมีช่วงและพื้นที่ครอบคลุมต่างกัน ฉันบังเอิญได้สั่งซื้อรุ่น GP2Y0A60SZLF โมเดลที่คุณเลือกจะส่งผลต่อตำแหน่งและการวางแนวของเซ็นเซอร์ โชคไม่ดีสำหรับฉัน ฉันไม่ได้ค้นคว้าจริงๆ ว่าจะรับเซ็นเซอร์ตัวใด มันเป็นการตัดสินใจที่ "ฉันจะได้รับในเวลาและราคาที่เหมาะสมจากแหล่งที่เชื่อถือได้มากกว่าที่พวกเขาเสนอ"

(อัปเดต: อย่างไรก็ตาม นั่นอาจไม่สำคัญ เนื่องจากเซ็นเซอร์เหล่านี้ดูเหมือนจะสับสนกับแสงแวดล้อมภายในรถ ฉันยังคงสำรวจปัญหานั้นอยู่)

มีอย่างน้อยสามวิธีในการติดตั้งเซ็นเซอร์เหล่านี้บนหุ่นยนต์

  1. วางไว้ในตำแหน่งคงที่ ด้านหน้า โดยหันออกจากกันเล็กน้อย
  2. วางบนเซอร์โวที่ด้านหน้า โดยหันออกจากกันเล็กน้อย
  3. วางไว้ในตำแหน่งคงที่ที่ด้านหน้า แต่ที่มุมซ้ายสุดและขวาสุดสุด ทำมุมเข้าหากัน

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

ด้วยตัวเลือก #1 ยิ่งเซ็นเซอร์ทำมุมจากกันมากเท่าใด จุดบอดตรงกลางก็จะยิ่งมากขึ้นเท่านั้น

เราสามารถทำได้ #2 (ฉันเพิ่มรูปภาพด้วยเซอร์โวเป็นไปได้) และให้พวกเขาทำการกวาด และเห็นได้ชัดว่าสิ่งนี้สามารถครอบคลุมพื้นที่ได้มากที่สุด อย่างไรก็ตาม ฉันต้องการชะลอการใช้เซอร์โวให้นานที่สุด ด้วยเหตุผลอย่างน้อยสองประการ:

  • เราจะใช้หนึ่งในช่องทางการสื่อสาร PWM บน Raspberry Pi (มันเป็นไปได้ที่จะปรับปรุงสิ่งนี้ แต่ยังคง…)
  • การดึงกระแสด้วยเซอร์โวอาจมีนัยสำคัญ
  • มันเพิ่มมากขึ้นในฮาร์ดแวร์และซอฟต์แวร์

ฉันต้องการปล่อยให้ตัวเลือกเซอร์โวไว้ใช้ในภายหลังเมื่อเพิ่มเซ็นเซอร์ที่สำคัญกว่า เช่น เวลาของเที่ยวบิน (ToF) หรือบางทีอาจเป็นกล้อง

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

ดังนั้นเราจะเลือกตำแหน่ง #3

ขั้นตอนที่ 3: ถึงเวลาทดสอบ

Image
Image

หลังจากที่เราทำการเชื่อมต่อทั้งหมดระหว่าง Raspberry Pi, MCP3008 ADC และเซ็นเซอร์ IR ของ Sharp แล้ว ก็ถึงเวลาทดสอบ การทดสอบง่ายๆ เพื่อให้แน่ใจว่าระบบทำงานกับเซ็นเซอร์ใหม่

เช่นเดียวกับใน Instructables ก่อนหน้า ฉันใช้ไลบรารี wiringPi C ให้มากที่สุด ทำให้สิ่งต่าง ๆ ง่ายขึ้น สิ่งที่ไม่ชัดเจนนักจากการตรวจสอบเว็บไซต์ wirePi คือมีการสนับสนุนโดยตรงสำหรับ MCP3004/3008

แม้จะไม่มีสิ่งนั้น คุณสามารถใช้ส่วนขยาย SPI ได้ แต่ไม่จำเป็นต้อง หากคุณตรวจสอบที่เก็บ git ของ Gordon อย่างละเอียดสำหรับการเดินสายPi คุณจะพบรายการชิปที่รองรับ ซึ่งหนึ่งในนั้นมีไว้สำหรับ MCP3004/3008

ฉันตัดสินใจแนบโค้ดเป็นไฟล์เพราะไม่สามารถแสดงโค้ดได้อย่างถูกต้องในหน้านี้

ขั้นตอนที่ 4: เซ็นเซอร์เสมือน - AmpSensor

ยิ่งคุณให้หุ่นยนต์รับข้อมูลเกี่ยวกับโลกภายนอกได้หลากหลายวิธีมากเท่าไหร่ก็ยิ่งดีเท่านั้น

ปัจจุบันหุ่นยนต์มีเซ็นเซอร์โซนาร์อะคูสติก HCSR04 แปดตัว (ไม่ใช่จุดสนใจของคำแนะนำนี้) และตอนนี้มีเซ็นเซอร์ระยะ IR ของ Sharp สองตัว ตามที่ระบุไว้ก่อนหน้านี้ เราสามารถใช้ประโยชน์จากสิ่งอื่นได้: คุณลักษณะการตรวจจับกระแสมอเตอร์ของ Roboclaw

เราสามารถรวมการเรียกแบบสอบถามนั้นไปยังตัวควบคุมมอเตอร์ในคลาส C ++ และเรียกมันว่า AmpSensor

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

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

เนื่องจากส่วนการนำทางของซอฟต์แวร์ของเรารู้ทิศทางของการเคลื่อนไหว เราจึงสามารถใช้ข้อมูลทั้งหมดนั้นเพื่อหยุดการเคลื่อนไหว และพยายามย้อนกลับการเคลื่อนไหวในช่วงเวลาสั้นๆ ก่อนที่จะลองอย่างอื่น

ขั้นตอนที่ 5: การนำทาง

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

มันไม่มีมอเตอร์ที่มีตัวเข้ารหัส และไม่มี IMU (หน่วยวัดแรงเฉื่อย) ซึ่งทำให้ยากขึ้นที่จะทราบว่ามีการเคลื่อนไหวหรือหมุนจริงๆ หรือไม่ และโดยมากน้อยเพียงใด

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

ฉันจงใจเลือกที่จะไม่ใช้ไมโครคอนโทรลเลอร์เช่น Arduino เพราะ ก) ฉันไม่ชอบมันเป็นสภาพแวดล้อม psuedo-C++ ข) และการพัฒนาที่มากเกินไปจะทำให้หน่วยความจำอ่านเขียน (?) เสื่อมลง และฉัน จะต้องมีคอมพิวเตอร์โฮสต์เพื่อพัฒนา (?) หรือบางทีฉันแค่เกิดขึ้นเหมือน Raspberry Pi

อย่างไรก็ตาม Pi ที่รัน Raspbian ไม่ใช่ OS แบบเรียลไทม์ ดังนั้นระหว่างความไม่เสถียรของเซ็นเซอร์เหล่านี้กับ OS ที่ไม่ได้อ่านทุกครั้ง ฉันรู้สึกว่าจุดประสงค์ของเซ็นเซอร์เหล่านี้เหมาะสำหรับการหลีกเลี่ยงสิ่งกีดขวางมากกว่า การวัดระยะทางจริง

วิธีการนั้นดูซับซ้อนและไม่มีประโยชน์มากนัก เมื่อเราสามารถใช้เซ็นเซอร์ ToF (เวลาของเที่ยวบิน) ที่ดีกว่า (ภายหลัง) เพื่อจุดประสงค์นั้น (SLAM)

แนวทางหนึ่งที่เราสามารถใช้ได้คือการติดตามว่าคำสั่งการเคลื่อนไหวใดที่ออกภายใน X วินาทีสุดท้ายหรือคำสั่ง

ตัวอย่างเช่น สมมติว่าหุ่นยนต์หันเข้าหามุมในแนวทแยงมุม เซ็นเซอร์ชุดหนึ่งบอกว่ามันอยู่ใกล้ผนังด้านหนึ่งมากเกินไป มันจึงหมุน แต่จากนั้นเซ็นเซอร์อีกชุดหนึ่งก็บอกว่าใกล้กับอีกผนังหนึ่งมากเกินไป มันจบลงด้วยการทำซ้ำรูปแบบจากด้านหนึ่งไปอีกด้านหนึ่ง

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

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

นั่นหมายความว่าเราสามารถใช้ประวัติคำสั่งได้จริงๆ และดูวิธีใช้ประโยชน์และใช้ข้อมูลนั้น

ฉันนึกถึงวิธีพื้นฐาน (พื้นฐาน) สองวิธีในการใช้ประวัติศาสตร์การเคลื่อนไหว

  • สำหรับจำนวนการเคลื่อนไหว X สุดท้าย จะตรงกับรูปแบบ Y หรือไม่ ตัวอย่างง่ายๆ อาจเป็น (และสิ่งนี้เกิดขึ้น) "ไปข้างหน้า ย้อนกลับ ไปข้างหน้า ย้อนกลับ ….." ดังนั้นจึงมีฟังก์ชันการจับคู่ที่คืนค่า TRUE (พบรูปแบบ) หรือ FALSE (ไม่พบ) หากเป็น TRUE ในส่วนการนำทางของโปรแกรม ให้ลองใช้ลำดับการเคลื่อนไหวอื่น
  • สำหรับจำนวนการเคลื่อนไหว X ล่าสุด มีการเคลื่อนที่ไปข้างหน้าแบบทั่วไปหรือแบบสุทธิ เราจะกำหนดได้อย่างไรว่าการเคลื่อนไหวไปข้างหน้าที่แท้จริงคืออะไร? การเปรียบเทียบง่ายๆ อย่างหนึ่งคือสำหรับการเคลื่อนไหว X สุดท้าย "ไปข้างหน้า" เกิดขึ้นมากกว่า "ย้อนกลับ" แต่นั่นไม่จำเป็นต้องเป็นอันเดียว แล้วสิ่งนี้ล่ะ: "ขวา ขวา ซ้าย ขวา". ในกรณีนั้น หุ่นยนต์ต้องเลี้ยวขวาเพื่อออกจากมุมหนึ่งหรือเพราะมันเข้าใกล้กำแพงในมุมหนึ่ง ซึ่งถือได้ว่าเป็นความก้าวหน้าที่แท้จริง ในทางกลับกัน "ซ้าย ขวา ซ้าย ขวา…" อาจไม่ถือว่าก้าวหน้าอย่างแท้จริง ดังนั้น ถ้า "ขวา" เกิดขึ้นมากกว่า "ซ้าย" หรือ "ซ้ายเกิดขึ้นมากกว่า "ขวา" นั่นอาจเป็นความคืบหน้าที่แท้จริง

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

ขั้นตอนที่ 6: ความคิดสุดท้าย ขั้นตอนต่อไป…

หวังว่าคำแนะนำนี้จะให้แนวคิดบางอย่าง

การเพิ่มเซ็นเซอร์จะแนะนำข้อดีและความท้าทายบางประการ

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

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

ความท้าทายอยู่ที่ว่าจะทำอย่างไรถ้าเซ็นเซอร์เสียงบอกเราว่าไม่มีสิ่งกีดขวาง แต่เซ็นเซอร์อินฟราเรดเป็น

สำหรับตอนนี้ หลังจากการลองผิดลองถูก สิ่งต่างๆ จบลงที่ลำดับความสำคัญนี้:

  1. amp-sensing
  2. IR-sensing
  3. อะคูสติก-sensing

และสิ่งที่ฉันทำคือเพียงแค่ลดความไวของเซ็นเซอร์ IR ลง พวกมันจึงตรวจจับได้เฉพาะวัตถุที่อยู่ใกล้มากเท่านั้น (เช่น ขาเก้าอี้ที่ใกล้เข้ามา)

จนถึงตอนนี้ ยังไม่มีความจำเป็นที่จะต้องทำซอฟต์แวร์แบบมัลติเธรดหรือแบบอินเตอร์รัปต์ แม้ว่าบางครั้งฉันจะสูญเสียการควบคุมระหว่าง Raspberry Pi และตัวควบคุมมอเตอร์ Roboclaw (สูญเสียการสื่อสารแบบอนุกรม)

นี่คือที่ที่วงจร E-Stop (ดูคำแนะนำก่อนหน้า) จะถูกนำมาใช้ตามปกติ อย่างไรก็ตาม เนื่องจากฉันไม่ต้องการ (ยัง) ต้องจัดการกับการรีเซ็ต Roboclaw ระหว่างการพัฒนา และหุ่นยนต์ไม่ได้ทำงานเร็วขนาดนั้น และฉันอยู่เฝ้าติดตามและปิดมัน ฉันยังไม่ได้ เชื่อมต่อกับ E-Stop

ในที่สุด มัลติเธรดมักจะมีความจำเป็น

ขั้นตอนถัดไป…

ขอบคุณที่ทำให้มาไกลได้ขนาดนี้

ฉันได้รับเซ็นเซอร์ ToF (เวลาบิน) ของเลเซอร์ VL53L1X IR มาบ้าง ดังนั้นจึงน่าจะเป็นหัวข้อของคำแนะนำถัดไป ร่วมกับเซอร์โว

แนะนำ: