ROS (ระบบปฏิบัติการหุ่นยนต์) จำเป็นหรือไม่


10

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


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

คำตอบ:


18

ฉันกลับไปที่คอมพิวเตอร์!

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

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

โดยที่ในใจคุณควรระวังผลข้างเคียงเช่นกัน

การควบคุมแบบกระจาย

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

เชื่อหรือไม่ว่าจริง ๆ แล้วผู้คนทำการควบคุมหุ่นยนต์ผ่าน ROS ( MoveIt!เป็นชื่อของชุดส่วนประกอบที่เกี่ยวข้อง) ช้า. ไม่ปลอดภัย แต่ง่าย!

Non-Real-time

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

สภาพแวดล้อมรันไทม์ของโฮสต์

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

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

การล็อคอินแพลตฟอร์ม

สุดท้าย แต่ไม่ท้ายสุดการพัฒนา ROS ให้ผลลัพธ์เป็นการล็อคแพลตฟอร์ม ซึ่งหมายความว่าหากในอนาคตด้วยเหตุผลใดก็ตามคุณตัดสินใจที่จะยึดฐานการทำงานของคุณบนแพลตฟอร์มหุ่นยนต์อื่นเช่น OROCOS, YARP และอื่น ๆ ที่น่าตื่นเต้น

คุณจะถูกล๊อคกับลีนุกซ์บ้าง. Linux ดีที่สุดไม่ต้องสงสัยเลย แต่วันหนึ่งคุณอาจต้องสนับสนุนระบบอื่นเช่น QNX, VxWorks เป็นต้นและคุณก็มีปัญหาเช่นกัน


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

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

เมื่อคุณมีไลบรารีผู้ช่วยนี้คุณสามารถเขียน CLI, GUI, โมดูล ROS, โมดูล OROCOS, โมดูล YARP, เชื่อมต่อกับ Matlab หรือสิ่งอื่นที่คุณต้องการใช้เพื่อโต้ตอบกับเซ็นเซอร์ของคุณ

หมายเหตุสุดท้าย: สิ่งที่ฉันพูดที่นี่โดยทั่วไปแล้วใช้ได้กับแพลตฟอร์มหุ่นยนต์ทั้งหมดไม่ใช่แค่ ROS


ความคิดเห็นไม่ได้มีไว้สำหรับการอภิปรายเพิ่มเติม การสนทนานี้ได้รับการย้ายไปแชท
Mark Booth

2

"ROS" เป็นคำที่เกี่ยวข้อง APM รันโค้ดแบบกำหนดเองเต็มรูปแบบที่ออกแบบมาโดยเฉพาะสำหรับการควบคุม Quadrocopter โดยที่ ROS แบบกำหนดเองอาจเป็นที่ต้องการเพื่อป้องกันการล่มในขณะที่ Navio + ทำงานบนเคอร์เนล Linux และเรียกใช้รหัสอื่นที่ไม่ใช่อัตโนมัติ และยังป้องกันไม่ให้ระบบล่ม ROSs ส่วนใหญ่เป็นชุดของฟังก์ชั่นด้านบนของระบบปฏิบัติการที่มีอยู่ซึ่งแตกต่างจากการเขียนระบบปฏิบัติการตั้งแต่แรกเริ่ม เช่นเดียวกับสิ่งใดมันขึ้นอยู่กับ


เขากำลังพูดถึง RobotOperatingsystem ไม่ใช่ RealtimeOperatingSystem ...
FooTheBar

2

คำเตือน: คำตอบนี้เป็นปฏิกิริยาตอบสนองต่อการโพสต์ของ Shahbaz ดังนั้นจึงมีอคติ Pro-ROS

ฉันไม่คิดว่า ROS เป็นข้อบังคับ แต่มันเป็นจุดเริ่มต้นที่ดีและคุ้มค่ากับเวลาในการลงทุน มันเริ่มต้นใน Willow Garage แต่ บริษัท นี้หายไปและ ROS ยังมีชีวิตอยู่ใช้และพัฒนาอยู่ ROS ส่วนใหญ่เป็นโอเพ่นซอร์สอย่างสมบูรณ์และใช้ได้ในเชิงพาณิชย์ดังนั้นจึงไม่มีทางที่ ROS จะหายตัวไปหาก บริษัท ไม่สนใจอีกต่อไป แน่นอนว่าคุณภาพของรหัสแตกต่างกันระหว่างโมดูลหลักและการใช้งานของอัลกอริทึมที่ทันสมัยซึ่งนักศึกษาปริญญาเอกบางคนตีพิมพ์ด้วยกระดาษของเขา

