Агуулгын хүснэгт:

Робот гар тоглодог төгөлдөр хуурын хавтан: 5 алхам
Робот гар тоглодог төгөлдөр хуурын хавтан: 5 алхам

Видео: Робот гар тоглодог төгөлдөр хуурын хавтан: 5 алхам

Видео: Робот гар тоглодог төгөлдөр хуурын хавтан: 5 алхам
Видео: Том толгойт: Цахим хичээл 2024, Долдугаар сарын
Anonim
Төгөлдөр хуурын плита робот гар тоглож байна
Төгөлдөр хуурын плита робот гар тоглож байна

Энэ бүлэг нь UCN -ийн 2 автоматжуулалтын инженерүүдээс бүрдсэн бөгөөд тэд бидний хийх, хөгжүүлэх сэдэлтэй гайхалтай санаа олсон юм. Энэхүү санаа нь робот гарыг удирдах Arduino самбар дээр үндэслэсэн болно. Arduino самбар нь үйл ажиллагааны тархи бөгөөд дараа нь үйл ажиллагааны идэвхжүүлэгч робот гар нь шаардлагатай бүх зүйлийг хийх болно. Илүү гүнзгий тайлбарыг дараа нь өгөх болно.

Алхам 1: Тоног төхөөрөмж

Тоног төхөөрөмж
Тоног төхөөрөмж

Робот гар:

