สารบัญ:

หุ่นยนต์ 4WD ขับเคลื่อนด้วยรีโมท USB Gamepad: 6 ขั้นตอน
หุ่นยนต์ 4WD ขับเคลื่อนด้วยรีโมท USB Gamepad: 6 ขั้นตอน

วีดีโอ: หุ่นยนต์ 4WD ขับเคลื่อนด้วยรีโมท USB Gamepad: 6 ขั้นตอน

วีดีโอ: หุ่นยนต์ 4WD ขับเคลื่อนด้วยรีโมท USB Gamepad: 6 ขั้นตอน
วีดีโอ: รถแบตเตอรี่เด็ก ฟอร์ด เรนเจอร์ แร็พเตอร์ ขับเคลื่อน4ล้อ มีบลูทูธ+รีโมท+บังคับผ่านมือถือ 📲 รุ่นMN2042 2024, พฤศจิกายน
Anonim
Image
Image

สำหรับโครงการหุ่นยนต์ต่อไปของฉัน ฉันถูกบังคับให้ออกแบบ/ออกแบบแพลตฟอร์มหุ่นยนต์ของตัวเองเนื่องจากสถานการณ์ที่ไม่คาดฝัน

เป้าหมายคือให้มันเป็นรถอัตโนมัติ แต่ก่อนอื่น ฉันต้องทดสอบความสามารถในการขับขี่ขั้นพื้นฐาน ดังนั้นฉันคิดว่ามันจะเป็นโครงการด้านที่สนุกที่จะมีพฤติกรรมและควบคุมราวกับว่ามันเป็นรถ RC (วิทยุบังคับ) แต่ใช้ USB Gamepad แทน

ผลลัพธ์นั้นดีหรือดีกว่าที่ฉันคาดไว้

ข้อดีของการใช้เส้นทาง USB Gamepad ด้วยการเขียนโปรแกรมจำนวนมาก คือ ฉันสามารถปรับแต่งมันและเพิ่มลงในสิ่งที่ฉันได้ทำไปแล้วได้ ฉันไม่มีประสบการณ์จริงในการสร้างรถ RC แต่ฉันคิดว่ามีรถคันหนึ่งติดอยู่กับตัวส่งสัญญาณ RC (จอยสติ๊ก/ปุ่ม ฯลฯ) และตัวรับสัญญาณ RC ที่มาพร้อม

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

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

คำแนะนำนี้จะไม่เป็นความจริง มีรายละเอียด รวมทุกอย่าง วิธีการทีละขั้นตอน แต่ฉันจะพยายามให้รายละเอียดมากที่สุดเท่าที่จะทำได้

เสบียง

ส่วนที่แนะนำ: ส่วนใหญ่ฉันได้รับจาก Servo City (Actobotics)

2 - 13.5 U-channels สำหรับด้านข้างของโครงฐาน มอเตอร์ถูกติดตั้งไว้บนสิ่งนี้ ฉันเลือกสิ่งที่สั้นกว่าและมอเตอร์ของฉันถูกติดตั้งที่มุมสุด และทำให้ติดตั้งได้ยาก

2 - 12 U-channels สำหรับด้านหน้าและด้านหลังของโครงฐาน

2 - 15 U-channels สำหรับกันชนหน้าและหลัง

2 - 7 (หรือ 7.5 นิ้ว?) ช่อง U สำหรับเสาด้านหน้า ไม่สำคัญเกินไป ความยาวอาจแตกต่างกันไป ขึ้นอยู่กับความสูงของเสาด้านหลัง และความสูงที่คุณเลือกทำมุม U-channel ที่เชื่อมระหว่างกัน

2 - (ความยาว?) ช่อง U สำหรับชิ้นส่วนที่ทำมุม, ด้านหน้าไปด้านหลัง, เชื่อมต่อเสาตั้งตรง อันนี้สำคัญมากเพราะ Servo City / Actobotics ขายแผงหรือวงเล็บทำมุม 45 องศาเพื่อจุดประสงค์นี้ แต่คุณจะต้องคำนวณ / ตรีโกณมิติเพื่อให้แน่ใจว่าคุณได้ความยาวที่ถูกต้อง

