การพัฒนาหุ่นยนต์เคลื่อนที่ด้วย ROS2 ตอนที่ 2

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

การทำงานจะแยกเป็น 2 ส่วนคือ

  1. PC ซึ่งทำหน้าที่เป็นตัวรับข้อมูลจากเซนเซอร์ต่างๆบนหุ่นยนต์มาสร้างและแสดงผลแผนที่ รวมทั้งระบุตำแหน่งปัจจุบันของหุ่นยนต์ที่สอดคล้องกับตำแหน่งในแผนที่ โดยคอมพิวเตอร์จะติดตั้ง Ubuntu 22.04 พร้อมกับ ROS2 foxy
  2. หุ่นยนต์เคลื่อนที่แบบขับเคลื่อนด้วยล้อแยก (Differential Drive) ที่ติดตั้งมอเตอร์ DC จำนวน 2 ตัว และล้อเอนกประสงค์ (Caster Wheel) ที่ด้านหลัง มอเตอร์ DC ทั้งสองตัวติดตั้งตัวเข้ารหัส (Encoder) เพื่อช่วยในการติดตามความเร็วและระยะทางที่หุ่นยนต์เคลื่อนที่ มอเตอร์ถูกควบคุมด้วยโมดูลควบคุมมอเตอร์ L298N ซึ่งรับพลังงานจากแบตเตอรี่ลิเธียม 12 โวลต์  เซนเซอร์สำคัญอีกตัวหนึ่งคือ LiDAR ที่ติดตั้งอยู่ด้านบนของหุ่นยนต์ ซึ่งใช้สำหรับตรวจจับระยะทางและสภาพแวดล้อมรอบตัว ส่วนที่เป็น “สมอง” ของหุ่นยนต์ คือ Raspberry Pi 4 Model B ที่ใช้ในการประมวลผลและควบคุมการทำงานทั้งหมดของระบบ ที่จะทำงานร่วมกับ Arduino ที่ทำหน้าที่อ่านค่าตำแหน่งของมอเตอร์และควบคุมการหมุนของมอเตอร์ โดย Raspberry Pi จะติดตั้ง Ubuntu 22.04 พร้อมกับ ROS2 foxy ไว้เช่นกัน

จากบทความก่อนหน้า ซึ่งทำการทดลองสร้าง command_node และ drive_node เพื่อรับส่งข้อมูลระหว่างกันในขั้นตอนถัดไป จะทำการสร้าง drive_node บน Raspberry Pi เพื่อให้หุ่นยนต์สามารถรับคำสั่งจากการกด Keyboard บน PC ได้

ขั้นตอนที่ 1: การตั้งค่า ROS2 Workspace ใน Rpi

เปิด terminal และสร้าง Workspace Directory ด้วยคำสั่งดังนี้

    mkdir -p ~/ros2_ws/src
       cd ~/ros2_ws

    เริ่มต้น Workspace ด้วยคำสั่ง   colcon build

    Source Workspace หลังจาก build แล้ว ให้ source workspace:  source install/setup.bash

    ขั้นตอนที่ 2: การสร้าง ROS2 Package

    1. ไปที่โฟลเดอร์ src :  cd ~/ros2_ws/src
    2. สร้าง Package : ros2 pkg create MobileRobot_py –build-type ament_python –dependencies rclpy std_msgs
    3. เข้าไปในโฟลเดอร์ Package: cd MobileRobot_py

    ขั้นตอนที่ 3: การสร้าง Node

    1. สร้างไฟล์ drive_node.py

      mkdir -p MobileRobot_py
      touch MobileRobot_py/drive_node.py
      chmod +x MobileRobot_py/drive_node.py

      2. เขียนโค้ดใน drive_node.py ด้วย code เดียวกับตอนที่ 1.0

      ขั้นตอนที่ 4: แก้ไขไฟล์ setup.py

      from setuptools import setup
      package_name = ‘MobileRobot_py’
      setup(
          name=package_name,
          version=’0.0.0′,
          packages=[package_name],
          data_files=[
              (‘share/ament_index/resource_index/packages’,
                  [‘resource/’ + package_name]),
              (‘share/’ + package_name, [‘package.xml’]),
          ],
          install_requires=[‘setuptools’],
          zip_safe=True,
          maintainer=’Your Name’,
          maintainer_email=’your.email@example.com’,
          description=’MobileRobot_py project with Command_node and Drive_node.’,
          license=’Apache License 2.0′,
          tests_require=[‘pytest’],
          entry_points={
              ‘console_scripts’: [
                    ‘drive_node = MobileRobot_py.drive_node:main’,
              ],
          },
      )

      ขั้นตอนที่ 5: Build Package

      1. กลับไปยัง Workspace Directory: cd ~/ros2_ws
      2. Build Package: colcon build
      3. Source Workspace : source install/setup.bash

      ขั้นตอนที่ 6: รัน Node

      1. Rpi Terminal : รัน drive_node:  ros2 run MobileRobot_py drive_node
      2. PC Terminal: รัน command_node: ros2 run MobileRobot_py command_node

      เมื่อรันเรียบร้อย คุณจะสามารถส่งคำสั่งผ่านแป้นพิมพ์เพื่อควบคุมหุ่นยนต์ได้

      Note :

      1. ทั้ง PC และ Rpi จะต้องเชื่อมต่อกับ wifi ตัวเดียวกัน
      2. สามารถตรวจสอบการรับส่ง message ระหว่าง node ได้จากการใช้คำสั่ง ros2 topic list จะแสดงรายชื่อของ topic ที่มีการ publish ระหว่างแต่ละ node
      3. ถ้าต้องการดูรายละเอียดของ topic (เช่น ชนิดของข้อความที่ใช้) ทำได้โดยใช้คำสั่ง ros2 topic info <topic_name>
      4. ถ้าต้องการตรวจสอบข้อมูลในแต่ละ topic สามารถทำได้โดยใช้คำสั่ง ros2 topic echo <topic_name>

      สรุป

      บทความนี้แสดงให้เห็นขั้นตอนการสร้าง ROS2 Package และ Node อย่างง่าย พร้อมตัวอย่างโค้ดที่ช่วยให้คุณเริ่มต้นใช้งาน ROS2 สำหรับการควบคุมหุ่นยนต์เคลื่อนที่จาก PC ได้ทันที!  ในบทความถัดไป จะทดลองเชื่อมต่อคำสั่งจาก drive_node เพื่อควบคุมหุ่นยนต์โดยการเชื่อมต่อกับบอร์ด Arduino และมอเตอร์

      This entry was posted in Blog 101. Bookmark the permalink.

      Leave a Reply

      Your email address will not be published. Required fields are marked *