ROS กำลังเร่งความเร็วมากขึ้นในการตั้งค่าอุตสาหกรรม (ฉันจะแปลกใจถ้ามีส่วนสำคัญของการเริ่มต้นของหุ่นยนต์ทั่วโลกที่ไม่ได้ใช้ ROS) อัลกอริทึมบางอย่างจะได้รับการบำรุงรักษาและพัฒนาต่อไปโดยกลุ่มอุตสาหกรรม ros และหากคุณได้ดูสมาชิกมันเป็นสิ่งที่ดีที่ ROS จะกลายเป็นมาตรฐานในอุตสาหกรรม:

http://rosindustrial.org/ric/current-members/

วิธีการกระจายการใช้ ROS ช่วยสร้างและบำรุงรักษาแพ็คเกจใหม่ ๆ มากมายโดยเฉพาะภายในทีม คำจำกัดความของข้อความและการกระทำช่วยในการกำหนดอินเทอร์เฟซเพื่อให้สามารถแลกเปลี่ยนฮาร์ดแวร์และอัลกอริทึมได้อย่างรวดเร็ว นอกจากนี้ยังช่วยในการรวมสมาชิกในทีมใหม่เนื่องจากโหนดใหม่จะทำให้โหนดอื่น ๆ ล่มหากเกิดข้อผิดพลาด (ตราบเท่าที่ไม่กิน RAM ทั้งหมด .. ) ดังนั้นจึงค่อนข้างปลอดภัยที่จะรวมโหนดทำงานบางส่วนเข้ากับระบบที่ทำงานอยู่ ผลมี จำกัด การสื่อสารใช้ TCP ซึ่งเชื่อถือได้และรวดเร็ว (บนเครื่องท้องถิ่น) ดังนั้นการส่งข้อความจึงรวดเร็วมาก (เป็นไปได้หลายร้อย Hz สำหรับการควบคุมลูป)

Non-Real-Time

ปัจจุบัน ROS ไม่ใช่เรียลไทม์เนื่องจากอัลกอริธึมส่วนใหญ่ไม่จำเป็นต้องใช้เรียลไทม์ การตรวจจับหรือการวางแผนไม่มีข้อ จำกัด แบบเรียลไทม์ในกรณีส่วนใหญ่ (มีคนจำนวนเท่าใดที่กำลังสร้างรถยนต์ขับด้วยตนเองด้วยความเร็วสูง) ก็เพียงพอแล้วหากการควบคุมลูปสุดท้ายทำงานแบบเรียลไทม์และในหลายกรณีสามารถทำได้โดยตรงบนมอเตอร์ (ซึ่งตำแหน่งสุดท้ายถูกส่งเช่นผ่าน CAN) อย่างไรก็ตามแบบเรียลไทม์เป็นหนึ่งในเป้าหมายหลักของ ROS2 ( https://github.com/ros2/ros2/wiki/Real-Time-Programming ) ดังนั้นแม้ว่าคุณจะต้องการสิ่งนี้ในอนาคตสำหรับทั้งระบบ ROS ได้ให้ความคุ้มครองแก่คุณแล้ว .

หากคุณต้องการรันสิ่งที่ฝังอยู่จริงๆมีการเชื่อมต่อกับ arduino เพื่อให้คุณสามารถเขียนข้อความ ROS โดยตรงบน arduino ซึ่งจะถูกส่งผ่านการเชื่อมต่อแบบอนุกรม

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

การเชื่อมต่อฮาร์ดแวร์และอัลกอริทึม:

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

ชุมชน:

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

http://download.ros.org/downloads/metrics/metrics-report-2016-07.pdf


1
สิ่งสุดท้ายที่ฉันต้องการเห็นคือมองย้อนกลับไป 20 ปีนับจากนี้ที่ทุกสิ่งทุกอย่างถูกสร้างขึ้นรอบ ๆ ROS และตระหนักว่าโอ๊ะโอเราต้องการหุ่นยนต์เพื่อทำงานด้วยความเร็วเทียบเท่ามนุษย์ แต่เราทำไม่ได้เพราะ 20 ปีก่อนเราคิดว่ามีกี่คนที่สร้างตัวเองขับรถความเร็วสูงอยู่แล้ว ?
Shahbaz

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