2 - (ยาว?) U-channels เพื่อทำหน้าที่เป็นกันชนด้านข้างระดับสูงอีกครั้งขึ้นอยู่กับสิ่งที่คุณทำกับฐาน

2 - (ยาว?) U-channels เพื่อทำหน้าที่เป็นกันชนหน้าและหลังระดับสูงขึ้นเหมือนกัน

1 - (ยาว?) U-channel เพื่อทำหน้าที่เป็นสมาชิกบนสุด ขยายข้ามคอลัมน์ด้านหลัง อันนี้อาจไม่สำคัญมากเพราะคุณสามารถติดตั้งที่ด้านบนหรือด้านหน้า / หลังเสาตั้งตรงได้

12 (ประมาณ) L-channels หรือวงเล็บ สิ่งเหล่านี้ให้บริการตามวัตถุประสงค์หลายประการ แต่โดยพื้นฐานแล้วให้ความสมบูรณ์/ความแข็งแรงของโครงสร้างที่มุมของโครงฐานและเสาตั้งตรง

4 (+?) ช่องแบน 3 รูถึง 5 รู สิ่งเหล่านี้ยังให้ความแข็งแรงของโครงสร้างแก่หุ่นยนต์

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

มีแผง 4(4.5?)" X 12" และฉันคิดว่าอีกแผงคือแผง X 12 ขนาด 9 (9.5?)

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

และสิ่งนี้คือ.. คุณไม่รู้จริงๆ ว่าอันไหนที่คุณอาจต้องการ หรือมีกี่อัน.. เพราะมีหลายวิธีที่คุณสามารถประกอบชิ้นส่วนเหล่านี้เข้าด้วยกันได้

ฉันสามารถระบุสิ่งที่ฉันใช้:

www.servocity.com/90-quad-hub-mount-c

www.servocity.com/side-tapped-pattern-moun…

www.servocity.com/90-quad-hub-mount-d

สองรายการต่อไปนี้มีประโยชน์มากและฉันจะตุนสิ่งเหล่านี้:

www.servocity.com/single-screw-plate

www.servocity.com/dual-screw-plate

ถัดไปคือสกรูทั้งหมด (สลักเกลียว) ฉันเริ่มต้นด้วยแพ็คเกจขนาด EACH และฉันได้ผ่านส่วนใหญ่แล้ว ฉันใช้สกรูที่ยาวกว่าโดยที่ขนาดไม่สำคัญ และสงวนสกรูที่สั้นกว่าไว้ในส่วนที่จำเป็น เพราะความยาวอื่นๆ จะไม่สามารถใช้ได้

สุดท้ายคุณควรได้รับ 1 กระเป๋าเหล่านี้:

www.servocity.com/6-32-nylock-nuts-pack

ฉันไม่ได้ใช้มากขนาดนั้น แต่ (ฉันคิดว่า) มีความสำคัญอย่างยิ่งเพื่อให้แน่ใจว่ามอเตอร์ของคุณจะไม่สั่นสะเทือนหลุดออกจากเฟรมเมื่อเวลาผ่านไป มีเพียงสองตัวเท่านั้นที่ใช้งานได้ต่อมอเตอร์เนื่องจาก U-channel

คุณต้องมีอย่างน้อย 4 ตัว คุณอาจได้เพิ่มอีกตัวในกรณีที่คุณสร้างความเสียหายให้กับตัวหนึ่ง (เชื่อฉันเถอะ คุณอาจจะใส่/ถอดมอเตอร์สองสามครั้ง):

www.servocity.com/heavy-duty-clamping-shaf…

โดยทั่วไปแล้ว เพลามอเตอร์จะมีขนาด 6 มม. และเพลามีขนาด 1/4 นิ้ว (0.25 นิ้ว)

ฉันจะได้สกรูสีดำบางตัวซึ่งน่าจะแข็งแรงกว่านี้แล้วใช้สำหรับหนีบด้านบนและไม่ใช้สกรูที่มาพร้อมกับที่หนีบ:

(ฉันคิดว่าสิ่งเหล่านี้คือ):

ตลับลูกปืนขนาดเส้นผ่านศูนย์กลาง 4 - 1/4" (0.25")

1 - กระเป๋าสเปเซอร์สีดำ 1/4"

