หุ่นยนต์ใช้ LiDAR + ChArUco + แรงดูด เสียบชาร์จ Tesla อัตโนมัติ

Robotic Car Charger ใช้ LiDAR + ChArUco เสียบชาร์จ Tesla อัตโนมัติ

โจทย์ยากของหุ่นยนต์ตัวนี้ไม่ใช่แค่ “ขับไปหารถให้เจอ” แต่คือเมื่อ Robot ตั้งใจทำให้ตัวเล็กและเบา แล้วจะเอาแรงจากไหนมาดันหัวชาร์จเข้า Tesla โดยไม่ทำให้ตัว Robot ถอยหนี?

โปรเจกต์ Robotic Car Charger ของ Mew463 แก้ปัญหานี้ด้วยการผสม Raspberry Pi 5, ESP32-C3, Mecanum Wheels, LiDAR, กล้อง 1080p, ChARuco Board และ Suction Cups สองตัว เข้าด้วยกันเป็นระบบชาร์จรถอัตโนมัติ สำหรับ 2021 Tesla Model 3

ต้นแบบ Robotic Car Charger สำหรับ Tesla Model 3
ต้นแบบ Robotic Car Charger จาก GitHub ของผู้สร้าง ซึ่งออกแบบให้ตัว Robot อยู่ต่ำและชิดรถระหว่างการชาร์จ
Robotic Car Charger ขณะเข้าใกล้จุดชาร์จของ Tesla
ภาพที่ใช้ประกอบบทความ Hackaday เกี่ยวกับ Robotic Car Charger ที่ใช้ระบบดูดช่วยยึดกับรถ
Key Takeaways
  • Target Vehicle ในโปรเจกต์คือ 2021 Tesla Model 3
  • ใช้ Raspberry Pi 5 RAM 8GB เป็นคอมพิวเตอร์หลัก
  • มี ESP32-C3 บน Custom Pi HAT
  • ใช้ Mecanum Wheels + LiDAR สำหรับเข้าใกล้รถ
  • ผู้สร้างเลือกไม่ใช้ SLAM สำหรับระยะเดินทางประมาณ 2 เมตร
  • ใช้กล้อง 1080p + ChARuco สำหรับ Fine Alignment
  • Suction Cups สองตัวช่วยสร้างแรงต้านตอนเสียบหัวชาร์จ
  • Current Sensor ช่วยตรวจการสร้าง Vacuum ของระบบดูด
  • Current GitHub Implementation ใช้ Tessie API เพื่อสื่อสารกับรถ
  • มี Source Code, ESP32 Project และ Onshape CAD เปิดบน GitHub

Robotic Car Charger ตัวนี้ทำอะไร?

เป้าหมายของ Project คือให้ Robot เคลื่อนจากตำแหน่ง Home ในโรงรถ ไปยัง Tesla Model 3 จัดแนวตัวเองกับ Charge Port เสียบหัวชาร์จ และถอดออกเมื่อเสร็จ ก่อนกลับไปจอดที่ผนัง

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

หัวใจของระบบคือ Raspberry Pi 5 + ESP32-C3

Hardware ของ Robotic Car Charger ที่ใช้ Raspberry Pi 5
Hardware หลักของ Project ใช้ Raspberry Pi 5 8GB ร่วมกับ ESP32-C3 และ Custom Pi HAT

README ของผู้สร้างระบุว่า Raspberry Pi 5 รุ่น RAM 8GB เป็น Main Computer ของระบบ และมี ESP32-C3 อยู่บน Custom Pi HAT

Pi HAT ตัวนี้ยังรับไฟ 12V และเชื่อม Power ไปยัง Module ต่าง ๆ ของ Robot ตาม Architecture ของผู้สร้าง

Custom electronics ภายใน Robotic Car Charger
ภาพ Hardware เพิ่มเติมจาก Official GitHub ของ Robotic Car Charger

เข้าใกล้แล้วค่อยใช้ Camera + ChARuco จัดแนวละเอียด

Camera Turret ของ Robotic Car Charger หมุนเพื่อมอง Marker
Camera และ LEDs อยู่บน Turret ที่สามารถหมุนเพื่อมอง Charge Port หรือหันกลับไปหา Marker บนผนัง

เมื่อ Robot เข้าใกล้รถแล้ว ระบบจะเปลี่ยนมาใช้กล้อง 1080p สำหรับ Final Alignment กับ ChARuco Board ที่ติดอยู่ใต้บริเวณ Charge Port

การ Align ต้องการ Pose ทั้งตำแหน่งและมุม ได้แก่ x, y, z, roll, pitch และ yaw เพื่อให้หัวชาร์จตั้งฉากกับ Charge Port ได้เหมาะสมก่อนดันเข้าไป

ทำไมเปลี่ยนจาก AprilTag มาใช้ ChARuco?

ผู้สร้างระบุว่า ตอนใช้ AprilTag เดี่ยว Pose Uncertainty มากเกินไป จนส่งผลต่อ Alignment

เมื่อเปลี่ยนมาใช้ ChARuco Board ผู้สร้างพบว่า Tracking มีความเสถียรมากขึ้นสำหรับงานนี้

การออกแบบ ChARuco Board สำหรับติดใต้ Charge Port
ผู้สร้างถ่ายพื้นที่บริเวณ Charge Port แล้วใช้ Onshape และ Inkscape ช่วยออกแบบรูปทรง ChARuco Board ให้พอดีกับพื้นที่จริง

LED มีหน้าที่ใน Vision Pipeline ด้วย

PCB กล้องและ NeoPixel ของ Robotic Car Charger
PCB ฝั่ง Camera มี NeoPixels สำหรับให้แสงและแสดงสถานะของระบบ

README ระบุว่า Camera PCB มี NeoPixels ด้านหน้า 8 ดวง และด้านหลัง 2 ดวง

Software ใช้ Closed-loop Logic ปรับความสว่างของ LED จน Frame Brightness อยู่ในระดับที่เหมาะกับ การตรวจ Marker

ปัญหาจริงคือ Robot เบาเกินไปสำหรับแรงเสียบหัวชาร์จ

เมื่อ Gear Assembly ดันหัวชาร์จไปด้านหน้า แรงปฏิกิริยาสามารถผลัก Robot ให้ถอยหลังได้ โดยเฉพาะเมื่อออกแบบ Robot ให้เตี้ยและน้ำหนักไม่มาก

วิธีแก้ของ Project คือใช้ Suction Cups สองตัว ยึด Robot กับพื้นที่รอบ Charge Port เพื่อให้ตัวรถกลายเป็นจุดรับแรง ขณะ Mechanism ดัน Connector เข้าไป

Suction Cups ที่ใช้ยึด Robotic Car Charger กับบริเวณ Charge Port
Suction Cups ช่วยยึด Robot ไว้กับบริเวณรอบ Charge Port เพื่อสร้างแรงต้านขณะเสียบ Connector

Current Sensor ช่วยรู้ว่า Vacuum ติดหรือยัง

วงจร Current Sensing ของระบบ Suction Cup
Suction-cup Motor Trace ผ่าน Current Sensor เพื่อช่วยประเมินว่าระบบสร้าง Vacuum ได้หรือไม่

ผู้สร้างระบุว่า เมื่อ Vacuum เกิดอย่างเหมาะสม Current ของ Motor จะเปลี่ยนไป จึงใช้ข้อมูลนี้เป็นอีกสัญญาณหนึ่ง ในการตรวจว่า Alignment และการยึดด้วย Suction Cup สำเร็จหรือไม่

Robot เปิด Charge Port ผ่าน API ก่อนเข้าไปเสียบ

README ระบุว่าผู้สร้างเคยลองทำงานตรงกับ Tesla Fleet API แต่ Current Implementation เปลี่ยนมาใช้ Tessie API

Robot ใช้ API สำหรับคำสั่งและสถานะที่เกี่ยวข้อง เช่นการเปิด Charge Port และการตรวจสถานะรถก่อนเริ่มขั้นตอนอัตโนมัติ

เงื่อนไขระดับ Workflow ที่ README ระบุ

  • LiDAR ตรวจพบสิ่งที่อยู่ใน Range
  • ตรวจว่ารถเคยออกจาก Geofence แล้วกลับมา
  • รถอยู่ในตำแหน่งบ้าน/จุดชาร์จ
  • Charging State เป็น Disconnected
  • Shift State อยู่ใน Park
README Criteria กับ Code Function ไม่ได้เหมือนกันทุกข้อ

ใน Source Code ของ car_ready_to_be_charged() จะตรวจโดยตรงเรื่อง Disconnected, อยู่ใน Charger Geofence และ Shift State = P ดังนั้นไม่ควรรวมทุกเงื่อนไขใน README แล้วอ้างว่าอยู่ใน Function เดียวกัน

ตัวอย่าง Code: ตรวจว่ารถพร้อมให้ Robot เข้าไปชาร์จหรือยัง

Snippet ด้านล่างมาจาก api/tesla_control.py ใน Official GitHub และไม่มี API Token, VIN หรือ Credential จริงอยู่ในตัวอย่าง

TeslaControl.car_ready_to_be_charged()
def car_ready_to_be_charged(self) -> bool:
    car_state = self.get_charging_related_data()
    if (car_state is not None):
        self.logger.debug(f"car_state: {car_state}")
        return (car_state["charge_state"] == "Disconnected" and
                car_state["is_at_charger"] and
                car_state["shift_state"] == 'P')
    else:
        self.logger.warning("car_state is None")
        return False

Mechanical CAD และ Custom PCB ก็เปิดให้ดู

CAD Assembly ของ Robotic Car Charger
Robot Assembly จาก CAD ที่ผู้สร้างลิงก์ไว้ใน GitHub

ผู้สร้างเปิด Onshape CAD สำหรับดู Mechanical Assembly ของ Robot ซึ่งเหมาะกับคนที่ต้องการศึกษาว่า การวาง Wheel, Elevator, Camera และ Connector Mechanism ถูกจัดใน Chassis อย่างไร

Custom PCB

PCB Layout ของ Robotic Car Charger
ภาพ PCB Layout จาก Official GitHub Repository
ภาพ Custom PCB เพิ่มเติมของ Robotic Car Charger
ภาพ Custom PCB เพิ่มเติม จาก Repository ของผู้สร้าง
มีภาพ PCB แต่ยังไม่พบ Manufacturing Package

Current Repository ที่ตรวจสอบ ไม่มี GitHub Release Asset และยังไม่พบ Gerber ZIP, KiCad Project, BOM หรือ PCB Manufacturing Package ที่ระบุให้ดาวน์โหลดโดยตรง

ดู Robotic Car Charger ทำงานจริง

วิดีโอหลักของ Project: Tesla Robotic Car Charger

Reference Projects ที่ผู้สร้างลิงก์ไว้ใน README

วิดีโอด้านล่างเป็นโปรเจกต์ก่อนหน้า ที่ผู้สร้างรวบรวมไว้เป็น Reference ไม่ใช่วิดีโอของ Robot ตัวนี้โดยตรง

Source Code, CAD และ Downloads ที่เกี่ยวข้อง

Safety และ Security ที่ควรแยกจากความสนุกของ Project

Robot เคลื่อนที่ใกล้รถและมี Mechanism ที่สร้างแรง

Project มี Motor, Mecanum Drive, Elevator, Suction Mechanism และ Charging Connector ที่เคลื่อนที่ใกล้ตัวรถ จึงต้องคำนึงถึงการหนีบ, การชน, ความเสียหายต่อ Charge Port และการเคลื่อนที่โดยไม่ตั้งใจ

