สารบัญ:

Localino ติดตาม Roomba IRobot, แมปสภาพแวดล้อมและอนุญาตให้ควบคุม: 4 ขั้นตอน
Localino ติดตาม Roomba IRobot, แมปสภาพแวดล้อมและอนุญาตให้ควบคุม: 4 ขั้นตอน

วีดีโอ: Localino ติดตาม Roomba IRobot, แมปสภาพแวดล้อมและอนุญาตให้ควบคุม: 4 ขั้นตอน

วีดีโอ: Localino ติดตาม Roomba IRobot, แมปสภาพแวดล้อมและอนุญาตให้ควบคุม: 4 ขั้นตอน
วีดีโอ: Indoor device tracking with Wearabouts by Accuware 2024, กรกฎาคม
Anonim
Image
Image

ในการสร้างบริดจ์ WiFi-UART คุณสามารถตรวจสอบ repo github นี้:

มันมีพื้นฐานที่ดีในการเริ่มต้น อย่าลืมอ่านแนวทางปฏิบัติให้ดี เพราะ Roomba VCC ระหว่างการชาร์จจะเพิ่มขึ้นถึง 20 โวลต์! หากคุณเพิ่ม ESP8266 โดยไม่มีตัวแปลงบั๊กที่เหมาะสมซึ่งทำงานได้สูงถึง 20V และแปลงลงเป็น 3.3V คุณจะทำลาย ESP ของคุณ

ตรวจสอบให้แน่ใจด้วยว่าได้ใช้ตัวปรับระดับ (เช่น การใช้ตัวแบ่งแรงดันไฟฟ้า) เพื่อเลื่อนระดับลอจิก 5V UART จาก Roomba เป็น 3.3V ซึ่งใช้โดย ESP

รายละเอียดที่สำคัญอีกประการหนึ่งคือ ตัวแปลงบั๊กควรมี 300mA แต่มีค่าน้อยกว่าหรือมากกว่านั้นมาก (ขึ้นอยู่กับตัวแปลงบั๊กเอง) มีบางอย่างที่สามารถทำกระแสได้มากกว่ามาก แต่ทำให้ Roomba หยุดทำงานเนื่องจากดึงกระแสไฟมากเกินไปในระหว่างการเริ่มต้น เราพบว่า Pololu 3.3V, 300mA Step-Down Voltage Regulator (D24V3F3) ทำงานได้อย่างสมบูรณ์แบบ เวอร์ชันทางเลือกที่มี 500mA / 600mA ทำให้อินเทอร์เฟซ Roomba UART ขัดข้อง โดยทั่วไป Roomba จะตอบสนองต่อการกดปุ่ม แต่ไม่ตอบสนองต่อคำสั่งผ่านอินเทอร์เฟซ UART เมื่อสิ่งนี้เกิดขึ้น เราต้องถอดแบตเตอรี่ Roomba ออกและรีสตาร์ท Roomba แบบเย็นโดยเชื่อมต่อ WiFi-UART บริดจ์ อย่างไรก็ตาม มีเพียง D24V3F3 เท่านั้นที่ทำงานได้ดี

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

ตัวอย่างภายใน Arduino IDE:

โมฆะ goForward () { ถ่าน c = {137, 0x00, 0xc8, 0x80, 0x00}; // 0x00c8 == 200 Serial.print(c); }

เป็นโมฆะ goBackward () { ถ่าน c = {137, 0xff, 0x38, 0x80, 0x00}; // 0xff38 == -200 Serial.print(c); }

โมฆะ spinLeft () { ถ่าน c = {137, 0x00, 0xc8, 0x00, 0x01}; Serial.print(c); }

โมฆะ spinRight () { ถ่าน c = {137, 0x00, 0xc8, 0xff, 0xff}; Serial.print(c); }

หากคุณเขียนในภาษา lua จะดูแตกต่างไปเล็กน้อย ตัวอย่างการเลี้ยวซ้ายจะมีลักษณะดังนี้:

if(_GET.pin == "LEFT") แล้วพิมพ์ ('\137'); --VOR

tmr.delay(100);

พิมพ์ ('\ 00'); -- ความเร็ว = 200 = 0x00C8 -> 0 และ 200

tmr.delay(100);

พิมพ์ ('\200'); -- ความเร็ว

tmr.delay(100);

พิมพ์ ('\ 254'); -- รัศมี = 500 = 0x01F4 = 0x01 0xF4 = 1 244

tmr.delay(100);

พิมพ์ ('\12'); -- เปลี่ยน

จบ

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

สำหรับ Roomba 5xx series:

สำหรับ Roomba 6xx series:

เมื่อคุณสร้างบริดจ์ WiFi-UART และทดสอบคำสั่งแล้ว คุณได้ก้าวไปอีกขั้น วิดีโอนี้แสดงให้เห็นว่าการประยุกต์ใช้และวิธีการทำงาน เราค่อนข้างขี้เกียจ เว็บอินเทอร์เฟซไม่มีคำสั่งควบคุมอื่นๆ เช่น เดินหน้า ถอยหลัง ความเร็ว ขวา ซ้าย และอื่นๆ แต่คุณสามารถออกคำสั่งผ่าน http อย่างไรก็ตาม เป็นเพียงการสาธิตว่ารีโมทคอนโทรลของ Roomba ทำงานร่วมกับฮาร์ดแวร์และซอฟต์แวร์อย่างง่ายโดยใช้ ESP8266

ขณะนี้คุณสามารถควบคุม Roomba ของคุณจากระยะไกลจากแอปพลิเคชัน PC ได้แล้ว สิ่งเดียวที่ขาดหายไปคือการแปลเป็นภาษาท้องถิ่นในอาคาร เราต้องการสิ่งนี้เพื่อปิดวงจรป้อนกลับ เนื่องจากเป้าหมายของเราคือบังคับหุ่นยนต์ไปในทิศทางที่แน่นอน เริ่มทำสิ่งนี้กัน.

ขั้นตอนที่ 3: ตั้งค่าระบบ Localization ในร่มของคุณ

เพื่อปิดลูปคำติชม เราใช้ระบบโลคัลไลเซชันในร่ม เราใช้ Localino สำหรับสิ่งนี้ ระบบ Localino ประกอบด้วย "anchors" และ "tags" จุดยึดจะอยู่ที่ตำแหน่งคงที่ภายในห้องและค้นหาตำแหน่งของแท็กที่กำลังเคลื่อนที่ (ซึ่งวางไว้บน Roomba) การประมวลผลตำแหน่งเสร็จสิ้นในแอปพลิเคชันพีซี นั่นเป็นประโยชน์อย่างยิ่ง เพราะคุณยังสามารถควบคุม Roomba จากพีซีเครื่องเดียวกันได้! มีซอร์สโค้ดฟรีจากเว็บไซต์ Localino ซึ่งเขียนด้วย python และยังมีสตรีมแบบเรียลไทม์ที่เสนอพิกัด XYZ ของแท็ก สตรีมข้อมูลพร้อมใช้งานผ่านเครือข่าย UDP แต่คุณยังสามารถเพิ่ม MQTT หรือสิ่งแฟนซีอื่นๆ ที่คุณชอบได้อีกด้วย หากคุณรู้จัก Python มีห้องสมุดมากมายที่ช่วยคุณได้

ในวิดีโอนี้ มีการสาธิตการโลคัลไลเซชันของ Roomba ดังนั้นเราจึงมีการติดตั้งจุดยึด 4 ตัวในห้องในตำแหน่งคงที่ ซึ่งช่วยให้จัดตำแหน่ง 3D ของ Roomba ได้ โดยทั่วไป เราต้องการจุดยึด 3 จุดเท่านั้น เนื่องจาก Roomba อาจไม่เคลื่อนที่ในแกน Z ดังนั้น 2D ก็เพียงพอแล้ว แต่เนื่องจากจุดยึดอยู่ที่ความสูงของปลั๊กไฟหลัก (ซึ่งอยู่เหนือพื้นดินประมาณ 30 ซม.) การตั้งค่า 2D อาจทำให้เกิดข้อผิดพลาดในการประมาณตำแหน่งเพียงเล็กน้อย ดังนั้นเราจึงตัดสินใจมีจุดยึด 4 จุดและปรับให้เข้ากับท้องถิ่นในแบบ 3 มิติ

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

ตั้งข้อสังเกต

วางจุดยึด Localino ภายในห้องที่ตำแหน่ง x, y ที่ต่างกัน และอีก 3 ตำแหน่งที่ตำแหน่ง z เดียวกัน วางจุดยึดหนึ่งในสี่ตัวที่ความสูงต่างกัน z ต่อห้อง ตรวจสอบให้แน่ใจว่ามีการครอบคลุมที่ดีจากแท็ก Localino ซึ่งจะย้ายไปพร้อมกับ Roomba

จุดยึดทั้งหมดมีรหัสจุดยึดที่ไม่ซ้ำ ซึ่งแสดงบนบาร์โค้ดของ Localino และสามารถอ่านได้ด้วยเครื่องมือ "การกำหนดค่า localino"

สังเกตตำแหน่งใน X, Y, Z และรหัสจุดยึด สิ่งนี้จำเป็นสำหรับซอฟต์แวร์ตัวประมวลผล Localino และจะต้องดัดแปลงในไฟล์ “localino.ini” ในโฟลเดอร์ “LocalinoProcessor”

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

… เพิ่มเติมที่จะมา

ขั้นตอนที่ 4: ปรับซอฟต์แวร์ Python

คอยติดตาม. มากขึ้นที่จะมา

แนะนำ: