อัลกอริธึมมัลติเอเจนต์ ROBOWORKS Robofleet
ข้อมูลจำเพาะ
- ชื่อสินค้า: โรโบเวิร์คส์
- เวอร์ชัน : 20240501
- จัดทำโดย: Wayne Liu & Janette Lin
- วันที่: 1 พฤษภาคม 2024
ข้อมูลสินค้า
ROBOWORKS เป็นระบบมัลติเอเจนต์ที่ช่วยให้สามารถนำอัลกอริทึมต่างๆ มาใช้ในการประสานงานและสื่อสารของหุ่นยนต์ได้
คำถามที่พบบ่อย
ถาม: ฉันควรทำอย่างไรหากหุ่นยนต์ไม่สามารถเชื่อมต่อกับ Wifi โดยอัตโนมัติ?
A: หากหุ่นยนต์ไม่สามารถเชื่อมต่อโดยอัตโนมัติ ให้ลองถอดการ์ดเครือข่ายออกแล้วเสียบกลับเข้าไปใหม่ แล้วพยายามเชื่อมต่ออีกครั้ง
สรุป
เอกสารนี้อธิบายการใช้แพ็คเกจฟังก์ชันการสร้างหุ่นยนต์หลายตัวที่ชื่อ wheeltec_multi เป็นหลัก
เอกสารนี้แบ่งออกเป็นสี่ส่วน:
- ส่วนแรกเป็นเรื่องการแนะนำวิธีการก่อตัวของหุ่นยนต์หลายตัวเป็นหลัก
- ส่วนที่สองอธิบายหลักๆ เกี่ยวกับการตั้งค่าการสื่อสารหลายเครื่องของ ROS รวมถึงการสร้าง ROS การสื่อสารหลายเครื่องและปัญหาต่างๆ ที่อาจพบในกระบวนการสื่อสารของ ROS
- ส่วนที่สามอธิบายขั้นตอนการทำงานของการซิงโครไนซ์เวลาหลายเครื่องเป็นหลัก
- ส่วนที่สี่อธิบายการใช้งานเฉพาะของแพ็คเกจฟังก์ชันการสร้างเครื่องจักรหลายเครื่อง
วัตถุประสงค์ของเอกสารนี้คือการแนะนำระบบหุ่นยนต์หลายตัวแทน และช่วยให้ผู้ใช้สามารถเริ่มโครงการการสร้างหุ่นยนต์หลายตัวได้อย่างรวดเร็ว
ข้อมูลเบื้องต้นเกี่ยวกับอัลกอริทึมหลายตัวแทน
อัลกอริธึมการสร้างหลายเอเจนต์
แพ็คเกจ ROS นี้นำเสนอปัญหาทั่วไปของการใช้ตัวแทนหลายตัวในการควบคุมแบบร่วมมือกันระหว่างการขับเคลื่อนด้วยรูปแบบ บทช่วยสอนนี้วางรากฐานสำหรับการพัฒนาในอนาคตในหัวข้อนี้ อัลกอริทึมการควบคุมรูปแบบหมายถึงอัลกอริทึมที่ควบคุมตัวแทนหลายตัวเพื่อสร้างรูปแบบเฉพาะเพื่อดำเนินการงาน การทำงานร่วมกันหมายถึงความร่วมมือระหว่างตัวแทนหลายตัวโดยใช้ความสัมพันธ์ข้อจำกัดบางอย่างเพื่อทำงานให้เสร็จสมบูรณ์ ใช้การขับเคลื่อนด้วยรูปแบบหุ่นยนต์หลายตัวเป็นตัวอย่างampความร่วมมือหมายถึงการที่หุ่นยนต์หลายตัวสร้างรูปแบบที่ต้องการร่วมกัน สาระสำคัญคือความสัมพันธ์ทางคณิตศาสตร์บางอย่างที่ได้รับการตอบสนองระหว่างตำแหน่งของหุ่นยนต์แต่ละตัว วิธีการสร้างรูปแบบแบ่งออกเป็นการควบคุมรูปแบบรวมศูนย์และการควบคุมรูปแบบกระจายเป็นหลัก วิธีการควบคุมรูปแบบรวมศูนย์ส่วนใหญ่ประกอบด้วยวิธีการโครงสร้างเสมือนจริง วิธีการทฤษฎีกราฟิก และวิธีการทำนายแบบจำลอง วิธีการควบคุมรูปแบบกระจายส่วนใหญ่ประกอบด้วยวิธีการผู้นำ-ผู้ตาม วิธีการตามพฤติกรรม และวิธีการโครงสร้างเสมือนจริง
แพ็คเกจ ROS นี้ใช้หลักการผู้นำ-ผู้ตามในวิธีการควบคุมรูปแบบการกระจายเพื่อดำเนินการขับเคลื่อนรูปแบบด้วยหุ่นยนต์หลายตัว หุ่นยนต์ตัวหนึ่งในรูปแบบได้รับการกำหนดให้เป็นผู้นำ และหุ่นยนต์ตัวอื่นๆ ได้รับการกำหนดให้เป็นทาสเพื่อติดตามผู้นำ อัลกอริทึมใช้เส้นทางการเคลื่อนที่ของหุ่นยนต์นำเพื่อกำหนดพิกัดที่จะติดตามโดยหุ่นยนต์ที่ติดตามด้วยทิศทางและความเร็วที่แน่นอน เมื่อแก้ไขความเบี่ยงเบนของตำแหน่งจากพิกัดการติดตาม ในที่สุด หุ่นยนต์ติดตามจะลดการเบี่ยงเบนระหว่างหุ่นยนต์ติดตามและพิกัดการติดตามที่คาดหวังให้เป็นศูนย์เพื่อบรรลุวัตถุประสงค์ของการขับเคลื่อนรูปแบบ ด้วยวิธีนี้ อัลกอริทึมจึงค่อนข้างซับซ้อนน้อยลง
อัลกอริทึมการหลีกเลี่ยงอุปสรรค
อัลกอริทึมการหลีกเลี่ยงสิ่งกีดขวางทั่วไปคือวิธีสนามศักย์เทียม การเคลื่อนไหวของหุ่นยนต์ในสภาพแวดล้อมทางกายภาพถือเป็นการเคลื่อนไหวในสนามแรงเทียมเสมือนจริง สิ่งกีดขวางที่ใกล้ที่สุดจะถูกระบุโดย LiDAR สิ่งกีดขวางจะสร้างสนามแรงผลักเพื่อสร้างแรงผลักให้กับหุ่นยนต์ และจุดเป้าหมายจะสร้างสนามแรงโน้มถ่วงเพื่อสร้างแรงดึงดูดให้กับหุ่นยนต์ ด้วยวิธีนี้ จึงควบคุมการเคลื่อนไหวของหุ่นยนต์ภายใต้การกระทำร่วมกันของแรงผลักและแรงดึงดูด
แพ็คเกจ ROS นี้เป็นการปรับปรุงตามวิธีสนามศักย์เทียม ขั้นแรก อัลกอริทึมการสร้างจะคำนวณความเร็วเชิงเส้นและเชิงมุมของตัวตาม Slave จากนั้นจะเพิ่มหรือลดความเร็วเชิงเส้นและเชิงมุมตามข้อกำหนดในการหลีกเลี่ยงสิ่งกีดขวาง เมื่อระยะห่างระหว่างตัวตาม Slave และสิ่งกีดขวางใกล้ขึ้น แรงผลักของสิ่งกีดขวางไปยังตัวตาม Slave ก็จะมากขึ้น ในขณะเดียวกัน การเปลี่ยนแปลงของความเร็วเชิงเส้นและความแปรผันของความเร็วเชิงมุมก็จะมากขึ้น เมื่อสิ่งกีดขวางอยู่ใกล้ด้านหน้าของตัวตาม Slave มากขึ้น แรงผลักของสิ่งกีดขวางไปยังตัวตาม Slave ก็จะมากขึ้น (แรงผลักด้านหน้ามีมากที่สุด และแรงผลักด้านข้างมีน้อยที่สุด) เป็นผลให้ความแปรผันของความเร็วเชิงเส้นและความเร็วเชิงมุมมีมากขึ้น วิธีสนามศักย์เทียมช่วยปรับปรุงวิธีแก้ปัญหาเมื่อหุ่นยนต์หยุดตอบสนองด้านหน้าสิ่งกีดขวาง สิ่งนี้ช่วยให้หลีกเลี่ยงสิ่งกีดขวางได้ดีขึ้น
การตั้งค่าการสื่อสารหลายตัวแทน
การสื่อสารแบบหลายเอเจนต์เป็นหนึ่งในขั้นตอนสำคัญในการสร้างรูปแบบหุ่นยนต์หลายตัว เมื่อตำแหน่งสัมพันธ์ของหุ่นยนต์หลายตัวไม่เป็นที่ทราบ หุ่นยนต์จะต้องแบ่งปันข้อมูลซึ่งกันและกันผ่านการสื่อสารเพื่ออำนวยความสะดวกในการสร้างการเชื่อมต่อ สถาปัตยกรรมที่กระจาย ROS และการสื่อสารเครือข่ายนั้นทรงพลังมาก ไม่เพียงแต่สะดวกสำหรับการสื่อสารระหว่างกระบวนการเท่านั้น แต่ยังสะดวกสำหรับการสื่อสารระหว่างอุปกรณ์ต่างๆ ด้วย การสื่อสารเครือข่ายทำให้โหนดทั้งหมดสามารถทำงานบนคอมพิวเตอร์เครื่องใดก็ได้ งานหลัก เช่น การประมวลผลข้อมูลจะเสร็จสมบูรณ์บนฝั่งโฮสต์ เครื่องทาสมีหน้าที่รับข้อมูลสิ่งแวดล้อมที่รวบรวมโดยเซ็นเซอร์ต่างๆ โฮสต์ในที่นี้คือผู้จัดการที่เรียกใช้โหนดหลักใน ROS กรอบการทำงานการสื่อสารแบบหลายเอเจนต์ในปัจจุบันนั้นผ่านผู้จัดการโหนดและผู้จัดการพารามิเตอร์เพื่อจัดการการสื่อสารระหว่างหุ่นยนต์หลายตัว
ขั้นตอนในการตั้งค่าการสื่อสารหลายตัวแทน
- ตั้งค่าการควบคุม ROS ในเครือข่ายเดียวกัน
- มี 2 วิธีในการตั้งค่าการควบคุม ROS หลัก/รองภายใต้เครือข่ายเดียวกัน
ตัวเลือกที่ 1:
โฮสต์หลักจะสร้างไวไฟภายในเครื่องโดยเรียกใช้ตัวจัดการโหนดหลัก โดยทั่วไป หุ่นยนต์ตัวหนึ่งที่ได้รับการกำหนดให้เป็นมาสเตอร์จะสร้างเครือข่ายไวไฟนี้ หุ่นยนต์หรือเครื่องเสมือนอื่นๆ จะเข้าร่วมเครือข่ายไวไฟนี้ในฐานะสเลฟ
ตัวเลือก 2:
เครือข่าย Wi-Fi ในพื้นที่ได้รับการจัดทำโดยเราเตอร์ของบริษัทอื่นในฐานะศูนย์ถ่ายทอดข้อมูล หุ่นยนต์ทั้งหมดเชื่อมต่อกับเราเตอร์เดียวกัน เราเตอร์ยังสามารถใช้งานได้โดยไม่ต้องเชื่อมต่ออินเทอร์เน็ต เลือกหุ่นยนต์ตัวหนึ่งเป็นมาสเตอร์และเรียกใช้ตัวจัดการโหนดมาสเตอร์ หุ่นยนต์ตัวอื่นๆ ถูกกำหนดให้เป็นสเลฟและเรียกใช้ตัวจัดการโหนดมาสเตอร์จากมาสเตอร์
การตัดสินใจว่าจะเลือกตัวเลือกใดนั้นขึ้นอยู่กับข้อกำหนดของโครงการของคุณ หากจำนวนหุ่นยนต์ที่ต้องสื่อสารไม่มาก แนะนำให้ใช้ตัวเลือกที่ 1 เนื่องจากประหยัดต้นทุนและตั้งค่าได้ง่าย เมื่อจำนวนหุ่นยนต์มีจำนวนมาก แนะนำให้ใช้ตัวเลือกที่ 2 ข้อจำกัดด้านพลังการประมวลผลของตัวควบคุมหลักของ ROS และแบนด์วิดท์ Wi-Fi ในตัวที่จำกัดอาจทำให้เกิดความล่าช้าและการหยุดชะงักของเครือข่ายได้อย่างง่ายดาย เราเตอร์สามารถแก้ไขปัญหาเหล่านี้ได้อย่างง่ายดาย โปรดทราบว่าเมื่อดำเนินการสื่อสารหลายเอเจนต์ หากใช้เครื่องเสมือนเป็นสเลฟ ROS จะต้องตั้งค่าโหมดเครือข่ายเป็นโหมดบริดจ์
กำหนดค่าตัวแปรสภาพแวดล้อม Master/Slave
หลังจากที่มาสเตอร์ ROS ทั้งหมดอยู่ในเครือข่ายเดียวกันแล้ว จำเป็นต้องตั้งค่าตัวแปรสภาพแวดล้อมสำหรับการสื่อสารแบบหลายเอเจนต์ ตัวแปรสภาพแวดล้อมนี้ได้รับการกำหนดค่าในไฟล์ .bashrc ในไดเร็กทอรีหลัก เรียกใช้คำสั่ง gedit ~/.bashrc เพื่อเปิดใช้งาน โปรดทราบว่าต้องกำหนดค่าทั้งไฟล์ .bashrc ของมาสเตอร์และสเลฟในการสื่อสารแบบหลายเอเจนต์ สิ่งที่ต้องเปลี่ยนแปลงคือที่อยู่ IP ที่ส่วนท้ายของไฟล์ สองบรรทัดคือ ROS_MASTER_URI และ ROS_HOSTNAME ตามที่แสดงในรูปที่ 2-1-4 ROS_MASTER_URI และ ROS_HOSTNAME ของโฮสต์ ROS เป็น IP ในระบบ ROS_MASTER_URI ในไฟล์ .bashrc ของสเลฟ ROS ต้องเปลี่ยนเป็นที่อยู่ IP ของระบบ ในขณะที่ ROS_HOSTNAME ยังคงเป็นที่อยู่ IP ในระบบ
การสื่อสารระหว่างเครื่องหลายเครื่องของ ROS ไม่ถูกจำกัดโดยเวอร์ชันที่เผยแพร่ของ ROS ในกระบวนการสื่อสารระหว่างเครื่องหลายเครื่อง ควรทราบสิ่งต่อไปนี้:
- การทำงานของโปรแกรมสเลฟ ROS ขึ้นอยู่กับโปรแกรมมาสเตอร์ ROS ของอุปกรณ์มาสเตอร์ ROS โปรแกรมมาสเตอร์ ROS จะต้องเปิดใช้งานบนอุปกรณ์มาสเตอร์ก่อนจึงจะเรียกใช้โปรแกรมสเลฟบนอุปกรณ์สเลฟได้
- ที่อยู่ IP ของเครื่องหลักและเครื่องรองในการสื่อสารหลายเครื่องจะต้องอยู่ในเครือข่ายเดียวกัน ซึ่งหมายความว่าที่อยู่ IP และซับเน็ตมาสก์อยู่ภายใต้เครือข่ายเดียวกัน
- ไม่แนะนำให้ใช้ ROS_HOSTNAME ในไฟล์กำหนดค่าสภาพแวดล้อม .bashrc เพื่อใช้ localhost ขอแนะนำให้ใช้ที่อยู่ IP เฉพาะ
- ในกรณีที่ไม่ได้ตั้งค่าที่อยู่ IP ของทาสอย่างถูกต้อง อุปกรณ์ทาสยังคงสามารถเข้าถึง ROS master ได้ แต่ไม่สามารถป้อนข้อมูลการควบคุมได้
- ถ้าเครื่องเสมือนมีส่วนร่วมในการสื่อสารหลายตัวแทน โหมดเครือข่ายจะต้องตั้งค่าเป็นโหมดบริดจ์ ไม่สามารถเลือก IP แบบคงที่สำหรับการเชื่อมต่อเครือข่ายได้
- การสื่อสารหลายเครื่องไม่สามารถทำได้ view หรือสมัครรับหัวข้อประเภทข้อมูลข้อความที่ไม่มีอยู่ในเครื่อง
- คุณสามารถใช้การสาธิตการจำลองเต่าน้อยเพื่อตรวจสอบว่าการสื่อสารระหว่างหุ่นยนต์สำเร็จหรือไม่:
- a- วิ่งหนีจากนาย
- รีสกอร์ #เปิดตัวบริการ ROS
- แท่นเต่า turtlesim_node #เปิดตัวอินเทอร์เฟซเต่า
- b. วิ่งหนีจากทาส
- เรียกใช้งานเต่าอีกครั้ง turtle_teleop_key #เปิดโหนดควบคุมแป้นพิมพ์สำหรับเต่า
- a- วิ่งหนีจากนาย
หากคุณสามารถจัดการการเคลื่อนไหวของเต่าจากคีย์บอร์ดบนทาสได้ นั่นหมายความว่าการสื่อสารระหว่างมาสเตอร์/สเลฟได้สำเร็จแล้ว
การเชื่อมต่อ Wi-Fi อัตโนมัติใน ROS
ขั้นตอนต่อไปนี้จะอธิบายวิธีการกำหนดค่าหุ่นยนต์เพื่อเชื่อมต่อกับเครือข่ายโฮสต์หรือเครือข่ายเราเตอร์โดยอัตโนมัติ
การตั้งค่าการเชื่อมต่อ Wi-Fi อัตโนมัติสำหรับ Jetson Nano
- เชื่อมต่อ Jetson Nano ผ่านเครื่องมือระยะไกล VNC หรือเชื่อมต่อโดยตรงกับหน้าจอคอมพิวเตอร์ คลิกที่ไอคอน Wi-Fi ที่มุมขวาบน จากนั้นคลิก "แก้ไขการเชื่อมต่อ.."
- คลิกปุ่ม + ในการเชื่อมต่อเครือข่าย:
- ใต้หน้าต่าง "เลือกประเภทการเชื่อมต่อ" คลิกเมนูแบบเลื่อนลงแล้วคลิกปุ่ม "สร้าง ... ":
- ในแผงควบคุม คลิกตัวเลือก Wi-Fi ป้อนชื่อ Wi-Fi ที่จะเชื่อมต่อในช่อง "ชื่อการเชื่อมต่อ" และ SSID เลือก "ไคลเอ็นต์" ในเมนูแบบเลื่อนลง "โหมด" และเลือก "wlan0" ในเมนูแบบเลื่อนลง "อุปกรณ์"
- ในแผงควบคุม ให้คลิกตัวเลือก “ทั่วไป” และเลือก “เชื่อมต่อกับเครือข่ายนี้โดยอัตโนมัติ…” ตั้งค่าลำดับความสำคัญของการเชื่อมต่อเป็น 1 ในตัวเลือก “ลำดับความสำคัญของการเชื่อมต่อสำหรับการเปิดใช้งานอัตโนมัติ” เลือกตัวเลือก “ผู้ใช้ทั้งหมดสามารถเชื่อมต่อกับเครือข่ายนี้ได้” เมื่อตั้งค่าตัวเลือกเป็น 0 ใน “ลำดับความสำคัญของการเชื่อมต่อสำหรับการเปิดใช้งานอัตโนมัติ” สำหรับไวไฟอื่น แสดงว่านี่คือเครือข่ายไวไฟที่ต้องการในอดีต
- คลิกตัวเลือก “ความปลอดภัย Wi-Fi” ในแผงควบคุม เลือก “WPA & WPA2 Personal” ในช่อง “ความปลอดภัย” จากนั้นป้อนรหัสผ่าน Wi-Fi ในช่อง “รหัสผ่าน”
บันทึก: หากหุ่นยนต์ไม่สามารถเชื่อมต่อกับเครือข่าย wifi โดยอัตโนมัติหลังจากบูตเครื่องเมื่อตั้งค่าความสำคัญของ wifi เป็น 0 อาจเกิดจากปัญหาสัญญาณ wifi ที่อ่อน เพื่อหลีกเลี่ยงปัญหานี้ คุณสามารถเลือกที่จะลบตัวเลือก wifi ทั้งหมดที่เชื่อมต่อไว้ก่อนหน้านี้ เก็บเฉพาะเครือข่าย wifi ที่สร้างโดยโฮสต์หรือเราเตอร์เท่านั้น คลิกตัวเลือก “การตั้งค่า IPv4” ในแผงควบคุมการตั้งค่าเครือข่าย เลือกตัวเลือก “ด้วยตนเอง” ในฟิลด์ “วิธีการ” จากนั้นคลิก “เพิ่ม” กรอกที่อยู่ IP ของเครื่องสเลฟในฟิลด์ “ที่อยู่” กรอก “24” ในฟิลด์ “เน็ตมาสก์” กรอกเซกเมนต์เครือข่าย IP ใน “เกตเวย์” เปลี่ยนสามหลักสุดท้ายของเซกเมนต์เครือข่าย IP เป็น “1” วัตถุประสงค์หลักของขั้นตอนนี้คือการแก้ไขที่อยู่ IP หลังจากดำเนินการเสร็จสิ้นครั้งแรกแล้ว ที่อยู่ IP จะไม่เปลี่ยนแปลงเมื่อทำการเชื่อมต่อกับ WIFI เดียวกันในภายหลัง
หลังจากกำหนดค่าทั้งหมดแล้ว ให้คลิก "บันทึก" เพื่อบันทึกการตั้งค่า เมื่อบันทึกสำเร็จ หุ่นยนต์จะเชื่อมต่อกับเครือข่ายของโฮสต์หรือเราเตอร์โดยอัตโนมัติเมื่อเปิดเครื่อง
บันทึก:
- ที่อยู่ IP ที่กำหนดที่นี่จะต้องเหมือนกับที่อยู่ IP ที่กำหนดในไฟล์ .bashrc ในส่วนที่ 2.1
- ที่อยู่ IP ของมาสเตอร์และทาสแต่ละตัวจะต้องไม่ซ้ำกัน
- ที่อยู่ IP หลักและรองต้องอยู่ในส่วนเครือข่ายเดียวกัน
- คุณต้องรอให้โฮสต์หรือเราเตอร์ส่งสัญญาณ WiFi ก่อนจึงจะสามารถเปิดหุ่นยนต์ทาสและเชื่อมต่อกับเครือข่าย WiFi โดยอัตโนมัติ
- หลังจากกำหนดค่าการตั้งค่าแล้ว หากหุ่นยนต์ไม่สามารถเชื่อมต่อกับ WiFi โดยอัตโนมัติเมื่อเปิดใช้งาน โปรดเสียบและถอดการ์ดเครือข่ายออก แล้วลองเชื่อมต่ออีกครั้ง
การตั้งค่าการเชื่อมต่อ Wi-Fi อัตโนมัติสำหรับ Raspberry Pi
ขั้นตอนสำหรับ Raspberry Pi นั้นเหมือนกับ Jetson Nano
การตั้งค่าการเชื่อมต่อ Wi-Fi อัตโนมัติสำหรับ Jetson TX1
การตั้งค่าใน Jetson TX1 แทบจะเหมือนกับใน Jetson Nano ยกเว้นเพียงประการเดียวคือ Jetson TX1 ควรเลือกอุปกรณ์ “wlan1” ใน “อุปกรณ์” ในแผงควบคุมการตั้งค่าเครือข่าย
การตั้งค่าการซิงโครไนซ์หลายตัวแทน
ในโครงการการสร้างตัวแทนหลายราย การตั้งค่าการซิงโครไนซ์เวลาของตัวแทนหลายรายถือเป็นขั้นตอนที่สำคัญ ในกระบวนการสร้าง จะเกิดปัญหาหลายประการเนื่องมาจากเวลาของระบบที่ไม่ซิงโครไนซ์ของหุ่นยนต์แต่ละตัว การซิงโครไนซ์เวลาของตัวแทนหลายรายแบ่งออกเป็นสองสถานการณ์ ได้แก่ สถานการณ์ที่หุ่นยนต์หลักและหุ่นยนต์รองเชื่อมต่อกับเครือข่าย และสถานการณ์ที่ทั้งสองหุ่นยนต์ถูกตัดการเชื่อมต่อจากเครือข่าย
การเชื่อมต่อเครือข่ายหลัก/รองสำเร็จ
หลังจากกำหนดค่าการสื่อสารหลายเอเจนต์แล้ว หากเครื่องหลักและเครื่องรองสามารถเชื่อมต่อกับเครือข่ายได้สำเร็จ เครื่องทั้งสองจะซิงโครไนซ์เวลาเครือข่ายโดยอัตโนมัติ ในกรณีนี้ ไม่จำเป็นต้องดำเนินการใดๆ เพิ่มเติมเพื่อให้ซิงโครไนซ์เวลาได้
การแก้ไขปัญหาการเชื่อมต่อเครือข่ายขาดหาย
หลังจากกำหนดค่าการสื่อสารหลายเอเจนต์แล้ว หากอุปกรณ์หลักและรองไม่สามารถเชื่อมต่อกับเครือข่ายได้สำเร็จ จำเป็นต้องซิงโครไนซ์เวลาด้วยตนเอง เราจะใช้คำสั่งวันที่เพื่อตั้งค่าเวลาให้เสร็จสมบูรณ์
ขั้นแรก ติดตั้งเครื่องมือเทอร์มิเนเตอร์ จากเครื่องมือเทอร์มิเนเตอร์ ให้ใช้เครื่องมือแบ่งหน้าต่างเพื่อวางเทอร์มินัลควบคุมของมาสเตอร์และทาสลงในหน้าต่างเทอร์มินัลเดียวกัน (คลิกขวาเพื่อตั้งค่าหน้าต่างแยก และเข้าสู่ระบบเครื่องหลักและทาสโดย ssh ในหน้าต่างที่แตกต่างกัน) .
- sudo apt-get install terminator # ดาวน์โหลด terminator เพื่อแยกหน้าต่างเทอร์มินัล
คลิกปุ่มที่ด้านบนซ้าย เลือกตัวเลือก [Broadcast to all]/[Broadcast all] และป้อนคำสั่งต่อไปนี้ จากนั้นใช้เครื่องมือ Terminator เพื่อตั้งเวลาเดียวกันสำหรับมาสเตอร์และสเลฟ
- sudo date -s “2022-01-30 15:15:00” # ตั้งเวลาด้วยตนเอง
แพ็คเกจ ROS หลายตัวแทน
บทนำแพ็คเกจ ROS
ตั้งชื่อทาส
ในแพ็คเกจฟังก์ชัน wheeltec_multi จำเป็นต้องตั้งชื่อที่ไม่ซ้ำกันสำหรับหุ่นยนต์ทาสแต่ละตัวเพื่อหลีกเลี่ยงข้อผิดพลาด ตัวอย่างเช่นampหมายเลข 1 สำหรับ slave1 และหมายเลข 2 สำหรับ slave2 เป็นต้น วัตถุประสงค์ในการตั้งชื่อที่แตกต่างกันคือเพื่อจัดกลุ่มโหนดที่กำลังทำงานและแยกแยะโหนดเหล่านั้นด้วยเนมสเปซที่แตกต่างกัน ตัวอย่างเช่นampเล หัวข้อเรดาร์ของสเลฟ 1 คือ/สเลฟ1/สแกน และโหนด LiDAR ของสเลฟ 1 คือ/สเลฟ1/เลเซอร์
ตั้งค่าพิกัดทาส
แพ็คเกจ wheeltec_multi สามารถนำการสร้างรูปแบบที่กำหนดเองมาใช้ได้ เมื่อจำเป็นต้องมีการสร้างรูปแบบที่แตกต่างกัน เพียงแค่ปรับเปลี่ยนพิกัดที่ต้องการของหุ่นยนต์สเลฟ Slave_x และ slave_y คือพิกัด x และ y ของสเลฟที่มีมาสเตอร์เป็นจุดอ้างอิงเดิม ด้านหน้าของมาสเตอร์คือทิศทางบวกของพิกัด x และด้านซ้ายคือทิศทางบวกของพิกัด y หลังจากตั้งค่าเสร็จสิ้นแล้ว พิกัด TF slave1 จะถูกออกให้เป็นพิกัดที่คาดหวังของสเลฟ หากมีมาสเตอร์หนึ่งตัวและสเลฟสองตัว สามารถตั้งค่าการสร้างรูปแบบดังต่อไปนี้ได้:
- การสร้างแนวนอน: คุณสามารถตั้งค่าพิกัดของสเลฟทางด้านซ้ายเป็น slave_x:0, slave_y: 0.8 และพิกัดของสเลฟทางด้านขวาเป็น slave_x:0, slave_y:-0.8
- การสร้างคอลัมน์: พิกัดของทาสตัวหนึ่งสามารถตั้งค่าเป็น: Slave_x:-0.8, Slave_y:0 และพิกัดของทาสอีกตัวสามารถตั้งค่าเป็น: Slave_x:-1.8, Slave_y:0
- รูปแบบสามเหลี่ยม: พิกัดของทาสตัวหนึ่งสามารถตั้งค่าเป็น: Slave_x:-0.8, Slave_y: 0.8 และพิกัดของทาสอีกตัวสามารถตั้งค่าเป็น: Slave_x:-0.8, Slave_y:-0.8
รูปแบบอื่นๆ สามารถปรับแต่งได้ตามต้องการ
บันทึก:
- ระยะห่างที่แนะนำระหว่างหุ่นยนต์ทั้งสองตั้งไว้ที่ 0.8 และแนะนำไม่ต่ำกว่า 0.6 แนะนำให้ตั้งค่าระยะห่างระหว่างทาสและมาสเตอร์ให้ต่ำกว่า 2.0 ยิ่งอยู่ห่างจากต้นแบบมากเท่าไร ความเร็วเชิงเส้นของทาสก็จะมากขึ้นเท่านั้นเมื่อต้นแบบหมุน เนื่องจากข้อจำกัดของความเร็วสูงสุด ความเร็วของทาสจะเบี่ยงเบนหากไม่ตรงตามข้อกำหนด การก่อตัวของหุ่นยนต์จะวุ่นวาย
การเริ่มต้นของตำแหน่งทาส
- ตำแหน่งเริ่มต้นของสเลฟจะอยู่ที่พิกัดที่คาดไว้ตามค่าเริ่มต้น ก่อนที่จะรันโปรแกรม เพียงแค่วางหุ่นยนต์สเลฟไว้ใกล้กับพิกัดที่คาดไว้เพื่อให้การเริ่มต้นเสร็จสมบูรณ์ ฟังก์ชันนี้ใช้งานโดยโหนด pose_setter ในไฟล์ชื่อ turn_on_wheeltec_robot.launch ในแพ็กเกจ wheeltec_multi ดังแสดงในรูปที่ 4-1-3
หากผู้ใช้ต้องการปรับแต่งตำแหน่งเริ่มต้นของทาส เขาหรือเธอเพียงต้องตั้งค่าทาส_x และทาส_y ดังแสดงในรูปที่ 4-1-4 ใน wheeltec_slave.launch ค่า Slave_x และ Slave_y จะถูกส่งผ่านไปยัง Turn_on_wheeltec_robot.launch และกำหนดให้กับโหนดpose_setter เพียงวางหุ่นยนต์ในตำแหน่งที่กำหนดเองก่อนที่จะรันโปรแกรม
การกำหนดค่าตำแหน่ง
ในการสร้างตัวแทนหลายตัว ปัญหาแรกที่ต้องแก้ไขคือการกำหนดตำแหน่งของมาสเตอร์และสเลฟ มาสเตอร์จะสร้างแผนที่ 2 มิติเป็นอันดับแรก หลังจากสร้างและบันทึกแผนที่แล้ว ให้เรียกใช้แพ็คเกจการนำทาง 2 มิติ และใช้อัลกอริทึมการกำหนดตำแหน่ง Monte Carlo แบบปรับตัวได้ (การกำหนดตำแหน่ง amcl) ในแพ็คเกจการนำทาง 2 มิติ เพื่อกำหนดค่าการกำหนดตำแหน่งของมาสเตอร์ เนื่องจากมาสเตอร์และสเลฟอยู่ในเครือข่ายเดียวกันและใช้ตัวจัดการโหนดเดียวกัน มาสเตอร์จึงเปิดใช้งานแผนที่จากแพ็คเกจการนำทาง 2 มิติ สเลฟทั้งหมดสามารถใช้แผนที่เดียวกันภายใต้ตัวจัดการโหนดเดียวกัน ดังนั้น สเลฟจึงไม่จำเป็นต้องสร้างแผนที่ ใน wheeltec_slave.launch ให้เรียกใช้การกำหนดตำแหน่ง Monte Carlo (การกำหนดตำแหน่ง amcl) สเลฟสามารถกำหนดค่าตำแหน่งของตนได้โดยใช้แผนที่ที่สร้างโดยมาสเตอร์
วิธีสร้างรูปแบบและรักษารูปแบบ
ในกระบวนการเคลื่อนที่ในรูปแบบต่างๆ การเคลื่อนที่หลักสามารถควบคุมได้โดย Rviz คีย์บอร์ด รีโมตคอนโทรล และวิธีการอื่นๆ สเลฟจะคำนวณความเร็วผ่านโหนด slave_tf_listener เพื่อควบคุมการเคลื่อนที่และบรรลุเป้าหมายของรูปแบบ โหนด slave_tf_listener จะจำกัดความเร็วของสเลฟเพื่อหลีกเลี่ยงไม่ให้โหนดคำนวณความเร็วเกินกำหนด ซึ่งจะทำให้เกิดผลกระทบต่อเนื่อง ค่าเฉพาะสามารถแก้ไขได้ใน wheeltec_slave.launch
พารามิเตอร์ที่เกี่ยวข้องของอัลกอริทึมการก่อตัวมีดังนี้:
ข้อมูลการหลีกเลี่ยงสิ่งกีดขวาง
ในการสร้างตัวแทนหลายราย มาสเตอร์สามารถใช้โหนด move_base เพื่อดำเนินการหลีกเลี่ยงอุปสรรคให้เสร็จสิ้น อย่างไรก็ตาม การเริ่มต้นระบบของสเลฟจะไม่ใช้โหนด move_base ณ จุดนี้ จำเป็นต้องเรียกใช้โหนด multi_avoidance ในโปรแกรมสเลฟ โหนดหลีกเลี่ยงอุปสรรคจะเปิดใช้งานตามค่าเริ่มต้นในแพ็คเกจ หากจำเป็น สามารถตั้งค่าการหลีกเลี่ยงเป็น "false" เพื่อปิดใช้งานโหนดหลีกเลี่ยงอุปสรรคได้
พารามิเตอร์ที่เกี่ยวข้องบางส่วนของโหนดหลีกเลี่ยงสิ่งกีดขวางจะแสดงในรูปด้านล่าง โดยที่ safe_distance คือขีดจำกัดระยะห่างที่ปลอดภัยของสิ่งกีดขวาง และ danger_distance คือขีดจำกัดระยะห่างอันตรายของสิ่งกีดขวาง เมื่อสิ่งกีดขวางอยู่ภายในระยะปลอดภัยและระยะอันตราย สเลฟจะปรับตำแหน่งเพื่อหลีกเลี่ยงสิ่งกีดขวาง เมื่อสิ่งกีดขวางอยู่ในระยะอันตราย สเลฟจะขับหนีจากสิ่งกีดขวาง
ขั้นตอนการดำเนินการ
ป้อนคำสั่งดำเนินการ
การเตรียมตัวก่อนเริ่มการสร้างหลายเอเจนต์:
- หลักและรองเชื่อมต่อกับเครือข่ายเดียวกันและตั้งค่าการสื่อสารหลายตัวแทนอย่างถูกต้อง
- ต้นแบบจะสร้างแผนที่ 2 มิติล่วงหน้าและบันทึกไว้
- ต้นแบบจะถูกวางไว้ที่จุดเริ่มต้นของแผนที่ และวางทาสไว้ใกล้กับตำแหน่งเริ่มต้น (ตำแหน่งการก่อตัวของทาสเริ่มต้น)
- หลังจากเข้าสู่ระบบ Jetson Nano/Raspberry Pi จากระยะไกลแล้ว ให้ทำการซิงโครไนซ์เวลา
sudo วันที่ -s “2022-04-01 15:15:00”
- ขั้นตอนที่ 1:เปิดแผนที่ 2 มิติจากต้นแบบ
roslaunch turn_on_wheeltec_robot การนำทาง เปิดตัว
- ขั้นตอนที่ 2:เรียกใช้โปรแกรมการสร้างจากสเลฟทั้งหมด
roslaunch wheeltec_multi wheeltec_slave.launch
- ขั้นตอนที่ 3: เปิดโหนดควบคุมแป้นพิมพ์จากมาสเตอร์หรือใช้จอยสติ๊กเพื่อควบคุมการเคลื่อนไหวของมาสเตอร์จากระยะไกล
เปิดตัวใหม่ wheeltec_robot_rc keyboard_teleop.launch
- ขั้นตอนที่ 4: (ทางเลือก) สังเกตการเคลื่อนไหวของหุ่นยนต์จาก Rviz
รวิซ
บันทึก:
- ต้องแน่ใจว่าได้ดำเนินการซิงโครไนซ์เวลาให้เสร็จสิ้นก่อนที่จะรันโปรแกรม
- เมื่อควบคุมมาสเตอร์ของการก่อตัวของมัลติเอเจนต์ ความเร็วเชิงมุมไม่ควรเร็วเกินไป ความเร็วเชิงเส้นที่แนะนำคือ 0.2m/s องศาความเร็วเชิงมุมต่ำกว่า 0.3rad/s เมื่อมาสเตอร์กำลังเลี้ยว ยิ่งสเลฟอยู่ห่างจากมาสเตอร์มากเท่าไร ความเร็วเชิงเส้นที่ต้องการก็ยิ่งมากขึ้นเท่านั้น เนื่องจากมีข้อจำกัดในความเร็วเชิงเส้นและความเร็วเชิงมุมในแพ็คเกจ เมื่อรถสเลฟไม่สามารถไปถึงความเร็วที่ต้องการ การก่อตัวของสเลฟจะวุ่นวาย โดยรวมแล้ว ความเร็วเชิงเส้นที่มากเกินไปอาจสร้างความเสียหายให้กับหุ่นยนต์ได้อย่างง่ายดาย
- เมื่อจำนวนสเลฟมีมากกว่าหนึ่งตัว เนื่องจากแบนด์วิดท์ไวไฟบนบอร์ดของโฮสต์ ROS มีจำกัด จึงอาจทำให้เกิดความล่าช้าและการตัดการเชื่อมต่อของการสื่อสารหลายเอเจนต์ได้ การใช้เราเตอร์สามารถแก้ปัญหานี้ได้ดี
- แผนผัง TF ของรูปแบบหุ่นยนต์หลายตัว (ทาส 2 ตัว) คือ: rqt_tf_tree
- แผนภาพความสัมพันธ์ของโหนดของการสร้างหุ่นยนต์หลายตัว (ทาส 2 ตัว) คือ: rqt_graph
เอกสาร / แหล่งข้อมูล
![]() |
อัลกอริธึมมัลติเอเจนต์ ROBOWORKS Robofleet [พีดีเอฟ] คู่มือการใช้งาน อัลกอริทึมตัวแทนหลายรายของ Robofleet, Robofleet, อัลกอริทึมตัวแทนหลายราย, อัลกอริทึมตัวแทน, อัลกอริทึม |