Phantomx Pincher Robot Arm Kit Maek II (https://learn.trossenrobotics.com/38-interbotix-ro…)

Роботын програм хангамж- https://www.arduino.cc/en/Main/OldSoftwareRelease… Өнгө илрүүлэх камер:

CMUcam5 Pixy камер - (https://charmedlabs.com/default/pixy-cmucam5/)

Програм хангамж - PixyMon (https://cmucam.org/projects/cmucam5/wiki/Install_PixyMon_on_Windows_Vista_7_8)

Алхам 2: Arduino -ийн тохиргоо

Arduino тохиргоо
Arduino тохиргоо

Та самбар дээрх тохиргоог эндээс харж болно, энэ нь маш хялбар юм.

Зүүн талд цахилгаан хангамж байна.

Дунд нь эхний servo -д зориулагдсан бөгөөд дараа нь бусад servo -той servo -ээр холбогддог.

Доод тал нь самбарыг компьютер эсвэл зөөврийн компьютерээс удирддаг бөгөөд нөгөө талд нь USB оролт байдаг.

Алхам 3: Эцсийн хөтөлбөр

||| ХӨТӨЛБӨР |||

#оруулах

#include #include "poses.h" #include // Pixy Library #include

POSECOUNT -ийг тодорхойлох 5

BioloidController bioloid = BioloidController (1000000);

const int SERVOCOUNT = 5; int id; int pos; логик IDCheck; boolean RunCheck;

void setup () {pinMode (0, OUTPUT); ax12SetRegister2 (1, 32, 50); // хамтарсан дугаар 1 регистр 32 -ийг 50 хурдаар тохируулах. ax12SetRegister2 (2, 32, 50); // хамтарсан дугаар 2 регистр 32 -ийг 50 хурдаар тохируулах; // хамтарсан дугаар 3 регистрийг 32 -р хурдыг 50 болгож тохируулна. ax12SetRegister2 (4, 32, 50); 32 нь 100 хүртэл хурдтай болно. // хувьсагчдыг эхлүүлэх id = 1; pos = 0; IDCheck = 1; RunCheck = 0; // Serial.begin (9600) цуваа портыг нээх; саатал (500); Serial.println ("##############################"); Serial.println ("Цуваа холбоо тогтоосон.");

// Lipo Battery Voltage CheckVoltage шалгах ();

// Servos скан хийх, MoveTest () байрлалыг буцаах; MoveHome (); MenuOptions (); RunCheck = 1; }

void loop () {// мэдрэгчийг уншина уу: int inByte = Serial.read ();

сэлгэх (inByte) {

тохиолдол '1': MovePose1 (); завсарлага;

тохиолдол '2': MovePose2 (); завсарлага; тохиолдол '3': MovePose3 (); завсарлага;

тохиолдол '4': MovePose4 (); завсарлага;

тохиолдол '5': MoveHome (); завсарлага; тохиолдол '6': Grab (); завсарлага;

тохиолдол '7': LEDTest (); завсарлага;

кейс '8': RelaxServos (); завсарлага; }}

void CheckVoltage () {// хүлээгээд дараа нь хүчдэлийг шалгаарай (LiPO аюулгүй байдал) хөвөх хүчдэл = (ax12GetRegister (1, AX_PRESENT_VOLTAGE, 1)) / 10.0; Serial.println ("##############################"); Serial.print ("Системийн хүчдэл:"); Цуваа.хэвлэх (хүчдэл); Serial.println ("вольт."); if (хүчдэл 10.0) {Serial.println ("Хүчдэлийн түвшин нэрлэсэн."); } if (RunCheck == 1) {MenuOptions (); } Serial.println ("##############################"); }

хүчингүй MoveHome () {саатал (100); // санал болгосон түр зогсоох bioloid.loadPose (Нүүр хуудас); // байрлалыг FLASH -аас nextPose буферт bioloid.readPose () руу ачаалах; // curPose буфер руу Servo.println ("###########################") одоогийн servo байрлалд унших; Serial.println ("Сервүүдийг гэрийн байрлал руу шилжүүлэх"); Serial.println ("##############################"); саатал (1000); bioloid.interpolateSetup (1000); // Одоогоос> секундын 1/2 секундын дотор интерполяци хийх тохиргоо (bioloid.interpolating> 0) {// бид шинэ байрлалдаа хүрч амжаагүй байхад үүнийг хий bioloid.interpolateStep (); // шаардлагатай бол servos -ийг зөөх. саатал (3); } if (RunCheck == 1) {MenuOptions (); }}

хүчингүй MovePose1 () {саатал (100); // bioloid.loadPose (Pose1) түр зогсоохыг зөвлөж байна; // байрлалыг FLASH -аас nextPose буферт bioloid.readPose () руу ачаалах; // одоогийн servo байрлалд curPose буфер руу унших Serial.println ("###########################"); Serial.println ("Сервүүдийг 1 -р байр руу шилжүүлж байна"); Serial.println ("##############################"); саатал (1000); bioloid.interpolateSetup (1000); // Одоогоос> секундын 1/2 секундын дотор интерполяци хийх тохиргоо (bioloid.interpolating> 0) {// бид шинэ байрлалдаа хүрч амжаагүй байхад үүнийг хий bioloid.interpolateStep (); // шаардлагатай бол servos -ийг зөөх. саатал (3); } SetPosition (3, 291); // 3 -р үений байрлалыг '0' саатал (100) болгож тохируулах; // хэрэв (RunCheck == 1) {MenuOptions (); }}

хүчингүй MovePose2 () {саатал (100); // bioloid.loadPose (Pose2) түр зогсоохыг зөвлөж байна; // байрлалыг FLASH -аас nextPose буферт bioloid.readPose () руу ачаалах; // curPose буфер руу Servo.println ("###########################") одоогийн servo байрлалд унших; Serial.println ("Сервүүдийг 2 -р байр руу шилжүүлж байна"); Serial.println ("##############################"); саатал (1000); bioloid.interpolateSetup (1000); // Одоогоос> секундын 1/2 секундын дотор интерполяци хийх тохиргоо (bioloid.interpolating> 0) {// бид шинэ байрлалдаа хүрч амжаагүй байхад үүнийг хий bioloid.interpolateStep (); // шаардлагатай бол servos -ийг зөөх. саатал (3); } SetPosition (3, 291); // 3 -р үений байрлалыг '0' саатал (100) болгож тохируулах; // хэрэв (RunCheck == 1) {MenuOptions (); }} хүчингүй MovePose3 () {delay (100); // bioloid.loadPose (Pose3) түр зогсоохыг зөвлөж байна; // байрлалыг FLASH -аас nextPose буферт bioloid.readPose () руу ачаалах; // одоогийн servo байрлалд curPose буфер руу унших Serial.println ("###########################"); Serial.println ("Сервүүдийг 3 -р байр руу шилжүүлэх"); Serial.println ("##############################"); саатал (1000); bioloid.interpolateSetup (1000); // Одоогоос> секундын 1/2 секундын дотор интерполяци хийх тохиргоо (bioloid.interpolating> 0) {// бид шинэ байрлалдаа хүрч амжаагүй байхад үүнийг хий bioloid.interpolateStep (); // шаардлагатай бол servos -ийг зөөх. саатал (3); } SetPosition (3, 291); // 3 -р үений байрлалыг '0' саатал (100) болгож тохируулна уу; // (RunCheck == 1) {MenuOptions (); }}

хүчингүй MovePose4 () {саатал (100); // bioloid.loadPose (Pose4) түр зогсоохыг зөвлөж байна; // байрлалыг FLASH -аас nextPose буферт bioloid.readPose () руу ачаалах; // одоогийн servo байрлалд curPose буфер руу унших Serial.println ("###########################"); Serial.println ("Сервүүдийг 4 -р байр руу шилжүүлэх"); Serial.println ("##############################"); саатал (1000); bioloid.interpolateSetup (1000); // Одоогоос> секундын 1/2 секундын дотор интерполяци хийх тохиргоо (bioloid.interpolating> 0) {// бид шинэ байрлалдаа хүрч амжаагүй байхад үүнийг хий bioloid.interpolateStep (); // шаардлагатай бол servos -ийг зөөх. саатал (3); } SetPosition (3, 291); // 3 -р үений байрлалыг '0' саатал (100) болгож тохируулна уу; // (RunCheck == 1) {MenuOptions (); }}

хүчингүй MoveTest () {Serial.println ("###########################"); Serial.println ("Хөдөлгөөний тэмдгийн тестийг эхлүүлэх"); Serial.println ("##############################"); саатал (500); id = 1; pos = 512; while (id <= SERVOCOUNT) {Serial.print ("Хөдөлж буй Servo ID:"); Serial.println (id);

while (pos> = 312) {SetPosition (id, pos); pos = pos--; саатал (10); }

while (pos <= 512) {SetPosition (id, pos); pos = pos ++; саатал (10); }

// дараагийн servo ID руу давтах id = id ++;

} if (RunCheck == 1) {MenuOptions (); }}

void MenuOptions () {Serial.println ("###########################"); Serial.println ("Хувь хүний тестийг дахин ажиллуулахын тулд 1-5-р сонголтыг оруулна уу."); Serial.println ("1) 1 -р байр"); Serial.println ("2) 2 -р байр"); Serial.println ("3) 3 -р байр"); Serial.println ("4) 4 -р байр"); Serial.println ("5) Гэрийн байрлал"); Serial.println ("6) Системийн хүчдэлийг шалгах"); Serial.println ("7) LED тест хийх"); Serial.println ("8) Relax Servos"); Serial.println ("##############################"); }

хүчин төгөлдөр бус RelaxServos () {id = 1; Serial.println ("##############################"); Serial.println ("Тайвшруулах үйлчилгээ".); Serial.println ("##############################"); while (id <= SERVOCOUNT) {Relax (id); id = (id ++)%SERVOCOUNT; саатал (50); } if (RunCheck == 1) {MenuOptions (); }}

хүчингүй LEDTest () {id = 1; Serial.println ("##############################"); Serial.println ("LED тест ажиллаж байна"); Serial.println ("##############################"); while (id <= SERVOCOUNT) {ax12SetRegister (id, 25, 1); Serial.print ("LED ON - Servo ID:"); Serial.println (id); саатал (3000); ax12SetRegister (id, 25, 0); Serial.print ("LED OFF - Servo ID:"); Serial.println (id); саатал (3000); id = id ++; } if (RunCheck == 1) {MenuOptions (); }}

void Grab () {SetPosition (5, 800); // 1 -р үений байрлалыг '0' саатал (100) болгож тохируулна уу

}

Бид өөрсдийн програмыг үйлдвэрлэгчдийн PincherTest програм дээр үндэслэн байршил тогтоох тохиолдолд томоохон өөрчлөлтүүдийг оруулсан болно. Бид роботыг санах ойд байрлуулахын тулд poses.h -ийг ашигласан. Нэгдүгээрт, бид Pixycam ашиглан тоглоомын гараа автоматаар бүтээхийг хичээсэн боловч гэрэл, жижиг дэлгэцийн асуудлаас болж ийм зүйл болж чадсангүй. Робот гэрийн үндсэн байрлалтай бөгөөд програмыг байршуулсны дараа роботоос олдсон бүх servo -ийг туршиж үзэх болно. Бид 1-4 товчлууруудын байрлалыг тохируулсан тул үүнийг санахад хялбар байх болно. Хөтөлбөрийг ашиглахад таатай байна.

Алхам 4: Видео гарын авлага

Алхам 5: Дүгнэлт

Дүгнэж хэлэхэд робот бол бидний хувьд хөгжилтэй бяцхан төсөл бөгөөд эргэн тойронд тоглож, туршиж үзэх хөгжилтэй тоглоом юм. Үүнийг туршиж үзээд тохируулахыг зөвлөж байна.

Зөвлөмж болгож буй: