Skip to content

beamkeerati/ros2_ws

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 

Repository files navigation

ROS2 เต่าหรรษา+ Project

overview

โครงการ เต่าหรรษา+ นี้มีวัตถุประสงค์เพื่อช่วยให้นักเรียนได้เรียนรู้เกี่ยวกับแนวคิด ROS2 เช่น Topics, Services, Parameters, Namespaces, และ Launch Files โครงการนี้จำลองสองส่วนหลัก: Teleop Turtle และ Copy Turtle โดยที่ Teleop Turtle รับคำสั่งจากแป้นพิมพ์เพื่อควบคุมเต่าในสภาพแวดล้อมจำลอง ส่วน Copy Turtle จะติดตามเส้นทางที่บันทึกไว้และสร้างพิซซ่าในตำแหน่งที่บันทึกโดย Teleop Turtle

Keyfeature

  1. Teleop Turtle:

    • เคลื่อนที่เต่าด้วยการควบคุมจากแป้นพิมพ์ (w, a, s, d)
    • สร้างพิซซ่าที่ตำแหน่งปัจจุบันของเต่าด้วยปุ่มเฉพาะ (i)
    • บันทึกตำแหน่งของพิซซ่าลงในไฟล์ .yaml ด้วยปุ่มเฉพาะ (o)
    • ลบพิซซ่าที่ไม่ได้บันทึกด้วยปุ่มเฉพาะ (p)
    • Teleop Turtle จำกัดจำนวนพิซซ่าไว้ที่ n pizzas ซึ่งสามารถตั้งค่าได้โดยใช้ RQT
    • ปรับค่าควบคุม (controller gains) สำหรับการเคลื่อนที่ของเต่าผ่าน RQT
  2. Copy Turtle:

    • สร้างเต่าอัตโนมัติ 4 ตัว (Foxy, Noetic, Humble, Iron)
    • เต่าแต่ละตัวจะติดตามตำแหน่งของพิซซ่าที่บันทึกไว้โดย Teleop Turtle
    • เมื่อเต่าทุกตัวเสร็จสิ้นการวางพิซซ่า จะเคลื่อนที่ไปยังพื้นที่ที่กำหนดไว้ทางขวาบนของการจำลอง
    • กระบวนการนี้จะทำซ้ำเมื่อ Teleop Turtle บันทึกการดำเนินการทั้งหมด 4 ครั้ง

System Architecture

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

System Architecture

โครงสร้างนี้ประกอบด้วย Node และการสื่อสารระหว่าง Node ผ่าน Topic และ Service:

  • Teleop Turtle Nodes:

    • teleop_key.py: รับคำสั่งจากแป้นพิมพ์เพื่อควบคุม Teleop Turtle
    • teleop_schedule.py: จัดการสถานะของ Teleop Turtle รวมถึงการสร้างและการบันทึกพิซซ่า
  • Copy Turtle Nodes:

    • copy_schedule.py: จัดการกลุ่ม Copy Turtle เพื่อให้แต่ละตัวติดตามตำแหน่งพิซซ่าที่บันทึกไว้
  • Controller Nodes:

  • controller.py: ควบคุมการเคลื่อนที่ของ Turtle ทุกตัวและ Copy Turtle แต่ละตัวตามตำแหน่งที่บันทึกไว้ในไฟล์ .yaml

  • ไฟล์เพิ่มเติม:

    • path.yaml: เก็บตำแหน่งของพิซซ่าที่บันทึกโดย Teleop Turtle
    • ไฟล์ Launch:
      • turtle_fun.launch.py: รันโหนดทั้งหมด
        • โดยมีขั้นตอนเริ่มจากสร้างหน้าต่าง
        • ฆ่าเต่าตัวแรกของหน้าต่างออก
        • กำเนิดเต่าตัวใหม่ด้วยชื่อใหม่ที่ตั้งด้วย namespace
        • รันโหนดอื่นที่เหลือตามมา teleop_schedule.py controller.py copy_schedule.py
        • โดยที่แต่ละโหนดมีการประยุกต์ใช้ความรู้ความเข้าใจที่มีในเนื้อหาการเรียนวิชา Robotic-Dev เพื่อทำโปรเจคนี้ให้สำเร็จ

ข้อกำหนดเบื้องต้น

ก่อนที่จะรันโครงการนี้ ตรวจสอบว่าได้ติดตั้งเครื่องมือดังต่อไปนี้:

  1. ROS2 ที่ติดตั้งและใช้งานได้ถูกต้อง (ทดสอบกับ ROS2 Humble)
  2. Colcon สำหรับสร้างระบบ ROS2
  3. RQT GUI สำหรับปรับค่าพารามิเตอร์

ขั้นตอนการติดตั้ง

  1. โคลนที่เก็บข้อมูล ลงในพื้นที่ทำงานของคุณ:

    git clone https://github.com/beamkeerati/ros2_ws.git
  2. ทำการแตกไฟล์:

    sudo apt-get install unzip
    cd ros2_ws
    unzip src.zip
  3. Build โดยใช้ colcon build:

    colcon build
  4. Source the workspace:

    source install/local_setup.bash

การทดสอบการทำงานของระบบ

launch file ทั้งหมดของระบบด้วยชุดคำสั่งนี้

ros2 launch turtle_fun turtle_fun.launch.py

เริ่มต้น Teleop Turtle

สามารถเริ่มการจำลอง Teleop Turtle ได้โดยใช้คำสั่งต่อไปนี้:

ros2 run turtle_fun teleop_key.py 

การควบคุม Teleop Turtle ผ่านแป้นพิมพ์

  • w: เดินหน้า-โดยจะส่งความเร็วเชิงเส้นไปให้เต่าไปข้างหน้า
  • a: เลี้ยวซ้าย-โดยจะส่งความเร็วเชิงมุมไปให้เต่าหมุนทวนเข็ม
  • s: ถอยหลัง-โดยจะส่งความเร็วเชิงเส้นไปให้เต่าไปข้างหลัง
  • d: เลี้ยวขวา-ดยจะส่งความเร็วเชิงมุมไปให้เต่าหมุนตามเข็ม
  • r: รีเซ็ตการจำลอง-รีเซ็ตค่าทั้งหมดที่เก็บมาได้เพื่อเริ่มเก็บใหม่
  • i: สร้างพิซซ่าที่ตำแหน่งของเต่า-เรียกใช้ service /spawn_pizza ณ ตำแหน่งที่เต่า trlrop อยู่
  • o: บันทึกตำแหน่งพิซซ่าในไฟล์ .yaml
  • p: ลบพิซซ่าที่ไม่ได้บันทึกออกจากการจำลอง-โดยการให้เต่าเดินไปกินตามลำดับโดยจะกินเฉพาะพิซซ่าที่เก็บมาแล้วแต่ยังไม่ได้ load ไปยัง .yaml file

การตั้งค่าพารามิเตอร์ใน RQT

สามารถปรับค่าพารามิเตอร์ต่อไปนี้ใน RQT:

  1. จำนวนพิซซ่า ที่ Teleop Turtle สามารถสร้างได้
  2. ค่า Gain ในการควมคุมความเร็ว ของเต่าทั้งในการเคลื่อนที่เชิงเส้นและเชิงมุม

Teleop Turtle

  • หลังจากลองควบคุม teleop_key ผ่านคีย์บอร์ดและเสกพิซซ่าออกมาและเซิฟได้ผลลัพธ์ดังนัี้ Teleop_key

  • สามารถ save ค่าตำแหน่งพิซซ่าลงใน file .yaml ได้ดังนี้ ymal

  • สามารถ ปรับพารามิเตอร์ใน rqt ได้โดยการใช้ service call ดังนี้ rqt

  • หลังจากป้อนตำแหน่งพิซซ่าครบทั้ง 4 path แล้วทำการกดปุ่ม 'o' อีกครั้งเพื่อยืนยันแล้วจากนั้น copy turtle ในหน้าจอที่ 2 ก็จะทำการวิ่งและสร้างพิซซ่าตามค่าที่เราเก็บมาใน file .yaml copy

  • copy turtle สามารถวาดพิซซ่าลอกเลียนแบบตาม teleop ได้สำเร็จ complete

  • หุ่นเต่า copy ทุกตัวไปอยู่ตำแหน่งมุมบนขวาของจอ finish

-สามารถดูความสัมพันของ Node Topic Service จริงๆของระบบทั้งหมดหลังจากทำเสร็จจาก rqt_graph ดังนี้ rqt

ความท้าทายของการบ้านรอบนี้

  • ระยะเวลากับเครื่องมือที่มีทุกอย่างยังทำออกมาอย่างยากลำบาก
  • การตีความโจทย์ เพื่อเขียนดักให้ได้ครบทุกทรณีมากที่สุดเป็นเรื่องที่ยากและงมนานมาก
  • การทำงาน ros ร่วมกันเป็นสิ่งใหม่ที่ยังไม่เคยได้ทำประกอบกับความกดดันจึงเครียดมาก
  • ยิ่งระบบใหญ่ขึ้นยิ่งต้องมีการออกแบบตอนต้นที่ดีกว่านี้ ส่วนตัวในคู่ได้เริ่มช่วยกันวางแผนเขียน System Architecture และแบ่ง Node กันเขียนแต่พอเขียนไปเรื่อยๆภาพที่วางแผนไว้ตอนแรกเริ่มทำออกมาได้ลำบากและยิ่งยากมากขึ้นเรื่อยๆเมื่อนำมารวมกัน ภายหลังจึงมีการปรับ System Architecture ใหม่และทำการ Debug โค้ดให้สามารถทำงานได้ครอบคลุมสถานการณ์ให้ได้มากที่สุด
  • ต้องใช้ความรู้และความเข้าใจเยอะมากเกี่ยวกับการใช้ namespace parameter เพราะ node ในระบบเยอะมากและต้องควมคุมหลายอย่าง
  • algorithm การเขียน state machine มีความเยอะและซับซ้อนมาก ทั้งการกำหนดการสื่อสาร การเลือกหน้าที่ให้โหดแต่ละตัว ถ้ามีเวลามากกว่านี้อาจจะทำให้ระบบเสถียรมากกว่านี้ได้

จัดทำโดย

  • นายกีรติ ยุบลมาตย์ 65340500003
  • นายจรรยวรรธ ไทรงาม 65340500006

โปรเจคนี้เป็นส่วนหนึ่งของการสอบในวิชา Robotics-Dev

About

For Midterm Examination Only 6503 6506

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published