บทความนี้ไม่ได้เป็นคู่มือ EV High-voltage Wiring และไม่ได้ให้ Charging Connector Pinout, Charging-current Modification หรือวิธี Bypass Safety System ของรถ

Vehicle API และ Credential

ควรใช้ API, Token, VIN และ Vehicle Credential เฉพาะกับรถที่เป็นของผู้ใช้เอง หรือระบบที่ได้รับอนุญาตจากเจ้าของ

บทความนี้ไม่ขยายวิธี Replay Attack หรือวิธีเข้าถึงรถของผู้อื่นโดยไม่ได้รับอนุญาต

FAQ คำถามที่พบบ่อยเกี่ยวกับ Robotic Car Charger

1. Robot ตัวนี้สร้างมาสำหรับรถรุ่นไหน?

README ระบุ 2021 Tesla Model 3 เป็น Target Vehicle ของ Project

2. ใช้ Raspberry Pi รุ่นไหน?

ใช้ Raspberry Pi 5 RAM 8GB เป็น Main Computer ตาม GitHub README

3. มี ESP32 ด้วยหรือไม่?

มี ESP32-C3 ทำงานร่วมกับ Raspberry Pi ผ่าน Custom Pi HAT

4. Robot ใช้ SLAM หรือไม่?

ไม่ใช้ ผู้สร้างเลือกใช้ Pre-programmed Movement ร่วมกับ LiDAR และ Vision เพราะระยะ Traversal รวมประมาณ 2 เมตร

5. ทำไมต้องใช้ Mecanum Wheels?

README ระบุว่าใช้เพื่อ Strafing Alignment และเพิ่มความยืดหยุ่นในการจัดตำแหน่งภายในโรงรถ

6. กล้องมีความละเอียดเท่าไร?

ผู้สร้างระบุว่าใช้กล้อง 1080p สำหรับ Final Pose Alignment

7. ทำไมใช้ ChARuco แทน AprilTag เดี่ยว?

ผู้สร้างพบว่า AprilTag เดี่ยว ให้ Pose Uncertainty สูงเกินไปสำหรับ Alignment ของโปรเจกต์ และการเปลี่ยนไปใช้ ChARuco ทำให้ Tracking เสถียรกว่า

8. Suction Cups มีไว้ทำอะไร?

ใช้ยึด Robot กับบริเวณรอบ Charge Port เพื่อให้เกิดแรงต้านขณะ Gear Assembly ดันหัวชาร์จเข้าไป

9. รู้ได้อย่างไรว่า Suction Cup ดูดติดแล้ว?

ผู้สร้างใช้ Current Sensor ตรวจ Motor Current ของ Suction System และอาศัยการเปลี่ยนแปลงของ Current เป็นข้อมูลช่วยประเมินการเกิด Vacuum

10. ใช้ Tesla Fleet API โดยตรงหรือไม่?

ผู้สร้างเคยทดลอง แต่ Current GitHub Implementation ใช้ Tessie API

11. Robot เช็กอะไรก่อนเข้าไปชาร์จ?

Code Function ที่ตรวจสอบ ดูว่า Charge State เป็น Disconnected, รถอยู่ใน Charger Geofence และ Shift State เป็น P ขณะที่ README ยังอธิบาย Criteria ระดับ Workflow เพิ่มเติม

12. มี CAD ให้ดาวน์โหลดหรือไม่?

มี Onshape Link สำหรับดู Mechanical CAD ของ Robot แต่ Source ไม่ได้ระบุ Direct STEP/STL Download ใน README

13. มี Gerber หรือ KiCad PCB Files ไหม?

Current Repository มีภาพ PCB Layout แต่ยังไม่พบ Gerber ZIP, KiCad Project หรือ PCB Manufacturing Package ที่ระบุให้ดาวน์โหลด

14. มี BOM หรือ Build Cost ไหม?

Source ที่ตรวจสอบไม่ได้ระบุ BOM Cost หรือ Total Build Cost

15. Robot จัดตำแหน่งแม่นกี่มิลลิเมตร?

Source ไม่ได้ระบุ Accuracy เป็นค่าตัวเลข จึงไม่ควรสร้างตัวเลขความแม่นยำขึ้นเอง

16. Robot ใช้ Battery ได้นานแค่ไหน?

Source ไม่ได้ระบุ Battery Runtime

สรุป: จุดเด่นไม่ได้อยู่แค่ Vision แต่อยู่ที่การแก้ปัญหาแรง

Robotic Car Charger โปรเจกต์นี้ รวมหลายศาสตร์เข้าด้วยกัน ทั้ง Robotics, Computer Vision, Mechanical Design, Vehicle API และ Embedded Electronics

Mecanum Wheels กับ LiDAR ช่วยให้ Robot เข้าใกล้รถ จากนั้น 1080p Camera และ ChARuco รับช่วงต่อเพื่อจัด Pose ก่อนเสียบหัวชาร์จ

แต่ Engineering Detail ที่ทำให้ Project นี้น่าสนใจจริง ๆ คือ Suction Cups เพราะมันแก้ปัญหาพื้นฐานว่า Robot ที่ตั้งใจทำให้เล็กและเบา จะหา Reaction Force จากที่ไหน เมื่อต้องดัน Connector เข้า Charge Port

สำหรับ Maker จุดที่ศึกษาได้ต่อมีตั้งแต่ Vision Tracking, LiDAR, Mecanum Control, ESP32, Raspberry Pi, API Integration ไปจนถึง Mechanical CAD โดย Source Code และ CAD ถูกเปิดให้ศึกษาใน GitHub และ Onshape แล้ว

References / แหล่งข้อมูลต้นฉบับ

กำลังทำ Robotics หรือ Computer Vision Project?

ถ้ากำลังทำ Raspberry Pi, ESP32, Robot, Machine Vision หรือ Sensor Project สามารถสอบถามทีม GlobalByte เรื่อง Development Board, Sensor, Module หรืออุปกรณ์ที่เหมาะกับ Project ได้

Disclaimer: บทความนี้เป็นการสรุปและเรียบเรียงจากแหล่งข้อมูลภาษาอังกฤษ อาจมีความคลาดเคลื่อน กรุณาตรวจสอบ Source ต้นฉบับก่อนลงมือทำ โปรเจกต์นี้เกี่ยวข้องกับ Robot ที่เคลื่อนที่, Motor, Mechanical Actuator, Suction Mechanism, Vehicle API และ EV Charging Connector บทความนี้ไม่ได้เป็นคู่มือ High-voltage EV Wiring, Charging Connector Pinout, การดัดแปลง Charging Current หรือการ Bypass ระบบ Safety ของรถ API Token, VIN, Vehicle Credential และ Account Access ควรใช้เฉพาะกับรถที่เป็นของผู้ใช้เอง หรือระบบที่ได้รับอนุญาตจากเจ้าของ Current Repository ไม่มี License ที่ระบุใน GitHub Metadata ดังนั้นการที่ Repository เปิดเป็น Public ไม่ควรถูกตีความว่าอนุญาตให้ใช้ไฟล์ ภายใต้ Open-source License ใดโดยอัตโนมัติ Current Repository มีภาพ PCB Layout แต่ยังไม่พบ Gerber ZIP, KiCad Project, BOM หรือ PCB Manufacturing Package ที่ระบุให้ดาวน์โหลดโดยตรง Source ไม่ได้ระบุ Robot Dimensions, Weight, Motor Torque, Suction Force, Positioning Accuracy, Battery Runtime, Charging Current หรือ Charging Power จึงไม่ควรสร้างค่าดังกล่าวขึ้นเอง

แท็ก


Blog posts