4 - การหนีบ D-Hubs

www.servocity.com/0-770-clamping-d-hubs

4 - เพลาตัว D (#6340621.375" (1-3/8")

4 - 6 ล้อสำหรับงานหนัก

www.servocity.com/6-heavy-duty-wheel

โปรดทราบว่าฉันชอบล้อเหล่านี้ แต่มีขอบยางแข็ง พวกมันดูเหมือนจะทำได้ดีบนพื้นแข็ง พรม และบางทีอาจเดินคอนกรีตแข็ง ทำได้ไม่ดีบนพื้นหญ้า ทราย ฯลฯ

แถมยังจะเลอะพรมคุณอีกด้วย!!!

4 - มอเตอร์:

www.servocity.com/motors-actuators/gear-mo…

ฉันใช้ 223 RPM ซึ่งเป็นความเร็วในร่มที่ดี และสามารถเคลื่อนย้ายหุ่นยนต์ของฉัน (หนักด้วยแบตเตอรี่ SLA 12V 2 ก้อน) ได้ค่อนข้างง่ายในการเคลื่อนไหวช้า

2 - เครื่องเข้ารหัสมอเตอร์สำหรับมอเตอร์ (Roboclaw ของ Servo City จัดการตัวเข้ารหัส 2 ตัวเท่านั้น)

1 - ตัวควบคุมมอเตอร์ Roboclaw 2X45A ตรวจสอบให้แน่ใจว่าคุณได้รับอันที่มีแผงขั้วต่อสีเขียวอยู่ ไม่ใช่หมุด…. อืม… แต่ละคนก็มีข้อดีของตัวเอง ย้อนหลัง.. ฉันอาจจะได้รับหมุด

ฉันคิดว่านั่นมาจาก Servo City

SparkFun ขาย Arduino Uno (นั่นคือสิ่งที่ฉันใช้) และ Redboard Artemis เป็นผู้จัดการไดรฟ์ของคุณ

คุณจะต้องการ Raspberry Pi 3 (หรือ 4?) เป็น "สมอง" ระดับสูงและเชื่อมต่อกับคุณ

คุณจะต้องมีสายไฟ สวิตช์ ฟิวส์ และไดโอด "flyback" ที่ทนทานมาก

ฉันใช้แบตเตอรี่ SLA รอบลึก Duracell 12V 14AH แต่คุณสามารถใช้อะไรก็ได้

คำเตือน! การออกแบบหุ่นยนต์ตัวนี้ (สูง และกว้าง แต่สั้น) ถือว่ามีจุดศูนย์ถ่วงหนัก เช่น แบตเตอรี่ SLA จะมีให้ อาจทำได้ไม่ดีกับชุดแบตเตอรี่เทคโนโลยีที่ใหม่กว่าประเภทอื่นๆ LiPo สิงโต ฯลฯ มันสามารถพลิกคว่ำได้อย่างง่ายดาย

จาก Pololu ฉันมีปลั๊กอะแดปเตอร์แบบบาร์เรลสองสามตัว เพื่อให้ฉันสามารถจ่ายไฟให้กับ Arduino และ/หรือ Redboard ได้อย่างอิสระ แม้ว่าพวกเขาจะเชื่อมต่อกับ Raspberry ผ่าน USB เพราะฉันไม่ต้องการพึ่งพาพลังของ Raspberry. (โดยเฉพาะการติดตั้งกล้อง เซ็นเซอร์ ฯลฯ)

คุณจะต้องมีตัวควบคุมแรงดันไฟฟ้าแบบสเต็ปดาวน์ 12 ถึง 5V ขั้นต่ำ 5A (?) สำหรับ Raspberry ส่วนอื่น ๆ สามารถจัดการกับทุกอย่างระหว่าง 7 ถึง 15V ดังนั้นโดยตรงกับแบตเตอรี่ SLA

ที่เกี่ยวกับมันสำหรับชิ้นส่วน

สิ่งที่ฉันจะไม่ทำ - เกียร์เอียง 90 องศา

อีกครั้ง มีวิดีโอมากมายในเพลย์ลิสต์ Robotics youtube ของฉันซึ่งมีรายละเอียดส่วนใหญ่ข้างต้น

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

บอกตามตรงว่าขั้นตอนการก่อสร้างทั้งหมดของฉันอยู่ในรูปของ YouTube แล้ว คุณสามารถดูรายการเหล่านั้นในเพลย์ลิสต์ Robotics ของฉัน เริ่มต้นที่ "Wallace Robot 4" ก่อนหน้านี้ (Wallace II, Wallace III) ก็มีวัสดุที่ดีเช่นกัน

www.youtube.com/playlist?list=PLNKa8O7lX-w…

ขั้นตอนที่ 2: ทดสอบ Roboclaw, Motors และ Encoder

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

เหตุผลที่ผมแนะนำคือ (ภายหลัง) ตรวจหาหุ่นยนต์ที่ติดอยู่ การมีสถานะเป็นแนวทแยงว่าล้อหน้า/หลัง/ไม่หมุนอาจดีกว่าแค่ล้อหน้าหรือล้อหลัง

หมายเหตุ: สิ่งที่ฉันยังไม่ได้ทำคือการใช้ Arduino เพื่อเชื่อมต่อ (ผ่านพิน GPIO) กับตัวเข้ารหัส - หากคุณทำอย่างนั้น คุณสามารถให้ Roboclaw จัดการตัวเข้ารหัส 2 ตัว จากนั้นให้ Arduino จัดการอีกสองตัวและเพียงแค่ สอบถาม Roboclaw สำหรับค่าตัวเข้ารหัสสองค่า (และความเร็ว)

หมายเหตุ: ฉันใช้แอปพลิเคชันของ BasicMicro เพื่อกำหนดค่า Roboclaw ล่วงหน้าสำหรับ Ramping Up / Ramping Down ซึ่งเป็นสิ่งที่ดีสำหรับการปกป้องฮาร์ดแวร์และอุปกรณ์อิเล็กทรอนิกส์ มีวิดีโอเกี่ยวกับเรื่องนี้ในเพลย์ลิสต์ Robotics ของฉัน

ฉันเกือบลืมไปเลยว่า ฉันยังซื้อสายหัวกระสุนที่เชื่อมระหว่างสายมอเตอร์กับโรโบคลอว์ด้วย หมายเหตุ: หากคุณทำเช่นนี้ คุณจะสังเกตเห็นว่าความยาวสายเคเบิลทั้งหมดยาวมาก แต่ฉันไม่อยากตัดเลยถ้าไม่จำเป็น ฉันทำ (สำหรับขั้นตอนต่อมา) พบปัญหาการสื่อสารกับ USB ระหว่าง Raspberry และ Arduino อาจเป็นเพราะสัญญาณรบกวน EMI.. แต่ฉันได้แก้ไขปัญหานั้นด้วยซอฟต์แวร์

หากเกิดปัญหาขึ้น คุณสามารถตัดสายไฟให้สั้นได้ - คุณยังสามารถซื้อฉนวนป้องกันโลหะ (จาก Amazon, เส้นผ่านศูนย์กลาง 1 นิ้ว)

สิ่งสุดท้าย: ฉันยังต้องทำ --- ให้ Roboclaw กำหนดค่าอัตโนมัติหรือปรับแต่งอัตโนมัติ (โดยใช้ตัวเข้ารหัส) เพื่อให้มอเตอร์ทั้งด้านซ้ายและด้านขวาเคลื่อนที่ด้วยความเร็วเท่ากันและหุ่นยนต์จะเดินตรง

ของฉันโค้งเล็กน้อยมากกว่าประมาณ 12 ฟุต แต่ไม่เพียงพอที่ฉันรู้สึกว่าจำเป็นต้องทำอะไรกับมัน

ขั้นตอนที่ 3: การเพิ่มและการเขียนโปรแกรม Arduino

คุณจะต้องใช้ปลั๊กกระบอกและสายไฟ รวมถึงสาย USB ด้วย ตรวจสอบให้แน่ใจว่าคุณได้ขั้วต่อที่ถูกต้องสำหรับขั้วต่อ Arduino

คุณจะต้องดาวน์โหลด Arduino IDE

ที่ Github เป็นภาพร่างล่าสุดที่จัดการการขับหุ่นยนต์:

github.com/elicorrales/wallace.robot.ardui…

คุณจะเชื่อมต่อ Arduino กับคอมพิวเตอร์ของคุณที่ใช้ IDE และตามวิธีเขียนแบบสเก็ตช์ คุณจะใช้หมุด 10 และ 11 บน Arduino สำหรับการสื่อสารแบบอนุกรม (Software Serial) กับ Roboclaw

ฉันพัฒนาโปรโตคอลการสื่อสารอย่างง่ายระหว่าง Raspberry Pi และ Arduino

เป็นอักขระ ASCII ซึ่งช่วยให้ดีบักและทดสอบได้ง่ายขึ้นเพียงแค่ใช้หน้าต่าง "serial monitor" ของ Arduino IDE

คำสั่งเริ่มต้นที่หมายเลข "0" (ศูนย์) และขึ้นไปตามต้องการ

คำสั่งที่เริ่มต้นใน "20" เป็นคำสั่งโดยตรงของ Roboclaw และคำสั่งที่อยู่ด้านล่างคือคำสั่งที่เกี่ยวข้องกับ Arduino อย่างเคร่งครัด

เนื่องจากสัญญาณรบกวน EMI ฉันจึงปรับปรุงสตริงคำสั่งเพื่อรวมการตรวจสอบ

ดังนั้น สตริงใดๆ จะรวมถึง:

# จำนวนโทเค็นในสตริงรวมถึงอันนี้ด้วย

เช็คซัม

ตัวอย่าง สมมติว่าคุณต้องการให้ Arduino ตอบสนองด้วยเมนูคำสั่ง:

4 0 12 16

"4" คือสี่โทเค็นในสตริง

"0" คือคำสั่ง MENU

"12" คือตัวเลขสุ่มที่ฉันเลือก

"16" คือผลรวมของ 4 + 0 + 12

คำสั่ง MENU เดียวกันนั้นอาจแตกต่างกัน:

4 0 20 24

เนื่องจากฉันเลือกหมายเลขสุ่มที่แตกต่างกัน เช็คซัมจึงต่างกัน

ตัวอย่าง สมมติว่าคุณต้องการก้าวไปข้างหน้าด้วยความเร็ว 100 %:

5 29 0 134 100

"5" ห้าโทเค็น

"29" คำสั่ง FORWARD

"0" ตัวเลขสุ่ม

"134" เช็คซัม

"100" พารามิเตอร์ 1 (ความเร็วในกรณีนี้)

หาก Arduino ไม่สามารถตรวจสอบสตริงที่เข้ามาได้ก็จะปล่อย / ละเว้นไม่ตอบสนอง

หาก Arduino ไม่ได้รับคำสั่งการเคลื่อนไหวครั้งต่อไปด้วย X มิลลิวินาที มันจะส่งมอเตอร์ STOP ไปยัง Roboclaw

Arduino เริ่มทำงานและเริ่มส่งสถานะอัตโนมัติไปยังพอร์ต USB… เว้นแต่จะได้รับคำสั่งให้หยุดทำเช่นนั้น

ณ จุดนี้คุณควรพร้อมที่จะลองควบคุม Roboclaw และดูมอเตอร์หมุน เพียงแค่ใช้ "Serial Monitor" บน IDE

ขั้นตอนที่ 4: การเพิ่มและการเขียนโปรแกรม Raspberry Pi (node.js)

อีกครั้ง ถ้าคุณดูเพลย์ลิสต์ Robotics ของฉัน ตั้งแต่เริ่มต้น ฉันก็ทำทุกอย่างเพื่อให้ Raspberry ทำงานได้

สิ่งหนึ่งที่ฉันอาจมองข้ามไปก็คือคุณจะต้องมีตัวควบคุม 5V และสร้าง ตัด/ปรับเปลี่ยนสาย USB สำหรับมัน หรือจ่ายไฟให้กับ Raspberry ด้วยวิธีอื่น

ที่ Github มีทุกสิ่งที่คุณต้องการใน Raspberry เพื่อสื่อสารกับ Arduino ผ่าน USB

github.com/elicorrales/wallace.robot.raspb…

มีแม้กระทั่งสคริปต์ทดสอบ

คุณสามารถดูรหัสเซิร์ฟเวอร์ node.js และคุณจะเห็นวิธีที่ Raspberry แปลงคำสั่งตัวเลขแบบสั้นเป็นสตริง URL ประเภท REST คุณสามารถใช้ "curl" เพื่อส่งคำสั่งทดสอบ

ตัวอย่าง:

ที่อยู่ IP RP3 ของคุณ:8084/arduino/api/forward/50

จะทำให้มอเตอร์หมุนล้อไปข้างหน้าชั่วขณะ

หากคุณใส่ไว้ในลูปสคริปต์ของเชลล์ คุณจะเห็นล้อหมุนต่อไป

รหัส node.js (server.js) มีคุณสมบัติการเชื่อมต่อใหม่ในกรณีที่การสื่อสารแบบอนุกรมหายไปกับ Arduino คุณสามารถทดสอบได้โดยเพียงแค่ถอดปลั๊ก Arduino ออกจาก Raspberry แล้วเสียบใหม่

ตรวจสอบให้แน่ใจว่าคุณจับคู่อัตราบอดแบบอนุกรมระหว่างทั้งสอง

เนื่องจาก Arduino ทิ้งแพ็กเก็ตข้อมูลที่ไม่ถูกต้อง และเนื่องจากที่ระดับ node.js และที่ระดับจาวาสคริปต์ของเบราว์เซอร์ ทุกอย่างถูกเข้ารหัสเพื่อส่งคำสั่ง "ไดรฟ์" จำนวนมาก ฉันจึงสามารถเรียกใช้ได้สูงถึง 2,000,000 บอด (2Mbps).

หากคุณได้รับสคริปต์ทดสอบและเห็นล้อหมุน แสดงว่าคุณพร้อมสำหรับขั้นตอนต่อไป

ขั้นตอนที่ 5: ขั้นตอนสุดท้าย - การเขียนโปรแกรม / การใช้ Web Page Client

รวมอยู่ในลิงค์ Github ไปยังส่วน Raspberry ของทั้งหมดนี้คือไฟล์ไคลเอนต์

ดัชนี.html ดัชนี.js p5.min.js

พวกเขาจัดการ USB Gamepad ผ่าน Gamepad API (ตามเบราว์เซอร์) และคุณควรเห็นปุ่มและตัวเลื่อนต่างๆ ที่มีอยู่ในหน้าเว็บด้วย

โค้ดจาวาสคริปต์จะค้นหา (โพล) ค่าแกน X และ Y สำหรับจอยสติ๊กตัวใดตัวหนึ่ง มันโพลอย่างรวดเร็วมากและจะปิดค่าทั้งหมดเหล่านั้นไปยังเซิร์ฟเวอร์ node.js ที่ฟังที่ 8084

ค่าดิบแกน X และ Y ของจอยสติ๊กอยู่ระหว่าง 0 ถึง 1

แต่ฟังก์ชันไลบรารีตัวควบคุมมอเตอร์ Roboclaw ที่ใช้ใน Arduino เพื่อขับเคลื่อนมอเตอร์ คาดว่าค่าระหว่าง -100 ถึง 0 (ย้อนกลับ) หรือ (0 ถึง 100) ไปข้างหน้า

ซู…. นั่นคือจุดประสงค์ในการรวม p5.min.js มันเพิ่งเกิดขึ้นที่มีฟังก์ชัน map() ที่ดีและสะดวกมากนี้ โดยที่คุณให้ค่า raw แก่มัน เป็นช่วง raw(current) และช่วงใหม่ที่ต้องการ และแปลงค่าดิบเป็นค่าในช่วงใหม่ที่แมป

อีกจุดหนึ่ง: ที่ความเร็ว 100 หุ่นยนต์สามารถหากินได้มาก ฉันมักจะวิ่งเข้าไปในบางสิ่งบางอย่าง แต่ถึงแม้คุณจะเก่งกว่านั้น มันก็ยังงอนเมื่อหมุนไปทางซ้ายหรือขวา

สิ่งที่คุณจะเพิ่มจะคล้ายกับตัวเลื่อนความเร็วสูงสุดปัจจุบันบนหน้าเว็บ ตัวเลื่อนนั้นกำหนดว่าค่าสูงสุดหรือค่าสูงสุดที่คุณจะจับคู่จอยสติ๊ก Xs และ Ys กับอะไร

ตัวอย่าง:

สมมติว่าคุณกำลังจับคู่ 0 -> 1 ถึง 0 -> 100 เมื่อคุณกดจอยสติ๊กจนสุด แสดงว่าคุณอยู่ที่ 100 Touchy อาจจะเร็วเกินไป

แต่ถ้าคุณเลื่อนแถบเลื่อน Max Speed กลับไปเล็กน้อย ตอนนี้คุณกำลังจับคู่ 0 -> 1 ถึง 0 -> 80 หรือ 70

นั่นหมายความว่าคุณมีช่องทางมากขึ้นในการเคลื่อนย้ายจอยสติ๊กของคุณโดยไม่ต้องเปลี่ยนแปลงความเร็วมากนักที่ถูกส่งไปยัง node.js (และไปยัง Arduino)

นอกจากนี้ คุณสามารถแยก Xs (หมุนไปทางซ้ายหรือขวา) ออกจาก Ys (ไปข้างหน้าหรือข้างหลัง) เป็นความเร็วสูงสุดที่พวกมันมีอยู่

ดังนั้น คุณสามารถปล่อยให้ Ys อยู่ที่ 0 ถึง 100, 0 ถึง -100 สำหรับการเคลื่อนที่เชิงเส้นอย่างรวดเร็ว แต่ลดความเร็วสูงสุด Xs เพื่อให้ควบคุมการเคลื่อนที่แบบหมุนได้มากขึ้น ดีที่สุดของทั้งสองโลก

ขั้นตอนที่ 6: ตัวเลือกเสริม: ขับเคลื่อนหุ่นยนต์ด้วยการลากเมาส์และ / หรือสัมผัสเหตุการณ์

หากคุณมาไกลถึงขนาดนี้ คุณจะรู้ว่าเลเยอร์ซอฟต์แวร์ที่เริ่มต้นจากเบราว์เซอร์และเจาะลึกผ่าน Javascript และบนเซิร์ฟเวอร์ Raspberry node.js ในที่สุดก็เป็น Arduino กำลังแปลงพิกัด X และ Y ของจอยสติ๊ก Gamepad เป็น " คำสั่ง forward" (หรือ "backward" เป็นต้น) (และค่าความเร็ว)

นอกจากนี้ คุณทราบแล้วว่าในขณะที่ Xs และ Ys ของจอยสติ๊กเป็นลบ 1 ถึงศูนย์ถึงบวก 1 จะต้องแปลงค่าเหล่านั้นระหว่างศูนย์ถึง 100 ค่าสูงสุดขึ้นอยู่กับการตั้งค่าความเร็วสูงสุดบนหน้าเว็บ

ซู… สิ่งเดียวที่ต้องทำเพื่อใช้เมาส์หรือกิจกรรมการสัมผัส (เช่นเดียวกับบนสมาร์ทโฟน) คือการจับภาพเหตุการณ์เหล่านั้น คว้า Xs และ Ys

แต่ ---- Xs และ Y เหล่านั้นไม่ได้อยู่ระหว่างลบ 1 และ 1 พวกเขาเริ่มต้น 0 และเพิ่มขึ้นในทางบวก เนื่องจากโดยพื้นฐานแล้วเป็นพิกเซลหรือพิกัดหน้าจอสัมพัทธ์ขององค์ประกอบ HTML บางอย่าง (เช่น แผงบูตสแตรป) หรือผ้าใบ

ดังนั้นอีกครั้ง ฟังก์ชัน "map()" ของไลบรารี Js ของ Js นั้นสะดวกมากในการแมปกับสิ่งที่เราต้องการอีกครั้ง

ฉันปรับโครงสร้างโค้ดใหม่ให้มีหน้าเว็บสองหน้า หน้าหนึ่งสำหรับเดสก์ท็อปโดยใช้เกมแพด อีกหน้าสำหรับมือถือโดยใช้กิจกรรมการสัมผัส

นอกจากนี้ เมื่อ Xs และ Y ถูกแมปใหม่ พวกมันจะถูกป้อนเข้าไปในสายรหัสเดียวกัน ฯลฯ เช่นเดียวกับ Xs และ Ys จาก Gamepad

แนะนำ: